Repository navigation
Import agent-handoff plugin v2.0.0 — Git for agents, with universal one-liner - #1
Conversation
80fa1ba to
2bbb4db
Compare
f51dc33 to
4d7d2cd
Compare
Import the agent-handoff plugin for Claude Code and OpenCode and extend it with a universal one-liner bootstrap: - .claude-plugin/: Claude Code plugin manifest and marketplace entry - commands/: /handoff-package and /handoff-unpack slash commands - skills/: handoff-packager and handoff-unpacker skills - tool/: handoff CLI in pure-stdlib Go with embedded templates and tests - opencode/: OpenCode plugin descriptor - docs/PACKAGE-FORMAT.md: the package format specification - PROMPT.md: self-contained instruction any internet-capable agent can fetch and follow to package a conversation, degrading by capability (shell -> sealed archive; files/chat-only -> portable tree + data.json) - install.sh: POSIX installer (release binary or Go source build) - README: Git for agents tagline, one-liner, CLI reference, anatomy - Makefile + GitHub Actions workflow for cross-platform builds Verified: go vet, go test, handoff selfcheck, install.sh end to end, and PROMPT.md's data.json example through package + inspect.
4d7d2cd to
307fa27
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f51dc33afe
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| err = filepath.Walk(s.root, func(p string, info os.FileInfo, err error) error { | ||
| if err != nil { | ||
| return err | ||
| } | ||
| rel, _ := filepath.Rel(s.root, p) |
There was a problem hiding this comment.
Exclude the output archive from the source walk
When --out is a relative filename as shown in the documented handoff package --out handoff.tar.gz workflow, it resolves inside s.root. The output file is created before this walk begins, so the archive includes its own in-progress bytes even though it is absent from HEAD; after extraction, handoff status reports the archive as an added file and the receiving agent's required subsequent handoff pack refuses the dirty tree. Skip out when it is under s.root, or require/write the output outside the package tree.
Useful? React with 👍 / 👎.
| > shell access: run `curl -fsSL https://raw.githubusercontent.com/adeelahmad/package/master/install.sh | sh` | ||
| > then `handoff package --data data.json -m "sealed from v0" --out handoff.tar.gz` in | ||
| > this directory's parent to produce the versioned archive. Until then, treat this tree |
There was a problem hiding this comment.
Seal the generated package from its own directory
Pathway B places data.json inside <package-name>/, but this instruction says to run handoff package --data data.json from that directory's parent. Without changing into <package-name> or passing -C <package-name>, the command cannot read the generated data file and instead initializes/uses the parent directory, so the advertised no-shell-to-sealed handoff path fails.
Useful? React with 👍 / 👎.
| Then verify: `./handoff inspect handoff.tar.gz --human` must print the intake and | ||
| history. Deliver `handoff.tar.gz`. Done. |
There was a problem hiding this comment.
Invoke the installed binary by its installed name
install.sh installs the executable as handoff under the install directory, and the preceding packaging command invokes it through PATH; it never creates ./handoff in the package directory. Thus a successful Pathway A package is followed by a failed verification command. Use handoff inspect handoff.tar.gz --human (or the explicit installed path) here.
Useful? React with 👍 / 👎.
Imports the agent-handoff plugin (v2.0.0) into this repository at the root, making it installable as a Claude Code plugin/marketplace and usable with OpenCode — then extends it with a universal one-liner bootstrap and rebrands it as Git for agents — a portable context packager.
What's included
Plugin import
.claude-plugin/— Claude Code plugin manifest (plugin.json) and marketplace entry (marketplace.json)commands/—/handoff-packageand/handoff-unpackslash commandsskills/—handoff-packagerandhandoff-unpackerskills (the unpacker is bundled into every generated package)tool/— thehandoffCLI in pure-stdlib Go, with embedded templates and unit tests; providespackage,commit,history,show,diff,extract,inspect,verify,selfcheckopencode/plugin.json— OpenCode plugin descriptordocs/PACKAGE-FORMAT.md— the handoff package format specificationMakefileand.github/workflows/build.yml— cross-platform builds (linux/darwin/windows, amd64/arm64)Universal one-liner ("use it from any agent, about anything")
PROMPT.md— a self-contained instruction any internet-capable agent can fetch and follow. Paste one line into claude.ai, chatgpt.com, Claude Code, Codex, etc. and the agent packages the conversation. Degrades by capability: shell agents install the binary and build the sealed archive; file-writing or chat-only agents emit the portable tree plusdata.jsonfor any binary-holding agent to seal later.install.sh— POSIX installer one-liner (curl … | sh): prebuilt release binary when available, source build with Go otherwise;HANDOFF_INSTALL_DIR/HANDOFF_REFoverrides.Notes
LICENSEtext was kept; the tarball's copy was truncated.README.md(# package) was replaced.Verification
go vetclean;go testpasses;make test(vet + tests +handoff selfcheck) —SELF-CHECK PASSinstall.shrun end-to-end (release 404 → Go source-build fallback → selfcheck → install): passesPROMPT.md's exactdata.jsonexample + workstream layout run throughhandoff packageandhandoff inspect: produces a valid sealed v1 archive