Work jiva
tool

JIVA

One terminal, many souls — a self-healing fleet of Claude Code sessions on a private tmux server, with a desk, a boss, workers and a bash watchdog.

JIVA keeps a small fleet of Claude Code sessions alive in a private tmux server. A desk talks to you, a boss splits the work, and workers do it. A plain bash watchdog checks every session every five seconds and swaps any of them for a fresh one before it gets past 200k tokens of context. Sessions coordinate through a handful of verbs (claim, report, ask, ship, handoff, inbox) and one append-only board, so you keep one window open and questions reach you there while the rest of the fleet stays out of your way.

Last updateOct 13, 2026 PrimaryShell
  • Bash
  • tmux
  • jq
  • just
  • Python
  • JavaScript
  • Claude Code
  • ShellCheck
  • Apache
JIVA — One terminal, many souls — a self-healing fleet of Claude Code sessions on a private tmux server, with a desk, a boss, workers and a bash watchdog.
JIVA media

JIVA runs a small fleet of Claude Code sessions on a private tmux server, one per repo, and never touches your own tmux. Three roles: a desk that is the only session that talks to you, a boss that splits work into task cards of 20 lines or fewer, and workers that claim paths, do the work and ship it.

The watchdog

A plain bash loop checks every session every five seconds. A pane that dies is respawned with the same role and name, and it re-reads its boot payload. A session approaching 200k tokens of context writes a handoff of 40 lines or fewer and is swapped for a fresh body before the context degrades. jiva doctor live proves it by sending kill -9 to a pane and timing the recovery.

How sessions coordinate

  • claim: directory-level path claims with no overlaps, taken before any edit.
  • ask / answer: typed questions for the desk (decision, permission, deploy, spend), each with options and a default.
  • ship: commits only the claimed paths and pushes under a lock.
  • report, handoff, inbox: one append-only board instead of sessions typing into each other.

Budgets as tests

just check fails the build when a file passes 150 lines, a note passes 30, a script fails to parse or ShellCheck complains, and when the README's verb table drifts from jiva help. Workers have a soft cap of six and a hard cap of twelve. JIVA never auto-accepts Claude Code's workspace trust dialog; you accept it yourself, once per repo. There is a local dashboard on a random loopback port, and the public site ships under a strict Content-Security-Policy with no third-party scripts.

Straight from the source

The project's own README.

Rendered in place — every link, image, and code block carried over from the repo. The page below is what a contributor would see opening the project for the first time.

JIVA — one terminal, many souls

JIVA keeps a small fleet of Claude Code sessions alive in a private tmux server. A desk talks to you, a boss splits the work, workers do it. A plain bash watchdog checks every session every 5 seconds and swaps any of them for a fresh one before it gets past 200k tokens of context.

You keep one window open. Questions reach you there. The rest of the fleet stays out of your way.

Site: https://jiva.meiuxmeiux.com · Status: private alpha, runs on your machine.

Install

You need git, tmux (tested on 3.4), jq, just and Claude Code. With access to the private repo:

git clone [email protected]:saintpetejackboy/jiva.git ~/jiva
export PATH="$HOME/jiva/bin:$PATH"

bin/jiva works from any repo (code comes from the checkout, state goes in that repo's .jiva/). Inside the jiva checkout itself, just --list shows the same runtime as recipes (just up, just status, just down) plus the verb wrappers just j-*.

60-second quickstart

Run from the repo you want the fleet to work on:

jiva init                     # .jiva/, gitignore, CLAUDE.md pointer
jiva up 2                     # watchdog + boss + 2 workers on a private tmux server
jiva status                   # one-line fleet summary
jiva assign w1 card.md        # give w1 a ≤20-line task card; it respawns and starts
jiva down                     # kill this repo's tmux server + dash (never your own tmux)

First jiva up in a new repo stops at Claude Code's workspace-trust dialog, once per repo. Attach with tmux -L jiva-<repo> a and accept it yourself; JIVA never auto-accepts it. Workers: soft cap 6 (above it, JIVA_CONFIRM=1), hard cap 12. The full walk-through is docs/QUICKSTART.md.

Verbs

Generated from jiva help + just --list by scripts/readme-drift.py --table; just check fails if a verb is missing here.

verb what it does
jiva plugin [install|uninstall|status|mode] local plugin at user scope (plugin/install.sh); mode = hooks source
jiva init make this repo fleet-ready (.jiva/, .gitignore, CLAUDE.md pointer if absent)
jiva up [workers] watchdog + boss + N workers (default 2)
jiva spawn <role> <name> start one session in its own window
jiva respawn <name> kill the pane and boot a fresh body (same role/name, re-reads boot payload)
jiva assign <w> <card> install a task card for worker <w>, respawn it, kick it off
jiva restart-watchdog respawn the watchdog pane (picks up core/watchdog.sh edits; fleet untouched)
jiva say <name> <text> type a line into a session
jiva down stop everything (kills this target's tmux server + dash only)
jiva status one-line fleet summary from .jiva/state.json
jiva doctor [live|breakers|asks|perm|lease|plugin|watch|fault] budgets as tests; live kill -9 self-heal; others run only that set
jiva dash [start|stop|url] tier-1 dashboard on 127.0.0.1:<random port>
jiva watch one live terminal view: bar + open asks + last board lines (core/watch.sh)
jiva mine [n] rank repeated Bash commands from this repo's transcripts (recipe candidates)
jiva roster [gen|check|show] [pack] name/color/avatar pack tooling (scripts/roster.sh; default pack)
jiva pick <paths…> best idle worker for these paths (affinity table; boss still chooses)
jiva check files ≤150 lines, notes ≤30, scripts parse, shellcheck (run in the target)
jiva spike re-test version-sensitive assumptions on scratch socket jiva-spike
jiva claim claim paths before editing (directory-level, no overlaps)
jiva report report done/blocked/note "<msg>" (done runs core/check.sh)
jiva ask typed ask for the desk: question, options, default, class (decision/permission/deploy/spend/…)
jiva answer answer an open ask (no text = its default); the asker gets "JIVA answer <id>: <text>"
jiva ship commit claimed paths only and push under a lock
jiva handoff save a ≤40-line handoff from stdin or a file, then stop (watchdog respawns you)
jiva inbox recent board + open desk asks
jiva pending sessions stuck at a native prompt and where to answer them
jiva help this list. Workers: soft cap 6 (JIVA_CONFIRM=1 above it), hard cap 12.

Sessions coordinate through six of these — claim, report, ask, ship, handoff, inbox — plus one append-only board. The desk has two more: answer and pending.

Docs

  • docs/QUICKSTART.md — step by step for a second repo.
  • docs/DEPLOY.md — human-only site deploy runbook.
  • notes/ — durable facts per area (core, plugin, site, perms, breakers, …), ≤30 lines each.
  • docs/PLAN.md (core runtime) and docs/KICKOFF.md (original brief) are on-demand history.

Checks

just check runs the budgets as tests (files ≤150 lines, notes ≤30, scripts parse, shellcheck) and this README's drift test. just doctor checks boot payload, handoffs, hooks and state; just site-check the site.

Build something like this

Want a tool like this for your shop?

We've shipped this kind of thing before. Twenty-minute intro call, no slides.