What you actually do
brew install --cask edihasaj/tap/recall
# open Recall.app → click Install + Start
# (optional) verify
recall doctor
Usage
Recall is zero-config by design. Install the cask, open the app, click Install + Start. The daemon detects your coding agents, wires MCP and lifecycle hooks, and from the next session onward injects memory automatically.
01 · Setup
Install the cask, open the app, click Install + Start. The CLI calls below are the same thing the app does for you under the hood — useful only if you want per-project scopes, an uninstall, or to opt out of per-prompt injection.
brew install --cask edihasaj/tap/recall
# open Recall.app → click Install + Start
# (optional) verify
recall doctor
recall setup --scope project --yes
recall setup --uninstall-hooks --yes
recall setup --no-prompt-injection --yes
02 · Teach
The agent reports corrections through MCP automatically, but the CLI is there for direct edits and review notes. Phrase corrections as "always X" / "don't Y, use Z".
recall correct -r owner/repo "don't use npm, use pnpm"
recall review -r owner/repo "review said use error boundaries"
recall confirm <memory-id>
recall reject <memory-id>
recall init
recall scan ~/Projects/some-repo
recall publish ~/Projects/some-repo
03 · Inspect
recall list -r owner/repo
recall quality -r owner/repo
recall health -r owner/repo
recall compile -r owner/repo
recall compile -r owner/repo --query "pytest -q" --include-candidates
recall search -r owner/repo "pnpm"
recall history list -r owner/repo
recall history search -r owner/repo "pnpm"
recall hook stats
recall hook stats --agent codex --json
04 · Daemon
Recall.app is a status surface. The capture/injection runs through a small daemon and the SessionStart / UserPromptSubmit / SessionEnd hooks of your coding agent.
recall daemon install
recall daemon status
recall daemon start
recall daemon stop
recall daemon uninstall
recall embeddings setup
recall embeddings info
recall embeddings bootstrap
recall embeddings verify
recall embeddings rebuild-index
05 · Maintenance
Give Recall a key and the daemon refines/merges/summarizes on a daily schedule. Skip the key and the backlog surfaces in the next agent's SessionStart so the live agent can pick tasks up against its own LLM.
recall maintenance credentials set openai sk-...
recall maintenance credentials set anthropic sk-ant-...
recall maintenance credentials set azure \
--endpoint https://x.openai.azure.com \
--deployment gpt-4o-mini \
--api-version 2024-10-21 az-...
recall maintenance credentials clear openai
recall maintenance dispatch --dry-run
recall maintenance dispatch --max 3
recall maintenance cleanup --apply
recall maintenance usage --since 2026-04-01
recall maintenance stats
recall maintenance list
06 · Env vars
Hook env vars are read fresh on each invocation — no daemon restart needed. Daemon-wide
vars go into ~/Library/LaunchAgents/com.recall.daemon.plist under
EnvironmentVariables, then recall daemon restart.
| Variable | Default | Effect |
|---|---|---|
RECALL_HOOK_INJECT_CONTEXT |
true |
Set false to disable all hook-driven memory injection. Hooks still fire for telemetry and correction capture. |
RECALL_HOOK_INJECT_PROMPT |
true |
Per-prompt injection on UserPromptSubmit. false opts out (SessionStart still fires). |
RECALL_HOOK_INJECT_STYLE |
minimal |
verbose restores the historical Recall memory for this repo: prefix and repo header. |
RECALL_SURFACE_PENDING_CONFIRMATIONS |
false |
true includes high-risk pending candidate confirmations at SessionStart. Default keeps stale destructive candidates out of unrelated work. |
RECALL_CODEX_HOOKS_MIN_VERSION |
0.115.0 |
Min Codex CLI version eligible for the hooks.json install path. Below this, falls back to the legacy notify bridge. |
| Variable | Default | Effect |
|---|---|---|
RECALL_PORT | 7890 | HTTP port the daemon listens on. |
RECALL_DATA_DIR | ~/.recall | Where the SQLite DB, models cache, and logs live. |
RECALL_MAINTENANCE_ENABLED | true | Stops the non-LLM maintenance loop when false. |
RECALL_MAINTENANCE_INTERVAL_SECONDS | 300 | Interval for the non-LLM loop. |
RECALL_EMBEDDINGS_DISABLED | false | true skips embedding generation; FTS-only ranking still works. |
Default flow on every prompt: a cheap multi-language pre-screen (en/es/fr/de/it/pt/ru/zh/ja/sq/tr) decides whether the prompt is worth showing the LLM. Pure code-request prompts are skipped. Rule-shaped prompts go through an extract_rules_from_prompt task; the LLM extracts zero or more durable rules and the applier creates candidate memories. The hook also calls POST /dispatch/wake so the dispatcher fires within seconds rather than on its timer. If no LLM provider is configured, the legacy regex extractor takes over (English-only, deterministic).
| Variable | Default | Effect |
|---|---|---|
RECALL_LLM_CAPTURE_DISABLED | false | Set true to force the regex-fallback path even when an LLM key is configured. |
| Variable | Default | Effect |
|---|---|---|
RECALL_DISPATCHER_ENABLED | true | Disable the daemon-owned dispatcher (delegated SessionStart path still works). |
RECALL_DISPATCHER_INTERVAL_SECONDS | 86400 | Seconds between timer-driven ticks. POST /dispatch/wake (called by the capture hook, debounced 3 s) bypasses the timer — captures land within seconds regardless. |
RECALL_DISPATCHER_MAX_TASKS_PER_RUN | 5 | Max tasks per tick. |
OPENAI_API_KEY · ANTHROPIC_API_KEY | — | Fallback when Keychain has no entry. Azure uses the four AZURE_OPENAI_* vars together. |
07 · More
This page intentionally skips the long tail. The repo has the rest — every env var, every quality knob, every release step.