Skip to main content
Graph
October 14, 2026
This is a big release. It’s been in progress for months, and it’s something I’m very proud of. As graph matures, it’s becoming clearer what role it can and should play.Graph’s goal is to make it fast, cheap and easy to build robust agent networks, measure them and improve them. Improving doesn’t just mean less hallucination. It means optimizing token usage, speed and accuracy. It means building systems you can run your business on.This release is the first major step toward making that real and there’s a lot more to come.

Agents are first-class

Agents now have their own file format, with its own version, and with it a set of new capabilities for building agent networks that scale.

Handoffs and subagents

An agent can now list the agents it may hand the whole thread to. A handoff passes the context and message history to the new agent.Subagents work like pure functions: they have isolated context and take only a prompt. They’re great for well-scoped, non-deterministic work where a specific outcome is expected. Think of a deep research assistant that has search and crawl tools and does nothing but return its findings.

A taste of our own medicine

The first versions of the graph CLI and workbench shipped built-in agents implemented in Rust. As the system matured, it became clear that those agents should use the same files every other agent, plan and tool uses. The result is a smaller, better-defined binary that focuses on the runtime, and built-in agents that run on the same runtime as everything else.

New tool_drafter and agent_drafter agents

So many agents. The workbench now covers the entire authoring process. Ask it to create an agent, and it works through building the agent and identifying the tools and plans it needs. If something is missing, it offers to write the missing tools too.

Override built-in agents

We spent a lot of time running the new drafting agents through an iterative test harness focused on speed and cost, and thanks to that, they work really well. If you need something the built-ins don’t do, you can override one with your own version. Need a tool for searching your internal wiki? Have the workbench write the tool, then copy the drafting agent and add the tool to it.

Packs

With standard formats for agents, plans and tools, graph now has packs. A pack is any combination of agent, plan and tool files, installed straight from the official packs repository or from your own. Want to write your own? Start from the pack template.

Deferred tool loading

Plan drafting now loads tools as they’re needed. Instead of carrying the whole catalog in its context, it searches for the tools each part of the goal needs, so a large catalog no longer costs context window. That makes context use more efficient and makes smaller models more productive. I’ll soon be adding this capability to all agents.

Decision models

The new System One model paradigm fits many graph workloads, and decision models are now supported through a dedicated decider role.

Decide gates

Gates have a new decide kind that asks the decider role for a well-defined decision. Decide gates are available on exit, route and filter steps.

builtin__decide

The new builtin__decide tool takes some state and a set of typed questions, and returns a calibrated answer to each one.When a decision model is configured, tool search uses it to choose tools, both for plan drafting and for the drafter agents. In our testing, this was significantly more accurate than the keyword lookup it replaces.

decide is now route

The decide step is renamed route, and it now supports routing to any number of branches.
Existing plans may need updating. Copy this prompt into your coding agent in the repository that carries your plans:

