Repository navigation
Releases: dudupii/quiver
Release list
quiver v0.5.0 — the state projection 🏹
quiver v0.5.0 — the state projection 🏹📜
Handover notes are an event log: append-only, ever-growing, and increasingly polluted by superseded intermediate states. This release adds the other half — a current-state file the next session can trust at a glance.
New
handover — the current-state file .handovers/CURRENT.md (#11, #19, #20)
Alongside the note, handover now maintains a state projection: one line per durable fact, latest state only, each with its confirmation date and source note:
- Package installs must use the mirror at https://mirror.example.net (confirmed 2026-09-22 | source: 2026-09-22_0750.md)
- Notes stay the system of record;
CURRENT.mdis a rebuildable projection. Every failure has a recovery path: re-run the bootstrap. - Incremental contract: add facts that became durable; supersede entries whose truth changed — in place, and the entry then states the new fact only (the old value leaves the file entirely; history lives in git and the source note); delete refuted entries. Untouched entries and their dates are never rewritten — dates must not lie. Zero writes when the session produced nothing durable.
- One-time bootstrap: a first run in a repo that has notes but no
CURRENT.mdbackfills it from the full history, each entry pointing at its original source note. - Concurrent agents: re-read and merge immediately before writing — no locks; a cross-branch git merge keeps both sides' additions and the newer supersede.
- The closing reply reports state-file changes (added / superseded / deleted lines; a bootstrap leads with the entry count and lists every added line) and doubles as a receipt: note path plus the metadata chain it wrote — author, branch, commit sha, and the note it continues (#22).
- Durable-vs-temporal judgment is part of the skill: standing facts a future session still needs go in; one-off events and anything a read-only query answers at read time stay in the note only.
catchup — state mode (#11, #19)
When CURRENT.md exists, catchup reads it first — the projection outranks what older notes claim — then every note sharing the newest note's date (concurrent same-day handoffs are reported with count and authors). State facts ride with their confirmation dates; freshness is never graded against a threshold. A numeric argument still widens the window; without CURRENT.md the default 3-note fallback applies; a CURRENT.md with no notes left is still briefed from.
Infra
- Eval suite grew to 27 cases: five new state-projection cases (update / bootstrap / zero-write / state read / fallback), all live-verified 3/3.
- Two suite-blocking harness defects fixed (#22): trace graders whose all-tokens-present lookahead chains went quadratic over the multi-megabyte run trace (now
^-anchored — same semantics, linear time), and five legacy case directories missingcase.yaml, which wedges the 2.1.276 loader. This also re-frames the old eval-harness hang (#10) as this defect class rather than an environment blip. - Graders witnessing
CURRENT.mdwrites are anchored on the run trace (Write/Edit tool_use or write-shaped Bash), after the discovery that thefilesgrader target sees only created paths (#20). - The documented eval invocation now grants
Edit— the harness silently strips ungranted tools (not granted: Edit).
Known cost when downgrading
Rolling back to a pre-0.5.0 quiver would treat CURRENT.md as the newest note (relay seed, handover continues) because of filename sort order. Plugins roll forward; if you must downgrade, delete .handovers/CURRENT.md — it is rebuildable by definition.
Upgrading
| Agent | Command |
|---|---|
| Claude Code | claude plugin marketplace update quiver && claude plugin update quiver — restart the session to apply |
| Codex | codex plugin marketplace upgrade quiver, then reinstall via codex plugin add quiver@quiver |
| pi | pi install git:github.com/dudupii/quiver@v0.5.0 (version-pinned) or pi install git:github.com/dudupii/quiver (latest) |
| PrimeAgent | prime-agent package install git:github.com/dudupii/quiver |
The first handover after upgrading performs the one-time bootstrap — expect the entry count in that run's closing reply.
quiver v0.4.1 — the relay arrow
quiver v0.4.1 — the relay arrow 🏹→🚀
The handover loop is now complete: handover writes the note, relay ignites a fresh background agent from it, the agent works unattended, catchup reads the results back.
New
relay — /quiver:relay [focus] (#13, #14)
Hands the latest handover note to a brand-new background agent on this machine. The seed is a pointer — "read this note, run catchup, pursue this thread" — never a copy. The agent starts in the current working directory with a descriptive name visible in the job list and terminal title; the exact launch command is echoed in the reply.
- User-requested only — spawning a background process is a side effect; relay never fires on its own
- Zero writes — notes stay byte-identical (
.langincluded), git stays read-only; the launch is relay's only side effect - No note? relay refuses and points at
/quiver:handover— it never invents a seed
Per-platform background-launch support — verified against each platform's own CLI and docs; where a platform has no mechanism, relay says so instead of faking a launch:
| Platform | Background mechanism | What relay does |
|---|---|---|
| Claude Code | Native (claude --bg) |
Launches; managed from the job list |
| Codex CLI | None local — exec is foreground; queue feeds existing sessions, agents browses them |
Reports it; hands you the seed for a second terminal, or the experimental codex cloud exec if you use Codex Cloud |
| pi | None in core by design — the documented path is "spawn Pi instances via tmux" | Spawns a second pi under tmux (pi -p), or defers to an installed subagents extension |
| PrimeAgent | Native — daemon-backed resident sessions | Spawns a resident session (rlm.create_session); managed with prime-agent agents |
handover — free-text focus (#9)
/quiver:handover zh finalize the release (or /handover fix login bug) — everything after the language token tells the note what the next session will concentrate on. Emphasis, not selection: all eight sections are still written; the focused thread gets the depth and the top next-steps.
Infra
- CI:
npm run check(manifest validation) on every push/PR - Pullfrog PR-review workflow (BYOK; since this release it runs on Z.ai GLM-5.3)
Upgrading
| Agent | Command |
|---|---|
| Claude Code | claude plugin marketplace update quiver && claude plugin update quiver — restart the session to apply |
| Codex | codex plugin marketplace upgrade quiver, then reinstall via codex plugin add quiver@quiver |
| pi | pi update — or pin with pi install git:github.com/dudupii/quiver@v0.4.1 |
| PrimeAgent | prime-agent package update |
Full changelog: v0.4.0...v0.4.1
quiver v0.4.1 — relay 箭 🏹→🚀
handover 闭环就此补全:handover 写笔记,relay 用它点火一个全新后台代理,代理无人值守干活,catchup 把成果读回来。
新增
relay — /quiver:relay [焦点](#13、#14)
把最新交接笔记交给本机一个全新后台代理。种子是指针——"读这篇笔记、跑 catchup、主攻这条线索"——绝不是笔记的拷贝。代理以描述性名称在当前工作目录启动,任务列表和终端标题一眼可辨;确切启动命令回显在回复里。
- 仅限用户主动触发——拉起后台进程是副作用,relay 绝不自行启动
- 零写入——笔记字节不变(含
.lang)、git 只读;点火是 relay 唯一的副作用 - 没有笔记? relay 拒绝并指向
/quiver:handover——绝不凭空编造种子
逐平台后台启动支持——对照各平台自有 CLI 与文档逐一核实;平台没有机制时如实说明,绝不假装点火:
| 平台 | 后台机制 | relay 的做法 |
|---|---|---|
| Claude Code | 原生(claude --bg) |
直接点火;任务列表里管理 |
| Codex CLI | 本地没有——exec 是前台运行;queue 只喂已有会话、agents 只能浏览 |
如实说明;把种子交给你去第二个终端跑,或在你使用 Codex Cloud 时给出实验性的 codex cloud exec |
| pi | 核心刻意不做——官方文档指路"经 tmux 再起 pi 实例" | 经 tmux 再起一个 pi(pi -p),或遵从已安装的子代理扩展 |
| PrimeAgent | 原生——daemon 支撑的常驻会话 | 经 rlm.create_session 起常驻会话;用 prime-agent agents 管理 |
handover——自由文本焦点(#9)
/quiver:handover zh 收尾发布(或 /handover 修复登录 bug)——语言 token 之后的全部参数告诉笔记下个会话主攻什么。只调详略、不做取舍:八段照写,被聚焦的线索写深、占下一步首位。
基础设施
- CI:每次 push/PR 跑
npm run check(manifest 校验) - Pullfrog PR 审查工作流(BYOK;自本版本起跑在 Z.ai GLM-5.3 上)
升级
| Agent | 命令 |
|---|---|
| Claude Code | claude plugin marketplace update quiver && claude plugin update quiver——重启会话生效 |
| Codex | codex plugin marketplace upgrade quiver,再 codex plugin add quiver@quiver 重装 |
| pi | pi update——或用 pi install git:github.com/dudupii/quiver@v0.4.1 锚定 |
| PrimeAgent | prime-agent package update |
完整变更:v0.4.0...v0.4.1
quiver v0.4.1 — relay アロー 🏹→🚀
handover のループがこれで完成:handover がノートを書き、relay がそこから新しいバックグラウンドエージェントに点火、エージェントが無人で作業し、catchup が成果を読み戻します。
新機能
relay — /quiver:relay [フォーカス](#13、#14)
最新の handover ノートを、このマシンの新しいバックグラウンドエージェントに渡します。シードはポインタ——「このノートを読み、catchup を実行し、この糸口を追え」——ノートのコピーでは決してありません。エージェントは現在の作業ディレクトリで、ジョブリストとターミナルタイトルで一目で分かる説明的な名前とともに起動し、正確な起動コマンドは返信にエコーされます。
- ユーザー明示要求のみ——バックグラウンドプロセスの起動は副作用なので、relay が自発的に発火することはありません
- ゼロライト——ノートはバイト単位で不変(
.langも含む)、git は読み取り専用。起動が relay 唯一の副作用です - ノートがない? relay は拒否し
/quiver:handoverを指します——シードを捏造することはありません
プラットフォーム別バックグラウンド起動対応——各プラットフォーム自身の CLI とドキュメントに対して検証済み。仕組みのないプラットフォームでは、起動を偽装せずその旨を伝えます:
| プラットフォーム | バックグラウンド機構 | relay の動作 |
|---|---|---|
| Claude Code | ネイティブ(claude --bg) |
起動。ジョブリストから管理 |
| Codex CLI | ローカルにはなし——exec はフォアグラウンド、queue は既存セッションへの供給、agents は閲覧のみ |
その旨を報告し、第2ターミナル用のシードを渡す。Codex Cloud 利用者には実験的な codex cloud exec を案内 |
| pi | コアには意図的になし——公式ドキュメントは「tmux 経由で pi インスタンスを起動」を指す | tmux 配下で第2の pi を起動(pi -p)、またはインストール済み subagents 拡張に委譲 |
| PrimeAgent | ネイティブ——デーモン基盤の常駐セッション | 常駐セッションを起動(rlm.create_session)。prime-agent agents で管理 |
handover — 自由テキストフォーカス(#9)
/quiver:handover zh リリースを仕上げる(または /handover ログインバグを修正)——言語トークン以降のすべてが、次のセッションが集中すべき糸口を伝えます。取捨ではなく重み付け:8 セクションはすべて書かれ、フォーカスされた糸口に深さと次のステップの先頭が与えられます。
インフラ
- CI:push/PR ごとに
npm run check(マニフェスト検証) - Pullfrog PR レビューワークフロー(BYOK。本リリース以降 Z.ai GLM-5.3 で稼働)
アップグレード
| エージェント | コマンド |
|---|---|
| Claude Code | claude plugin marketplace update quiver && claude plugin update quiver——セッション再起動で適用 |
| Codex | codex plugin marketplace upgrade quiver の後 codex plugin add quiver@quiver で再インストール |
| pi | pi update——または pi install git:github.com/dudupii/quiver@v0.4.1 でバージョン固定 |
| PrimeAgent | prime-agent package update |
完全な変更点:v0.4.0...v0.4.1
v0.4.0 — cross-agent quiver (Codex / pi / PrimeAgent)
What's new
quiver is now a cross-agent skill quiver — one source of skills, thin per-agent adapters. Claude Code, Codex, pi, and PrimeAgent all install from this one repo.
Cross-agent support (Codex / pi / PrimeAgent)
- Codex:
codex plugin marketplace add dudupii/quiver→codex plugin add quiver@quiver. Verified end-to-end: skills appear in the catalog, andhandoverstays out of the implicit catalog via a Codex-native invocation policy. - pi:
pi install git:github.com/dudupii/quiver(pin with@v0.4.0). pi natively honorsdisable-model-invocation. - PrimeAgent: built on pi —
prime-agent package install git:github.com/dudupii/quiver. - Claude Code install/update flow unchanged.
Neutral .handovers/ path
- New notes land in
.handovers/at the project root — agent-neutral, so mixed teams (Claude Code + Codex + pi) share one directory. - Backward compatible: notes and language memory in the legacy
.claude/handovers/are still read (catchup,continueschain,.lang) and never rewritten. No automatic migration. - handover is user-requested only on every platform (hardened description + Codex policy file + native frontmatter support).
Also
- brainstorm rewritten host-neutral (no harness-specific references).
npm run checkvalidates all four manifests (JSON, version alignment, agentskills name=dir).- Eval suite: 3 new cases (legacy-path read, language migration, no-autofire); long-broken grader formats repaired — 16/17 cases at 100% on the final runs.
- Release smoke checklist:
docs/release-smoke.md.
中文摘要
quiver 升级为跨 agent 技能箭袋:Codex / pi / PrimeAgent 与 Claude Code 从同一仓库安装。交接笔记目录中立化为 .handovers/(旧 .claude/handovers/ 永久可读、绝不自动迁移);handover 在所有平台仅限用户主动触发。附 manifest 校验(npm run check)与发布冒烟清单。
Full changelog: compare 858d2aa...v0.4.0
v0.3.0 — catchup arrow + multi-developer handover
v0.3.0 — catchup arrow + multi-developer handover
New: catchup arrow
/quiver:catchup (bare /catchup works too) — the read side of handover:
- Reads the latest handover notes — default 3, widen with a number (
/catchup 5) - Replies with a four-section brief: current state / open threads and next steps / active gotchas / suggested actions
- When the newest note records a
commit, folds in the git log since it — "what happened after the last handover" in one command - Model-invocable and strictly read-only: writes nothing anywhere, not even the language memory — safe to auto-trigger when a session takes over a project
- Legacy notes without frontmatter are read like any other
Changed: handover
- Notes now carry YAML frontmatter —
author(gituser.nameonly, never an email),branch,commit,lang, andcontinues:linking to the previous note. Unavailable fields are silently omitted; notes from before this convention still work - Git-aware, git-read-only: tracked handover directory → one-line suggestion to commit the note so teammates see it; ignored or untracked → no mention of git; never runs a state-changing git command
- Language resolution: explicit argument > stored project memory > inferred from your messages > English
- Mechanical credential scan (
sk-,ghp_,AKIA, private keys,password:…) before every write
Team workflow (documented in both READMEs)
Track .claude/handovers/ in git — it becomes the sharing medium. Agree on one note language (.lang is a single shared project value). Start sessions with /quiver:catchup.
Infrastructure
Plugin eval suite under evals/ (12 cases, 60+ graders) covering both arrows end-to-end. The claude plugin eval runtime is early-access-gated on some setups; every grader pattern is additionally verified by a local 207-check golden test.