{"_id":"passoff","name":"passoff","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"passoff","version":"0.1.0","description":"Portable CLI for transferring coding-agent sessions between Claude Code and Codex.","type":"module","homepage":"https://github.com/iamjr15/passoff#readme","bugs":{"url":"https://github.com/iamjr15/passoff/issues"},"repository":{"type":"git","url":"git+https://github.com/iamjr15/passoff.git"},"bin":{"passoff":"bin/passoff.js"},"keywords":["ai","agents","claude","codex","cli","passoff"],"scripts":{"postinstall":"node scripts/install-skills.js --postinstall","prepublishOnly":"npm test","check:pack":"npm pack --dry-run","check:publish":"npm publish --dry-run","test":"node --test"},"engines":{"node":">=20"},"license":"MIT","gitHead":"323fe143c7a51899ed46aa195f021af57d57a641","_id":"passoff@0.1.0","_nodeVersion":"25.9.0","_npmVersion":"11.12.1","dist":{"integrity":"sha512-+aULIsoajkr+cOU4q9L6WajxPM8/9vp9KvDhx9tKPZ4TwJpxP+J/mipBpeNPazoTyKCIb24xJRBvX1bvBZYr0w==","shasum":"dcf3f198d606dabb7c879fd0c5112b5105111a9e","tarball":"https://registry.npmjs.org/passoff/-/passoff-0.1.0.tgz","fileCount":18,"unpackedSize":58349,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDj8sNc6Kiz7HSwHXMMOSnqrDrn2ia+1LKENW4gfPgIZwIgBK8j0xg/M74QgU0smZsTErPJ8dAc6jljc095UxvQBko="}]},"_npmUser":{"name":"iamjr15","email":"jigyanshu15@gmail.com"},"directories":{},"maintainers":[{"name":"iamjr15","email":"jigyanshu15@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/passoff_0.1.0_1778092910822_0.3862636652783107"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-06T18:41:50.821Z","0.1.0":"2026-05-06T18:41:50.952Z","modified":"2026-05-06T18:41:51.190Z"},"maintainers":[{"name":"iamjr15","email":"jigyanshu15@gmail.com"}],"description":"Portable CLI for transferring coding-agent sessions between Claude Code and Codex.","homepage":"https://github.com/iamjr15/passoff#readme","keywords":["ai","agents","claude","codex","cli","passoff"],"repository":{"type":"git","url":"git+https://github.com/iamjr15/passoff.git"},"bugs":{"url":"https://github.com/iamjr15/passoff/issues"},"license":"MIT","readme":"# Passoff\n\nPortable CLI for transferring coding-agent sessions between Claude Code and Codex when one agent hits a limit.\n\n## Requirements\n\n- Node.js 20 or newer\n- Local Claude Code and/or Codex transcript files on the same machine\n\n## Install\n\nFrom npm:\n\n```bash\nnpm install -g passoff\npassoff --help\n```\n\nOr run without a global install:\n\n```bash\nnpx passoff --help\n```\n\nFrom a local checkout:\n\n```bash\nnpm install -g .\n```\n\nThe npm postinstall step auto-installs the bundled `passoff` skill globally for both agents:\n\n- Claude Code: `~/.claude/skills/passoff`\n- Codex: `~/.agents/skills/passoff`\n\nRetry or inspect the global skill install with:\n\n```bash\npassoff install-skills\npassoff install-skills --dry-run\n```\n\nSet `PASSOFF_SKIP_SKILL_INSTALL=1` to skip postinstall skill installation.\n\n## Links\n\n- Source: https://github.com/iamjr15/passoff\n- Issues: https://github.com/iamjr15/passoff/issues\n\n## Commands\n\n```bash\npassoff ls --from claude\npassoff ls --from auto --repo /path/to/repo\npassoff find \"studio-tinkered-parity\" --from claude\npassoff inspect \"studio-tinkered-parity\" --from claude\npassoff codex 2\npassoff codex \"studio-tinkered-parity\" --from claude --no-launch\npassoff claude codex:019dea31\npassoff save --from auto --latest\npassoff save --from claude --all\npassoff install-skills\n```\n\nCommon options:\n\n- `--from claude|codex|auto`: choose the source transcript store.\n- `--repo PATH` or `-C PATH`: match sessions for a specific repository.\n- `--latest`: select the newest matching session.\n- `--json`: print machine-readable output for `ls`, `find`, and `inspect`.\n- `--no-launch`: write transfer files without launching the target agent.\n- `--dry-run`: show the launch command without running it.\n- `--scan-limit N`: cap transcript files inspected per source agent.\n\n## Human Limit Playbook\n\nWhen Claude Code hits a usage limit:\n\n```bash\npassoff ls --from claude\npassoff codex 1\n```\n\nThe command reads local Claude transcript files and repository state, writes `.passoff/current.md`, then launches Codex with a short resume prompt. It does not need Claude to answer another message.\n\nWhen Codex hits a limit and Claude is available:\n\n```bash\npassoff ls --from codex\npassoff claude 1\n```\n\n## Selectors\n\n```bash\npassoff codex 2\npassoff codex claude:7aaea880\npassoff codex @checkout-bug\npassoff codex \"studio-tinkered-parity\"\npassoff codex --latest\n```\n\nIf more than one session matches and no selector is provided, the tool lists sessions and exits instead of guessing.\n\nSelectors can also be human-readable Claude resume names or custom titles. Claude Code transcript metadata such as `custom-title`, `agent-name`, `teamName`, `slug`, `last-prompt`, and `away_summary` is indexed automatically. When several sessions share the same title, the CLI ranks substantive sessions above short `/clear` or local-command stubs.\n\n## Search And Inspect\n\nUse `find` when the user remembers a title or phrase but not the session id:\n\n```bash\npassoff find \"studio-tinkered-parity\" --from claude\npassoff find \"visual parity\" --from auto --json\n```\n\nUse `inspect` before transfer when several close matches exist:\n\n```bash\npassoff inspect \"studio-tinkered-parity\" --from claude\npassoff inspect claude:7aaea880 --from claude --json\n```\n\n`inspect` shows aliases, Claude metadata, cwd history, transcript path, score/stub status, recent messages, and recent tools.\n\n## Tags\n\n```bash\npassoff tag claude:7aaea880 checkout-bug\npassoff codex @checkout-bug\n```\n\nTags are stored in `.passoff/tags.json` in the current repository.\n\n## Output\n\nEach transfer writes:\n\n- `.passoff/current.md`\n- `.passoff/latest.json`\n- `.passoff/sessions/<agent>-<session>-<timestamp>.md`\n\nThe transfer file includes source session metadata, aliases, cwd history, recent transcript messages, recent tool activity, git status, diff stat, a capped diff excerpt, and local plan/instruction files.\n\n## Performance And Privacy\n\n- Scans newest transcript files first and caps discovery at 1500 files per source agent by default.\n- Uses the first JSONL record to skip sessions from other repositories before reading transcript tails.\n- Reads only the first line and a bounded tail of transcript files; it does not load full long-running chats.\n- Redacts common token, key, password, and bearer-secret patterns before writing transfer markdown.\n- Use `--scan-limit N` if a very old session is outside the default scan window.\n\n## Local Development\n\n```bash\nnpm test\nnpm run check:pack\nnpm run check:publish\nnpm install -g .\npassoff ls --from claude\n```\n\n`npm publish` runs the test suite through `prepublishOnly`. Use `npm run check:pack` to inspect the tarball contents and `npm run check:publish` to verify npm publish metadata before publishing.\n","readmeFilename":"README.md","_rev":"1-d67f7516e8af8c62e57793e8e92a8aa9"}