Platform roadmap

August 13, 2026 · View on GitHub

Status: living plan (2026-07)
North star: a versioned, empirical platform for how production agents are composed, run, observed, and improved.

This document turns the six expansion pillars into a ship sequence: what we build, in what order, with exit criteria and package ownership. For the version checklist, see ROADMAP.md.

loop-engineering  →  harness-foundry  →  outerloop
   (patterns)         (runtime + platform)  (governance)

Why this order

#PillarProduct claimDepends on
AFinish the kernelSessions are real production loops(current v0.4)
4Real composition surfaceAgents can use real tools/models/hostsA
1npm of harnessesStacks/primitives are installable & shareableA + catalogue depth
3Evolve that learnsHarnesses improve from many runsA + traces + locks
5Observability productTraces are debuggable, not just filesA + richer events
2Reliability control planeMulti-session / fleet behaviour4 + outerloop coordination
6Harness-benchStacks are comparable under fixed suites3 + 5

Principle: catalogue + composition first (things people can use), then learning + observability (things that compound), then fleet + bench (platform tier).

Do not start with hosted SaaS, multi-agent orchestration, or L3 auto-tune. Those need a dense primitive catalogue and trustworthy traces.


Pillar map (what “done” looks like)

Pillar 1 — The npm of harnesses

Done when: a team can publish, install, pin, and upgrade a stack the way they pin npm packages.

foundry registry login
foundry add stack @acme/security-reviewer@1.2.0
foundry add primitive recovery/narrow-scope@2.0.0
foundry lock            # refresh digests
foundry upgrade --dry-run

Artifacts

ArtifactRole
Primitive package (YAML + optional hook)Smallest install unit
Stack packageCurated composition + defaults
Registry indexLocal (file:) then GitHub/npm-backed
stack.lock digestsIntegrity + reproducibility

Non-goal: a separate commercial marketplace before the open registry protocol works offline.


Pillar 2 — Session runner → reliability control plane

Done when: multiple Foundry sessions can share policy, detect collisions, and hand off work without ad-hoc scripts.

foundry fleet init
foundry run --goal "..." --role implementer --register
foundry fleet status
foundry fleet check     # collisions / budget / overlapping paths

Leverage existing work

  • outerloop coordination (registry, collision)
  • outerloop policy / attention for routing
  • fleet-engineering patterns as stack roles, not a new monorepo

Non-goal: full distributed orchestration / Kubernetes replacement.


Pillar 3 — Evolve that actually learns

Done when: proposals cite aggregates across sessions (and optional bench runs), not only single-trace event counts.

foundry evolve report --session <id>          # L1 (exists)
foundry evolve report --since 7d              # cross-session
foundry evolve proposal --since 7d            # evidence-backed stack diff
foundry evolve apply --proposal <id>          # human gate required
foundry evolve auto --within guardrails.yaml  # L3 (later, opt-in)

Learning ladder

LevelModeShip
L1Report-only✅ exists (deepen rules)
L2Proposal + human applyv0.4 apply → v0.7 multi-session
L3Auto-tune within guardrailsv0.8+ opt-in only

Non-goal: unbounded auto-edit of stack.yaml without gates.


Pillar 4 — Real composition surface

Done when: a stack can wire real models, real MCP servers, policy limits, and a host bridge that is more than a file drop.

SurfaceTarget
ModelsAnthropic ✅, mock ✅, OpenAI, Grok/xAI, OpenAI-compatible base URL
ToolsBuiltins ✅, MCP stdio (then SSE)
PolicyAllowlist paths/commands, secret scrub, network scope primitives
Memory/skillsPrimitives that load skill files / memory-engineering adapters
HostsCursor, Claude Code, Grok Build — bridge that records host turns into Foundry traces

Pillar 5 — Observability product

Done when: a developer can answer “what happened?” and “which stack is better?” without reading raw JSONL by hand.

foundry sessions list
foundry trace show --session <id>
foundry trace replay --session <id>
foundry compare --left <sessionA> --right <sessionB>
foundry dashboard          # local TUI or serve (reuse outerloop patterns)

Non-goal (v1): hosted multi-tenant cloud dashboard. Local-first; optional later sync is outerloop-shaped, not Foundry-core.


Pillar 6 — Harness-bench

Done when: stacks are scored on fixed suites so “weaker model + better harness” is measurable.

foundry bench init --suite smoke
foundry bench run --stack implementer --suite smoke
foundry bench compare --baseline minimal --candidate implementer
foundry evolve report --from-bench <run-id>

Suite kinds (start small)

  1. smoke — mock model, wiring, budgets, recovery hooks
  2. implementer-fixture — fixed repo fixture + failing test to fix
  3. tool-use — MCP + builtins correctness
  4. (later) external suite adapters (SWE-lite style) as optional plugins

Versioned ship plan

v0.4.x — Finish the kernel (now → 1–2 weeks)

Goal: production-credible single-session loop. Close open v0.4 items.

