No description
  • Rust 92.8%
  • TypeScript 3.3%
  • Python 1.2%
  • Makefile 0.9%
  • Shell 0.7%
  • Other 1%
Find a file
Kai Siren a750527807
Some checks are pending
ci / rustfmt (push) Waiting to run
ci / clippy (push) Waiting to run
ci / test (macos-latest) (push) Waiting to run
ci / test (ubuntu-latest) (push) Waiting to run
docker / build (Dockerfile, repo-recall-api) (push) Waiting to run
docker / build (Dockerfile.web, repo-recall-web) (push) Waiting to run
docker / ship (push) Blocked by required conditions
release / release (push) Waiting to run
release / bump-formula (push) Blocked by required conditions
chore: migrate skill directory to .agents/skills
Move the repo-local skill directory from .claude/skills/ to
.agents/skills/, the agent-neutral canonical home. The global
~/.claude/skills/ harness aggregation dir is unchanged.

Closes #251

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Audit-log: coily://1779370320/AGPEVPDD - coily ops aws sts get-caller-identity
Audit-log: coily://1779370321/AGPEVPDG - coily ops aws ssm get-parameter
Audit-log: coily://1779370348/AGPEVPGO - coily ops gh api /repos/coilysiren/repo-recall/commits/31a8f5e/check-runs
Audit-log: coily://1779433759/AGPE5BDD - coily ops gh issue create
2026-05-22 00:11:29 -07:00
.agents/skills/tooling-autonomous-pickup chore: migrate skill directory to .agents/skills 2026-05-22 00:11:29 -07:00
.claude chore: migrate skill directory to .agents/skills 2026-05-22 00:11:29 -07:00
.coily feat(catalog): encode deploy targets dev/staging/prod, closes #208 2026-05-19 10:51:59 -07:00
.github/workflows fix(docker): keep ghcr.io ref end-to-end in ship sideload 2026-05-19 23:24:28 -07:00
deploy ship API Dockerfile + GHCR build workflow + Caddyfile API proxy 2026-05-17 15:56:39 -07:00
docs feat(github): remove GitHub CI status, closes #226 2026-05-21 06:31:55 -07:00
Formula chore(formula): bump to v0.40.0 [skip ci] 2026-05-21 13:32:40 +00:00
scripts chore: adopt coilysiren/agentic-os v0.2.1 upstream-ref pre-commit suite 2026-05-15 23:34:29 -07:00
src feat(github): remove GitHub CI status, closes #226 2026-05-21 06:31:55 -07:00
tests feat(github): remove GitHub CI status, closes #226 2026-05-21 06:31:55 -07:00
web feat(github): remove GitHub CI status, closes #226 2026-05-21 06:31:55 -07:00
.dockerignore demo mode phase 4: Dockerfile.demo + entrypoint + smoke harness 2026-04-27 23:12:27 -07:00
.editorconfig Initial commit — repo-recall v0.1.0 2026-04-24 03:38:00 -07:00
.gitattributes Initial commit — repo-recall v0.1.0 2026-04-24 03:38:00 -07:00
.gitignore gitignore .env; add .env with REPO_RECALL_CWD 2026-04-25 22:47:32 -07:00
.pre-commit-config.yaml chore(precommit): drop dead tailwindcss + static/ excludes 2026-05-18 23:34:30 -07:00
.trufflehog-exclude ci: exclude node_modules from the trufflehog pre-commit scan, closes #242 2026-05-21 03:21:54 -07:00
AGENTS.md feat(github): remove GitHub CI status, closes #226 2026-05-21 06:31:55 -07:00
build.rs Resolve version through build.rs instead of bumping Cargo.toml 2026-04-27 21:43:11 -07:00
Cargo.lock strip HTML UI tier, JSON + MCP only 2026-05-17 14:40:46 -07:00
Cargo.toml strip HTML UI tier, JSON + MCP only 2026-05-17 14:40:46 -07:00
cert-and-localhost-mess.md add docs 2026-05-05 00:16:05 -07:00
CLAUDE.md Initial commit — repo-recall v0.1.0 2026-04-24 03:38:00 -07:00
config.example.yaml feat(refresh): per-source refresh cadence with watermarks, closes #146 2026-05-21 05:10:36 -07:00
docker-compose.yml ship API Dockerfile + GHCR build workflow + Caddyfile API proxy 2026-05-17 15:56:39 -07:00
Dockerfile fix(docker): drop COPY tests, --bin repo-recall doesn't need integration tests 2026-05-19 01:05:26 -07:00
Dockerfile.web scaffold static React SPA under web/ as a separate deploy artifact 2026-05-17 15:11:07 -07:00
Makefile scaffold static React SPA under web/ as a separate deploy artifact 2026-05-17 15:11:07 -07:00
README.md feat(github): remove GitHub CI status, closes #226 2026-05-21 06:31:55 -07:00
rustfmt.toml Initial commit — repo-recall v0.1.0 2026-04-24 03:38:00 -07:00
SECURITY.md labeled issues: single GraphQL request per refresh, closes #161 2026-05-14 18:59:22 -07:00

