From c60903727ccfe2c7e6c5488b2aaaf0e325e5b71c Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:03:19 -0400 Subject: [PATCH 01/26] site: reposition the landing page around the open session format New hero tagline, a two-front problem statement (locked-in session logs, then provenance lost at merge), a supported-harness matrix, persona-led scenario cards (cross-harness resume, one query surface), a quick start that leads with cache sync / query / share / resume, and a workspace table covering all published crates. --- site/index.md | 113 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 74 insertions(+), 39 deletions(-) diff --git a/site/index.md b/site/index.md index 1133b72f..37830db3 100644 --- a/site/index.md +++ b/site/index.md @@ -8,9 +8,10 @@ nav: home

Toolpath

- What happens between commits? Toolpath records the - decisions that get lost at merge time. Record, transform, and analyze - sessions in a tool agnostic way. + An open format for coding-agent sessions. One schema + for what an agent did, why, what it tried that didn't work, and what + it cost. Read any harness's sessions, query them together, share + them, resume them anywhere.

@@ -74,33 +75,60 @@ Explore Toolpath documents in your browser. Real path commands, rea ## The problem -When Claude writes code, `rustfmt` reformats it, and a human refines it, git -blame attributes everything to the human's commit. The actual provenance is -lost. Dead ends disappear. Tool contributions collapse into whoever typed `git -commit`. +Every coding agent writes its own undocumented session log. Claude Code +keeps rotating JSONL chains, Codex writes rollout files, Gemini has chat +directories, Copilot an event stream. The session that produced a change +is locked inside the harness that ran it. -Toolpath records **who** changed **what**, **why**, what they tried that didn't -work, and how to verify all of it. +And once the change lands, git loses the rest. When Claude writes code, +`rustfmt` reformats it, and a human refines it, git blame attributes +everything to the human's commit. Dead ends disappear. Tool contributions +collapse into whoever typed `git commit`. + +Toolpath reads every harness's sessions into one open schema that records +**who** changed **what**, **why**, what they tried that didn't work, and +what it cost. + +## Supported harnesses + +| Harness | Read | Write | Resume | +|---|:-:|:-:|:-:| +| Claude Code | ✓ | ✓ | ✓ `claude -r` | +| Gemini CLI | ✓ | ✓ | ✓ `gemini --resume` | +| Codex CLI | ✓ | ✓ | ✓ `codex resume` | +| Copilot CLI | ✓ | ✓ | ✓ `copilot --resume` | +| opencode | ✓ | ✓ | ✓ `opencode --session` | +| Cursor (IDE) | ✓ | ✓ | ✓ opens workspace | +| Pi | ✓ | ✓ | ✓ `pi --session` | + +Read means `path p import`; write means `path p export`; resume means +`path resume`, which projects the session into the harness's on-disk +layout and execs its resume command. Any readable session can be +projected into any writable harness. Git history and GitHub pull +requests import into the same schema, so a session, the PR it became, +and the release that shipped it can share one graph.

When you need it

-

Multi-actor PR

-

Claude wrote the implementation, rustfmt reformatted, you refined the - error messages. Toolpath gives each actor their own step so reviewers see - who did what.

+

Switch harnesses mid-task

+

A session that started in Claude Code can continue in Codex. + path share publishes it; path resume + projects it into the target harness and picks up where you left + off.

-

Rotated AI session

-

Claude Code hit context limits mid-task and rotated to a new session. - Toolpath chains the segments together so no work is lost.

+

One query, every agent

+

Dead ends, token spend, tool calls: path query runs + one jq filter across every session on the machine, whichever agent + wrote it.

-

Release lineage

-

Three teams contributed PRs to the release. Toolpath merges the - provenance into a single Graph so you can trace any line back to the - intent behind it.

+

Multi-actor PR

+

Claude wrote the implementation, rustfmt reformatted, you refined the + error messages. Toolpath gives each actor their own step so reviewers see + who did what.