WorkPackage(s)Exit criteria
Ship turn-loop work already in treeruntime, interface, coreCI green; pnpm demo shows tool loop
OpenAI (+ OpenAI-compatible) adapterinterfacemodel/openai primitive; mock parity for tools
MCP stdio transportmcp, runtimelistTools/callTool against a real server in CI
foundry evolve applyevolve, cliRequires explicit --yes + writes proposal audit; no silent apply
Trace completenesstrace, runtimeDocs list all event types; schema tests cover new types
Docs + CHANGELOGQUICKSTART shows tool loop + MCP example

Push: npm @cobusgreyling/harness-foundry@0.4.x, demo scripts, GitHub release notes.


v0.5 — Catalogue depth + composition (2–4 weeks)

Goal: enough primitives/stacks that Foundry feels like a product, not a sample repo. Pillar 4 bulk + foundation for pillar 1.

Catalogue target

LayerAdd (examples)Count target
Interfacemodel/openai, model/openai-compatible, model/grok≥ 5 model primitives
Compositiontools/mcp-stdio, tools/search-grep, context/agents-md, context/skills-dir, memory/file-log≥ 10 composition
Executioncontrol/token-budget-50k, control/tool-call-cap-20, sandbox/readonly, policy/path-allowlist≥ 8 control/sandbox
Reliabilityrecovery/narrow-scope, observability/tool-timeline, emit/outerloop-evidence (harden)≥ 8 reliability

Stacks (≥ 6 presets)

StackPersona
minimalCI smoke (exists)
implementerWrite + verify (exists)
reviewerRead-only review / critique
triageLE daily-triage default
ci-sweeperLE CI pattern
with-outerloopFull governance seam (promote example → stack)
mcp-workerMCP-first tool loop

Runtime / CLI

  • Primitive authoring guide: docs/primitive-spec.md (schema, layers, activation hooks)
  • foundry primitives show <id>
  • Config validation per primitive (zod from YAML configSchema optional field)
  • Policy primitives enforced in tools.ts / run_command
  • Host bridge: record host-invoked turns into session traces (Cursor + Claude Code at least)

Exit criteria

  • foundry primitives list ≥ 25
  • foundry init --from <name> works for all presets
  • At least one example uses real MCP (e.g. filesystem server)
  • vs-alternatives + showcase updated

Push: 0.5.0 npm; blog/showcase “compose a harness like a lockfile.”


v0.6 — Registry: the npm of harnesses (3–4 weeks)

Goal: Pillar 1. Installable stacks/primitives with digests.

WorkDetail
Local registry~/.foundry/registry or project .foundry/vendor/
Package layoutfoundry-primitive.yaml / foundry-stack.yaml + files
CLIfoundry add, foundry remove, foundry publish --dry-run, foundry search
Remote v1Git URL / npm package that re-exports catalogue; later GH packages
Lock integrityFail run if lock digests mismatch and --frozen-lock set
LE funnelloop-init --with-foundry installs named stack from registry alias

Package (new): @cobusgreyling/harness-foundry-registry (or grow compose).

Exit criteria

  • Third-party-style stack installable from git without monorepo clone
  • Lockfile freeze mode in foundry-gate CI action
  • Docs: “Publish a stack” tutorial

