Plugins
Editor plugins
Emit zegit evidence from your existing agent — Claude Code or OpenCode — deterministically, around every tool call. Same record for both; only the producer differs.
Both plugins record what the agent did during a session as a platform-standard, unsigned evidence record written to .zegit/evidence/<session>.jsonl, ready to hand to zg evidence evaluate. Because the harness emits evidence deterministically — not via a model-callable tool — "the agent simply didn't log it" is impossible. Both fail open: a recording error never blocks your session.
Not yet published
The plugins are not yet published as releases, and the plugin-claude-code repository is still private, so the install steps below work only for people with access.
Claude Code
A Go hook binary, zegit-evidence, wired into Claude Code's hook events.
git clone https://github.com/zegit-zoo/plugin-claude-code
cd plugin-claude-code
./install.shThe installer builds the binary and prints a hook block to merge into ~/.claude/settings.json (user-wide) or .claude/settings.json (per repo):
{
"hooks": {
"PostToolUse": [
{ "hooks": [{ "type": "command", "command": "zegit-evidence step" }] }
],
"Stop": [
{ "hooks": [{ "type": "command", "command": "zegit-evidence finalize" }] }
]
}
}PostToolUse appends a step per tool call; Stop assembles and writes the record (and removes the staging file). Then hand off:
zg evidence evaluate .zegit/evidence/<session>.jsonlOpenCode
A TypeScript plugin run natively via Bun — no build step. Register it in opencode.json:
{
"plugin": ["@zegit-zoo/plugin-opencode"]
}It hooks tool.execute.before/after to record each call (a started-but-never-finished call stays recorded as failed), captures the model best-effort from chat.message, and flushes one record per session on session.idle and shutdown. Alternatively, drop src/*.ts into .opencode/plugin/.
What they share
Both emit the same core common/evidence record (schema 0.1) — only producer.name and actor.agent.harness differ (claude-code vs opencode). Both write unsigned records bound to repo state; signing and verification are always zg's job. The .jsonl is a gitignored runtime log — the durable, committed artifact is the signed AoV that zg produces.
See Core concepts for the record shape and the envelope ladder these feed into.
Authoritative reference, generated from the component repos. Spot something stale? Tell us.