New · concurrent-work notices

Your agents work in parallel. Now they know it.

Alethic keeps unfinished work in the repository as small, checked records. The next agent gets a cited briefing, including what other branches and worktrees changed in its scope since they split.

git clone https://github.com/shubhambaid/alethic.git
alethic dashboard · 127.0.0.1:4700
The Alethic dashboard: filters on the left, one lane per agent session with its records and inferred handoffs in the middle, and an inspector on the right showing a decision whose evidence changed, compared file by file.
  1. 1
    Filters. Sessions, task, trust level, branch, and only what needs attention.
  2. 2
    Session lanes. One lane per agent session, with the records it wrote.
  3. 3
    Handoffs. Inferred from the order of work, and labeled as inferred.
  4. 4
    Inspector. A decision whose evidence changed, compared file by file.

48 seconds

Two agents, two branches, one briefing.

claude-code changes what signIn() returns on its own branch. codex, on main, gets told before it builds on the old shape. Every terminal line is real output from the concurrent-change evaluation scenario.

  1. The diff on the other branch
  2. The concurrent-work section of alethic resume
  3. show --ref and status --all-branches
  4. The dashboard
82%

of interfering parallel-agent runs recovered, on constructed tasks, when the agent got a message describing the other agent's finished change. Outside research: Passes Alone, Fails Together, arXiv:2609.25396. On real merged pull requests the authors found such interference rare, and say constructed rates don't estimate how often it happens. It did not test Alethic.

42–63%

fewer prompt tokens when a successor agent got a handoff (a raw trace, summary notes, or structured notes) instead of the repository alone; solve rates moved less. Outside research: Handoff Debt, arXiv:2606.02875. It did not test Alethic.

Concurrent-work notices

Passes alone. Fails together. Unless someone says so.

When another branch or worktree in this clone changes files in your task's scope, or records a decision about it, the next briefing says so, before the merge does.

alethic resume · briefing for codex

## Concurrent work on other branches

- feat/token-pair (last commit 2026-09-14) changed 1 file in your scope (src/sessions.js) and recorded 2 items about it since it split from this branch at a11385b.

- [task-token-pair on feat/token-pair] active task by claude-code: Issue a separate access token and refresh token at sign-in. ⚠ unverified

- [dec-auth-sign-in-result on feat/token-pair] Decided on auth.sign-in-result: signIn(userId) returns { access, refresh } instead of a token string; refresh() takes the refresh… ⚠ unverified

- None of this is merged here. Check it before relying on the code it touches; read a record with `alethic show <id> --ref <branch or worktree>`.

Unedited output from the concurrent-change scenario in the evaluation kit: examples/eval/build-scenario.sh concurrent-change alethic, then alethic resume.

01 · since the split

Only what changed after the merge base. Records every branch inherited stay out.

02 · not already here

Squash-merged and cherry-picked work matches HEAD, so it never reads as live.

03 · your privacy rules

Checked with this checkout's manifest. A branch cannot loosen what gets shown.

04 · capped, never cut

Three sources and two record lines at most. The rest is in status --all-branches.

How it works

One task, three agents, no shared chat.

The demo in the repository runs this handoff end to end, and the test suite runs the demo, so it stays accurate.

codex01

Tries, fails, writes it down

Runs the check through Alethic, then leaves a checkpoint: what failed, why, and the next safe step.

alethic receipt run -- npm test
alethic checkpoint create \
  --failed "Delete session rows::the refresh cache still serves them" \
  --next "Compare a token version"
claude-code02

Resumes from the briefing

A fresh session, a different agent. The briefing cites every record, marks what nobody has verified, and skips the approach that already failed.

alethic resume --budget 2500
alethic task claim <id>
alethic receipt run -- npm test
gemini03

Verifies and closes

Runs the full suite against the code that is actually there, validates the records, and closes the task.

alethic receipt run -- npm test
alethic validate
alethic task close <id>

Alethic isn't on npm yet. Clone the repository, run npm install && npm run build && npm link, and try examples/demo/run-demo.sh.

What's new

Every line in a briefing earns its place.

resume · status · shownew

Concurrent-work notices

Other branches and worktrees that changed files in your scope, or recorded decisions about it, since they split. Uncommitted records count, labeled.

validate · resume · mcp

Checked before compiled

Briefings, PR summaries, MCP resources, and the dashboard share one set of checks. Invalid, forged, or secret-bearing records are withheld and reported.

receipt run

Receipts that ran

Alethic observes the check itself and records content digests before and after, so a pass stops applying once that code changes.

resume --budget · show

Bounded briefings

Briefings stay within budget as the ledger grows. Collapsed lines cite at most five records, and alethic show reads any of them in full.

ALETHIC_SESSION

Parallel sessions

Sessions are named, leases are session-aware, and record writes are locked and version-checked, so competing claims surface instead of overwriting.

anchors · verify

Anchored to code

Records fingerprint the files they describe. When that code changes they read as may be stale, even after squash merges and shallow clones.

alethic resume --no-concurrent alethic status --all-branches alethic show <id> --ref <branch> alethic receipt run -- npm test alethic dashboard

From alētheia, Greek for unconcealment

Nothing learned should stay hidden in a closed session.