kakadeka / Baton

Listed

Pass your project, not your context.

masterToolSkillSession View source

Installation

npx -y @deepseek-ai/dsh plugin --profile web add github:kakadeka/Baton

This installation command is an unverified starting point generated from the GitHub repository address.

README

Maintainer-authored documentation snapshot.

View on GitHub โ†—
Commit 5b88b72Synced Aug 18, 2026

๐Ÿฅ Baton โ€” Pass your project, not your context.

Baton โ€” Pass your project, not your context

Switch computers, switch AI, switch sessions โ€” and keep working with one sentence.

GitHub stars npm version npm downloads license bundle size

Node.js git required pwsh DSH plugin platform

English ยท ็ฎ€ไฝ“ไธญๆ–‡ ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด ยท Franรงais ยท Deutsch ยท Espaรฑol ยท Portuguรชs ยท ะ ัƒััะบะธะน ยท Tรผrkรงe ยท ุงู„ุนุฑุจูŠุฉ ยท เน„เธ—เธข

Baton is a project-relay collaboration system. It lets Claude Code, Codex, Cursor, and DeepSeek Harness take turns maintaining the same project across machines โ€” progress, memory, design specs, tasks, and Git stay consistent. You talk normally; it does the rest.

Three core promises:

  1. ๐Ÿ”„ Anyone can take over โ€” switch AI tools or machines, say one command, and pick up exactly where you left off. No re-explaining the project.
  2. ๐ŸŽฏ Do what was asked โ€” task boundaries and protected paths are mechanically checked at closeout, and design facts are locked into specs; the rest is guarded by rules plus review โ€” drift gets caught, not discovered hours later.
  3. โœ… "Done" really means done โ€” closeout auto-commits, pushes, and verifies the remote SHA โ€” no more "committed locally but never on GitHub, yet told it's done."

๐Ÿš€ Quick start (DeepSeek Harness โ€” one line)

Using DeepSeek Harness? This is everything you need.

dsh plugin --profile web add @kakadeka/dsh-baton
  1. Install the DSH CLI once: npm i -g @deepseek-ai/dsh
  2. Paste the line above, press Enter.
  3. Restart dsh โ€” done. All 19 baton_* tools are now active in your profile.

Also installable from GitHub: dsh plugin --profile web add github:kakadeka/Baton Using Codex / Claude Code / Cursor instead? Jump to install for other AI tools.