repo-recall

"What's the current state of every repo and agent burst on this machine, right now?"

repo-recall is a local hydration layer that joins git (commits, churn, working tree), gh (PRs, issues, deploy status), and Claude Code sessions (~/.claude/projects/) into a single queryable surface served as JSON and over MCP out of the same process.

Two questions, one HTTP call or one MCP tool call:

  • Which sessions touched this repo? ask the dashboard for a repo, get every session with it as cwd.
  • Which repos did this session touch? ask for a session, get every repo it crossed.

Local-only. Binds 127.0.0.1, cache lives in $TMPDIR. Outbound limited to GitHub REST reads for PRs, issues, and deploy status.

Surface

Two artifacts deployed side by side:

  • Rust binary - JSON HTTP on 127.0.0.1:7777 plus an MCP server co-running in the same process. No HTML.
  • React SPA under web/ - static bundle built by Vite, served by Caddy in its own container in production. Consumes the JSON surface above. Hello World stub today; the real card dashboard lands in #144.

Local dev: make watch-all runs cargo-watch on the Rust side and the Vite dev server on the web side concurrently. The Vite dev server proxies /api, /openapi.json, and /mcp to the Rust binary so a single browser origin works.

JSON endpoints

  • GET / - full dashboard projection: repos ranked by composite activity score, recent sessions, recent commits, action-required signals, banner counts.
  • GET /api/action-required - thin action-required list. id = "<repo_id>:<signal>".
  • GET /api/scan-version - single-integer poll target.
  • POST /api/refresh - sync refresh.
  • GET /api/repos/{repo_id}/tickets/{issue_number}/history - per-issue session + commit join.
  • GET /openapi.json - hand-maintained OpenAPI 3.1 description of the surface.

Every JSON response carries ETag: "<scan_version>". Pass If-None-Match for 304 Not Modified between scans.

MCP host

repo-recall runs an MCP server in the same process. For Claude Desktop:

{
  "mcpServers": {
    "repo-recall": {
      "command": "repo-recall",
      "env": { "REPO_RECALL_CWD": "/Users/you/projects", "REPO_RECALL_DEPTH": "4" }
    }
  }
}

Tools: recall_dashboard, recall_repo, recall_session, recall_search, recall_action_required, recall_ticket_history, recall_refresh.

Point an agent at it

Hand the URL or MCP entry to a coding agent. Starter prompts: "work through every repo flagged as action-required", "find dirty trees and commit or discard", "land or delete stale local branches".

Quick start

cargo run
curl http://127.0.0.1:7777/

No config, no wizard. Walks cwd + 4 levels for .git, parses ~/.claude/projects/**/*.jsonl, joins by cwd.

Install via Homebrew

brew tap coilysiren/repo-recall https://github.com/coilysiren/repo-recall
brew install coilysiren/repo-recall/repo-recall
brew services start repo-recall

Logs at $(brew --prefix)/var/log/repo-recall.{log,err.log}. brew services edit repo-recall for custom WorkingDirectory / env vars.

Silencing repos

Drop empty .repo-recall-ignore at the root of a repo cloned for reading. Suppresses all action-required signals. Opt-in.

Env vars

REPO_RECALL_PORT (7777, loopback only), REPO_RECALL_CWD (process cwd), REPO_RECALL_DEPTH (4), REPO_RECALL_COMMITS_PER_REPO (500), REPO_RECALL_CACHE_DIR ($TMPDIR/repo-recall-<port>, wipe-on-schema-change), REPO_RECALL_REFRESH_INTERVAL_SECS (150, 0 disables; per-source overrides via refresh.per_source in the config file), REPO_RECALL_TURN_INDEX_DAYS (30, 0 indexes every session's turns), RUST_LOG.

Privacy

  • Stores metadata + 200-char summary only.
  • Loopback only. Never 0.0.0.0 on shared boxes.
  • Outbound calls: GitHub REST reads for PRs, issues, and deploy status (reuses gh auth, no tokens stored).

See also

Cross-reference convention from coilysiren/agentic-os#59.