Sandbox
@dragthelake/ambient-context

Mac menu bar context recorder for agent tools

Ambient Context records the text of the window you are focused on into daily markdown files in a folder you own. Later, an agent CLI or MCP client can read those files to build cited knowledge pages, write a daily summary, or search the record.

167 stars9 forksRustUpdated 10d ago
Who it's for

Builders who want Claude Code, Codex, Cursor, or any MCP client to work from a written record of their day.

What it delivers

You can hand your agent a real day-by-day record instead of re-explaining what happened after the fact.

What it does

Focused-window capture

Reads text from the macOS accessibility tree every few seconds and appends it to daily markdown files.

Daily knowledge and notes

Processes a day into cited knowledge pages and a written summary with a separate context, knowledge, and notes structure.

MCP server

Lets Claude Code, Claude Desktop, Cursor, Zed, and other stdio clients read days and control capture through tools.

Bundled skills

Installs skills for catch-me-up, standup, weekly review, tune rules, and the shared core loop into agent skill folders.

Local-first storage

Keeps the record in plain markdown in a folder you choose, with no server or account required.

How to get it

  1. 1To build it yourself you need Node, Rust and the Xcode Command Line Tools
    git clone https://github.com/dragthelake/ambient-context
    cd ambient-context
    npm install
    npm run tauri build

README

Ambient Context

Ambient Context writes down what you work on during the day to give your AI assistant better context.

A macOS menu bar app that keeps a written record of what you work on, in plain markdown, in a folder you own. Point Claude Code, Cursor, Codex or any MCP client at your context folder.

Download for macOS
Signed and notarised DMG. macOS 14 or later, Apple Silicon. Free and open source.

Ambient Context in use: the eye in the menu bar, the Overview window, and a processed day

The problem

You spend the day reading, writing, replying and deciding. None of it reaches the AI assistant you open at 4pm. So you paste in the email, explain the ticket, summarise the call, and the model still works from a fraction of what you actually saw. The context existed. It was on your screen. Nobody wrote it down.

What Ambient Context does

While the eye in your menu bar is open, the app reads the text of whichever window you have focused (through the macOS accessibility tree, every few seconds) and appends it to markdown files for the day. At a time you choose, or when you press the button, an agent you already have turns that record into two more things: a small cited knowledge base and a written summary of the day.

Overview: the eye on a CRT, a Record map of days marked Recorded or Processed, and a Notes list linking into processed days

Three files per day, each one useful on its own:

What it isWho it is for
ContextThe record. What was on screen, when, in which app, with the file path or URL where the app exposes one.Agents that need evidence. Grep. You, when you cannot remember which tab it was in.
KnowledgeSix cited pages built from the record: People, Commitments, Threads, Products, Issues, Reading. Every claim points back to a block in the record.Agents building memory about your projects and the people in them.
NotesThe day written up from the knowledge base, with citations checked against the record before it is saved.You, at the end of the day. Your standup. The model you open tomorrow morning.

Notes tab: a written summary of the day with sessions, work and outcomes, each carrying its time range

Context tab, Websites: a table of the day's visits with domain, title, dwell time, visit count and first and last seen

How it works

  1. Record. Grant Accessibility, choose a folder, and the eye opens. Capture starts with the app from then on. Click the eye to stop; stopping is remembered until you start again.
  2. Process. Connect an agent CLI you already have (Claude Code, Codex or opencode). Set a time, or press Process day. The agent reads the record and writes the knowledge and the notes. It runs on your machine under your own subscription; Ambient Context never makes a model call itself.
  3. Ask. Register the app as an MCP server in Claude Code, Claude Desktop, Cursor or Zed, or just point an agent at the folder. Twenty tools cover reading days, searching the record, reading the knowledge and notes, and controlling capture. Install the bundled skills from Settings and the agent also knows when to reach for them.

Agent tab: Claude Code connected, with separate Context and Notes model pickers and a daily schedule