๐Ÿ“– Scenarios (one per requirement, pain โ†’ Baton's answer)

#PainBaton's answer
1Every morning or new machine: which branch? what was done yesterday? is the remote updated?Say clock in โ€” auto git checks + safe sync + read handoff/todos โ†’ task table โ†’ reply a number
2"Committed locally but not pushed"; manual PowerShell git at nightSay clock out โ€” verify โ†’ docs/memory/metrics โ†’ commit โ†’ push โ†’ remote SHA == local HEAD before "done"
3Finishing a task and "end of day" got conflatedSay complete task โ€” close the task, record results, suggest next. Task-done โ‰  end-of-day
4Confirmed designs get forgotten; AI free-stylesSay save design spec โ€” lock design facts into long-term specs (conflicts keep history); UI tasks auto-reference them
5Lost session, new conversation, re-explain everythingSay continue work โ€” restore task/branch/blocker/handoff/next-step. One sentence, done
6Multiple todos; AI shouldn't decide priority; typing full tasks is tediousTask table with numbers โ€” reply 1/2/3
7Long project, history unreachable; re-reading everything burns tokensDecisions/pitfalls/specs auto-indexed; query the index, read only the hit fragment
8Codex/Claude/Cursor relay without knowing what the last one didUnified handoff file โ€” branch/HEAD/changes/constraints/next-step. Read the last entry, continue
9Expensive model used for everything; weak model makes mistakes; manual switching is painfulAuto model routing by task difficulty โ€” micro: main session, normal: flash, complex/review: pro, with fallback chains
10"Which model actually ran?" bills don't matchrecommended vs actual recorded separately, source labeled honestly (dispatch record / host descriptor / unknown)
11AI drifts from prototype after hours of workFrozen requirements + allowed/protected paths + mechanical scope checks + independent review + no dangerous git
12Changing a button color took an hourMicro fast path โ€” no delegation, no reviewer, no irrelevant tests. Simple tasks take minutes
13Complex tasks must not be written sloppilyEscalating gates: contract, strong model, independent reviewer, fidelity vs frozen spec, rollback plan
14Office and home machines out of sync; fear of losing local workSafe fetch + ff-only sync (never overwrites), auto commit/push, remote SHA verify; force/reset/clean forbidden
15Picking models by feel, no real dataEvery task records actual model and completion โ†’ monthly dashboard; success/failure/duration not yet collected are shown as "not recorded", never fabricated
16Reuse/share the system with a new projectFramework and project instance fully separated; Baton init one-shot bootstrap; share via sanitizing pipeline (no keys/paths/private notes)
17Other skills installed that bypass project rulesExternal skills may help, but project boundaries (paths, design specs, git discipline) are enforced by Baton, coordinated with AGENTS.md

โœจ Features

  • Command automation โ€” clock in / clock out / continue work / save design spec / complete task / update project docs / remember / Baton init / number confirm / git natural language
  • Cross-AI & cross-machine โ€” plain-text project truth + one-command thin adapters (Codex/Claude/Cursor) + handoff relay
  • Long-term memory โ€” decisions/pitfalls/specs auto-archived + lightweight index; progressive reads, no full re-reads
  • Anti-drift โ€” FROZEN constraints + allowed/protected path checks + forbidden-change list + independent review + no dangerous git
  • Git truth loop โ€” ff-only sync, auto commit/push, remote SHA == local HEAD, publish record (last_published_sha)
  • Auto model routing โ€” task tier ร— rule table (flash/pro + high/max + fallback); recommended vs actual recorded transparently
  • Monthly dashboard โ€” model rankings / hourly activity / daily detail / agent detail, from real execution data
  • One-click acceptance โ€” baton_accept: skeleton/state/security/volume checks โ†’ PASS/FAIL + blocking list
  • Lean implementation gate โ€” per-task implementation_policy (off/lite/full/strict): in strict mode new dependencies/files/abstractions are budgeted mechanically and over-budget closeout is blocked until the user confirms an exception
  • Specialist skills โ€” lean-review (over-engineering audit), debt (tech-debt scan), doctor (health check: version/drift/lock/publish surface) โ€” all read-only, installed alongside the main skill
  • Credential hygiene โ€” every persisted input is scanned; secrets never reach Git, memory, metrics or logs
  • Trusted publishing โ€” npm releases ship with SLSA provenance (OIDC, tag-triggered)

๐Ÿ—ฃ๏ธ Commands (when to use each)

Say any of these English phrases โ€” the meaning is identical in every AI. Chinese speakers can use the same commands in Chinese (see the Chinese version via the link at the top).

CommandWhenWhat happens
clock in / start workdaily start / new machine / new AIgit checks โ†’ safe sync โ†’ handoff & todos โ†’ task table (plus an update-check nudge when >7 days unchecked)
clock out / end workend of workdayverify โ†’ docs/memory/metrics โ†’ commit โ†’ push โ†’ remote SHA verify
continue work / resumelost session / switched toolrestore task, branch, blocker, handoff tail, next step
save design specafter you confirm a designlock into long-term spec + index; UI tasks obey it
complete taska task is done, more to doclose task, record result, suggest next (no full closeout)
update project docsmid-work checkpointwrite progress + handoff checkpoint (workspace stays held)
remember this pitfall / record this decisionhit a pitfall / made a decisionwrite to long-term memory + auto-index
Baton initfirst time in a new projectgenerate memory skeleton + config (never overwrites)
reply 1 / 2 / 3task table shownthe number is persisted as the current task, then work starts
release workspace / I confirm the previous agent stoppedownership conflict at clock inunlock the single-writer lock + write a release note
pull github / sync github / check git statusmanual git intentlightweight git path, no contract/review ceremony
check updatewondering if a new Baton version existsread local version anchor + query GitHub/npm for the latest, report up-to-date or new version
update baton / upgrade batona new version is outAI runs the full update (git pull + re-run install script / npm update) and verifies local == remote
lean review / scan debt / run doctorwant a code audit / tech-debt list / health checkruns the read-only specialist skill (over-engineering review / BATON-DEBT scan / version-drift-lock diagnosis)

๐Ÿ› ๏ธ Install for other AI tools (Codex / Claude / Cursor)

Installing = copy one command, press Enter, wait for it to finish, then verify one command. No manual folder creation, no manual file copying. DeepSeek Harness users can skip this โ€” use the one-line Quick start above instead.

Step 0: Decide which install you need (10 seconds)

Your situationInstall thisAfter install
Multiple projects โ€” you want Baton available in every project on this machineUser-level (once per machine)Global on this machine; any project recognizes the commands
One specific project you want other machines/AIs to take overProject-level (once per project)The project carries its own memory skeleton + 3-tool adapters; git clone and continue
BothUser-level first, then project-levelMost complete

๐Ÿ’ก Recommended: run user-level (30s), then project-level on your real project (30s).

Step 1: Download Baton (once)

Open PowerShell (press Win, type powershell, Enter), paste this line:

git clone https://github.com/kakadeka/Baton.git $HOME\Baton

No git? Install from https://git-scm.com/download/win, reopen PowerShell, paste again.

Step 2: Pick one install type and paste its command

Option A โ€” User-level (once per machine, all projects)

pwsh -File $HOME\Baton\scripts\baton-install.ps1 -Scope User

You'll see ok: [Codex] ..., ok: [Claude Code] ..., ok: [Cursor] ... โ€” the global skill for all three AI tools is installed.

Option B โ€” Project-level (once per project, makes the project portable)

cd C:\your\project\path
pwsh -File $HOME\Baton\scripts\baton-install.ps1 -Scope Project

You'll see a success line (project-level install complete) plus the created list (memory skeleton docs/ai_memory, config .baton, three skill mirrors, and entries in AGENTS.md / CLAUDE.md / .cursorrules). If it says no .git, run the git init commands it prints.

Project-level install is fully automatic and works without the DeepSeek Harness plugin (plugin-free mode).

Step 3: Verify (the important one โ€” one command)

In the project, tell your AI:

clock in

โœ… Success: the AI acts per Baton and outputs a status report with the branch, HEAD, working-tree state, current task, and handoff summary, followed by a task table like โ€”

Task table: 1) ...