@@ -223,19 +251,19 @@ No parents (it's the first step). No meta. One file, one perspective. Every docu # Install cargo install path-cli -# Import provenance from this repo's git history (top-level surface is -# the porcelain; plumbing lives under `path p …`) -path p import git --repo . --branch main --no-cache --pretty +# Archive every agent session on this machine (all harnesses, incremental) +path p cache sync -# Visualize it -path p import git --repo . --branch main --no-cache | path p render dot | dot -Tpng -o graph.png +# Query across all of them with a jq filter, whichever agent produced them +path query 'map(select(.dead_end))' +path query 'map(select(.step.actor | startswith("agent:")))' -# Import from Claude conversation logs -path p import claude --project /path/to/project --no-cache --pretty +# Share a session, then resume it in the original harness or a different one +path share +path resume https://pathbase.dev/alex/pathstash/path-pr-42 --harness codex -# Query the local cache with a jaq (jq) filter — dead ends, or steps by an agent -path query 'map(select(.dead_end))' -path query --input doc.json 'map(select(.step.actor | startswith("agent:")))' +# Derive provenance from git history and visualize it +path p import git --repo . --branch main --no-cache | path p render dot | dot -Tpng -o graph.png ```

Toolpath

- An open format for coding-agent sessions. One schema - for what an agent did, why, what it tried that didn't work, and what - it cost. Read any harness's sessions, query them together, share - them, resume them anywhere. + The open session format. What your coding agent did, + why, what it tried, and what it cost, in one portable schema. Read + it, query it, share it, resume it in any harness.

@@ -85,9 +84,9 @@ And once the change lands, git loses the rest. When Claude writes code, everything to the human's commit. Dead ends disappear. Tool contributions collapse into whoever typed `git commit`. -Toolpath reads every harness's sessions into one open schema that records -**who** changed **what**, **why**, what they tried that didn't work, and -what it cost. +Toolpath fixes both. It is the open session format: every harness's +sessions in one portable schema that records **who** changed **what**, +**why**, what they tried that didn't work, and what it cost. ## Supported harnesses From cb221c7a680a7c04e54e708fad17fa1a66191e9b Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:18:39 -0400 Subject: [PATCH 03/26] site: describe the harness matrix in capability terms, not plumbing commands --- site/index.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/site/index.md b/site/index.md index a4f61ed5..3be755c2 100644 --- a/site/index.md +++ b/site/index.md @@ -100,10 +100,10 @@ sessions in one portable schema that records **who** changed **what**, | Cursor (IDE) | ✓ | ✓ | ✓ opens workspace | | Pi | ✓ | ✓ | ✓ `pi --session` | -Read means `path p import`; write means `path p export`; resume means -`path resume`, which projects the session into the harness's on-disk -layout and execs its resume command. Any readable session can be -projected into any writable harness. Git history and GitHub pull +Toolpath reads each harness's native session files and writes them +back. Resuming projects a document into the target harness's own +on-disk layout and hands off to that harness, so any readable session +can continue in any writable harness. Git history and GitHub pull requests import into the same schema, so a session, the PR it became, and the release that shipped it can share one graph. From a6c75f1068e4f21fb15ec8d7819ed17000432293 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:20:50 -0400 Subject: [PATCH 04/26] site: anchor the harness matrix on versioned-open vs fragile-proprietary Frame parsing in and projecting out around the format's stability: harness formats are undocumented and change without notice, so they are treated as boundaries around a versioned schema. --- site/index.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/site/index.md b/site/index.md index 3be755c2..3c94ea79 100644 --- a/site/index.md +++ b/site/index.md @@ -100,12 +100,16 @@ sessions in one portable schema that records **who** changed **what**, | Cursor (IDE) | ✓ | ✓ | ✓ opens workspace | | Pi | ✓ | ✓ | ✓ `pi --session` | -Toolpath reads each harness's native session files and writes them -back. Resuming projects a document into the target harness's own -on-disk layout and hands off to that harness, so any readable session -can continue in any writable harness. Git history and GitHub pull -requests import into the same schema, so a session, the PR it became, -and the release that shipped it can share one graph. +Toolpath itself is open and versioned. The schema is published, and a +document that validates today will validate tomorrow. The harness +formats are neither: they are undocumented, proprietary, and can change +with any release. Toolpath treats them as boundaries. Parsing a session +in produces a stable document you can keep; projecting one out produces +the on-disk layout a target harness expects, whether or not it is the +harness the session started in. Resume is a projection followed by a +handoff. Git history and GitHub pull requests parse into the same +schema, so a session, the PR it became, and the release that shipped it +can share one graph.

When you need it

From c9c48e6d45d74c7c196a40f734f4308954328ed7 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:21:43 -0400 Subject: [PATCH 05/26] site: structure the boundary model as three moves One short paragraph sets the model (versioned center, fragile edges); parse in, project out, and resume build on it as labeled bullets. --- site/index.md | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/site/index.md b/site/index.md index 3c94ea79..36eaa075 100644 --- a/site/index.md +++ b/site/index.md @@ -100,16 +100,24 @@ sessions in one portable schema that records **who** changed **what**, | Cursor (IDE) | ✓ | ✓ | ✓ opens workspace | | Pi | ✓ | ✓ | ✓ `pi --session` | -Toolpath itself is open and versioned. The schema is published, and a -document that validates today will validate tomorrow. The harness -formats are neither: they are undocumented, proprietary, and can change -with any release. Toolpath treats them as boundaries. Parsing a session -in produces a stable document you can keep; projecting one out produces -the on-disk layout a target harness expects, whether or not it is the -harness the session started in. Resume is a projection followed by a -handoff. Git history and GitHub pull requests parse into the same -schema, so a session, the PR it became, and the release that shipped it -can share one graph. +Toolpath is open and versioned: the schema is published, and a document +that validates today will validate tomorrow. Harness formats are +neither. They are undocumented, proprietary, and change without notice. +So Toolpath treats them as boundaries around a stable center, and +everything it does is one of three moves across that boundary: + +- **Parse in.** A session crosses the boundary once and becomes a + stable document you can keep, query, and share. +- **Project out.** A document becomes the on-disk layout a target + harness expects. Any writable harness, not just the one the session + started in. +- **Resume.** A projection followed by a handoff: Toolpath writes the + session where the harness looks for it, then starts the harness on + it. + +Git history and GitHub pull requests parse into the same schema, so a +session, the PR it became, and the release that shipped it can share +one graph.

When you need it

From 9579103cdabea40055a26102881981995824a61c Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:22:30 -0400 Subject: [PATCH 06/26] site: move the harness matrix below the fold Page order becomes problem, scenarios, core objects, then the matrix and boundary model, then the git comparison. --- site/index.md | 62 +++++++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/site/index.md b/site/index.md index 36eaa075..0055cdc7 100644 --- a/site/index.md +++ b/site/index.md @@ -88,37 +88,6 @@ Toolpath fixes both. It is the open session format: every harness's sessions in one portable schema that records **who** changed **what**, **why**, what they tried that didn't work, and what it cost. -## Supported harnesses - -| Harness | Read | Write | Resume | -|---|:-:|:-:|:-:| -| Claude Code | ✓ | ✓ | ✓ `claude -r` | -| Gemini CLI | ✓ | ✓ | ✓ `gemini --resume` | -| Codex CLI | ✓ | ✓ | ✓ `codex resume` | -| Copilot CLI | ✓ | ✓ | ✓ `copilot --resume` | -| opencode | ✓ | ✓ | ✓ `opencode --session` | -| Cursor (IDE) | ✓ | ✓ | ✓ opens workspace | -| Pi | ✓ | ✓ | ✓ `pi --session` | - -Toolpath is open and versioned: the schema is published, and a document -that validates today will validate tomorrow. Harness formats are -neither. They are undocumented, proprietary, and change without notice. -So Toolpath treats them as boundaries around a stable center, and -everything it does is one of three moves across that boundary: - -- **Parse in.** A session crosses the boundary once and becomes a - stable document you can keep, query, and share. -- **Project out.** A document becomes the on-disk layout a target - harness expects. Any writable harness, not just the one the session - started in. -- **Resume.** A projection followed by a handoff: Toolpath writes the - session where the harness looks for it, then starts the harness on - it. - -Git history and GitHub pull requests parse into the same schema, so a -session, the PR it became, and the release that shipped it can share -one graph. -

When you need it

@@ -214,6 +183,37 @@ ancestry of `path.head`.
+## Supported harnesses + +| Harness | Read | Write | Resume | +|---|:-:|:-:|:-:| +| Claude Code | ✓ | ✓ | ✓ `claude -r` | +| Gemini CLI | ✓ | ✓ | ✓ `gemini --resume` | +| Codex CLI | ✓ | ✓ | ✓ `codex resume` | +| Copilot CLI | ✓ | ✓ | ✓ `copilot --resume` | +| opencode | ✓ | ✓ | ✓ `opencode --session` | +| Cursor (IDE) | ✓ | ✓ | ✓ opens workspace | +| Pi | ✓ | ✓ | ✓ `pi --session` | + +Toolpath is open and versioned: the schema is published, and a document +that validates today will validate tomorrow. Harness formats are +neither. They are undocumented, proprietary, and change without notice. +So Toolpath treats them as boundaries around a stable center, and +everything it does is one of three moves across that boundary: + +- **Parse in.** A session crosses the boundary once and becomes a + stable document you can keep, query, and share. +- **Project out.** A document becomes the on-disk layout a target + harness expects. Any writable harness, not just the one the session + started in. +- **Resume.** A projection followed by a handoff: Toolpath writes the + session where the harness looks for it, then starts the harness on + it. + +Git history and GitHub pull requests parse into the same schema, so a +session, the PR it became, and the release that shipped it can share +one graph. + ## What Toolpath adds | What | Git | Toolpath | From 1a73439cdb68e71b803e4aa5c407eb8be266efe2 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:23:07 -0400 Subject: [PATCH 07/26] site: keep the boundary model up top; only the matrix moves down The versioned-open rhetoric and the three moves return to just after the problem statement under a Parse in, project out heading; the harness matrix stays below the fold with a one-line caption. --- site/index.md | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/site/index.md b/site/index.md index 0055cdc7..556a578a 100644 --- a/site/index.md +++ b/site/index.md @@ -88,6 +88,27 @@ Toolpath fixes both. It is the open session format: every harness's sessions in one portable schema that records **who** changed **what**, **why**, what they tried that didn't work, and what it cost. +## Parse in, project out + +Toolpath is open and versioned: the schema is published, and a document +that validates today will validate tomorrow. Harness formats are +neither. They are undocumented, proprietary, and change without notice. +So Toolpath treats them as boundaries around a stable center, and +everything it does is one of three moves across that boundary: + +- **Parse in.** A session crosses the boundary once and becomes a + stable document you can keep, query, and share. +- **Project out.** A document becomes the on-disk layout a target + harness expects. Any writable harness, not just the one the session + started in. +- **Resume.** A projection followed by a handoff: Toolpath writes the + session where the harness looks for it, then starts the harness on + it. + +Git history and GitHub pull requests parse into the same schema, so a +session, the PR it became, and the release that shipped it can share +one graph. +

When you need it

@@ -195,24 +216,8 @@ ancestry of `path.head`. | Cursor (IDE) | ✓ | ✓ | ✓ opens workspace | | Pi | ✓ | ✓ | ✓ `pi --session` | -Toolpath is open and versioned: the schema is published, and a document -that validates today will validate tomorrow. Harness formats are -neither. They are undocumented, proprietary, and change without notice. -So Toolpath treats them as boundaries around a stable center, and -everything it does is one of three moves across that boundary: - -- **Parse in.** A session crosses the boundary once and becomes a - stable document you can keep, query, and share. -- **Project out.** A document becomes the on-disk layout a target - harness expects. Any writable harness, not just the one the session - started in. -- **Resume.** A projection followed by a handoff: Toolpath writes the - session where the harness looks for it, then starts the harness on - it. - -Git history and GitHub pull requests parse into the same schema, so a -session, the PR it became, and the release that shipped it can share -one graph. +Read and write cover each harness's native session files; resume +projects a document into the target harness and hands off to it. ## What Toolpath adds From dbf835ac6507bf06e4893c6ddf998f50d722d3b2 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:24:00 -0400 Subject: [PATCH 08/26] site: keep the boundary model harness-only The git and GitHub one-graph note moves down to the supported-harness section, next to the git comparison. --- site/index.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/site/index.md b/site/index.md index 556a578a..a800fede 100644 --- a/site/index.md +++ b/site/index.md @@ -105,10 +105,6 @@ everything it does is one of three moves across that boundary: session where the harness looks for it, then starts the harness on it. -Git history and GitHub pull requests parse into the same schema, so a -session, the PR it became, and the release that shipped it can share -one graph. -

When you need it

@@ -217,7 +213,10 @@ ancestry of `path.head`. | Pi | ✓ | ✓ | ✓ `pi --session` | Read and write cover each harness's native session files; resume -projects a document into the target harness and hands off to it. +projects a document into the target harness and hands off to it. Git +history and GitHub pull requests parse into the same schema, so a +session, the PR it became, and the release that shipped it can share +one graph. ## What Toolpath adds From 0712ac52019b6f70c571f4fb81b04e586cd346fe Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:25:38 -0400 Subject: [PATCH 09/26] site: move scenarios above the boundary model; sharpen the cards Each card opens on a recognizable moment and closes on the move that fixes it. Also trim the hero's top padding (2xl to lg desktop, xl to md narrow) so the title sits higher. --- site/css/style.css | 4 ++-- site/index.md | 50 +++++++++++++++++++++++----------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/site/css/style.css b/site/css/style.css index ee3a75af..86f4e68d 100644 --- a/site/css/style.css +++ b/site/css/style.css @@ -612,7 +612,7 @@ /* --- Hero --- */ .hero { - padding: var(--space-2xl) 0 var(--space-xl); + padding: var(--space-lg) 0 var(--space-xl); border-bottom: none; margin-bottom: 0; display: flex; @@ -903,7 +903,7 @@ .hero { flex-direction: column; gap: var(--space-md); - padding: var(--space-xl) 0 var(--space-lg); + padding: var(--space-md) 0 var(--space-lg); } .hero h1 { font-size: 1.6rem; diff --git a/site/index.md b/site/index.md index a800fede..d9b284e9 100644 --- a/site/index.md +++ b/site/index.md @@ -88,6 +88,31 @@ Toolpath fixes both. It is the open session format: every harness's sessions in one portable schema that records **who** changed **what**, **why**, what they tried that didn't work, and what it cost. +
+

When you need it

+
+
+

Switch harnesses mid-task

+

Claude Code started the feature. Codex should finish it. Share + the session, resume it in the other harness, and the new agent + starts with everything the old one knew: the intent, the state, + the dead ends already ruled out.

+
+
+

One query, every agent

+

Which sessions burned the most tokens? What did the agent try + before the fix that worked? One jq filter across every session on + the machine answers it, whichever agents wrote the logs.

+
+
+

Multi-actor PR

+

Claude wrote the implementation, rustfmt reformatted it, you + fixed the edge case, and git blame credits only you. Toolpath keeps + a step per actor, so review shows who did what, and why.

+
+
+
+ ## Parse in, project out Toolpath is open and versioned: the schema is published, and a document @@ -105,31 +130,6 @@ everything it does is one of three moves across that boundary: session where the harness looks for it, then starts the harness on it. -
-

When you need it

-
-
-

Switch harnesses mid-task

-

A session that started in Claude Code can continue in Codex. - path share publishes it; path resume - projects it into the target harness and picks up where you left - off.

-
-
-

One query, every agent

-

Dead ends, token spend, tool calls: path query runs - one jq filter across every session on the machine, whichever agent - wrote it.

-
-
-

Multi-actor PR

-

Claude wrote the implementation, rustfmt reformatted, you refined the - error messages. Toolpath gives each actor their own step so reviewers see - who did what.

-
-
-
- ## Three core objects
From e8a3683a478d392b22c9b955764cb5752bad3217 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:27:59 -0400 Subject: [PATCH 10/26] site: lead the scenarios with the Pathbase review argument Replace the harness-switching card with the ship-the-session-with- the-PR case: reviewers get the asked/tried/verified record, so merge- stalling questions are answered before they're asked. --- site/index.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/site/index.md b/site/index.md index d9b284e9..9f6b8cfb 100644 --- a/site/index.md +++ b/site/index.md @@ -92,11 +92,12 @@ sessions in one portable schema that records **who** changed **what**,

When you need it

-

Switch harnesses mid-task

-

Claude Code started the feature. Codex should finish it. Share - the session, resume it in the other harness, and the new agent - starts with everything the old one knew: the intent, the state, - the dead ends already ruled out.

+

Ship the session with the PR

+

An agent wrote the diff, and the diff can't say why. Share the + session to Pathbase and link it + from the PR: reviewers see what was asked, what was tried and + rejected, and how the result was verified. The questions that + stall a merge get answered before they're asked.

One query, every agent

From 2ac72a61527a04562a1f0dee8d2f18ad118af077 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:28:43 -0400 Subject: [PATCH 11/26] site: recast the third scenario card as portability Cross-device, cross-person, cross-harness handoff replaces the multi-actor PR card, whose ground is already covered by the problem statement and the git comparison table. --- site/index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/site/index.md b/site/index.md index 9f6b8cfb..ab8e26f7 100644 --- a/site/index.md +++ b/site/index.md @@ -106,10 +106,11 @@ sessions in one portable schema that records **who** changed **what**, the machine answers it, whichever agents wrote the logs.

-

Multi-actor PR

-

Claude wrote the implementation, rustfmt reformatted it, you - fixed the edge case, and git blame credits only you. Toolpath keeps - a step per actor, so review shows who did what, and why.

+

Pick up where anyone left off

+

Start on your laptop, resume at your desk. Hand a stuck session + to a teammate. Move a Claude Code session into Codex. Wherever it + lands, the next agent starts with everything the last one knew: + the intent, the state, the dead ends already ruled out.

From 1ed4736557eabe8369ff92bfff7a2c1180d3c991 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:29:35 -0400 Subject: [PATCH 12/26] site: benefit-led title for the review card --- site/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/index.md b/site/index.md index ab8e26f7..55a525fb 100644 --- a/site/index.md +++ b/site/index.md @@ -92,7 +92,7 @@ sessions in one portable schema that records **who** changed **what**,

When you need it

-

Ship the session with the PR

+

Merge faster

An agent wrote the diff, and the diff can't say why. Share the session to Pathbase and link it from the PR: reviewers see what was asked, what was tried and From 5880cfee021798fb7d33d282e8330dd2d69ab830 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:30:17 -0400 Subject: [PATCH 13/26] site: title the review card Reduce review time --- site/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/index.md b/site/index.md index 55a525fb..46410aea 100644 --- a/site/index.md +++ b/site/index.md @@ -92,7 +92,7 @@ sessions in one portable schema that records **who** changed **what**,

When you need it

-

Merge faster

+

Reduce review time

An agent wrote the diff, and the diff can't say why. Share the session to Pathbase and link it from the PR: reviewers see what was asked, what was tried and From c57b5dd6533af447de63bf6f095394a08628353e Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:31:34 -0400 Subject: [PATCH 14/26] site: laptop-to-server as the device axis in the portability card --- site/index.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/site/index.md b/site/index.md index 46410aea..142c532c 100644 --- a/site/index.md +++ b/site/index.md @@ -107,10 +107,11 @@ sessions in one portable schema that records **who** changed **what**,

Pick up where anyone left off

-

Start on your laptop, resume at your desk. Hand a stuck session - to a teammate. Move a Claude Code session into Codex. Wherever it - lands, the next agent starts with everything the last one knew: - the intent, the state, the dead ends already ruled out.

+

Start on your laptop, push the agent to a server. Hand a stuck + session to a teammate. Move a Claude Code session into Codex. + Wherever it lands, the next agent starts with everything the last + one knew: the intent, the state, the dead ends already ruled + out.

From 7d2ccdff8c5e82b2575f55240c6f56cd95f6e423 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:32:25 -0400 Subject: [PATCH 15/26] site: name path query in the query card --- site/index.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/site/index.md b/site/index.md index 142c532c..e5c162ee 100644 --- a/site/index.md +++ b/site/index.md @@ -102,8 +102,9 @@ sessions in one portable schema that records **who** changed **what**,

One query, every agent

Which sessions burned the most tokens? What did the agent try - before the fix that worked? One jq filter across every session on - the machine answers it, whichever agents wrote the logs.

+ before the fix that worked? path query answers it with + one jq filter across every session on the machine, whichever + agents wrote the logs.

Pick up where anyone left off

From 3be381c17a2a9d59fa40a5c8de79d70edc202f73 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:36:31 -0400 Subject: [PATCH 16/26] site: differentiate the harness matrix on what users care about Drop the all-checkmark read/write/resume columns; end-to-end support becomes one sentence. The table now answers the two questions a visitor brings: can I trust what it says changed, and what it cost. Cells grade answer quality per harness; Copilot is tagged preview. --- site/index.md | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/site/index.md b/site/index.md index e5c162ee..903fbe2b 100644 --- a/site/index.md +++ b/site/index.md @@ -206,19 +206,22 @@ ancestry of `path.head`. ## Supported harnesses -| Harness | Read | Write | Resume | -|---|:-:|:-:|:-:| -| Claude Code | ✓ | ✓ | ✓ `claude -r` | -| Gemini CLI | ✓ | ✓ | ✓ `gemini --resume` | -| Codex CLI | ✓ | ✓ | ✓ `codex resume` | -| Copilot CLI | ✓ | ✓ | ✓ `copilot --resume` | -| opencode | ✓ | ✓ | ✓ `opencode --session` | -| Cursor (IDE) | ✓ | ✓ | ✓ opens workspace | -| Pi | ✓ | ✓ | ✓ `pi --session` | - -Read and write cover each harness's native session files; resume -projects a document into the target harness and hands off to it. Git -history and GitHub pull requests parse into the same schema, so a +Every harness below is supported end to end: the `path` CLI reads its +sessions, writes them back, and resumes them in place. What varies is +how much detail each harness's own log records. Toolpath recovers +everything the log contains. + +| Harness | What changed | What it cost | +|---|---|---| +| Claude Code | rebuilt from tool calls | exact totals per message | +| Gemini CLI | rebuilt from tool calls | exact totals, reasoning itemized | +| Codex CLI | exact diffs from the log | exact, attributed per step | +| Copilot CLI (preview) | exact diffs from the log | session totals | +| opencode | exact diffs from snapshots | exact totals, reasoning itemized | +| Cursor (IDE) | exact before/after files | only when the log has them | +| Pi | rebuilt from tool calls | only when the log has them | + +Git history and GitHub pull requests parse into the same schema, so a session, the PR it became, and the release that shipped it can share one graph. From ee86f6aca17ade91440e2e77231d25a473ea6cd9 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:39:36 -0400 Subject: [PATCH 17/26] site: replace the harness matrix with names plus outcome claims Readers scan for their harness's name and the exceptions; parse and project quality become one strong claim each, with per-harness gaps delegated to the format notes. --- site/index.md | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/site/index.md b/site/index.md index 903fbe2b..17e40aed 100644 --- a/site/index.md +++ b/site/index.md @@ -206,20 +206,16 @@ ancestry of `path.head`. ## Supported harnesses -Every harness below is supported end to end: the `path` CLI reads its -sessions, writes them back, and resumes them in place. What varies is -how much detail each harness's own log records. Toolpath recovers -everything the log contains. - -| Harness | What changed | What it cost | -|---|---|---| -| Claude Code | rebuilt from tool calls | exact totals per message | -| Gemini CLI | rebuilt from tool calls | exact totals, reasoning itemized | -| Codex CLI | exact diffs from the log | exact, attributed per step | -| Copilot CLI (preview) | exact diffs from the log | session totals | -| opencode | exact diffs from snapshots | exact totals, reasoning itemized | -| Cursor (IDE) | exact before/after files | only when the log has them | -| Pi | rebuilt from tool calls | only when the log has them | +**Claude Code** · **Gemini CLI** · **Codex CLI** · +**Copilot CLI** (preview) · **opencode** · +**Cursor** (the IDE; not yet the cursor-agent CLI) · **Pi** + +Parsing captures the full session: prompts, tool calls, reasoning, +file changes, sub-agent work, token usage. Projecting writes a session +the harness accepts as its own, so it resumes natively. Where a +harness's log genuinely doesn't record something, the gap is +documented in the [format notes]({{ site.repo }}/tree/main/docs/agents/formats) +rather than papered over. Git history and GitHub pull requests parse into the same schema, so a session, the PR it became, and the release that shipped it can share From c69ff6dd1c6d27b04e042831da3bde8ddeb5ae51 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:43:02 -0400 Subject: [PATCH 18/26] site: harness list as a compact two-column table --- site/index.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/site/index.md b/site/index.md index 17e40aed..46f4d7d1 100644 --- a/site/index.md +++ b/site/index.md @@ -206,9 +206,15 @@ ancestry of `path.head`. ## Supported harnesses -**Claude Code** · **Gemini CLI** · **Codex CLI** · -**Copilot CLI** (preview) · **opencode** · -**Cursor** (the IDE; not yet the cursor-agent CLI) · **Pi** +| Harness | Notes | +|---|---| +| Claude Code | | +| Gemini CLI | | +| Codex CLI | | +| Copilot CLI | preview | +| opencode | | +| Cursor | the IDE; not yet the cursor-agent CLI | +| Pi | | Parsing captures the full session: prompts, tool calls, reasoning, file changes, sub-agent work, token usage. Projecting writes a session From 7eb1a72b0e05def4caca02d3124bec0a82b070c2 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 12:49:11 -0400 Subject: [PATCH 19/26] site: harness names as a three-across bulleted grid --- site/css/style.css | 12 ++++++++++++ site/index.md | 18 +++++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/site/css/style.css b/site/css/style.css index 86f4e68d..8fc986f5 100644 --- a/site/css/style.css +++ b/site/css/style.css @@ -376,6 +376,15 @@ color: var(--text-dim); } + /* --- Harness list (3-across bulleted grid) --- */ + .harness-list { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 0.35rem var(--space-lg); + margin: 1rem 0; + padding-left: 1.2rem; + } + /* --- Tables --- */ table { border-collapse: collapse; @@ -900,6 +909,9 @@ html { font-size: 14px; } + .harness-list { + grid-template-columns: 1fr 1fr; + } .hero { flex-direction: column; gap: var(--space-md); diff --git a/site/index.md b/site/index.md index 46f4d7d1..afd866d9 100644 --- a/site/index.md +++ b/site/index.md @@ -206,15 +206,15 @@ ancestry of `path.head`. ## Supported harnesses -| Harness | Notes | -|---|---| -| Claude Code | | -| Gemini CLI | | -| Codex CLI | | -| Copilot CLI | preview | -| opencode | | -| Cursor | the IDE; not yet the cursor-agent CLI | -| Pi | | +
    +
  • Claude Code
  • +
  • Gemini CLI
  • +
  • Codex CLI
  • +
  • Copilot CLI (preview)
  • +
  • opencode
  • +
  • Pi
  • +
  • Cursor (the IDE; not yet the cursor-agent CLI)
  • +
Parsing captures the full session: prompts, tool calls, reasoning, file changes, sub-agent work, token usage. Projecting writes a session From 3bdd4a0ce6de5c37dbf630e98336691e0f1b70bd Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 14:55:54 -0400 Subject: [PATCH 20/26] site: render harness names as stamped mono chips Flex-wrapped labels on the card surface with a copper hover, caveats set small in secondary; replaces the bulleted grid styling. --- site/css/style.css | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/site/css/style.css b/site/css/style.css index 8fc986f5..05ac1add 100644 --- a/site/css/style.css +++ b/site/css/style.css @@ -376,13 +376,31 @@ color: var(--text-dim); } - /* --- Harness list (3-across bulleted grid) --- */ + /* --- Harness list (stamped mono chips) --- */ .harness-list { - display: grid; - grid-template-columns: repeat(3, 1fr); - gap: 0.35rem var(--space-lg); - margin: 1rem 0; - padding-left: 1.2rem; + display: flex; + flex-wrap: wrap; + gap: var(--space-sm); + list-style: none; + margin: 1.25rem 0; + padding: 0; + } + .harness-list li { + font-family: var(--font); + font-size: 0.82rem; + letter-spacing: 0.03em; + padding: 0.45rem 0.8rem; + background: var(--bg-surface); + border: 1px solid var(--border); + transition: border-color 0.15s ease; + } + .harness-list li:hover { + border-color: var(--accent); + } + .harness-list li em { + font-style: normal; + font-size: 0.72rem; + color: var(--text-secondary); } /* --- Tables --- */ @@ -909,9 +927,6 @@ html { font-size: 14px; } - .harness-list { - grid-template-columns: 1fr 1fr; - } .hero { flex-direction: column; gap: var(--space-md); From 848fbf118bb42047f4cabc65c016c4a758ab0d47 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 14:57:52 -0400 Subject: [PATCH 21/26] site: Cursor IDE chip without the CLI postlude --- site/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/index.md b/site/index.md index afd866d9..7d0701d9 100644 --- a/site/index.md +++ b/site/index.md @@ -213,7 +213,7 @@ ancestry of `path.head`.
  • Copilot CLI (preview)
  • opencode
  • Pi
  • -
  • Cursor (the IDE; not yet the cursor-agent CLI)
  • +
  • Cursor IDE
  • Parsing captures the full session: prompts, tool calls, reasoning, From 10f169b240b7829de9b8a7f1ad7ce18c2baaf8a1 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 14:59:26 -0400 Subject: [PATCH 22/26] site: link each harness chip to its format notes --- site/css/style.css | 7 +++++++ site/index.md | 14 +++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/site/css/style.css b/site/css/style.css index 05ac1add..40238052 100644 --- a/site/css/style.css +++ b/site/css/style.css @@ -402,6 +402,13 @@ font-size: 0.72rem; color: var(--text-secondary); } + .harness-list a { + color: inherit; + text-decoration: none; + } + .harness-list li:hover a { + color: var(--accent); + } /* --- Tables --- */ table { diff --git a/site/index.md b/site/index.md index 7d0701d9..757adf48 100644 --- a/site/index.md +++ b/site/index.md @@ -207,13 +207,13 @@ ancestry of `path.head`. ## Supported harnesses Parsing captures the full session: prompts, tool calls, reasoning, From ae434fcad8bd4c5f5a41467d2289aec5d5b99504 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 15:09:50 -0400 Subject: [PATCH 23/26] site: point harness chips at their toolpath crate docs --- site/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/site/index.md b/site/index.md index 757adf48..4ebf438f 100644 --- a/site/index.md +++ b/site/index.md @@ -207,13 +207,13 @@ ancestry of `path.head`. ## Supported harnesses Parsing captures the full session: prompts, tool calls, reasoning, From 435cd0d4e5dca60c1f2e32d581e78bbe720cc3b7 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 15:13:05 -0400 Subject: [PATCH 24/26] site: close the landing page with Go deeper cards Replace the fourteen-row crate table with three pointers: the spec for any-language implementers, the crates for library consumers, and the Claude Code plugin for in-session use. The crates page keeps the full listing. --- site/index.md | 50 ++++++++++++++++++++++++++++---------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/site/index.md b/site/index.md index 4ebf438f..d6002779 100644 --- a/site/index.md +++ b/site/index.md @@ -297,25 +297,31 @@ path p import git --repo . --branch main --no-cache | path p render dot | dot -T -## Workspace - -Toolpath is a Rust workspace of focused crates: - -| Crate | What it does | -| -------------------------------------------------------- | -------------------------------------- | -| [`toolpath`](https://docs.rs/toolpath) | Core types, builders, query API | -| [`toolpath-convo`](https://docs.rs/toolpath-convo) | Provider-agnostic conversation traits | -| [`toolpath-claude`](https://docs.rs/toolpath-claude) | Derive from Claude Code sessions | -| [`toolpath-gemini`](https://docs.rs/toolpath-gemini) | Derive from Gemini CLI sessions | -| [`toolpath-codex`](https://docs.rs/toolpath-codex) | Derive from Codex CLI rollouts | -| [`toolpath-copilot`](https://docs.rs/toolpath-copilot) | Derive from Copilot CLI sessions | -| [`toolpath-opencode`](https://docs.rs/toolpath-opencode) | Derive from opencode databases | -| [`toolpath-cursor`](https://docs.rs/toolpath-cursor) | Derive from Cursor (IDE) composers | -| [`toolpath-pi`](https://docs.rs/toolpath-pi) | Derive from Pi sessions | -| [`toolpath-git`](https://docs.rs/toolpath-git) | Derive from git history | -| [`toolpath-github`](https://docs.rs/toolpath-github) | Derive from GitHub pull requests | -| [`toolpath-dot`](https://docs.rs/toolpath-dot) | Graphviz DOT visualization | -| [`toolpath-md`](https://docs.rs/toolpath-md) | Markdown rendering for LLMs | -| [`path-cli`](https://docs.rs/path-cli) | Unified CLI (`cargo install path-cli`) | - -See [Crates](/crates/) for details, or [docs.rs](https://docs.rs/toolpath) for API reference. +
    +

    Go deeper

    +
    +
    +

    Read the spec

    +

    The format stands alone: an RFC, a + JSON + Schema, and a dozen + example documents. + If Rust isn't your language, implement the schema in yours.

    +
    +
    +

    Build on the crates

    +

    Everything the CLI does is a library call: core types, a + provider crate per harness, renderers for DOT and Markdown. See + the crates or the + API reference.

    +
    +
    +

    Stay in Claude Code

    +

    /plugin install path@toolpath adds + /path:share and /path:query as slash + commands and installs the CLI on first use. See + the + plugin.

    +
    +
    +
    From 2c802b8e6e3205fc94195d3f73ccb64537a5290b Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 15:14:09 -0400 Subject: [PATCH 25/26] site: tighten The problem to the lock-in paragraph Fold format fragility into its closing sentence; the git-blame and fixes-both paragraphs go, since the boundary model and comparison table cover that ground. --- site/index.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/site/index.md b/site/index.md index d6002779..4ae641c2 100644 --- a/site/index.md +++ b/site/index.md @@ -77,16 +77,8 @@ Explore Toolpath documents in your browser. Real path commands, rea Every coding agent writes its own undocumented session log. Claude Code keeps rotating JSONL chains, Codex writes rollout files, Gemini has chat directories, Copilot an event stream. The session that produced a change -is locked inside the harness that ran it. - -And once the change lands, git loses the rest. When Claude writes code, -`rustfmt` reformats it, and a human refines it, git blame attributes -everything to the human's commit. Dead ends disappear. Tool contributions -collapse into whoever typed `git commit`. - -Toolpath fixes both. It is the open session format: every harness's -sessions in one portable schema that records **who** changed **what**, -**why**, what they tried that didn't work, and what it cost. +is locked inside the harness that ran it, and that harness can change +its format at any time.

    When you need it

    From e9cc84a997314bed34d2c90b87fa66f9947ed4c0 Mon Sep 17 00:00:00 2001 From: Alex Kesling Date: Wed, 12 Aug 2026 15:16:04 -0400 Subject: [PATCH 26/26] site: add One format for everyone's tools section The definitional claim returns between the problem and the scenarios, paired with the N-plus-M argument: tools build against the format once, and a new agent needs one parser to join every tool. --- site/index.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/site/index.md b/site/index.md index 4ae641c2..00c1f7fc 100644 --- a/site/index.md +++ b/site/index.md @@ -80,6 +80,18 @@ directories, Copilot an event stream. The session that produced a change is locked inside the harness that ran it, and that harness can change its format at any time. +## One format for everyone's tools + +Toolpath is the open session format: every harness's sessions in one +portable schema that records **who** changed **what**, **why**, what +they tried that didn't work, and what it cost. + +One schema means tooling stops being per-agent. A cost dashboard, a +review surface, a search index, an archive: build it once against the +format and it works with sessions from every supported harness. And +when the next agent ships, one new parser brings it into every tool +you already have. +

    When you need it