{"id":50457590,"url":"https://github.com/toabctl/aichronicles","last_synced_at":"2026-06-01T03:06:45.625Z","repository":{"id":354192514,"uuid":"1221806679","full_name":"toabctl/aichronicles","owner":"toabctl","description":"Capture, search, and summarize AI coding agent (Claude Code) sessions in SQLite. Live web UI, MCP server, CLI.","archived":false,"fork":false,"pushed_at":"2026-05-29T12:22:47.000Z","size":6238,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-29T13:22:36.303Z","etag":null,"topics":["claude-code","session"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/toabctl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-26T17:51:28.000Z","updated_at":"2026-05-29T12:22:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/toabctl/aichronicles","commit_stats":null,"previous_names":["toabctl/aichronicles"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/toabctl/aichronicles","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toabctl%2Faichronicles","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toabctl%2Faichronicles/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toabctl%2Faichronicles/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toabctl%2Faichronicles/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/toabctl","download_url":"https://codeload.github.com/toabctl/aichronicles/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/toabctl%2Faichronicles/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33757791,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","session"],"created_at":"2026-06-01T03:06:44.866Z","updated_at":"2026-06-01T03:06:45.616Z","avatar_url":"https://github.com/toabctl.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# aichronicles\n\n**Capture your AI coding sessions, locally, with secrets scrubbed before they hit disk.**\n\n\u003e **Status: work in progress.**\n\naichronicles runs as a tiny user-mode daemon that ingests hook\nevents from Claude Code and Gemini CLI into a SQLite store,\nexposes the corpus as an\n[MCP](https://modelcontextprotocol.io) server your agent can query for\ncontext from past work, and generates structured summaries on demand.\n\n```mermaid\nflowchart LR\n    cc[Claude Code]\n    llm[(Anthropic / OpenAI\u003cbr/\u003eHTTPS, on-demand)]\n\n    subgraph local[\"Your machine — single user, local disk\"]\n        direction LR\n        hook[\"aichronicles hook\u003cbr/\u003e\u003ci\u003ehook subprocess\u003c/i\u003e\"]\n        api[\"aichronicles-api\u003cbr/\u003e\u003ci\u003esystemd --user · UDS 0600\u003c/i\u003e\"]\n        db[(\"SQLite store\u003cbr/\u003eraw_envelopes ▸ events ▸\u003cbr/\u003eextractions ▸ llm_outputs\")]\n        mcp[\"aichronicles mcp-serve\u003cbr/\u003e\u003ci\u003estdio\u003c/i\u003e\"]\n        cli[\"aichronicles summarize\u003cbr/\u003e/ reflect / propose\"]\n    end\n\n    cc -- \"hook fires\" --\u003e hook\n    hook -- \"POST /v1/ingest\" --\u003e api\n    api -- \"redact + verify + persist\" --\u003e db\n    cc \u003c-- \"tools/call (stdio)\" --\u003e mcp\n    mcp -- \"GET /v1/* (UDS)\" --\u003e api\n    cli -- \"GET /v1/* (UDS)\" --\u003e api\n    cli -.-\u003e|\"egress redact ▸ tool use\"| llm\n    llm -.-\u003e cli\n    cli -- \"POST /v1/llm-outputs\" --\u003e api\n```\n\n**Legend.** Solid arrow: data flows in this direction. Dashed arrow:\noptional / on-demand (only fires for summarize/reflect/propose). The\n`local` box is the trust boundary — everything inside runs as your\nuser, on your local disk. Cylinder is persistent state.\n\nThe diagram above is the static view (where things run). For the\n*dynamic* view — what fires automatically vs. what you trigger,\nand what happens step-by-step inside each flow — see\n[`docs/explanation/data-flow.md`](docs/explanation/data-flow.md).\n\n## What you get\n\n- **Searchable corpus.** Every prompt, tool call, and response from\n  your Claude Code sessions, indexed by SQLite FTS5. `aichronicles\n  search 'mongodb shutdown'` returns the turn where you fixed it.\n- **Structured summaries.** `aichronicles summarize --session \u003cid\u003e`\n  produces a JSON record with topic, what-was-done, unresolved items,\n  files touched, and links you actually referenced — annotated with\n  what you used each one for. Cached in the store; replays for free.\n- **Cross-session reflection.** `aichronicles reflect` and `propose`\n  read recent sessions and surface recurring task types, friction\n  sources, and concrete capabilities (skills, CLAUDE.md rules,\n  scripts) worth pre-building.\n- **MCP exposure.** `aichronicles mcp-serve` registers as an MCP\n  server in Claude Code, so the agent can search your past sessions\n  and pull a prior summary mid-conversation.\n- **Edge-scrubbed.** Secrets matching ~15 patterns\n  (Anthropic/OpenAI/AWS/etc.) are redacted to `\u003credacted:kind\u003e`\n  markers before envelopes leave the hook subprocess. The daemon\n  refuses unredacted envelopes as defense-in-depth.\n\n## Example: `aichronicles summarize`\n\n```text\nTopic: feat(grass): prefer stereo version_data over GitHub tags\n\nWhat was done:\n  - Added stereo.go to agents/pkg/agents/grass/ with YAML structs\n    for version_data/*.yaml and a lookupStereoVersion scanner.\n  - Extended grass.Analyze with a variadic opts API (WithStereoDir)\n    that overrides the GitHub-tag version when stereo data matches.\n  - Wired the option through the manifest-gen pipeline; added a\n    --stereo-dir flag to the cg agent grass CLI command.\n\nUnresolved:\n  - cg-codeowners-check still pending — awaiting human review.\n  - Reconciler config struct lacks test coverage for the new field.\n\nKey files:\n  - agents/pkg/agents/grass/stereo.go\n  - bots/manifest-gen/internal/agent/analyzer/analyzer.go\n  - cg/pkg/commands/agent.go\n\nLinks:\n  - https://github.com/chainguard-dev/customer-issues/issues/3406\n    source ticket for the harbor cert work\n```\n\n## Status\n\nPersonal-use software, single-machine. Designed for one developer\nrunning Claude Code on their own laptop or workstation. No\nmulti-user authentication, no central server, no remote backup.\nThe threat model is documented at\n[`docs/explanation/threat-model.md`](docs/explanation/threat-model.md);\nread it before adopting if you handle anything sensitive.\n\nSupports two source agents today: **Claude Code** (Anthropic) and\n**Gemini CLI** (Google). Both write hooks into their respective\nsettings file via `aichronicles setup \u003cagent\u003e` and ingest live\nthrough the same UDS daemon. The envelope schema, redaction\nlayer, and MCP server are agent-agnostic; adding another agent's\nhook format is mostly importer work.\n\n## Get started\n\n[**Quick start (≤90 seconds)**](docs/tutorials/getting-started.md) —\ninstall, bring up the daemon, see your first hook event captured.\n\n[**Your first summary**](docs/tutorials/first-summary.md) — configure\nan API key and generate a structured summary of one session.\n\n## Documentation\n\n| Section | What's there |\n|---|---|\n| [Tutorials](docs/tutorials/) | Learn by doing |\n| [How-to guides](docs/how-to/) | Recipes for specific tasks |\n| [Reference](docs/reference/) | CLI, configuration, schema, detectors (auto-generated) |\n| [Explanation](docs/explanation/) | Architecture, data flow, threat model, design decisions |\n\n## Building from source\n\n```fish\ngit clone \u003crepo-url\u003e \u0026\u0026 cd aichronicles\ngo build ./...\ngo test ./...\ngo test -tags=integration ./integration/...\n```\n\nTargets the toolchain in `go.mod` (Go 1.26+). Five direct deps:\nmodernc.org/sqlite (pure-Go SQLite), spf13/cobra, BurntSushi/toml,\ngoogle/uuid, godbus/dbus/v5; plus the official Anthropic and OpenAI\nSDKs.\n\n## License\n\nApache-2.0 is the planned license. The `LICENSE` file lands in the\nfirst public-release commit; until then, the code is shared under\nno formal terms.\n\n## Contributing\n\nThe development practices (commit style, testing rules, idiomatic Go\nexpectations) are in [`CLAUDE.md`](CLAUDE.md). Read it before opening\na PR.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoabctl%2Faichronicles","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftoabctl%2Faichronicles","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftoabctl%2Faichronicles/lists"}