From 57653eed5cb04b6ea4538bf9b1809bd69a9e0517 Mon Sep 17 00:00:00 2001
From: bft-codebot
Date: Sun, 3 May 2026 20:59:26 +0000
Subject: [PATCH] sync(bfmono): chore(gambit): cut 1.0.0-rc.2 (+19 more)
(bfmono@af2da504c)
This PR is an automated gambitmono sync of bfmono Gambit packages.
- Source: `packages/gambit/`
- Core: `packages/gambit/packages/gambit-core/`
- bfmono rev: af2da504c
Changes:
- af2da504c chore(gambit): cut 1.0.0-rc.2
- 84f610a1d docs(workloop): align Gambit brand hierarchy
- ca4aff086 chore(gambit): remove legacy desktop fallbacks
- e281e27f1 fix(gambit): hydrate chat transcript from persisted state
- 35438f961 chore(gambit): record full precommit verification
- e88e4957e docs(gambit): reposition around scenarios and graders
- 2d2691076 fix(gambit): reject sandboxed chat runs
- 98ab911eb docs(gambit): use canonical graders frontmatter
- bb582eeb6 feat(gambit): improve chat event observability
- 43e0588ba feat(gambit): stream and control chat turns
- 538d0ad1b feat(gambit): add local deck chat repro server
- 60078d9f6 fix(workloop): disable Codex websockets in chief runtime
- 93d44fb06 fix(gambit): preserve whitespace in streamed assistant deltas
- 76e21a05f fix(workloop): preserve Codex auth refresh failures
- 224cfdca6 fix(gambit): fall back without host service token
- 668e393de feat(gambit): add browser introspection live commands
- 4d8a6ad7b feat(workloop): bridge runtime Codex refresh to host services
- 81ac0db58 feat(gambit): add live browser pointer refs
- 62e132a24 chore(browser): move runtime out of Gambit
- e6c80f928 test(gambit): remove legacy chat suites
Do not edit this repo directly; make changes in bfmono and re-run the sync.
---
AGENTS.md | 8 +-
CHANGELOG.md | 33 +-
README.md | 183 ++-
deno.jsonc | 2 +-
docs/external/README.md | 15 +-
docs/external/concepts/hourglass.md | 6 +-
docs/external/concepts/runtime.md | 13 +-
docs/external/examples/README.md | 6 +-
.../examples/agent_with_typescript.md | 11 +-
docs/external/examples/handlers_ts.md | 2 +-
docs/external/getting-started/README.md | 28 +-
docs/external/guides/authoring.md | 66 +-
docs/external/reference/cli.md | 5 +-
docs/external/reference/cli/commands/chat.md | 40 +
docs/external/reference/handlers.md | 2 +-
docs/external/reference/openai-compat.md | 6 +-
.../cards/grader_decks.card.md | 4 +-
.../cards/grader_decks.card.md | 4 +-
.../cards/grader_decks.card.md | 4 +-
.../actions/complete_task.mock.deck.ts | 25 +
.../actions/escalate_task.mock.deck.ts | 27 +
.../actions/taxo_lookup_account.mock.deck.ts | 33 +
.../local-chat/taxo-runtime-tools.mock.md | 11 +
examples/local-chat/taxo-support.deck.md | 13 +
.../local-chat/workloop-runtime-tools.mock.md | 17 +
packages/gambit-core/README.md | 34 +-
packages/gambit-core/deno.json | 2 +-
packages/gambit-simulator/deno.json | 2 +-
.../demo/gambit-ui-demo-script.md | 4 +-
.../simulator-ui/src/DocsPage.tsx | 8 +-
.../agent_with_multi_actions/PROMPT.md | 2 +-
.../advanced/agent_with_typescript/PROMPT.md | 2 +-
.../examples/advanced/arena_chatbot/PROMPT.md | 2 +-
.../cli_cold_emailer/lookup_profile.deck.ts | 4 +-
.../cli_cold_emailer/sample_input.json | 2 +-
.../advanced/patient_swapper/PROMPT.md | 2 +-
.../advanced/policy_support_bot/PROMPT.md | 2 +-
.../cards/grader_decks.card.md | 4 +-
.../cards/grader_decks.card.md | 8 +-
.../schemas/voice_call_input.zod.ts | 4 +-
.../after/faq_bot_after.deck.md | 10 +-
.../before/faq_bot_before.deck.md | 10 +-
scaffolds/demo/hello.deck.md | 2 +-
src/cli.ts | 25 +
src/cli_args.test.ts | 29 +
src/cli_args.ts | 14 +
src/cli_help.test.ts | 13 +
src/cli_utils.test.ts | 2 +-
src/codex_app_server_debug.ts | 10 +-
src/codex_auth.test.ts | 21 +-
src/codex_auth.ts | 7 +-
src/codex_preflight.test.ts | 19 +-
src/commands/chat.test.ts | 943 +++++++++++++
src/commands/chat.ts | 1194 +++++++++++++++++
src/commands/chat_runtime_tools.ts | 109 ++
.../gambit-bot/policy/deck-format-1.0.md | 6 +-
.../scenarios/faq_bot_build_flow/PROMPT.md | 2 +-
src/mcp_server.test.ts | 8 +-
src/mcp_server.ts | 11 +-
src/providers/codex.ts | 11 +-
src/providers/ollama.test.ts | 4 +-
src/runtime_host_service.ts | 8 +-
62 files changed, 2864 insertions(+), 240 deletions(-)
create mode 100644 docs/external/reference/cli/commands/chat.md
create mode 100644 examples/local-chat/actions/complete_task.mock.deck.ts
create mode 100644 examples/local-chat/actions/escalate_task.mock.deck.ts
create mode 100644 examples/local-chat/actions/taxo_lookup_account.mock.deck.ts
create mode 100644 examples/local-chat/taxo-runtime-tools.mock.md
create mode 100644 examples/local-chat/taxo-support.deck.md
create mode 100644 examples/local-chat/workloop-runtime-tools.mock.md
create mode 100644 src/commands/chat.test.ts
create mode 100644 src/commands/chat.ts
create mode 100644 src/commands/chat_runtime_tools.ts
diff --git a/AGENTS.md b/AGENTS.md
index f554ffc2e..dd389f548 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -2,10 +2,10 @@ You are Codebot, a helpful assistant that works with developers working on the
project github.com/bolt-foundry/gambit to navigate and contribute to our
codebase.
-Gambit is an open source AI assistant orchestration and authoring framework
-built by the company Bolt Foundry. Using Gambit, developers and product teams
-can prove that their AI works the way they expect, and they can fix it when it
-doesn't.
+Gambit is an open source synthetic scenario and evaluation layer for agent
+systems. Using Gambit, developers and product teams can create realistic
+scenarios, validate eval data, grade behavior, preserve trace evidence, and turn
+failures into regression suites.
## Core philosophy
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f9f4e7b45..9cb646c3e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,14 +1,43 @@
+++
[release]
-since = "b6ed5a3a8d6a9b272ce520d885d3953d27c2c0d4"
+since = "00872eb8b2190de2ba0904c0ac4f4cdbc611718b"
+++
# Changelog
-## Unreleased
+## Unreleased (v1.0.0)
- TBD
+## v1.0.0-rc.2
+
+- fix(gambit): preserve structured text spacing
+- fix(gambit): pass codex runtime tools
+- feat(gambit): make provider execution responses-only
+- feat(gambit): expose structured responses runtime
+- fix(gambit): preserve responses continuation context
+- chore(gambit): remove dead chat provider adapters
+- test(gambit): remove legacy chat suites
+- chore(browser): move runtime out of Gambit
+- feat(gambit): add live browser pointer refs
+- feat(workloop): bridge runtime Codex refresh to host services
+- feat(gambit): add browser introspection live commands
+- fix(gambit): fall back without host service token
+- fix(workloop): preserve Codex auth refresh failures
+- fix(gambit): preserve whitespace in streamed assistant deltas
+- fix(workloop): disable Codex websockets in chief runtime
+- feat(gambit): add local deck chat repro server
+- feat(gambit): stream and control chat turns
+- feat(gambit): improve chat event observability
+- docs(gambit): use canonical graders frontmatter
+- fix(gambit): reject sandboxed chat runs
+- docs(gambit): reposition around scenarios and graders
+- docs(gambit): record agent file naming feedback
+- chore(gambit): record full precommit verification
+- fix(gambit): hydrate chat transcript from persisted state
+- chore(gambit): use generic runtime env names
+- docs(workloop): align Gambit brand hierarchy
+
## v1.0.0-rc.1
- BREAKING: make Gambit runtime execution Responses-only.
diff --git a/README.md b/README.md
index aaee69533..56491a766 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,15 @@
#
-Gambit is an open-source, developer-first framework that helps you build\
-reliable LLM workflows by composing small, typed “decks”\
-with clear inputs/outputs and guardrails. Run decks locally, stream traces, and\
-debug with a built-in UI.
+Agent frameworks help you build agents. Gambit helps you create the evidence
+that they work.
+
+Gambit is the synthetic scenario and evaluation layer for agent systems: create
+realistic scenarios, validate their quality, run agents against them, grade the
+behavior, capture trace evidence, and turn failures into regression suites.
+
+Native Gambit agents are still the fastest path to the fully integrated loop:
+typed inputs and outputs, local runs, scenarios, graders, traces, permission
+evidence, and the simulator's Build/Test/Grade/Verify workflow.
[Watch the demo video](https://youtu.be/J_hQ2L_yy60).
@@ -19,8 +25,8 @@ export OPENROUTER_API_KEY=...
npx @bolt-foundry/gambit demo
```
-Downloads example files (hello decks plus the `examples/` gallery) and sets
-environment variables.
+Downloads example files (hello agent definitions plus the `examples/` gallery)
+and sets environment variables.
To start onboarding with the simulator, run:
@@ -29,7 +35,7 @@ npx @bolt-foundry/gambit-simulator serve gambit/hello.deck.md
open http://localhost:8000/debug
```
-Use the Build tab to draft your own workspace decks and scenarios.
+Use the Build tab to draft your own workspace agents and scenarios.
Run an example in the terminal (`repl`):
@@ -48,35 +54,102 @@ open http://localhost:8000/debug
---
+## Why Gambit
+
+Agent teams already have many ways to build and orchestrate agents: native
+Gambit, Mastra, LangGraph, OpenAI Agents SDK, CrewAI, Google ADK, LlamaIndex,
+Pydantic AI, and custom stacks. The harder product problem is creating the
+situations those agents need to survive, checking whether those situations are
+good tests, and preserving the evidence when behavior regresses.
+
+Gambit focuses on that reliability loop:
+
+- **Generate scenarios** for realistic user, tool, workflow, policy, and edge
+ case pressure.
+- **Evaluate the scenario data** for realism, coverage, difficulty, grounding,
+ duplication, and expected-outcome clarity.
+- **Run agent evals** against native Gambit, Mastra, LangGraph, OpenAI, or
+ custom agents.
+- **Grade behavior** from transcripts, artifacts, traces, and typed outputs.
+- **Diagnose failures** with trace evidence and permission evidence.
+- **Regenerate regression suites** from failures so the same behavior does not
+ quietly break again.
+
+For a native Gambit agent, the same system defines, runs, traces, tests, grades,
+and debugs the agent end to end. For a Mastra, LangGraph, OpenAI, or custom
+agent, Gambit sits on the other side of the framework: the test-data engine,
+grader loop, local reproduction harness, and CI behavior check.
+
+## Common workflows
+
+### Native Gambit path
+
+Define the agent in Gambit, run it locally, add scenarios for the behavior that
+must keep working, attach graders, inspect traces in the simulator, and reuse
+the same checks in CI. This is the most direct path when you want Gambit to own
+both the agent definition and the verification loop.
+
+### Bring your own agent
+
+Use Mastra to build the TypeScript agent application. Use Gambit to create and
+validate scenario suites around the important Mastra behaviors, then grade the
+transcripts and artifacts those runs produce. A thin wrapper can record run
+inputs, transcript turns, artifacts, state paths, and trace references so Gambit
+can grade them and keep failing cases reproducible.
+
+### Pull request gate
+
+Run important scenarios on every pull request, grade the resulting transcripts
+or artifacts, and fail the check when behavior drops below the expected
+standard. Failed checks should keep the trace, state, and reproduction inputs so
+the regression can be debugged locally.
+
+```yaml
+# Proposed workflow shape. This is positioning guidance, not a published
+# bolt-foundry/gambit-action release.
+name: Agent behavior checks
+
+on:
+ pull_request:
+
+jobs:
+ gambit:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - run: npx @bolt-foundry/gambit scenario gambit/root.deck.md --test-deck gambit/scenarios/smoke.deck.md --grade gambit/graders/smoke.deck.md --state .gambit/ci-smoke.json --trace .gambit/ci-smoke.jsonl
+```
+
## Status quo
-- Most teams wire one long prompt to several tools and hope the model routes\
- correctly.
-- Context often arrives as a single giant fetch or RAG blob, so costs climb and\
- hallucinations slip in.
-- Input/outputs are rarely typed, which makes orchestration brittle and hard to\
- test offline.
-- Debugging leans on provider logs instead of local traces, so reproducing\
- failures is slow.
+- Teams have more ways than ever to build agents, but fewer ways to know whether
+ their eval data covers the behavior that will matter in production.
+- Synthetic scenarios can look plausible while duplicating each other, missing
+ policy edges, or failing to state the expected outcome clearly.
+- Agent failures often disappear into provider logs, so the team cannot replay
+ the exact inputs, transcript, tool calls, and artifacts that caused the
+ regression.
+- CI usually checks code shape more reliably than agent behavior.
## Our vision
-- Treat each step as a small deck with explicit inputs/outputs and guardrails;\
- model calls are just one kind of action.
-- Mix LLM and compute tasks interchangeably and effortlessly inside the same\
- deck tree.
-- Feed models only what they need per step; inject references and cards instead\
- of dumping every document.
-- Keep orchestration logic local and testable; run decks offline with\
- predictable traces.
-- Ship with built-in observability (streaming, REPL, debug UI) so debugging\
- feels like regular software, not guesswork.
+- Generate the situations your agents need to survive: users, tasks, workflows,
+ tool pressure, policy edges, and hard failure modes.
+- Grade the scenario data itself before it becomes trusted eval data.
+- Run any target agent against the curated suite and preserve the transcript,
+ state, artifacts, trace events, and permission evidence.
+- Diagnose failures by capability gap, tool issue, prompt issue, policy
+ ambiguity, retrieval miss, or unsafe action.
+- Feed those failures back into sharper follow-up scenarios and regression
+ checks.
---
## Using the CLI
-Use the CLI to run decks locally, stream output, and capture traces/state.
+Use the CLI to run agent definitions locally, stream output, and capture
+traces/state. The current CLI and file format still use `deck` as the exact
+implementation term.
Run with npx (no install):
@@ -84,7 +157,7 @@ Run with npx (no install):
npx @bolt-foundry/gambit
```
-Run a deck once:
+Run an agent definition once:
```
npx @bolt-foundry/gambit run --context --message
@@ -99,7 +172,34 @@ Drop into a REPL (streams by default):
npx @bolt-foundry/gambit repl
```
-Run a persona against a root deck (scenario):
+Start a focused browser chat for an agent definition:
+
+```
+npx @bolt-foundry/gambit chat --state .gambit/chat/workspace.sqlite --trace .gambit/chat/trace.jsonl
+```
+
+Use `chat` when you need a localhost transcript, saved state, trace output, and
+runtime-supplied tools without the full simulator workbench. Use `repl` for a
+terminal loop, `run` for one-shot automation, and `gambit-simulator serve` for
+Build/Test/Grade/Verify workflows.
+
+For repeatable repros, pass `--repro-message ` to attach the original user
+ask to the session payload without sending it automatically.
+
+Supply runtime tools with Markdown/TOML files:
+
+```
+npx @bolt-foundry/gambit chat MANAGER.md --runtime-tools ./workloop-runtime-tools.mock.md
+npx @bolt-foundry/gambit chat support.deck.md --runtime-tools ./taxo-runtime-tools.mock.md
+```
+
+The runtime-tool file uses `[[tools]]` entries with `name`, `description`,
+optional `inputSchema`, and optional `action`. Action bindings run Gambit agent
+definitions with the tool arguments as context, keeping product-specific tools
+outside the portable root agent. See `examples/local-chat/` for Workloop-style
+and Taxo-style mock tool fixtures.
+
+Run a scenario persona against a root agent:
```
npx @bolt-foundry/gambit scenario --test-deck
@@ -125,7 +225,7 @@ Tracing and state:
### Worker sandbox defaults
-- Deck-executing CLI surfaces default to worker sandbox execution.
+- CLI commands that execute decks default to worker sandbox execution.
- Use `--no-worker-sandbox` (or `--legacy-exec`) to force legacy in-process
execution.
- `--worker-sandbox` explicitly forces worker execution on.
@@ -204,7 +304,9 @@ header (left of `New chat`).
## Using the Library
-Use the library when you want TypeScript decks/cards or custom compute steps.
+Use the library when you want TypeScript agent definitions, reusable instruction
+snippets, or custom compute steps. The exported helper names remain `defineDeck`
+and `defineCard` for compatibility.
Import the helpers from JSR:
@@ -216,10 +318,10 @@ import { defineDeck, defineCard } from "jsr:@bolt-foundry/gambit";
- `reviews/2026-04-15-AAR-raw-response-items.md`
-Define `contextSchema`/`responseSchema` with Zod to validate IO, and implement\
-`run`/`execute` for compute decks. To call a child deck from code, use\
-`ctx.spawnAndWait({ path, input })`. Emit structured trace events with\
-`ctx.log(...)`.
+Define `contextSchema`/`responseSchema` with Zod to validate IO, and implement
+`run`/`execute` for compute agent definitions. To call a child agent definition
+from code, use `ctx.spawnAndWait({ path, input })`. Emit structured trace events
+with `ctx.log(...)`.
### Runtime defaults for programmatic `runDeckResponses`
@@ -288,9 +390,9 @@ Replacement mapping:
---
-## Author your first deck
+## Author your first native Gambit agent
-### Minimal Markdown deck (model-powered): `hello_world.deck.md`
+### Minimal Markdown agent definition (model-powered): `hello_world.deck.md`
```
+++
@@ -310,7 +412,7 @@ Run it:
npx @bolt-foundry/gambit run ./hello_world.deck.md --context '"Gambit"' --stream
```
-### Compute deck in TypeScript (no model call): `echo.deck.ts`
+### Compute agent definition in TypeScript (no model call): `echo.deck.ts`
```typescript
// echo.deck.ts
@@ -333,7 +435,7 @@ Run it:
npx @bolt-foundry/gambit run ./echo.deck.ts --context '{"text":"ping"}'
```
-### Deck with a child action (calls a TypeScript tool): `agent_with_time.deck.md`
+### Agent definition with a child action (calls a TypeScript tool): `agent_with_time.deck.md`
```
+++
@@ -374,8 +476,9 @@ npx @bolt-foundry/gambit run ./agent_with_time.deck.md --context '"hello"' --str
### Legacy respond-flow demo (historical compatibility)
`packages/gambit/examples/respond_flow/` is kept as a legacy compatibility
-example for historical transcript/grader behavior. New decks should return
-schema-valid assistant output directly instead of calling `gambit_respond`.
+example for historical transcript/grader behavior. New agent definitions should
+return schema-valid assistant output directly instead of calling
+`gambit_respond`.
```
cd packages/gambit
diff --git a/deno.jsonc b/deno.jsonc
index 25a6fdc46..b81414a46 100644
--- a/deno.jsonc
+++ b/deno.jsonc
@@ -2,7 +2,7 @@
"$schema": "https://deno.land/x/deno/cli/schemas/config-file.v1.json",
"name": "@bolt-foundry/gambit",
"description": "Agent harness framework for building, running, and verifying LLM workflows in Markdown and code.",
- "version": "1.0.0-rc.1",
+ "version": "1.0.0-rc.2",
"license": "Apache-2.0",
"repository": {
"type": "git",
diff --git a/docs/external/README.md b/docs/external/README.md
index 30ebc268c..b78a9eb54 100644
--- a/docs/external/README.md
+++ b/docs/external/README.md
@@ -1,8 +1,17 @@
# Gambit Documentation
-Welcome to Gambit, the open-source, developer-first agent harness for building,
-running, and verifying LLM workflows. These docs focus on helping you ship
-assistants with confidence.
+Agent frameworks help you build agents. Gambit helps you create the evidence
+that they work.
+
+Gambit is the synthetic scenario and evaluation layer for agent systems. These
+docs focus on helping you create realistic scenarios, validate scenario quality,
+run agents against curated suites, grade behavior, capture trace evidence, and
+turn failures into regression checks.
+
+Use Gambit as the native runtime for a fully integrated agent loop, or use it on
+the other side of an existing framework such as Mastra, LangGraph, OpenAI, or
+custom code: the test-data engine, grader loop, local reproduction harness, and
+CI check for behavior that must not regress.
Start here:
diff --git a/docs/external/concepts/hourglass.md b/docs/external/concepts/hourglass.md
index 63649b267..d08516c1b 100644
--- a/docs/external/concepts/hourglass.md
+++ b/docs/external/concepts/hourglass.md
@@ -21,7 +21,7 @@ the needed context and tone.
## Applying to Gambit
- Use separate snippets for assistant persona, user persona, and behavior; embed
- them into the deck body to keep concerns isolated.
+ them into the agent body to keep concerns isolated.
- Keep the “pinch” (behavior/constraints) closest to the model call, and keep
personas above it so they influence style without diluting instructions.
- Make the behavior section concrete: steps, priorities, stopping conditions,
@@ -29,12 +29,12 @@ the needed context and tone.
- Keep schemas tight so actions/tools stay aligned with the narrow middle of the
hourglass.
-## Skeleton (deck + snippets)
+## Skeleton (agent definition + snippets)
```
src/decks/
gambit-assistant.deck.md # root deck embeds the snippets below
- cards/
+ cards/ # legacy directory name for snippet files
assistant_persona.card.md # who the assistant is
user_persona.card.md # who the user is / goals / constraints
behavior.card.md # steps, guardrails, outputs, when to ask vs act
diff --git a/docs/external/concepts/runtime.md b/docs/external/concepts/runtime.md
index 6cbcda0ba..c338ba935 100644
--- a/docs/external/concepts/runtime.md
+++ b/docs/external/concepts/runtime.md
@@ -1,14 +1,15 @@
# Runtime and guardrails
-How Gambit, an agent harness framework, runs decks and keeps them
-safe/observable.
+How Gambit runs native agent definitions and keeps behavior safe, observable,
+and reproducible. The runtime still uses `deck` in exact file names, CLI
+arguments, config fields, and API names.
## Guardrails and flow
- Defaults: `maxDepth=3`, `maxPasses=10`, `timeoutMs≈120s`; override per deck
with `guardrails`.
-- Compute vs LLM: a deck with `modelParams` runs as LLM; otherwise it must
- expose `run`/`execute` for compute.
+- Compute vs LLM: an agent definition with `modelParams` runs as LLM; otherwise
+ it must expose `run`/`execute` for compute.
- Non-root decks must declare both `contextSchema` and `responseSchema`; roots
allow looser IO but should still use schemas.
- Child calls use `actionDecks` (LLM tool calls) or `spawnAndWait` in compute
@@ -58,8 +59,8 @@ safe/observable.
## Streaming and tracing
-- Streaming is supported for LLM decks; callbacks are invoked per chunk and
- handler messages also stream.
+- Streaming is supported for LLM agent definitions; callbacks are invoked per
+ chunk and handler messages also stream.
- Tracing: `--verbose` prints trace events; `--trace ` writes JSONL.
Useful events include `model.call/result`, `tool.call/result`, and handler
triggers.
diff --git a/docs/external/examples/README.md b/docs/external/examples/README.md
index e479be013..ddb9c7afb 100644
--- a/docs/external/examples/README.md
+++ b/docs/external/examples/README.md
@@ -18,11 +18,11 @@ Notes:
(advanced demos in `.../advanced/`, FAQ bot in `.../faq-bot-example/`).
- When `gambit demo` seeds a workspace, generated copies live under
`gambit/examples/`.
-- Examples show how to use Gambit as an agent harness for workflow execution and
- verification.
+- Examples show how to author agents, run synthetic scenarios, grade behavior,
+ inspect traces, and keep regressions reproducible.
- Routing examples rely on tight action descriptions and schemas so the model
picks the right tool.
- Handler examples show how busy/idle status streams and how handled errors
- surface as envelopes.
+ return structured envelopes.
- All examples default to `openai/gpt-4o-mini`; override with `--model` or
`--model-force` to test other providers.
diff --git a/docs/external/examples/agent_with_typescript.md b/docs/external/examples/agent_with_typescript.md
index f100f20c9..6b0beee71 100644
--- a/docs/external/examples/agent_with_typescript.md
+++ b/docs/external/examples/agent_with_typescript.md
@@ -2,21 +2,22 @@
What it shows
-- Mixing a Markdown LLM deck with a TypeScript compute action.
-- Embedding a card to steer tool usage and reply style.
+- Mixing a Markdown LLM agent definition with a TypeScript compute action.
+- Embedding a reusable instruction snippet to steer tool usage and reply style.
Key files
- `init/examples/advanced/agent_with_typescript/agent_with_typescript.deck.md` —
- root LLM deck and workflow steps.
+ root LLM agent definition and workflow steps.
- `init/examples/advanced/agent_with_typescript/get_time.deck.ts` — TS compute
action (returns ISO timestamp with Zod schemas).
- `init/examples/advanced/agent_with_typescript/tooling.card.md` — card that
- defines how/when to call the tool and how to respond.
+ defines how/when to call the tool and how to respond. The `.card.md` suffix is
+ a legacy compatibility filename for a prompt snippet.
Why it’s structured this way
-- The card keeps routing guidance separate from the deck body, making it
+- The snippet keeps routing guidance separate from the agent body, making it
reusable.
- The TS action uses strict `contextSchema`/`responseSchema` to guarantee a
deterministic payload from compute code.
diff --git a/docs/external/examples/handlers_ts.md b/docs/external/examples/handlers_ts.md
index 2f4c07030..138c15121 100644
--- a/docs/external/examples/handlers_ts.md
+++ b/docs/external/examples/handlers_ts.md
@@ -23,7 +23,7 @@ Why it’s structured this way
rich envelope with code/status/meta/payload.
- `onBusy`/`onIdle` return strings that stream as status updates, showing how
handlers don’t block the main run.
-- Root prompt nudges the model to prefer `flaky_action_ts` and surface handler
+- Root prompt nudges the model to prefer `flaky_action_ts` and show handler
messages clearly when things fail.
How to run
diff --git a/docs/external/getting-started/README.md b/docs/external/getting-started/README.md
index b469daff8..062c5069c 100644
--- a/docs/external/getting-started/README.md
+++ b/docs/external/getting-started/README.md
@@ -1,18 +1,36 @@
# Getting Started
-Use this page to get a fast, developer-first path from install to first run.
+Use this page to get a fast path from install to your first native Gambit agent,
+then to the scenario generation, scenario validation, and grader loop that
+catches behavior regressions.
## Quickstart path
-1. Run the demo to generate example decks and configs:
+1. Run the demo to generate example agent definitions and configs:
- `npx @bolt-foundry/gambit demo`
-2. Run a deck in the terminal:
+2. Run a native Gambit agent definition in the terminal:
- `npx @bolt-foundry/gambit run gambit/hello.deck.md --context '"Gambit"'`
3. Open the debug UI to inspect traces:
- - `npx @bolt-foundry/gambit serve gambit/hello.deck.md --port 8000`
+ - `npx @bolt-foundry/gambit-simulator serve gambit/hello.deck.md --port 8000`
- Visit `http://localhost:8000/debug`
+4. Add a scenario for behavior you care about, check that it is a useful test,
+ then grade the saved session:
+ - `npx @bolt-foundry/gambit scenario --test-deck --grade --state .gambit/scenario.json --trace .gambit/scenario.jsonl`
+
+## What you just set up
+
+- A native Gambit agent path: Gambit owns the agent definition, local run,
+ trace, scenario, and grader.
+- A regression path: the same scenario and grader command can run in CI as a
+ behavior check.
+- A scenario-quality path: generated or hand-authored scenarios can be reviewed
+ for realism, coverage, difficulty, grounding, duplication, and expected
+ outcome clarity before they become regression data.
+- A bring-your-own-framework path: for Mastra, LangGraph, OpenAI, or custom
+ code, keep the production agent where it is and use Gambit scenarios, graders,
+ traces, and reproduction inputs around the behavior that matters.
## Learn by doing
-- Author a simple deck: `../guides/authoring.md`
+- Author a simple native Gambit agent: `../guides/authoring.md`
- Explore working examples: `../examples/`
diff --git a/docs/external/guides/authoring.md b/docs/external/guides/authoring.md
index 5497a6bbd..08051bcb9 100644
--- a/docs/external/guides/authoring.md
+++ b/docs/external/guides/authoring.md
@@ -1,30 +1,40 @@
-# Authoring Gambit decks
+# Authoring Native Gambit Agents
-Audience: new deck authors who want to build runnable Gambit assistants quickly.
-Gambit is an agent harness framework, so decks are the unit of execution and
-verification.
+Audience: authors who want to build runnable native Gambit agents, create
+synthetic scenarios, validate scenario quality, and verify behavior with
+graders, traces, and local reproduction.
+
+Gambit still uses `deck` in file names, CLI syntax, and TypeScript helper names.
+Think of a deck as a Gambit agent definition.
## Mental model
-- Decks are single units of work. They can be LLM-powered (via `modelParams`) or
- compute-only (via `run`/`execute`).
-- Snippets are reusable prompt fragments. Embedding snippets merges their deck
- references (action/scenario/grader) and schema fragments into the parent deck.
-- Action decks are child decks exposed as model tools. Names must match
+- Agent definitions are single units of work. They can be LLM-powered (via
+ `modelParams`) or compute-only (via `run`/`execute`).
+- Scenarios describe synthetic users, tasks, personas, workflows, policy
+ pressure, or edge cases that exercise the behavior you care about.
+- Scenario-quality graders check whether generated or hand-authored scenarios
+ are realistic, novel, grounded, clear, and worth keeping.
+- Behavior graders score transcripts or artifacts so scenario runs can become
+ release checks.
+- Snippets are reusable prompt fragments. Embedding snippets merges their
+ action/scenario/grader references and schema fragments into the parent agent
+ definition.
+- Actions are child agent definitions exposed as model tools. Names must match
`^[A-Za-z_][A-Za-z0-9_]*$` and avoid the `gambit_` prefix (reserved).
-- Persona/scenario decks may accept free-form user turns. Use the
+- Persona/scenario agents may accept free-form user turns. Use the
`acceptsUserTurns` flag to control this behavior: root decks default to
`true`, while action decks default to `false`. Set it explicitly to `true` for
persona/bot decks or to `false` for workflow-only decks.
## Pick a format
-- Markdown deck/snippet: great for quick prompt-first flows. Front matter
- declares label/model/actions/scenarios/graders/handlers; body is the prompt.
- Embeds via image syntax pull in snippets or special markers.
-- TypeScript deck/snippet: best when you need compute logic or co-locate
- schemas. Export `defineDeck`/`defineCard` with Zod schemas and a
- `run`/`execute` for compute decks.
+- Markdown agent definition/snippet: great for quick prompt-first flows. Front
+ matter declares label/model/actions/scenarios/graders/handlers; body is the
+ prompt. Embeds via image syntax pull in snippets or special markers.
+- TypeScript agent definition/snippet: best when you need compute logic or
+ co-locate schemas. Export `defineDeck`/`defineCard` with Zod schemas and a
+ `run`/`execute` for compute agent definitions.
## Minimal examples
@@ -77,18 +87,19 @@ migrate a repository, run:
deno run -A packages/gambit/scripts/migrate-schema-terms.ts
```
-## Action decks, scenario decks, grader decks
+## Actions, scenarios, and graders
-- Add action decks in front matter or TS definitions:
+- Add action references in front matter or TS definitions:
`actions = [{ name = "get_time", path = "./get_time.deck.ts" }]`.
-- Action decks defined on embedded snippets are merged into the deck; duplicates
- are overridden by the deck’s own entries.
+- Actions defined on embedded snippets are merged into the agent definition;
+ duplicates are overridden by the agent definition's own entries.
- In compute decks, call child decks with `ctx.spawnAndWait({ path, input })`.
- In LLM decks, the model chooses action decks via tool calls. Provide clear
descriptions so the model routes correctly.
-- `scenarios` describe persona decks (synthetic users/bots). Each entry points
- to a deck that produces user turns/scenarios—use them for automated QA,
- persona-vs-workflow simulations, or even bot-vs-bot runs.
+- `scenarios` describe persona agents (synthetic users/bots). Each entry points
+ to an agent definition that produces user turns, tasks, edge cases, or
+ workflow pressure; use them for automated QA, persona-vs-workflow simulations,
+ or even bot-vs-bot runs.
- Example (see `init/examples/advanced/voice_front_desk/decks/root.deck.md`):
```toml
[[scenarios]]
@@ -101,7 +112,7 @@ deno run -A packages/gambit/scripts/migrate-schema-terms.ts
should set `acceptsUserTurns = true` and may declare its own `contextSchema`
(for example `contextSchema = "../schemas/my_persona_test.zod.ts"`) so the
Test tab renders a schema-driven “Scenario” form for that persona.
-- For persona/scenario decks, embed `` to
+- For persona/scenario agents, embed `` to
include the scenario init-fill contract instructions.
- To keep personas in the participant role and standardize completion, embed
``.
@@ -123,8 +134,9 @@ deno run -A packages/gambit/scripts/migrate-schema-terms.ts
The persona should respond with **JSON only**, returning values for the
missing fields (nested by path). Explicit init values are never overwritten;
invalid JSON or schema-violating output blocks the run with a clear error.
-- `graderDecks` describe calibration decks that score transcripts/artifacts. The
- simulator Calibrate page will run these decks against stored runs.
+- `graders` describe calibration agents that score transcripts, artifacts, or
+ scenario data. The simulator Calibrate page runs these graders against stored
+ runs.
- For graders that inspect assistant tool usage, set
`contextSchema = "gambit://schemas/graders/contexts/turn_tools.zod.ts"` so
`session.messages[*].tool_calls` is available in the grader input.
@@ -134,7 +146,7 @@ deno run -A packages/gambit/scripts/migrate-schema-terms.ts
- Markdown roots default to `true`; TypeScript decks default to `false`
everywhere. Set it to `false` for any workflow deck that should never accept
user turns (regardless of how it's run).
- - Persona/scenario decks should set `acceptsUserTurns = true` so they can
+ - Persona/scenario agents should set `acceptsUserTurns = true` so they can
receive messages even when invoked as non-root bots.
## Synthetic tools and handlers
diff --git a/docs/external/reference/cli.md b/docs/external/reference/cli.md
index 8eb620fe0..cc3c1069e 100644
--- a/docs/external/reference/cli.md
+++ b/docs/external/reference/cli.md
@@ -1,6 +1,7 @@
# CLI, REPL, and debug UI
-How to run Gambit, the agent harness framework, locally and observe runs.
+How to run Gambit locally, generate scenario runs, grade behavior, and preserve
+the evidence needed to debug regressions.
## Commands
@@ -48,7 +49,7 @@ How to run Gambit, the agent harness framework, locally and observe runs.
- `GAMBIT_RESPONSES_MODE=1`: env alternative to `--responses` for runtime/state.
- `GAMBIT_OPENROUTER_RESPONSES=1`: route OpenRouter calls through the Responses
API (experimental; chat remains the default path).
-- Worker execution defaults on for deck-executing surfaces. Use
+- Worker execution defaults on for CLI commands that execute decks. Use
`--no-worker-sandbox` (or `--legacy-exec`) to roll back to legacy in-process
execution. `--sandbox/--no-sandbox` still work as deprecated aliases.
- `gambit.toml` config equivalent:
diff --git a/docs/external/reference/cli/commands/chat.md b/docs/external/reference/cli/commands/chat.md
new file mode 100644
index 000000000..670962f4f
--- /dev/null
+++ b/docs/external/reference/cli/commands/chat.md
@@ -0,0 +1,40 @@
++++
+command = "chat"
+summary = "Start a local deck chat server"
+usage = "gambit chat [--context ] [--model ] [--model-force ] [--port ] [--state ] [--trace ] [--runtime-tools ...] [--repro-message ] [--responses] [--open] [--verbose] [-A|--allow-all|--allow-] [--worker-sandbox|--no-worker-sandbox|--legacy-exec]"
+flags = [
+ "--context Context payload (seeds gambit_context; legacy --init still works)",
+ "--model Default model id",
+ "--model-force Override model id",
+ "--port Port for chat (default: 8787)",
+ "--state Load/persist state",
+ "--trace Write trace events to file (JSONL)",
+ "--runtime-tools Markdown/TOML runtime-tool definitions (repeatable)",
+ "--repro-message Store a repeatable repro prompt in session state",
+ "--responses Run runtime/state in Responses mode",
+ "--open Open the localhost chat URL in the browser",
+ "--verbose Print trace events to console",
+ "-A, --allow-all Allow all session permissions (read/write/run/net/env)",
+ "--allow-read[=] Session read override (all when value omitted)",
+ "--allow-write[=] Session write override (all when value omitted)",
+ "--allow-run[=] Session run override (all when value omitted)",
+ "--allow-net[=] Session net override (all when value omitted)",
+ "--allow-env[=] Session env override (all when value omitted)",
+ "--worker-sandbox Force worker execution on",
+ "--no-worker-sandbox Force worker execution off",
+ "--legacy-exec Alias for --no-worker-sandbox",
+ "--sandbox Deprecated alias for --worker-sandbox",
+ "--no-sandbox Deprecated alias for --no-worker-sandbox",
+]
++++
+
+Starts a focused localhost browser chat for a deck. The command prints the chat
+URL and serves a transcript, session panel, tool summaries, and trace events.
+Use `--repro-message` to attach a known user ask to the session payload for
+repeatable repro flows. It does not send the message automatically.
+
+Runtime tools are supplied by Markdown files with TOML frontmatter using
+`[[tools]]`. Each tool may include `name`, `description`, `inputSchema`, and
+`action`. Duplicate tool names fail fast. When a runtime tool is called and an
+`action` is configured, the chat server runs that action deck with the tool
+arguments as context and returns the action output as the tool result.
diff --git a/docs/external/reference/handlers.md b/docs/external/reference/handlers.md
index 34f50f2d1..7b74fcd55 100644
--- a/docs/external/reference/handlers.md
+++ b/docs/external/reference/handlers.md
@@ -1,6 +1,6 @@
# Handlers: error, busy, idle
-Gambit decks can register optional handler decks to surface status or recover
+Gambit decks can register optional handler decks to report status or recover
from failures without blocking the main turn. They run as child decks with
structured inputs.
diff --git a/docs/external/reference/openai-compat.md b/docs/external/reference/openai-compat.md
index 88582293c..eeaae5e35 100644
--- a/docs/external/reference/openai-compat.md
+++ b/docs/external/reference/openai-compat.md
@@ -1,8 +1,8 @@
# OpenAI Chat Completions compatibility
-Gambit, an agent harness framework, can act as a drop-in-ish wrapper around the
-OpenAI Chat Completions request/response shape, while still letting you point at
-a Gambit deck for system prompt + deck-defined action decks.
+Gambit can act as a drop-in-ish wrapper around the OpenAI Chat Completions
+request/response shape, while still letting you point at a Gambit deck for
+system prompt + deck-defined action decks.
This is useful when you already have code that constructs Chat Completions
requests and you want to:
diff --git a/examples/dev/simpsons_explainer_notest/cards/grader_decks.card.md b/examples/dev/simpsons_explainer_notest/cards/grader_decks.card.md
index 09a010dc2..2f5aa7e4f 100644
--- a/examples/dev/simpsons_explainer_notest/cards/grader_decks.card.md
+++ b/examples/dev/simpsons_explainer_notest/cards/grader_decks.card.md
@@ -1,12 +1,12 @@
+++
label = "demo_grader_decks"
-[[graderDecks]]
+[[graders]]
label = "Brevity (turn)"
description = "Checks that the assistant stays concise and avoids unnecessary length."
path = "../graders/brevity_turn_grader.deck.md"
-[[graderDecks]]
+[[graders]]
label = "Friendliness (turn)"
description = "Checks that the assistant is warm, polite, and approachable."
path = "../graders/friendliness_turn_grader.deck.md"
diff --git a/examples/dev/simpsons_explainer_user/cards/grader_decks.card.md b/examples/dev/simpsons_explainer_user/cards/grader_decks.card.md
index 09a010dc2..2f5aa7e4f 100644
--- a/examples/dev/simpsons_explainer_user/cards/grader_decks.card.md
+++ b/examples/dev/simpsons_explainer_user/cards/grader_decks.card.md
@@ -1,12 +1,12 @@
+++
label = "demo_grader_decks"
-[[graderDecks]]
+[[graders]]
label = "Brevity (turn)"
description = "Checks that the assistant stays concise and avoids unnecessary length."
path = "../graders/brevity_turn_grader.deck.md"
-[[graderDecks]]
+[[graders]]
label = "Friendliness (turn)"
description = "Checks that the assistant is warm, polite, and approachable."
path = "../graders/friendliness_turn_grader.deck.md"
diff --git a/examples/dev/simpsons_explainer_user_notest/cards/grader_decks.card.md b/examples/dev/simpsons_explainer_user_notest/cards/grader_decks.card.md
index 09a010dc2..2f5aa7e4f 100644
--- a/examples/dev/simpsons_explainer_user_notest/cards/grader_decks.card.md
+++ b/examples/dev/simpsons_explainer_user_notest/cards/grader_decks.card.md
@@ -1,12 +1,12 @@
+++
label = "demo_grader_decks"
-[[graderDecks]]
+[[graders]]
label = "Brevity (turn)"
description = "Checks that the assistant stays concise and avoids unnecessary length."
path = "../graders/brevity_turn_grader.deck.md"
-[[graderDecks]]
+[[graders]]
label = "Friendliness (turn)"
description = "Checks that the assistant is warm, polite, and approachable."
path = "../graders/friendliness_turn_grader.deck.md"
diff --git a/examples/local-chat/actions/complete_task.mock.deck.ts b/examples/local-chat/actions/complete_task.mock.deck.ts
new file mode 100644
index 000000000..66577c78b
--- /dev/null
+++ b/examples/local-chat/actions/complete_task.mock.deck.ts
@@ -0,0 +1,25 @@
+import { defineDeck } from "../../../mod.ts";
+import { z } from "npm:zod";
+
+export default defineDeck({
+ label: "complete_task_mock",
+ contextSchema: z.object({
+ summary: z.string().optional(),
+ }).passthrough(),
+ responseSchema: z.object({
+ status: z.number(),
+ mocked: z.boolean(),
+ applied: z.boolean(),
+ tool: z.literal("complete_task"),
+ summary: z.string(),
+ }),
+ run(ctx) {
+ return {
+ status: 200,
+ mocked: true,
+ applied: false,
+ tool: "complete_task",
+ summary: ctx.input.summary ?? "Task completion captured by mock tool.",
+ };
+ },
+});
diff --git a/examples/local-chat/actions/escalate_task.mock.deck.ts b/examples/local-chat/actions/escalate_task.mock.deck.ts
new file mode 100644
index 000000000..8753dc63d
--- /dev/null
+++ b/examples/local-chat/actions/escalate_task.mock.deck.ts
@@ -0,0 +1,27 @@
+import { defineDeck } from "../../../mod.ts";
+import { z } from "npm:zod";
+
+export default defineDeck({
+ label: "escalate_task_mock",
+ contextSchema: z.object({
+ reason: z.string().optional(),
+ blocker: z.string().optional(),
+ }).passthrough(),
+ responseSchema: z.object({
+ status: z.number(),
+ mocked: z.boolean(),
+ applied: z.boolean(),
+ tool: z.literal("escalate_task"),
+ reason: z.string(),
+ }),
+ run(ctx) {
+ return {
+ status: 200,
+ mocked: true,
+ applied: false,
+ tool: "escalate_task",
+ reason: ctx.input.reason ?? ctx.input.blocker ??
+ "Escalation captured by mock tool.",
+ };
+ },
+});
diff --git a/examples/local-chat/actions/taxo_lookup_account.mock.deck.ts b/examples/local-chat/actions/taxo_lookup_account.mock.deck.ts
new file mode 100644
index 000000000..dda9f767a
--- /dev/null
+++ b/examples/local-chat/actions/taxo_lookup_account.mock.deck.ts
@@ -0,0 +1,33 @@
+import { defineDeck } from "../../../mod.ts";
+import { z } from "npm:zod";
+
+export default defineDeck({
+ label: "taxo_lookup_account_mock",
+ contextSchema: z.object({
+ customer: z.string().optional(),
+ domain: z.string().optional(),
+ }).passthrough(),
+ responseSchema: z.object({
+ status: z.number(),
+ mocked: z.boolean(),
+ applied: z.boolean(),
+ account: z.object({
+ id: z.string(),
+ plan: z.string(),
+ health: z.string(),
+ }),
+ }),
+ run(ctx) {
+ const key = ctx.input.customer ?? ctx.input.domain ?? "unknown";
+ return {
+ status: 200,
+ mocked: true,
+ applied: false,
+ account: {
+ id: `taxo-${key}`,
+ plan: "representative",
+ health: "ready_for_local_debug",
+ },
+ };
+ },
+});
diff --git a/examples/local-chat/taxo-runtime-tools.mock.md b/examples/local-chat/taxo-runtime-tools.mock.md
new file mode 100644
index 000000000..670013ddd
--- /dev/null
+++ b/examples/local-chat/taxo-runtime-tools.mock.md
@@ -0,0 +1,11 @@
++++
+label = "taxo_runtime_tools_mock"
+
+[[tools]]
+name = "taxo_lookup_account"
+description = "Look up a customer account in the Taxo-style support system."
+action = "./actions/taxo_lookup_account.mock.deck.ts"
++++
+
+Mock runtime tools for local customer-deck chat verification. The deck stays
+portable; the launcher supplies this tool surface at runtime.
diff --git a/examples/local-chat/taxo-support.deck.md b/examples/local-chat/taxo-support.deck.md
new file mode 100644
index 000000000..23de07e77
--- /dev/null
+++ b/examples/local-chat/taxo-support.deck.md
@@ -0,0 +1,13 @@
++++
+label = "taxo_support_chat_fixture"
+
+[modelParams]
+model = "codex-cli/default"
++++
+
+You are a customer support assistant for a representative external Gambit
+customer.
+
+When the user asks about an account, call `taxo_lookup_account` with the
+customer identifier or domain. Use the tool result to answer plainly, and say
+when the runtime did not supply the tool or the tool returned an error.
diff --git a/examples/local-chat/workloop-runtime-tools.mock.md b/examples/local-chat/workloop-runtime-tools.mock.md
new file mode 100644
index 000000000..a1b0c36fc
--- /dev/null
+++ b/examples/local-chat/workloop-runtime-tools.mock.md
@@ -0,0 +1,17 @@
++++
+label = "workloop_runtime_tools_mock"
+
+[[tools]]
+name = "complete_task"
+description = "Mark the current Workloop task complete."
+action = "./actions/complete_task.mock.deck.ts"
+
+[[tools]]
+name = "escalate_task"
+description = "Escalate or block the current Workloop task."
+action = "./actions/escalate_task.mock.deck.ts"
++++
+
+Mock Workloop runtime tools for local Chief debugging. These tools are supplied
+by the chat launcher so the Chief deck does not need Workloop-specific tool
+definitions embedded in the deck source.
diff --git a/packages/gambit-core/README.md b/packages/gambit-core/README.md
index e7ef1a3b6..3ceeae72c 100644
--- a/packages/gambit-core/README.md
+++ b/packages/gambit-core/README.md
@@ -24,7 +24,7 @@ can live in any host.
[`defineCard`](src/definitions.ts) that enforce Zod
`contextSchema`/`responseSchema`.
- Loader that understands Markdown decks/cards, inline embeds, and companion
- decks (`actionDecks`, `testDecks`, `graderDecks`).
+ deck references (`[[actions]]`, `[[scenarios]]`, `[[graders]]`).
- Guardrail-aware runtime (`runDeck`) that can mix LLM actions and pure compute
decks with structured tracing and execution context helpers.
- Response-first runtime helpers that plug into any model provider implementing
@@ -70,9 +70,9 @@ etc.).
spawning child decks.
- **Handlers**: Background decks triggered on busy/idle/error intervals. Paths
are resolved relative to the parent deck file.
-- **Companion decks**: `actionDecks` expose tools (function calls) to the model,
- `testDecks` house personas or scripted tests, and `graderDecks` evaluate saved
- transcripts.
+- **Companion decks**: `[[actions]]` expose tools (function calls) to the model,
+ `[[scenarios]]` house personas or scripted tests, and `[[graders]]` evaluate
+ saved transcripts.
All actual type definitions live under [`src/types.ts`](src/types.ts). Use them
when scripting tooling or writing custom providers.
@@ -193,12 +193,16 @@ Embedded cards or system hints can be referenced with markdown image syntax.
label: Support Triage
contextSchema: ./schemas/triage_input.ts
responseSchema: ./schemas/triage_output.ts
-actionDecks:
- - name: escalate
- description: Escalate to a manager
- path: ./actions/escalate.deck.md
-testDecks:
- - path: ./personas/test_bot.deck.md
+[[actions]]
+name = "escalate"
+description = "Escalate to a manager"
+path = "./actions/escalate.deck.md"
+
+[[scenarios]]
+path = "./personas/test_bot.deck.md"
+
+[[graders]]
+path = "./graders/support_triage.deck.md"
---

@@ -209,11 +213,11 @@ clarifying questions before choosing an action.
```
`loadDeck` normalizes relative paths, merges card fragments, enforces unique
-action names, and warns about deprecated fields (`actions`,
-`handlers.onInterval`, `intervalMs`). The Markdown loader also injects helper
-text for built-in tools like `gambit_context` when you add `gambit://` markers.
-Legacy `gambit_respond` and `gambit_end` markers are migration-only and now
-hard-fail in default runtime paths.
+action names, and warns about deprecated fields (`actionDecks`, `testDecks`,
+`graderDecks`, `handlers.onInterval`, `intervalMs`). The Markdown loader also
+injects helper text for built-in tools like `gambit_context` when you add
+`gambit://` markers. Legacy `gambit_respond` and `gambit_end` markers are
+migration-only and now hard-fail in default runtime paths.
## Compatibility and utilities
diff --git a/packages/gambit-core/deno.json b/packages/gambit-core/deno.json
index 412eacf9c..fbbdc162f 100644
--- a/packages/gambit-core/deno.json
+++ b/packages/gambit-core/deno.json
@@ -1,6 +1,6 @@
{
"name": "@bolt-foundry/gambit-core",
- "version": "1.0.0-rc.1",
+ "version": "1.0.0-rc.2",
"description": "Core runtime for Gambit decks.",
"license": "Apache-2.0",
"repository": {
diff --git a/packages/gambit-simulator/deno.json b/packages/gambit-simulator/deno.json
index fac1d6b29..7bf758e8f 100644
--- a/packages/gambit-simulator/deno.json
+++ b/packages/gambit-simulator/deno.json
@@ -1,6 +1,6 @@
{
"name": "@bolt-foundry/gambit-simulator",
- "version": "1.0.0-rc.1",
+ "version": "1.0.0-rc.2",
"description": "Simulator app and local debug UI for Gambit.",
"license": "Apache-2.0",
"repository": {
diff --git a/packages/gambit-simulator/simulator-ui/demo/gambit-ui-demo-script.md b/packages/gambit-simulator/simulator-ui/demo/gambit-ui-demo-script.md
index 314816795..044b33def 100644
--- a/packages/gambit-simulator/simulator-ui/demo/gambit-ui-demo-script.md
+++ b/packages/gambit-simulator/simulator-ui/demo/gambit-ui-demo-script.md
@@ -20,8 +20,8 @@ Gambit answers one question: what happened, exactly, when this AI system ran. It
is open source, deterministic, stateless, and code-first. It produces ground
truth artifacts like runs, traces, and grades.
-Gambit is not a system of record or a multi-user product. Bolt Foundry stores
-and compares artifacts over time. Gambit executes and tells the truth.
+Gambit is not a system of record or a multi-user product. Hosted products can
+store and compare artifacts over time. Gambit executes and tells the truth.
If you can run it, you can inspect it. That is the core promise.
diff --git a/packages/gambit-simulator/simulator-ui/src/DocsPage.tsx b/packages/gambit-simulator/simulator-ui/src/DocsPage.tsx
index 5004c9348..431f93c97 100644
--- a/packages/gambit-simulator/simulator-ui/src/DocsPage.tsx
+++ b/packages/gambit-simulator/simulator-ui/src/DocsPage.tsx
@@ -24,8 +24,8 @@ export default function DocsPage() {
Test an agent. See where it fails. Fix it fast.
- Gambit is an open-source agent harness framework. It's designed to
- make it simple to create, debug, and fix AI workflows, agents and
+ Gambit runs synthetic scenarios, grades behavior, and preserves the
+ evidence you need to debug regressions in AI workflows, agents, and
assistants.
@@ -60,7 +60,9 @@ export default function DocsPage() {
If something looks wrong
Leave a quick rating and a short note explaining why.
-
Failures get captured for evaluation.
+
+ Failures get captured as evidence for evaluation and replay.
+