{"slug": "keystone-2-0-a-worthy-2-0", "title": "Keystone 2.0 — A Worthy 2.0", "summary": "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.", "body_md": "[https://www.tacoda.dev/keystone/](https://www.tacoda.dev/keystone/)\n\nA 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”?\n\nTwo 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.\n\n2.0 fixes both.\n\nKeystone 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.\n\n2.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.\n\nThis is the part that makes 2.0 feel like a different tool. The old harness/ layout worked. The new .keystone/harness/ layout *teaches*.\n\nkeystone 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.\n\nA 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.\n\nA few more pieces ship in 2.0 that earn their own mention.\n\n**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.\n\n**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.\n\n**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.\n\nThere’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.\n\nOne 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.\n\n```\nbrew install tacoda/tap/keystonekeystone init\n```\n\nThe full walkthrough (every primitive kind, every CLI verb, the MCP tool surface, the dashboard tour) lives at [tacoda.dev/keystone](https://www.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.\n\n2.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.", "url": "https://wpnews.pro/news/keystone-2-0-a-worthy-2-0", "canonical_source": "https://tacoda.medium.com/keystone-2-0-a-worthy-2-0-7c8e043a64f7?source=rss-bf474619cf47------2", "published_at": "2026-06-17 19:41:27+00:00", "updated_at": "2026-06-25 03:47:37.677607+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-infrastructure"], "entities": ["Keystone", "MCP", "HTMX", "SSE", "Claude Code"], "alternates": {"html": "https://wpnews.pro/news/keystone-2-0-a-worthy-2-0", "markdown": "https://wpnews.pro/news/keystone-2-0-a-worthy-2-0.md", "text": "https://wpnews.pro/news/keystone-2-0-a-worthy-2-0.txt", "jsonld": "https://wpnews.pro/news/keystone-2-0-a-worthy-2-0.jsonld"}}