Skip to main content

agentrecall

Keep skills, global instructions, a small permission policy, and searchable project history in one place: ~/.agents.

The CLI is agentrecall (previously dotagents). Cursor, Codex, and OpenCode already read ~/.agents; Claude Code does not, so this CLI links only where a tool cannot see it. Permissions are translated from a small YAML policy, not copied from each tool's approval history.

What syncs

Thing Shared? How
Skills (SKILL.md) Yes Canonical ~/.agents/skills/. Directory symlink into ~/.claude/skills/.
Global instructions Yes Canonical ~/.agents/AGENTS.md. File symlink (or hardlink) to ~/.claude/CLAUDE.md and ~/.codex/AGENTS.md.
Project instructions Yes, with a shim Repo AGENTS.md is the source. agentrecall project writes CLAUDE.md containing @AGENTS.md if that file is missing.
Chats Search only Native JSONL stays put. SQLite FTS index at ~/.agents/history/index.sqlite.
Permissions Partial Canonical permissions.yaml. Shell/fetch rules for every agent, plus external_write extra roots for Claude, Codex, and OpenCode. Cursor CLI gets allowlisted commands only.
MCP ids, YOLO modes, full OS sandbox profiles No Product-specific; not copied.
Cursor User Rules No They live in the Cursor UI, not a documented file. Paste the same text into Customize → Rules.

Why not copy?

Copying ~/.agents/skills into every agent directory is how files go stale. On one machine, ~/.agents/skills/dev-browser was current while ~/.claude/skills/dev-browser was months old. agentrecall uses live links instead.

Skill folders are directory symlinks (POSIX cannot hardlink directories). Instruction files try a symlink first, then a hardlink with --link-mode hardlink or when a symlink cannot be created on the same volume.

Install

macOS and Linux. Python 3.11+. uv on PATH. The PyPI package is agentrecall-cli (agentrecall is taken). That install puts the agentrecall command on PATH.

uv tool install agentrecall-cli
agentrecall skills --apply
agentrecall permissions init --apply
agentrecall permissions --apply

That puts agentrecall on PATH, links the bundled search-project-history skill into ~/.agents/skills (and into Claude Code), and grants ~/.agents/history to Claude, Codex, and OpenCode so the search index can update. Cursor, Codex, and OpenCode already read ~/.agents/skills.

One-off without installing: uvx --from agentrecall-cli agentrecall status. From unreleased main: uv tool install git+https://github.com/bluearpit/agentrecall.git.

Then, in a project, build the index once:

agentrecall history reindex --cwd .

The CLI checks GitHub at most once a day and prints a notice when a newer release exists. It does not upgrade by itself. agentrecall upgrade is dry-run; agentrecall upgrade --apply installs that version from PyPI. Agents should ask before applying.

From a checkout:

uv tool install -e .
# or, for development:
uv sync --group dev
uv run agentrecall status

Commands

Write commands are dry-run unless --apply.

agentrecall status
agentrecall upgrade             # dry-run
agentrecall upgrade --apply     # install that version from PyPI
agentrecall skills              # dry-run
agentrecall skills --apply      # link ~/.agents/skills into Claude Code
agentrecall skills --apply adopt
agentrecall instructions --apply
agentrecall project --apply     # CLAUDE.md -> @AGENTS.md
agentrecall history reindex --cwd .
agentrecall history search "the decision about X" --cwd .
agentrecall history search "the decision about X" --cwd ~/work/other-app
agentrecall history search "the decision about X" --all
agentrecall history search "the decision about X" --cwd . --sort recent
agentrecall history show ~/.claude/projects/.../sess.jsonl --grep "the decision"
agentrecall history list --cwd .
agentrecall history list --cwd . --since 2026-08-01
agentrecall history commands --cwd .
agentrecall history commands --cwd . --kind test
agentrecall permissions init --apply
agentrecall permissions                 # dry-run mapping
agentrecall permissions --apply         # user ~/.agents/permissions.yaml -> user agent files
agentrecall permissions init --cwd . --apply
agentrecall permissions --cwd . --apply # project .agents/permissions.yaml -> project files

--link-mode auto|symlink|hardlink applies to files. Skill folders always symlink.

Layout

~/.agents/
  AGENTS.md                 # global instructions (source of truth)
  skills/<name>/SKILL.md    # user skills
  permissions.yaml          # portable allow/deny policy
  history/index.sqlite      # search index only; not full transcripts