Breaking

  • rename llm_call events to model_call and tag each with its model kind
  • workbench agents work on plans through the same artifact tools as agents and tools, with 17 workbench tools folded into 7 (#146)
  • plans state how they finish with a required finish key, success exits return the plan’s result shape, and failed plan calls return one standard error — plan version 2 files need finish; plan-tool results for exited runs and empty-data failures changed shape.
  • the github and slack tools leave the binary for installable packs, and [tools].packs becomes [packs.<name>] entries (#163) — the github and slack tools are no longer part of graph.

Added

  • config version 4 adds the systemone provider type, the decider role, and context_window
  • a systemone decision provider speaking the Jev wire API, routed to decision roles with startup kind checks, failover, context_window, and decision traces
  • named agent files with graph agents list, show, validate and migrate
  • one override model: built-in plans and pack tools are replaced by files that name them, and show reports the source
  • plan drafting runs as built-in plans you can override, plan steps can call named agents, and decide and exit steps work inside any body
  • threads keep every agent’s history as authored entries, with an owner and an active agent
  • graph chat [agent] and graph ask —agent run named agents that hand off and delegate
  • the workbench runs a network of agents that draft, load and edit plans with you
  • drafting offers only the tools a plan needs, found by a built-in search_tools plan that asks a decision model when one is configured
  • compose_plan drafts a whole plan in one call from the tools search finds, stops when no tool can do part of the goal, and fixes only the steps that fail validation
  • builtin__reshape accepts a single template string and returns that value, and compose_plan rejects references to fields a tool’s declared or observed output doesn’t have
  • map steps take onError: skip, leaving failed items out of results and listing them in failed instead of failing the plan
  • the workbench answers an ask step in a form generated from its answer schema, with a question per field, and an ask step’s output_schema can be built from earlier results
  • graph plan draft, MCP graph_plan_draft and the workbench draft new plans with compose_plan, which asks about guessed values in one form and can ask for tools it wasn’t shown; the step-by-step drafting overlay and its draft_* progress events are gone
  • built-in tool_drafter and agent_drafter write tools and agents with you, test-running a tool before it is saved, and drafting one in the workbench is a mode with the draft in the pane
  • graph wb opens the workbench at a front desk, graph wb plan|agent|tool go straight to a mode, orchestrator is renamed plan_drafter, and tool env values take ${VAR:-default}
  • plan validate and plan run check literal step inputs against the called tool’s input schema
  • infer, decide and reshape are plain built-in tools instead of the always-on llm and data packs (#149)
  • installed packs load per config layer and serve their tools, plans and agents under <pack><kind><name> names (#152)
  • pack include/exclude narrow a pack’s public interface, so only the pack’s own plans and agents can call excluded items (#153)
  • graph pack add, list, update and remove install and manage packs from git as plain copies per config layer (#156)
  • packs declare graph, OS, binary, env and MCP server requirements that install, load, config check and runs enforce (#160)
  • graph pack new, check, run, test and release let authors scaffold, validate, try, migration-test and semver-tag a pack (#161)
  • graph pack update —major crosses majors one at a time, running each major’s migration as a dry run, then applying it once confirmed (#162)
  • CLI commands use singular nouns (graph tool, agent, thread, shape), with plural spellings kept as hidden aliases (#165)
  • packs live in subdirectories of a repo with per-pack tags, and bare names install from tylerdavis/graph-packs (#166)
  • graph pack add, update and list refuse a release tag that moved since it was installed (#168)
  • graph pack check requires pack.toml to declare the systems a pack runs on (#170)

Changed

  • share one task-agent loop between the agent step and named agents; add stop tools, call sites and allowlisted registries
  • pack remove restores a set-aside copy through one type, and refusals without problems use one helper (#159)

Documentation

  • rebuild the docs around agents, plans and tools, with reference pages generated from the code and fuller —help text (#154)
  • the workbench screenshots show the github pack’s tool names, and a stale screenshot fails the tests (#169)
  • examples call the github pack’s tools as github__tool__<name>, and this repo’s checks run on the installed pack (#171)
  • a Packs section explains installing, updating and writing packs, with a pack.toml reference generated from its schema (#172)

Fixed

  • builtin__infer runs as a non-interactive plan step, reporting empty data instead of asking for it
  • gh_pr_ticket no longer reads prose such as “every 2” as a ticket, matching uppercase keys in titles and bodies and skipping standard names like UTF-8
  • graph pack commands have help text for every argument and pages in the generated CLI reference (#158)
Config
October 14, 2026
Existing plans may need updating. Copy this prompt into your coding agent in the repository that carries your plans:

Breaking

  • draft outlines from a coarse outliner role and a sectioned catalog; MCP servers take a description (config version 4) — config version 4 (graph config migrate)
Plan
October 14, 2026

Breaking

  • decide gates on exit, route and filter steps, and route steps with named cases chosen by a decision model; version 1 decide steps migrate to route — plan version 2 (graph plan migrate)
Tool
October 14, 2026

Breaking

  • decision tools and builtin__decide, answered by a decision model — tool version 2 (graph tools migrate)
Agent
October 14, 2026
  • Introduced with graph v0.16.0.
Store
October 14, 2026

Breaking

  • opening a data directory written before agents converts its threads to entry logs in place, and older graph versions then refuse it — store version 2
Pack
October 14, 2026

Breaking

  • pack.toml and packs.lock are versioned file formats, and config accepts [packs.<name>] entries (#150) — pack version 1 and lock version 1 are new file formats
Lock
October 14, 2026
  • Introduced with graph v0.16.0.
Graph
September 24, 2026

Edit plans visually from the workbench

The plan workbench’s plan tab now lets you edit steps and plan metadata directly in a form, without hand-editing YAML.

OTLP telemetry export for run traces and logs

Config now supports a [telemetry] section for exporting run traces and logs via OTLP. This is a breaking config format change: config moves to version 3, and existing config files must be migrated with graph config migrate.
Existing plans may need updating. Copy this prompt into your coding agent in the repository that carries your plans:

Added

  • edit steps and plan metadata in a form from the workbench plan tab (#128)
Config
September 24, 2026

Breaking

  • OTLP telemetry export for run traces and logs via [telemetry] (config version 3) (#129) — config version 3 (graph config migrate)
Graph
September 23, 2026

Added support for config v2

Config v2 now treats all models uniformly: the [models.<role>] table replaces the old fixed role slots and [models.named] section. This is a config format change that requires a migration. See the Config v2 entry for details.
Config
September 23, 2026

Every model is now a role

Config now treats all models uniformly: the [models.<role>] table replaces the old fixed role slots and [models.named] section. This is a config format change (version 2) that requires migration.
Existing plans may need updating. Copy this prompt into your coding agent in the repository that carries your plans:

Breaking

  • every model is a role: [models.<role>] replaces the fixed role slots and [models.named] (#125) — config version 2 (graph config migrate)
Graph
September 2, 2026

Configuration file schemas are now versioned

Config, plan, tool, and store documents each carry their own schema version (starting at v1), separate from the graph binary version. This lets file formats evolve on their own schedule going forward, while ensuring your binary remains up to date.
Existing plans may need updating. Copy this prompt into your coding agent in the repository that carries your plans:

Added

  • version the config, plan, tool, and store file formats independently of the binary (#121)

Fixed

  • keep the tool rules out of [prompts].workbench so an override can’t break the agent (#120)
Config
September 2, 2026
  • Introduced with graph v0.13.0.
Plan
September 2, 2026
  • Introduced with graph v0.13.0.
Tool
September 2, 2026
  • Introduced with graph v0.13.0.
Store
September 2, 2026
  • Introduced with graph v0.13.0.
Graph
August 12, 2026

Know what a run costs

Every run now reports the calls and tokens it spent, and the dollar cost too once you configure [pricing] — with no pricing table, you get token counts and no invented figures. The numbers reach you at the seams you already read: --json envelopes, an MCP body field, a line on stderr under a TTY, and two JSONL events.

Agent steps that answer even when the budget runs out

An agent step is now shown its output_schema up front and spends its final round producing a conforming result, so exhausting max_iterations degrades to a partial answer instead of an empty one. Prompt caching is on by default rather than opt-in per call site.

See what each step promises

The plan workbench’s detail pane shows each step’s output contract, so you can check what a step is expected to produce without leaving the TUI.

A missing key says so at first use

A missing environment variable is now explained when something first needs it, instead of failing silently and leaving you to guess which credential was absent.

Added

  • show each step’s output contract in the workbench detail pane
  • token usage and cost tracking, prompt caching, and a turn-key agent step (#115)

Documentation

  • restore themed prose in the v0.11.0 changelog summary
  • add use-graph, the general entry-point skill (#107)

Fixed

  • explain missing env vars at first use instead of dying silently
Graph
August 4, 2026

Keep review comments alive across runs

The github pack adds gh_pr_review_threads and gh_pr_thread_sync, so a plan can read a pull request’s existing review threads and update them in place. A plan that runs on every push can carry its findings forward — resolving what got fixed and leaving what still stands — instead of posting the same comment again.

Added

  • add gh_pr_review_threads and gh_pr_thread_sync to the github pack

Documentation

  • publish a release changelog page, generated in lockstep with releases
  • correct the escaping-mechanism comment in cliff-docs.toml
  • infer a per-release summary and migration prompt via a graph plan
  • keep inferred summaries MDX-safe
  • drop the changelog page description and intro line
  • replace the changelog shell scripts with graph plans
  • place the migration prompt between summary and commit lists
  • restyle changelog summaries as themed prose
  • reference changelog snippets instead of embedding them

Fixed

  • release script keeps the docs release_version in step
Graph
August 4, 2026

Run plans from anywhere

graph now serves its plans over MCP, so editors, agents, and other MCP clients can run and author plans without touching the terminal.

Smarter control flow

Plans can pause to ask a person for input — and declare what happens when nobody is there — and can narrow a list down before working through it, which keeps automations from tripping over items they can’t handle.

Sharper diff awareness

Changed-file listings now say what happened to each file, not just that it changed.

A cleaner scripting surface

Command output is structured and consistent across the CLI; scripts that scraped the old text output should switch to --json.
Existing plans may need updating. Copy this prompt into your coding agent in the repository that carries your plans:

Added

  • add —json to graph tools list
  • add —json to graph tools show
  • serve graph’s plans and authoring commands over MCP
  • stream progress and honor cancellation
  • ask steps — put a question to the user from inside a plan
  • filter steps — partition a list with a per-item gate
  • per-file change objects on git_changed_files

Changed

  • return outcomes from the plan commands instead of printing
  • convert the remaining commands and make —json uniform

Documentation

  • add a plan authoring skill for the CLI commands
  • point the authoring loop and quickstart at the plan authoring skill
  • make the authoring skill draft-first
  • frame the skill around the whole plan lifecycle
  • document graph as an MCP server
  • close out the MCP roadmap and point the skill at the server
  • explain why the draft arm cannot use and_then

Fixed

  • write every plan field in snake_case, at every depth
  • remove revision-by-redraft from both authoring surfaces
  • don’t load a project the user never pointed at
  • honour the documented ask retry budget
  • serve the control steps from the tool catalog
  • keep MCP writes inside the server’s own config layer
Graph
July 30, 2026

Ride out provider outages

Model entries can declare fallbacks, so a failing provider fails over to the next instead of failing your run.

Let a step figure it out

The new agent step runs a bounded tool-calling loop inside a plan for the parts you cannot script ahead of time — and still returns typed results the rest of the plan can reference.

More places to plug in

GitHub release and log tools, a Slack pack for posting messages, and full plan management from the command line.

Breaking

  • draft plans one validated step at a time, always — a config carrying [planner] now fails to load;

Added

  • model fallbacks for provider outage failover (#67)
  • add the agent control step
  • add gh_release and git_log to the github pack
  • add slack pack with slack_post_message
  • manage plans from the command line

Changed

  • lift plan authoring rules into graph-core

Documentation

  • rework intro/quickstart, add project-setup skill, tidy release asset names (#65)
  • escape curly braces in template-language frontmatter (#66)
  • reorganize the docs — plans-first IA, one owner per fact
  • coherence pass after the reorg — catalog table parity, models links
  • restructure the workbench page; split the exit-gates opener
  • generate workbench screenshots from executed sessions
  • inline Frame embeds — Mintlify snippets don’t interpolate props into JSX attributes
  • place workbench screenshots across the reorganized pages
  • rewrite quickstart manual setup to mirror the fast path
  • replace the introduction’s plan-run snippet with a workbench hero shot
  • document the agent control step
  • document the plan authoring commands
  • ship an app manifest and a one-click create-app button

Fixed

  • show never-run steps as skipped after a fired exit gate
  • add fallbacks field to the shots harness ModelChoice
  • close the agent step’s validation, path, and boundary gaps
  • carry exit codes back to main instead of exiting in place
  • keep plan list and validate off stdout
  • stop re-rendering caller-supplied reshape shapes
Graph
July 17, 2026
A plan’s root node in the workbench now shows its metadata, inputs, and finish up front, alongside a handful of scrolling and selection fixes.

Added

  • show plan metadata, input schema, and finish on the root node (#61)

Fixed

  • wheel over steps/tool list moves selection (#60)
  • gh_pr_ticket default pattern requires a separator (#62)
  • wheel scrolls the steps/tool list view (#63)
  • hide list highlight when selection scrolls out of view (#64)
Graph
July 17, 2026

Steadier plan drafting

Drafts are built incrementally — an outline, then one validated step at a time — and invalid drafts can be edited or repaired instead of discarded.

Pick the right model per call

Prompt tools, inference steps, and gates can each name a model, so cheap checks stay cheap and hard calls get the strong model.

Sturdier CI reviews

The PR-review building blocks grew marker-keyed comments, ticket extraction, and file reading at a ref, and tool resolution is now checked before a plan spends a single step.

Added

  • write the built-in system prompts into the config init starter (#44)
  • steer check plans to explicit exits and list inference to map (#45)
  • named models selectable from prompt tools and builtin__infer (#46)
  • marker-keyed PR comments, ticket extraction, and file/grep at a ref (#47)
  • catalog-aware tool resolution before any step runs (#49)
  • incremental draft strategy — outline, then one validated step per inference (#50)
  • edit input_schema, requires_servers, and silent finish via update_metadata (#51)
  • mouse support — click to focus, switch tabs, select rows, wheel-scroll (#55)
  • add data pack with builtin__reshape for shape projection (#58)
  • optional per-gate model override on exit/decide infer (#59)

Documentation

  • add graph-github-actions-setup skill for coding agents (#42)

Fixed

  • render sub-text and borders with the terminal’s dim modifier (#43)
  • PR reviewer no longer emits absence false positives on truncated diffs (#40)
  • paste literally, edit invalid drafts, repair bad drafts, fence agent-only tools (#48)
  • separate outline and drafting phases in workbench trace (#52)
  • show span start time on the left and duration on the right; surface outline call duration (#53)
  • order trace chronologically so draft_plan brackets its phases; fix outline duration origin (#54)
  • carry failing tool error into aborted run result (#56)
  • default output_schema type + reset workbench iteration budget on progress (#57)
Graph
July 15, 2026

A workbench for plans

A dual-pane TUI for drafting and test-running plans: research the project, make precise step-level edits, and watch runs unfold without leaving the terminal.

Simpler storage

Plan and thread state now lives in plain files — nothing to install or run alongside graph.

Projects carry their setup

Config discovery is project-first, so a repository can ship its own graph setup, and step ids can be any descriptive identifier.

Breaking

  • replace LadybugDB with file-based storage (#24)

Added

  • plan workbench — dual-pane TUI for drafting and test-running plans (#25)
  • workbench debug logging to <data_dir>/workbench.log (#28)
  • workbench step view shows body sub-steps and the finish stage (#30)
  • workbench read_file/grep/glob tools for researching the project (#29)
  • step ids are any unique identifier, not just E-numbers (#31)
  • workbench tools for precise plan edits: update_metadata, add_step, update_step, delete_step (#33)
  • [prompts] config overrides for the chat prompt and workbench addendum (#37)
  • project-first config — config init and default search paths target ./.graph (#38)
  • draft safety, control-step guidance, turn-failure recovery (#36)

Documentation

  • cookbook covers a custom bot identity for the CI reviewer (#23)
  • add @emichy to special thanks (#26)
  • require worktrees for all coding work in CLAUDE.md (#39)

Fixed

  • scrolling reaches wrapped content; PgUp/PgDn is the one scroll binding (#27)
  • draft saves can no longer overwrite a different plan’s file (#32)
  • section-scoped bare keys are not roots in plan validation (#34)
  • a broken plan file no longer takes down the whole catalog (#35)
Graph
July 11, 2026

Branch execution with decide steps

Plans can now include decide steps that fork execution into then and else branches based on a gate, letting you author plans with conditional logic instead of separate plans per outcome. The gate keyword for a decide step is if.

Iterate over lists with map and reduce

map and reduce steps run a body of steps over each item in a list, so repetitive per-item work no longer needs to be unrolled manually in the plan.

Inline PR review comments

The pr_review tool now anchors its findings as inline diff comments on the pull request, rather than only surfacing them elsewhere.

Added

  • decide steps fork plan execution into then/else branches (#15)
  • decide gates read if/then/else — the logical gate keyword is now if (#17)
  • map and reduce steps iterate a body over a list (#18)
  • pr_review anchors findings as inline diff comments (#20)
Graph
July 10, 2026

Clearer tool listings

graph tools list now groups related tools together and displays them in a tighter, easier-to-scan layout.

Added

  • grouped listing for graph tools list, tighter layout (#14)
Graph
July 10, 2026
graph mcp tools now groups its output by server, and release publishing is atomic — assets can no longer go missing from a published release.

Added

  • group graph mcp tools output by server (#11)

Documentation

  • rewrite README, add MIT license (#12)
Graph
July 10, 2026

Run graph without building it

Published container images make graph drop-in for CI and containerized environments, and search extensions are vendored into the binary so nothing needs installing alongside it.

Built-ins, organized

Bundled tools now live under one namespace with a dedicated docs page, and new cookbook sections collect worked examples by solution.

Added

  • publish a container image with each release (#4)
  • vendor lbug fts/vector extensions into the binary (#9)
  • builtin__ namespace for bundled tool packs, Built-ins docs page (#10)

Documentation

  • CI cookbook — the dogfooded plans and workflow, annotated (#7)
  • cookbook as a section — pages by solution category (#8)
Graph
July 10, 2026

Bundled tool packs and CI failure annotations

graph now ships with tool packs included, so plans can call common tools without separate setup. Running plans in GitHub Actions also produces failure annotations, making it easier to spot what went wrong directly in the workflow run.

Added

  • bundled tool packs and GitHub Actions failure annotations (#2)

Fixed

  • portable version bump in release.sh; align workspace version with v0.2.0
Graph
July 10, 2026

End plans early, on purpose

Plans can now use exit gates to stop execution with an explicit success or error state, instead of running to the end or failing on an unrelated step.

Build plans from other plans

Plans can now call other plans, so you can compose larger workflows out of smaller, reusable pieces rather than duplicating steps across files.

Added

  • exit gates — end a plan early with success or error state
  • plan composability — plans call plans

Documentation

  • bring CLAUDE.md current — composability, exit gates, storage, build story, conventions
Graph
July 10, 2026
The first release of graph: author plans — YAML pipelines of tool calls with data flowing between steps — validate them, and run them from the terminal. A built-in agent loop backs ask and chat for conversational work, tools come from your own definitions or any MCP server, and configuration is layered so a repository can carry its own setup.

Added

  • ladybug spike (validated) + layered config crate
  • clap command tree, tracing, working config show/init/path
  • provider trait, Anthropic + OpenAI-compat providers, structured output with repair, role router
  • rmcp manager — stdio + streamable-http transports, lazy connect, tool discovery with namespacing and overrides, ToolRegistry impl
  • ReAct loop + ask/chat/tools commands
  • thread persistence + observed-shape cache (phase 3)
  • unify thread continuation under —thread
  • strict typed template engine for the {{Ex.path}} dialect
  • plan pipeline — planner/validation/execution/solver with bus-driven replanning
  • YAML plan docs, plans-as-tools, plan_and_execute (phase 4 complete)
  • JSON input documents for plan run and tools test
  • nested tool display, pipeline progress, streamed solver
  • optional solver — plans can render structured output or run silently
  • backend abstraction — dyn Store everywhere, memory backend
  • user-defined tools — exec, cypher, and prompt kinds
  • schema defaults for plan/tool inputs; fmt fixes
  • codify release process — semver bump, git-cliff changelog, tag-driven binaries
  • run traces — tools_used in ask envelope, GRAPH_EVENTS=jsonl event stream

Documentation

  • Mintlify documentation site (25 pages) + CLAUDE.md
  • point repository URLs at the real remote
  • fix clone directory in installation
  • touch content to trigger first build
  • remove build-trigger scratch line
  • plans-first framing of core concepts
  • quickstart — freeze-into-a-plan step
  • plan-first nav order and README framing; drop unverified heading anchors

Fixed

  • shut down servers before runtime teardown; silence child stderr
  • read the shape cache at each planning attempt
  • steps_executed excludes the input root
  • replace RUSTFLAGS with per-target build.rs link directives