Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
a5141eb
feat: add Copilot CLI plugin asset slice
May 19, 2026
913fb51
Add Copilot CLI connect support
May 19, 2026
6014642
Merge Copilot plugin assets
May 19, 2026
ef21a7d
Merge Copilot connect support
May 19, 2026
134f8b1
Add GitHub Copilot CLI support
May 19, 2026
4fd994c
Merge remote-tracking branch 'origin/main' into feature/copilot-cli-s…
May 19, 2026
46b0e86
Harden Copilot hook handling
May 19, 2026
71f4c6b
Add Copilot to first-run onboarding
May 19, 2026
11a0200
Default onboarding to Copilot inside Copilot CLI
May 19, 2026
c21bb06
Support framed stdio MCP transport
May 19, 2026
3a24c32
fix(viewer): prevent IME composition interruption in search inputs (#…
jonathanzhan1975 May 19, 2026
a74c288
fix(config): honor env file drop-stale-index flag (#461)
honor2030 May 19, 2026
48bf700
fix(hooks): quote plugin script paths (#487)
honor2030 May 19, 2026
c2f231f
fix(mcp): memory_recall hits the right endpoint and forwards format/t…
serhiizghama May 19, 2026
2a027d8
revert: drop --next workaround for iii-console installer (upstream #1…
rohitg00 May 19, 2026
b425922
feat(repo): add Sponsor button + GH Packages mirror for sidebar surfa…
rohitg00 May 19, 2026
6ed47c1
fix(funding): tighten FUNDING.yml to canonical single-line form (#547)
rohitg00 May 19, 2026
632fa35
revert: drop GH Packages mirror, keep single canonical install path (…
rohitg00 May 19, 2026
564c24b
docs(readme): drop sponsor badge — sidebar widget covers it (#549)
rohitg00 May 19, 2026
db9f000
fix(cli): skip onboarding prompts without a tty (#491)
honor2030 May 19, 2026
c1c2c3a
fix(hermes): declare all plugin hooks (#486)
honor2030 May 19, 2026
c6a1fec
fix(boot): make rebuildIndex non-blocking so viewer + later boot step…
efenex May 19, 2026
6c2a689
fix(rebuild): batch embed calls in rebuildIndex (25h → 3h on large co…
efenex May 19, 2026
e68d4eb
fix(summarize): chunk large sessions to fit LLM context window (#472)
efenex May 19, 2026
cb2e013
fix(visibility): surface lessons in smart-search + tally per-store in…
efenex May 19, 2026
1838f4d
chore(release): v0.9.21 (#551)
rohitg00 May 19, 2026
e9dc710
ci: cross-platform matrix + paths-ignore + concurrency (#556)
rohitg00 May 20, 2026
7fb72f4
feat(eval): pluggable benchmark harness with in-house coding-agent co…
rohitg00 May 20, 2026
e371be9
fix(codex): --with-hooks workaround for openai/codex#16430 (closes #5…
rohitg00 May 20, 2026
93d1bdd
fix(deps): pin iii-sdk to 0.11.2 (closes #555) (#567)
rohitg00 May 20, 2026
3cb7f90
fix: read tool_response instead of tool_output in PostToolUse hook (#…
faraz152 May 20, 2026
a994514
fix(providers/openai): send explicit stream:false in chat completion …
Ptah-CT May 20, 2026
8e31327
Update index.html (#542)
kaushalrog May 20, 2026
edd1ceb
fix(cli): accurately display bound viewer port on splash screen (#560)
Tanmay-008 May 20, 2026
ec62823
docs: clarify env file setup (#321)
aqilaziz May 20, 2026
0ba3af4
Narrow Copilot pre-tool session ids
May 20, 2026
84189c0
Merge latest main into Copilot CLI support
May 20, 2026
f5e67ea
Add sudo for global installation command (#454)
kedar-1 May 20, 2026
f186feb
Merge latest main README updates
May 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@
# AGENTMEMORY_GRAPH_WEIGHT=0.2 # Graph traversal bonus on smart-search ranking
# TOKEN_BUDGET=2000 # Max tokens injected via mem::context per session
# MAX_OBS_PER_SESSION=500 # Per-session observation cap before consolidation kicks in
# SUMMARIZE_CHUNK_SIZE=400 # When mem::summarize sees a session larger than this, it chunks observations and map-reduces (chunk-summarize → reduce-merge) to stay within the LLM's context window. Default 400 ≈ 50k tokens per chunk at ~110 tok/obs. Native sessions are capped by MAX_OBS_PER_SESSION; chunking primarily matters for bulk-imported jsonl sessions, which bypass that cap.
# SUMMARIZE_CHUNK_CONCURRENCY=6 # Parallel chunk LLM calls during chunked summarize. Default 6 fits ~100-chunk sessions under iii's 180s function-invocation timeout at typical ~8s/call. High-throughput providers (Novita, DeepInfra, DeepSeek) commonly allow 100+ concurrent — bump this for very large imported sessions.

# -----------------------------------------------------------------------------
# 5. Behaviour flags
Expand Down
1 change: 1 addition & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github: [rohitg00]
45 changes: 44 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,62 @@
name: CI

# `paths-ignore` keeps doc-only / website / README / CHANGELOG churn from
# burning runner minutes. Source / config / workflow changes always run.
# `workflow_dispatch` gives a manual re-run button for flake debugging.
on:
push:
branches: [main]
paths-ignore:
- "README.md"
- "CHANGELOG.md"
- "AGENTS.md"
- "ROADMAP.md"
- "website/**"
- "docs/**"
- "assets/**"
- "deploy/**/README.md"
- "**/*.md"
- "**/*.mdx"
pull_request:
branches: [main]
paths-ignore:
- "README.md"
- "CHANGELOG.md"
- "AGENTS.md"
- "ROADMAP.md"
- "website/**"
- "docs/**"
- "assets/**"
- "deploy/**/README.md"
- "**/*.md"
- "**/*.mdx"
workflow_dispatch:

# Cancel in-flight PR runs when a force-push lands. Keep push runs to
# protect against partial state on main.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
test:
runs-on: ubuntu-latest
runs-on: ${{ matrix.os }}
strategy:
# Don't bail the whole matrix on one cell's failure — we want to
# see whether the same failure reproduces across OSes (e.g.
# whether a flake is platform-specific or universal).
fail-fast: false
matrix:
# Windows held back: test/obsidian-export.test.ts has hardcoded
# POSIX paths (`/tmp/...`) that fail on D:\ drive runners.
# src/functions/obsidian-export.ts needs os.tmpdir() + path.join
# rework before Windows can be added back. Tracked as follow-up.
os: [ubuntu-latest, macos-latest]
node-version: [20, 22]
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
- uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
Expand Down
12 changes: 11 additions & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,25 @@ on:
required: false
default: "agentmemory,mcp,fs-watcher"

# Workflow-level permissions stay minimal — only `contents: read`
# is required to check out the repo. `id-token: write` is granted on
# the publish job for npm's --provenance Sigstore OIDC mint.
permissions:
contents: read
id-token: write

jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v6
with:
# Don't persist the GITHUB_TOKEN to .git/config — the
# publish steps don't push back to the repo, so the token
# only needs to live in memory for this checkout.
persist-credentials: false

- uses: actions/setup-node@v6
with:
Expand Down
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,19 @@ dist/
plugin/scripts/*.map
plugin/scripts/*.d.mts
data/
!eval/data/
!eval/data/**
data-*/
agentmemory-debug/
.gstack/

# Lock files — never commit (see feedback_no_lockfiles memory)
package-lock.json
pnpm-lock.yaml
yarn.lock
integrations/hermes/__pycache__/

# Eval reports (transient; published scorecards live in docs/benchmarks/)
eval/reports/
# LongMemEval download is 278MB; fetched on demand
eval/data/longmemeval/
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ agentmemory is a persistent memory system for AI coding agents, built on iii-eng
5. `test/mcp-standalone.test.ts` — tool count assertion
6. `README.md` — tool counts (search for "MCP tools")
7. `plugin/.claude-plugin/plugin.json` — tool count in description
8. `plugin/plugin.json` and `plugin/.mcp.copilot.json` (when present) — tool count or MCP exposure

**When adding REST endpoints, you MUST update:**
1. `src/triggers/api.ts` — endpoint registration
Expand All @@ -32,6 +33,7 @@ agentmemory is a persistent memory system for AI coding agents, built on iii-eng
4. `src/functions/export-import.ts` — supportedVersions set
5. `test/export-import.test.ts` — version assertion
6. `plugin/.claude-plugin/plugin.json` — version field
7. `plugin/plugin.json` (when present) — version field

**When adding new KV scopes:**
1. `src/state/schema.ts` — add to the KV object
Expand Down
42 changes: 42 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,48 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),

## [Unreleased]

## [0.9.21] — 2026-05-19

Quality + integration wave. Headline: native OpenCode plugin with full Claude Code hook parity ([#237](https://github.com/rohitg00/agentmemory/pull/237) by [@cl0ckt0wer](https://github.com/cl0ckt0wer)). Ten more PRs alongside: `memory_recall` returning the wrong shape, env-file `AGENTMEMORY_DROP_STALE_INDEX` silently ignored, hook scripts crashing on Windows usernames with spaces, viewer search inputs interrupting CJK IME composition, large sessions silently failing at the LLM context limit, lessons invisible to smart-search, Hermes plugin manifest missing hooks, cli onboarding crashing in non-TTY contexts, rebuildIndex blocking boot on large corpora, 25h embed-loop bottleneck during rebuild, and the v0.9.19 iii-console installer workaround can come out now that upstream is fixed.

### Added

- **OpenCode plugin with 22 auto-capture hooks** ([PR #237](https://github.com/rohitg00/agentmemory/pull/237) by [@cl0ckt0wer](https://github.com/cl0ckt0wer), closes [#236](https://github.com/rohitg00/agentmemory/issues/236) + [#244](https://github.com/rohitg00/agentmemory/issues/244)). Complete OpenCode plugin in `plugin/opencode/` matching Claude Code hook parity. Covers session lifecycle (8 hooks), messages (3), tool lifecycle (2), part tracking, permissions, task tracking, plus a two-layer enrichment pipeline (memory context on first turn, file enrichment on subsequent turns) and two slash commands (`/recall`, `/remember`). Full gap analysis in `plugin/opencode/README.md`.

### Fixed

- **`memory_recall` endpoint + format/token_budget forwarding** ([PR #516](https://github.com/rohitg00/agentmemory/pull/516) by [@serhiizghama](https://github.com/serhiizghama), closes [#507](https://github.com/rohitg00/agentmemory/issues/507) + [#440](https://github.com/rohitg00/agentmemory/issues/440)). MCP `memory_recall` always returned compact mode and dropped `format` + `token_budget` params. Two root causes fixed: standalone shim routed through `/agentmemory/smart-search` instead of `/agentmemory/search`, and the local-fallback path didn't read either param. Now routes correctly, forwards both params end-to-end, defaults `format` to `"full"` matching the MCP schema.

- **env-file `AGENTMEMORY_DROP_STALE_INDEX` flag now honored** ([PR #461](https://github.com/rohitg00/agentmemory/pull/461) by [@honor2030](https://github.com/honor2030), closes [#456](https://github.com/rohitg00/agentmemory/issues/456)). Setting the flag in `~/.agentmemory/.env` was silently ignored because the boot path read `process.env` directly. New `isDropStaleIndexEnabled()` helper reads merged env. Combined with [#455](https://github.com/rohitg00/agentmemory/issues/455) + [#469](https://github.com/rohitg00/agentmemory/issues/469) reports, this is the unblock path for the stale-index server-crash recovery loop.

- **Windows hook scripts quote plugin paths correctly** ([PR #487](https://github.com/rohitg00/agentmemory/pull/487) by [@honor2030](https://github.com/honor2030), closes [#477](https://github.com/rohitg00/agentmemory/issues/477)). Hook command strings referenced `${CLAUDE_PLUGIN_ROOT}/scripts/*.mjs` without quotes — Windows users with spaces in their username had every hook crash. Quotes added + regression test.

- **Viewer search inputs honor IME composition** ([PR #517](https://github.com/rohitg00/agentmemory/pull/517) by [@jonathanzhan1975](https://github.com/jonathanzhan1975)). CJK users typing in the viewer's search inputs hit mid-character interruption — every keystroke fired the `oninput=` re-render handler, breaking IME composition mid-syllable. New `bindImeSafeSearch` helper defers re-render until `compositionend`.

- **Chunk large sessions to fit LLM context window** ([PR #472](https://github.com/rohitg00/agentmemory/pull/472) by [@efenex](https://github.com/efenex)). Sessions with >7000 observations silently failed at the LLM provider's context limit — the consolidation pipeline silently skipped the session. New chunking splits oversized sessions across multiple compress calls + restitches the narrative via a `REDUCE_SYSTEM` prompt. Legacy single-call path preserved when obs count is under the chunk size. Backfill script under `scripts/` for users hitting the pre-fix bug.

- **Surface lessons in smart-search + diagnose tally** ([PR #473](https://github.com/rohitg00/agentmemory/pull/473) by [@efenex](https://github.com/efenex)). Closes the lesson round-trip with [#458](https://github.com/rohitg00/agentmemory/pull/458) (lessons auto-injected into `mem::context`): lessons are now also returned alongside hybrid search results in a separate `lessons` field on `smart-search`, and the `diagnose` health surface tallies per-store counts so the trust-shock pattern (save succeeds, recall empty, diagnose says 0) goes away.

- **Declare all Hermes plugin hooks** ([PR #486](https://github.com/rohitg00/agentmemory/pull/486) by [@honor2030](https://github.com/honor2030)). The Hermes `plugin.yaml` manifest only declared 3 of the 6 implemented hooks. All 6 now declared (`prefetch`, `sync_turn`, `on_session_end`, `on_pre_compress`, `on_memory_write`, `system_prompt_block`).

- **`rebuildIndex` non-blocking on boot** ([PR #500](https://github.com/rohitg00/agentmemory/pull/500) by [@efenex](https://github.com/efenex)). Boot path previously `await`-ed `rebuildIndex(kv)`, so the viewer + later boot steps stalled — on large corpora this was 25h+ of blocked startup. Replaced with `void rebuildIndex(kv).then(...).catch(...)` so the rebuild runs in the background.

- **Batched embed calls in `rebuildIndex` (25h → 3h on large corpora)** ([PR #504](https://github.com/rohitg00/agentmemory/pull/504) by [@efenex](https://github.com/efenex)). The rebuild loop made one embed call per observation, paying full HTTP RTT per item. New `vectorIndexAddBatchGuarded` helper batches embeds (default 32, configurable via `REBUILD_EMBED_BATCH_SIZE`) and try/catches per-item failures. Measured 25h → 3h on a 250k-observation corpus.

- **CLI skips onboarding prompts without a tty** ([PR #491](https://github.com/rohitg00/agentmemory/pull/491) by [@honor2030](https://github.com/honor2030)). Onboarding prompts crashed in non-interactive contexts (CI, `docker run -d`, piped input). New guard short-circuits with sensible defaults when stdin/stdout aren't TTYs or `CI=1`.

### Changed

- **Drop iii-console installer `--next` workaround** ([PR #546](https://github.com/rohitg00/agentmemory/pull/546)). v0.9.19 routed first-run iii-console install through `bash -s -- --next` to dodge an upstream tag-prefix bug at [iii-hq/iii#1652](https://github.com/iii-hq/iii/issues/1652). Upstream [iii-hq/iii#1660](https://github.com/iii-hq/iii/pull/1660) shipped 2026-05-19; `install.iii.dev/console/main/install.sh` is a CDN proxy serving upstream main HEAD so the fix is live without an iii release tag. Reverted to canonical bare `curl ... | sh`.

### Infrastructure

- 95 test files (was 92), **1067 tests pass** (was 1038) on `chore(release): v0.9.21`.
- Bundles 11 PRs: 1 contributor feature + 9 bug fixes across MCP / hooks / viewer / summarize / lessons / Hermes / rebuildIndex / CLI + 1 upstream-installer revert.
- New contributors landing first PRs this release: [@cl0ckt0wer](https://github.com/cl0ckt0wer), [@serhiizghama](https://github.com/serhiizghama), [@jonathanzhan1975](https://github.com/jonathanzhan1975).

[0.9.21]: https://github.com/rohitg00/agentmemory/compare/v0.9.20...v0.9.21

## [0.9.20] — 2026-05-18

Hotfix: revert the Codex Stop → session-end chain shipped in v0.9.19.
Expand Down
Loading