Agent Skills Global instructions Transcripts (search)
Claude Code ~/.claude/skills (needs link) ~/.claude/CLAUDE.md ~/.claude/projects/**/*.jsonl
Cursor reads ~/.agents/skills User Rules in the UI ~/.cursor/projects/**/agent-transcripts/**/*.jsonl
Codex reads ~/.agents/skills ~/.codex/AGENTS.md ~/.codex/sessions/**/*.jsonl
OpenCode reads ~/.agents/skills not indexed

CLAUDE_CONFIG_DIR, CODEX_HOME, and XDG_CONFIG_HOME are honored.

History is keyed by project directory (and git root when present). Search, list, and commands default to the current project (--cwd .). Pass --cwd /path/to/project for one other repo, or --all for every indexed project. It is not stored in the git repo. Do not commit ~/.agents/history/. Searching chats is not the same as resuming a Claude session inside Cursor.

The bundled skill search-project-history is installed into ~/.agents/skills on agentrecall skills --apply, then linked into Claude Code like any other skill. Agents should run agentrecall history search "<query>" --cwd . to triage the current repo (or --cwd <path> / --all when the question is not about this repo), then agentrecall history show <source_path> --grep "<term>" to verify, instead of scraping transcript files themselves.

Permissions

Write a small policy, not a dump of every command you ever approved:

allow_shell:
  - git status
  - git diff
  - agentrecall
deny_shell:
  - git push --force
allow_fetch:
  - github.com
workspace_write: true
external_write:
  - ~/.agents/history

agentrecall permissions --apply turns that into:

Agent File What is written
Claude Code ~/.claude/settings.json or project .claude/settings.json Bash(git status:*), WebFetch(domain:github.com), optional Edit/Write, additionalDirectories, sandbox.filesystem.allowWrite
Cursor CLI ~/.cursor/cli-config.json Shell(git status), Shell(agentrecall), WebFetch(github.com) (user-global only; no extra-root mapping)
Codex ~/.codex/rules/agentrecall.rules or project .codex/rules/agentrecall.rules prefix_rule allow/forbidden
Codex ~/.codex/config.toml or project .codex/config.toml sandbox_workspace_write.writable_roots for external_write
OpenCode opencode.json permission.bash / webfetch / edit / external_directory

The default policy allowlists agentrecall and grants ~/.agents/history so history search can update the index without a one-off sandbox prompt. Add more paths under external_write if you also want ~/.agents/skills writable.

Existing unrelated allow rules are kept. Previously generated agentrecall rules are replaced on the next apply (tracked in permissions.managed.json, not for git).

Not translated: MCP ids (mcp__plugin_...), one-off heredoc approvals, bypassPermissions / run-everything modes, Cursor's sandbox prompt for writes outside the project, or full Seatbelt/Bubblewrap profiles.

See examples/permissions.yaml.

Development

See CONTRIBUTING.md for setup, checks, and how PRs merge.

uv sync --group dev
uv run ruff check src tests
uv run ruff format --check src tests
uv run pytest

CI runs the same lint and tests on Python 3.11–3.13, then builds and smoke-tests the wheel and source distribution. The ci job is the merge gate: it is green only when every check passes. Tests always set HOME to a temporary directory.

A published GitHub release also uploads to PyPI as agentrecall-cli. The workflow uses Trusted Publishing (no API token). GitHub environment pypi; workflow publish.yml.

Related tools

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agentrecall_cli-0.2.1.tar.gz (51.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agentrecall_cli-0.2.1-py3-none-any.whl (35.4 kB view details)

Uploaded Python 3

File details

Details for the file agentrecall_cli-0.2.1.tar.gz.

File metadata

  • Download URL: agentrecall_cli-0.2.1.tar.gz
  • Upload date:
  • Size: 51.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for agentrecall_cli-0.2.1.tar.gz
Algorithm Hash digest
SHA256 fc72de5bae0239cbc9e4956edb3ac6480170925ed0ef20ea90e508ac2d209c87
MD5 c28c2c8d175c2cbbe30c258841038097
BLAKE2b-256 cd6739afc0c28f2f4edc8cff34ec7eed39ce8dc9994d2257d8bd824f46bd5b08

See more details on using hashes here.

File details

Details for the file agentrecall_cli-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: agentrecall_cli-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 35.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for agentrecall_cli-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d7fd8159d16853c3994a57e1286688aa12cc29f7ee222c1c68246e71a3a3852e
MD5 1c8724b11a6b2190abb84b6e6d6a3bc9
BLAKE2b-256 23fb15421ca8512999c62a3b89c6ede5a4d4c0b07540f4fab0bc7f67886ea586

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page