cd /news/ai-agents/keystone-2-0-a-worthy-2-0 · home topics ai-agents article
[ARTICLE · art-38746] src=tacoda.medium.com ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

Keystone 2.0 — A Worthy 2.0

Keystone 2.0, an agent harness framework, introduces a new vocabulary with eleven primitive kinds in two layers and a dashboard for observability. The update includes a built-in MCP server, evals with baseline diffs, and slash-command skills, making the harness visible and maintainable.

read4 min views17 publishedJun 17, 2026

https://www.tacoda.dev/keystone/

A major version should mean something. If you ship 2.0 and a user opens the repo to find the same shape with a new number on it, you have wasted their attention. The shelf is already full of frameworks that did that. So when I started planning the next Keystone release, the question I kept asking was simple: what would make a developer say, out loud, “this is a different tool now”?

Two answers held up. The first was shape. Keystone 1.x had the right ideas (guides, corpus, sensors, actions, playbooks, adapters) but the taxonomy stopped just short of being a real framework vocabulary. A user could not look at the abstractions and immediately know where the next thing they needed lived. The second was observability. The harness was healthy, but you had to take my word for it. There was no operator view. No dashboard. No way to see, at a glance, what the agent saw.

2.0 fixes both.

Keystone is the agent harness framework. That has been the pitch since 1.0. The Rails analogy is the right one. A working set of components, conventions, and slots, so the team building on top isn’t inventing the world from scratch each Monday morning.

2.0 makes the vocabulary explicit. Eleven primitive kinds in two layers: Framework — guide, corpus, sensor, action, playbook, eval, source — and Agent — rule, skill, subagent, command, persona. Every file in .keyston/harness/ carries canonical frontmatter declaring its kind, id, and per-kind required fields. The walker emits a single .keystone/INDEX.json that every tool reads first. You stop searching the directory tree for where a thing lives. You ask the index.

This is the part that makes 2.0 feel like a different tool. The old harness/ layout worked. The new .keystone/harness/ layout teaches.

keystone web serve opens localhost:4773. The dashboard is fourteen pages of insight into the harness you just installed: home, metrics, insights, primitives, policies, investigator, sources, verify, prune, inbox, flywheels, evals, search, graph. Same binary. HTMX plus SSE; fsnotify on .keystone/ swaps fragments when files change. Open it in a browser, edit a guide in your editor, and watch the dashboard update without a refresh.

A harness you can see is a harness you will actually maintain. Before 2.0, “is the harness healthy?” was a question you answered by reading files. Now it’s a tab you keep open.

A few more pieces ship in 2.0 that earn their own mention.

A built-in MCP server. keystone mcp install --agent cladue-code writes .mcp.json in one shot. Twenty-one tools, four prompts, resources for index, primitives, sources, and skills. The same binary that authors the harness now dispatches it to the agent over the model-context-protocol. One source of truth, one runtime contract.

Evals with baseline diffs. A new framework primitive lives at .keystone/harness/evals/<id>/EVAL.md. Static and sensor levels in 2.0; agent level reserved for 2.1. The interesting verb is keystone eval run --baseline <git-ref> — it materializes the ref in a git worktree, runs both sides, and diffs the results into a regression report. Your harness gets its own test suite, and the suite knows what “last week” looked like.

A slash-command surface in 2.0.1. Every Keystone action ships as a /keystone:* skill, projected into .claude/skills/ on init. /keystone:bootstrap, /keystone:learn, /keystone:synthesize, /keystone:audit, /keystone:spec, /keystone:orient, /keystone:review. The agent already knows how to call them. You just say the word.

There’s more: keystone search over every primitive, keystone graph --format mermaid|dot for a relationship view, keystone watch for an fsnotify loop that re-indexes on save, the plugin → policy rename, and the retirement of --harness-root in favor of a fixed framework path. The website has the full tour.

One command. keystone migrate moves harness/ to .keystone/harness/, renames plugins/ to policies/, rewrites keystone.json to the v2 schema, regenerates the index, and refreshes host projections. It is idempotent. Pair it with keystone snapshot save --label pre-2.0 for insurance and the rollback is a single restore away.

brew install tacoda/tap/keystonekeystone init

The full walkthrough (every primitive kind, every CLI verb, the MCP tool surface, the dashboard tour) lives at tacoda.dev/keystone. Keystone is MIT-licensed and agent-agnostic; Claude Code, Cursor, Codex, Aider, Continue, Cline, Goose — whichever one you’ve already settled on, the same harness drives it.

2.0 is the version where the framework shape and the operator view both showed up. 1.0 was the right idea; 2.0 is the one that earns the number.

── more in #ai-agents 4 stories · sorted by recency
── more on @keystone 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/keystone-2-0-a-worth…] indexed:0 read:4min 2026-06-17 ·