Push: 0.6.0; seed 3 public stacks under @cobusgreyling/*.


v0.7 — Evolve that learns (3–4 weeks)

Goal: Pillar 3 (L2 multi-session). Pillar 5 starts (local inspect).

WorkDetail
Session indexSQLite or JSON index under .foundry/sessions/index.json
AggregatorsError rate, budget exceed rate, recovery rate, verify fail, tool mix
Cross-session reportevolve report --since 7d / --stack implementer
Evidence-backed proposalsEach addition cites session IDs + event counts
Apply audit trailApplied proposals written under .foundry/evolve/applied/
Guardrails schemaWhich primitives may auto-change later (prep for L3)
Trace UXtrace replay (ordered narrative), sessions inspect TUI (text-first)

Package: deepen evolve; optional packages/observe if TUI grows.

Exit criteria

  • Running 10 mock sessions produces a multi-session report with ≥1 non-trivial finding
  • Proposal cannot apply without human confirmation
  • outerloop emit still optional and unchanged in ownership

Push: 0.7.0; story: “harness diffs with evidence.”


v0.8 — Control plane + L3 opt-in (4–6 weeks)

Goal: Pillar 2 core + cautious L3.

WorkDetail
Fleet registrySession register/list/status; path claim sets
Collision checkReuse outerloop coordination concepts; Foundry CLI surface
Shared budgetsProject-level token/tool budgets across concurrent sessions
Role stacksrole: implementer | reviewer | triage → stack mapping
Handoff primitivecomposition/handoff-manifest writes artifacts for next role
L3 auto-tuneOnly inside guardrails.yaml; default off; audit every change
Grok Build hostFirst-class host adapter alongside Cursor / Claude Code

Exit criteria

  • Two parallel sessions cannot claim the same write path without fleet check warning
  • L3 demo requires explicit env/flag; CI proves default is off
  • Docs: multi-agent = multiple stacks + coordination, not one mega-agent

Push: 0.8.0; ecosystem diagram updated (fleet as Foundry mode, not separate product).


v0.9 — Observability product (3–4 weeks)

Goal: Pillar 5 local product surface.

WorkDetail
Snapshot APISession + trace + evolve summary JSON (mirror outerloop dashboard patterns)
TUIInk-style or reuse outerloop dashboard patterns for Foundry sessions
foundry compareTwo sessions or two stacks on same goal fixture
ExportOTLP-ish or plain JSON export for external APM (optional adapter)
outerloop bridge“Open evidence in outerloop dashboard” when emit enabled

Exit criteria

  • foundry dashboard shows last N sessions without reading files manually
  • Compare produces a human-readable reliability delta (budget, verify, recoveries)

Push: 0.9.0; non-goal remains: hosted SaaS.


v1.0 — Harness-bench + platform GA (4–6 weeks)

Goal: Pillar 6 + harden 1–5 into a coherent v1.

WorkDetail
foundry benchSuite runner, fixtures, result schema
Suitessmoke, implementer-fixture, tool-use-mcp
Stack scoringPass rate, median turns, tokens, recovery count
Bench → evolveevolve report --from-bench
StabilitySchema version freeze, semver policy for primitives
Compatibility matrixModels × stacks × hosts documented
Security reviewSandbox, command allowlist, secret scrub defaults

Exit criteria

  • CI runs foundry bench --suite smoke on every PR
  • Public scorecard: minimal vs implementer on fixture suite
  • SPEC.md bumped to v1; non-goals reaffirmed
  • npm packages 1.0.0; migration guide from 0.x

Push: 1.0.0 release train; showcase + LE + outerloop coordinated announcements.


Package ownership (who builds what)

PackagePillarsNotes
coreallSchemas, paths, lock, registry types
compose1, 4Catalogue, stacks, install resolve
registry (new v0.6)1add/publish/search
interface4Model adapters
mcp4Real transport
runtime2, 4, 6Turn loop, policy enforce, fleet hooks, bench runner hooks
trace3, 5Events, replay helpers
evolve3, 6Multi-session, apply, bench reports
emit5outerloop seam only
host4, 2Host bridges
observe (new v0.7–0.9)5Dashboard/TUI/compare
cliallCommand surface
bench (new v1 or under runtime)6Suites + scoring

Push strategy (how we ship, not just build)

Cadence

RhythmAction
WeeklyOne vertical slice mergeable to main (primitive set or CLI command or adapter)
Biweeklynpm minor/patch when exit criteria for open items are met
Per minorShowcase section + example folder + CHANGELOG story
v1Coordinated LE pattern aliases + outerloop example refresh

Dogfood rule

This repo’s .foundry/ stack must use every new reliability primitive within one release of adding it. Traces from dogfood feed evolve demos.

Funnel rule

Every new stack preset gets:

  1. LE pattern alias (if applicable)
  2. foundry init --from <name>
  3. Showcase snippet
  4. Optional outerloop hook example

CI gates (grow over time)

v0.4  foundry validate + unit tests + demo smoke
v0.5  + MCP integration smoke
v0.6  + frozen lock gate
v0.7  + multi-session evolve fixture
v0.8  + fleet collision fixture
v0.9  + dashboard snapshot test
v1.0  + foundry bench --suite smoke

Messaging order (external push)

  1. Kernel is real (tool loop, worktree, verify) — credibility
  2. Compose & share stacks (catalogue + registry) — adoption
  3. Improve from runs (evolve multi-session) — differentiation
  4. See what happened (local observability) — retention
  5. Measure harnesses (bench) — thought leadership
  6. Coordinate many agents (fleet) — platform narrative

Do not lead marketing with fleet or L3 auto-tune.


Explicit non-goals (through v1)

Non-goalWhy
Replace outerloopGovernance stays separate
Hosted multi-tenant dashboardLocal-first; cloud is a later product
Auto-apply stack diffs by defaultHuman gates are the brand
Become LangGraph/ADKPrimitives ≠ opinionated graphs
Cryptographic primitive marketplaceDigests yes; full sig chain later
One mega “do everything” agentRoles + stacks + handoffs instead

Immediate next 10 tickets (start here)

Ordered for max learning per week while finishing v0.4:

  1. Land uncommitted turn-loop + tests + changelog (kernel)
  2. OpenAI-compatible model adapter + primitive YAML
  3. MCP stdio client (spawn, initialize, tools/list, tools/call)
  4. Wire MCP tools into turn-loop tool list when stack includes tools/mcp-*
  5. foundry evolve apply with --yes + audit file
  6. Primitives: control/tool-call-cap-*, sandbox/readonly, context/agents-md
  7. Stacks: reviewer, triage presets
  8. docs/primitive-spec.md + foundry primitives show
  9. Session index file (prep for multi-session evolve)
  10. Example: examples/mcp-filesystem end-to-end

Success metrics (v1)

MetricTarget
Time to first successful foundry run< 5 minutes from npx … init
Built-in primitives≥ 30
Built-in stacks≥ 6
Real model adapters≥ 3
MCPstdio production-usable
Evolvemulti-session L2 + gated apply
Benchsmoke suite in CI
Dogfoodthis repo runs Foundry on itself weekly