With Claude Code you can send the long input (the day's record) to a cheaper Context model and reserve a stronger Notes model for the page you will actually read.

Why the record is worth reading

Raw screen text is noisy. Ambient Context is built so an LLM can read it cheaply.

  • Deduplicated across the day. A page you keep coming back to is recorded once, not once per poll.
  • Interface junk filtered. View counts, "8 minutes ago", media player positions and navigation menus are dropped. On two real days of capture this removed about a fifth of the lines without losing content.
  • Real references, not scraped fragments. Blocks record the document path or URL where the app exposes one, so a reader can open the actual file instead of trusting the excerpt.
  • Mail and chat go to their own file. Messages are routed to messages.md so the timeline stays readable and message bodies are easy to exclude from a prompt.
  • An AGENTS.md in the folder explains the format to whatever reads it.

Privacy

The record is yours and it stays on your computer.

  • No screenshots, no video, no OCR. Text only, from the accessibility API, and only from the focused window. Never while the screen is locked.
  • No account, no server, no telemetry. The app does not upload your record. The optional update check reaches GitHub Releases and nothing else.
  • Files you own. Plain markdown in a folder you chose. Move them, grep them, delete them.
  • Defence in depth before writing. Secure password fields are skipped at the source. Password managers and private browsing windows are never recorded. Credential, API-key and card-shaped strings are scrubbed to [redacted]. These are heuristics, not a guarantee, so treat the folder as sensitive.
  • Rules you set from the record itself. Every block in the Context tab offers Never record this app, Headings only for this site, and Redact text like this, so you can tighten capture the moment you see something you would rather not keep.
  • Boundaries you choose are named as such. An agent CLI you connect and a synced folder (iCloud, Dropbox) are separate trust decisions. The app warns if the folder you pick is inside iCloud Drive.

Context tab, Messages: captured blocks with their time, app, URL and body, each with Never record this app, Headings only for this site and Redact text like this buttons

The trust boundary, data inventory, claims matrix and known gaps are in Privacy and security.

Install

Requires macOS 14 or later on Apple Silicon.

Download the signed, notarised DMG from Releases, drag Ambient Context.app to Applications and open it.

To build it yourself you need Node, Rust and the Xcode Command Line Tools:

git clone https://github.com/dragthelake/ambient-context
cd ambient-context
npm install
npm run tauri build

The app lands in src-tauri/target/release/bundle/macos/. For development, npm run tauri dev runs it with hot reload.

First run

  1. The window opens by itself. Grant Accessibility when asked. This is the permission that lets the app read window text; nothing works without it.
  2. Choose where to save. Prefer a folder outside iCloud Drive if you want the files to stay on this computer only.
  3. Recording starts. Open eye: recording. Closed eye: not. Right-click the icon for the folder and settings.
  4. To get Knowledge and Notes, open the Agent tab, pick an agent CLI, and set the time you want each day processed. Or open any recorded day and press Process day.

Connect your tools

The app binary is also an MCP server. For Claude Code:

claude mcp add --scope user --transport stdio ambient-context -- "/Applications/Ambient Context.app/Contents/MacOS/ambient-context" mcp

Claude Desktop, Cursor, Zed and generic stdio clients are covered in docs/mcp.md. Read tools work whether or not the app is running. Anything that changes state goes through the running app, so every write lands in the day's ledger with your client's name on it.

Settings > Agent skills installs five skills (catch me up, standup, weekly review, tune rules, and the core loop they share) into ~/.claude/skills/ and ~/.agents/skills/, which Claude Code, Cursor, Codex, Zed, Copilot, Gemini CLI, Goose and OpenCode all read. Details in docs/skills.md.

What a day looks like

Days/2026-09-04/
  apps.md        the timeline, with native app bodies
  websites.md    a table of visits, without page bodies
  messages.md    mail and chat bodies, routed here
KB/2026-09-04/
  people.md  commitments.md  threads.md  products.md  issues.md  reading.md
  manifest.md
Summaries/2026-09-04.md
AGENTS.md

Known limits

  • Chromium and Electron apps (Chrome, Slack, VS Code, Obsidian, Figma) build their accessibility tree on first contact, so the first seconds of capture in those apps are thin and fill in on later passes. Chrome may show a slightly glitchy window-resize animation while enabled.
  • GPU-rendered terminals (Kitty, Alacritty) expose little or no text. Terminal.app and iTerm2 work.
  • If an app comes back empty or thin, open an issue with the app name and what you were doing in it. docs/bug-reports.md says what to include and what to leave out.

Tests

cd src-tauri && cargo test
cd .. && npx tsc --noEmit && npx vitest run

Support the project

Ambient Context is free, open source and built by one person. If it earns a place in your menu bar, three things help: star the repo, report the apps that come back thin, and if you want to, buy me a coffee.

Buy me a coffee

Licence

MIT. The bundled Funnel fonts carry their SIL OFL text. See CHANGELOG.md for what is in each release.

Files in the repo

Repository payload17 top-level entries
  • .github
  • .vscode
  • docs
  • public
  • skills
  • src
  • src-tauri
  • .gitignore
  • CHANGELOG.md
  • index.html
  • LICENSE
  • package-lock.json
  • package.json
  • README.md
  • tsconfig.json
  • tsconfig.node.json
  • vite.config.ts

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More tools

JuliusBrussee/
caveman

🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman

105k
1 add
MemPalace/
mempalace

The best-benchmarked open-source AI memory system. And it's free.

59k
stablyai/
orca

Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.

66k

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

132k

Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors

64k
headroomlabs-ai/
headroom

Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.

71k