All notable changes to GraphKeeper are documented here. GraphKeeper follows semantic versioning; while the package is below 1.0, minor releases may change public behavior.
graphkeeper close run, which atomically closes one existing open run with an end timestamp and verdict while preserving its accumulated provenance.- Contextual
graphkeeper append --helpandgraphkeeper append claim --helpoutput, including complete claim flags, source-specific requirements, and copyable examples without repository access or mutation.
- The shipped agent skill and command documentation now direct agents to create runs
with
append run, add claims withappend claim, and close runs withclose run.
graphkeeper append claimandgraphkeeper append run, which append claim and run records through a concurrency-safe shared write helper (exclusive graph-file lock + compare-before-rename with bounded retry). Concurrent writers no longer silently overwrite each other's records ingraph/claims.json/graph/runs.json;append claimalso links the new claim into its producing run'sclaims_written.- The shared
mutateJsonArrayFilehelper insrc/libfor concurrency-safe mutate-and-persist of JSON-array graph files. - Two diagnostics:
GK400(concurrent write did not stabilize or lock timeout) andGK401(invalid claim/run input). - A Cursor adapter registered as
--integrate cursorwith the canonical skill at.cursor/skills/graphkeeper/SKILL.md, the marked reminder at.cursor/rules/graphkeeper.md, and the@graphkeeperinvocation. It participates in--integrate all,--dry-run, and conservativeintegrate remove. - An OpenCode adapter registered as
--integrate opencodewith the canonical skill at.opencode/skills/graphkeeper/SKILL.md, the marked reminder inAGENTS.md, and thegraphkeeperinvocation. It participates in--integrate all,--dry-run, and conservativeintegrate remove. - A Kilo Code adapter registered as
--integrate kilowith the canonical skill at.kilo/skills/graphkeeper/SKILL.md, the marked reminder at.kilo/rules/graphkeeper.md, and the@graphkeeperinvocation. It participates in--integrate all,--dry-run, and conservativeintegrate remove. - A Windsurf adapter registered as
--integrate windsurfwith the canonical skill at.windsurf/skills/graphkeeper/SKILL.md, the marked reminder at.windsurf/rules/graphkeeper.md, and the@graphkeeperinvocation. It participates in--integrate all,--dry-run, and conservativeintegrate remove. - A Gemini CLI adapter registered as
--integrate geminicliwith the canonical skill at.gemini/skills/graphkeeper/SKILL.md, the marked reminder inGEMINI.md, and the@graphkeeperinvocation. It participates in--integrate all,--dry-run, and conservativeintegrate remove. - A Kiro adapter registered as
--integrate kirowith the canonical skill at.kiro/skills/graphkeeper/SKILL.md, the marked reminder at.kiro/steering/graphkeeper.md, and the/graphkeeperinvocation. It participates in--integrate all,--dry-run, and conservativeintegrate remove. - An Antigravity adapter registered as
--integrate antigravitywith the canonical skill at.agents/skills/graphkeeper/SKILL.md(shared with Codex), the marked reminder at.agents/rules/graphkeeper.md, and thegraphkeeperinvocation. It participates in--integrate all,--dry-run, and conservativeintegrate remove; because the skill path is shared with Codex, removal is owner-scoped so removing Antigravity preserves the Codex-owned skill directory.
- The Cursor adapter now targets
AGENTS.md(which Cursor reads) instead of.cursor/rules/graphkeeper.md.AGENTS.mdis now the shared guidance file for Codex, OpenCode, and Cursor, each owning one marked block. A legacy.cursor/rules/graphkeeper.mdfrom an older install is no longer GraphKeeper-owned and is safe to delete manually. - Agent adapters are now a closed, data-driven registry. Adding an adapter is a single
entry in
src/lib/agent-adapters.ts; the CLI--integrategrammar, the--integrate allexpansion, and removal machinery all derive from it, andAgentIdis derived from the registry instead of a hardcoded union. - The
initskill-scaffolding special case is expressed as adapter data (scaffoldSkillByInit) instead of a hardcoded agent id. - Multiple registered adapters may now share one guidance file. Codex and OpenCode both
use
AGENTS.md; each owns one marked block, sibling blocks are allowed when properly paired, and unknown or malformed markers are still rejected withGK004. Installing adapters that share a file in one plan (for example--integrate all) appends each block sequentially.
- Across the nine registered adapters, only Codex and Claude Code have sustained,
benchmarked automatic skill invocation. A recorded Cursor benchmark
(
benchmarks/cursor-skill-invocation-2026-08-15) showed automatic invocation failing for Composer 2.5 in 2/2 runs (explicit/graphkeeperworked), and the Cursor, OpenCode, Kilo Code, Windsurf, Gemini CLI, Kiro, and Antigravity destinations are documented defaults rather than substitutes for each product's current skill layout. GraphKeeper installs the skill file and reminder; whether each vendor's agent auto invokes it is verified by real-product benchmark only for Codex and Claude Code.
- The post-fix GraphKeeper Memory Bench #1 result, recording a PASS for grounded memory reuse with bounded current-state verification and the progression FAIL → fix → FAIL → fix → PASS.
- Canonical agent guidance now requires querying active GraphKeeper claims and inspecting their provenance before repeating repository investigation, while preserving explicit evidence checks instead of treating memory as automatically true.
- Minimum freshness verification now has a concrete stopping rule: reuse grounded historical evidence, inspect only relevant current state by default, avoid reconfirming it through Git history, broad searches, or unnecessary tests, and stop once current state is consistent and no contradiction is found.
- Native Windows PowerShell support for init, check, query, doctor, update, and the Node pre-commit hook without normal sh or jq prerequisites.
- A native PowerShell CI acceptance lane covering the installed Windows command shim, package journeys, and real valid/invalid Git commits.
- Query active-claim selection and stable ordering now run in TypeScript instead of jq. Initialization requires only Node.js 18+ and Git; update launches npm's JavaScript CLI directly through Node on Windows.
- The generated Node validator and rule-free Node hook are the normal cross-platform path. The shell validator remains a conservative compatibility fallback for customized or unmigrated repositories.
- Existing repositories should rerun
graphkeeper init --forceafter upgrading so package-owned guidance, validators, and hooks can refresh or migrate to Node. Customizedvalidate.shor hook files are preserved for manual review and can still require a POSIX shell and jq until migrated.
- GraphKeeper Memory Bench v0.1 definitions for repeated investigation, stale memory, provenance, and correction history.
- Public contributor guidance, governance documentation, and clearer proof-oriented product positioning.
- Claims now represent one independently changeable fact. Agent guidance splits compound findings and records directly observed facts separately from interpretations.
- Inference sources require a non-empty
basis, and inference claims cannot useconfidence: 1. The TypeScript parser and canonical shell validator enforce the same boundary with the existingGK120diagnostic. confidence: 1is documented for directly evidenced, non-inference claims only when the evidence fully supports the exact claim.
- Before adopting the new validator, inspect existing committed inference claims.
Claims without a basis or with
confidence: 1are rejected by 0.3.0, and committed claims must not be edited in place; repositories containing those legacy shapes require an explicit migration decision. - After updating the npm installation, existing repositories should run
graphkeeper init --forceto refresh generated skill and schema documentation. Review and replace the repository-localscripts/validate.shseparately because initialization intentionally preserves that enforcement file.
- Explicit internal Codex and Claude Code adapters generated from one canonical skill template, including independent marked guidance blocks.
- Multi-adapter
init --integrate,--integrate all, confirmed and non-interactive--yesoperation, complete--dry-runpreflight, and conservativeintegrate remove.
init --integrate codexnow discloses an immutable plan and requires confirmation; non-interactive callers must pass--yes.--yes --dry-runis accepted and remains read-only.
- Agent integration rejects malformed or mixed markers, wrong-type and symlinked destinations, and post-approval concurrent changes. Removal preserves modified skills and unexpected files rather than deleting contributor work.
- Canonical npm repository, homepage, issue-tracker, and discovery metadata.
- README installation guidance, package/CI status badges, and public support and security-reporting paths.
- Contributor architecture guidance covering command flow, extension points, platform boundaries, recovery, and release governance.
- Parser-parity and documentation-contract tests that keep the TypeScript readers, shell validator, and contributor guidance aligned.
- Preserve LF line endings for shell assets packaged from Windows so they remain executable in supported POSIX shells.
- Canonicalize temporary repository paths in cross-platform tests.
- Run documented contributor onboarding from a clean npm installation in WSL instead of linking Windows-installed dependencies.
- Serialize package end-to-end tests so concurrent
npm packbuilds cannot rewrite shared output during verification.
- The canonical default branch is
main, protected by required Linux, macOS, and Windows/Git Bash quality checks plus isolated performance checks. - Repository-local planning artifacts and development-only
.codexstate are excluded from version control and npm packages. - Solo-maintainer pull requests require passing checks and manual merge but no separate approval; the policy calls for peer approval when another trusted maintainer gains write access.