โŒ Nothing happens? Check in order:

  1. Which AI are you using? Claude Code โ†’ ~\.claude\skills\baton\SKILL.md; Codex โ†’ ~\.agents\skills\baton\SKILL.md; Cursor โ†’ ~\.cursor\skills\baton\SKILL.md (user-level install creates all three)
  2. Does the project have .git? (else git init + first commit)
  3. Is the command exactly clock in with nothing else?
  4. Does the project have docs/ai_memory/? (project-level install creates it)

Step 4: Joining an existing Baton project (new machine / new AI)

On the new machine: install git โ†’ git clone your project โ†’ tell your AI:

clock in  or  continue work

Memory, handoff, and tasks come with the code. Continue directly โ€” nothing else to install.

Step 5: How to check / update the Baton version

The installer leaves a version anchor for you: user-level installs write version.json next to each global SKILL.md, project-level writes .baton/version.json. You never need to remember version numbers โ€” just tell your AI:

CommandWhat happens
check updateAI reads your local version anchor, queries GitHub/npm for the latest, and reports "up to date" or "new version X.Y.Z available"
update batonwith a newer version available, AI runs the full update (git pull + re-run install script / npm update) and verifies the local version matches the remote before reporting done

Tip: every clock in, if you haven't checked for updates in 7 days, Baton adds a one-line "you may check update" nudge. SKILL changes take effect in a new session; DSH bundle updates require a restart.

Step 6: Uninstall (safe, never touches your content)

pwsh -File $HOME\Baton\scripts\baton-uninstall.ps1 -ProjectRoot C:\your\project\path
  • Removes only what the installer created: the three skill mirrors, the entry segments (only the marker-bounded span), and the version anchor.
  • Your memory (docs/ai_memory/) and config are kept by default โ€” they are your project's truth. Add -RemoveMemory only when you really want them gone.
  • Files you have edited since install are detected by content hash and kept, with a notice โ€” never deleted silently.
  • -DryRun shows exactly what would happen without writing anything.

What the one-click script does (transparent)

ModeAutomatically does
User-levelCopies SKILL.md into the global skill folders of all three AI tools (Codex / Claude Code / Cursor)
Project-levelโ‘  docs/ai_memory/ skeleton (with revision log + archive index) โ‘ก .baton/config.json โ‘ข .gitignore append โ‘ฃ three skill mirrors โ‘ค three entry segments (AGENTS.md / CLAUDE.md / .cursorrules, never overwrites your rules)

Idempotent: re-running never overwrites your existing docs and rules; it only fills in what's missing.

๐Ÿ“ Where the truth lives

project/
โ”œโ”€โ”€ docs/ai_memory/            โ† long-term memory (Git-synced, AI-agnostic)
โ”‚   โ”œโ”€โ”€ index.md               โ† read me first
โ”‚   โ”œโ”€โ”€ current.md             โ† what's happening now
โ”‚   โ”œโ”€โ”€ handoff_current.md     โ† handoff log (last entry = truth)
โ”‚   โ”œโ”€โ”€ state/                 โ† tasks.json, archive_index.json, project_state.json
โ”‚   โ”œโ”€โ”€ knowledge/             โ† tech_decision.md, pit_experience.md
โ”‚   โ”œโ”€โ”€ ui_spec/               โ† design specs
โ”‚   โ”œโ”€โ”€ daily_log/             โ† daily logs
โ”‚   โ””โ”€โ”€ agent_metrics/YYYY/MM/index.html  โ† monthly dashboard
โ””โ”€โ”€ .baton/                    โ† machine-local (gitignored): config, metrics, evidence

๐Ÿ›ก๏ธ Safety & design

  • Dangerous git (force push / reset --hard / risky clean / unauthorized rebase) does not exist
  • Syncs are ff-only; divergence stops and reports; never auto-resolves conflicts
  • Credentials never enter Git / Memory / Metrics / logs
  • History is append-only or marked "superseded" โ€” never overwritten
  • "Done" = mechanical evidence (remote SHA + publish record), not a claim
  • Saving tokens is a first-class goal: index-first, risk-based models, bounded outputs, no redundant calls

๐Ÿ“ฆ Repository & license

Repository information

Language
JavaScript
License
Apache-2.0
Last updated
Aug 16, 2026, 5:26 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.