The old examples/ tree — the runnable demo leaves (acp-agent, headless-agent, jsonrpc-agent, web-cordis, web-schedule) over the packages/examples demo bundles (acp-demo, jsonrpc-demo) — was deleted upstream (commit 4125514a08). Demos are no longer a separate tree; they live in three places:
- CLI config overlays —
apps/cli/config/examples/ships opt-in patches you apply over the shipped Web composition withdsh web --patch/dsh --profile web --patch. - Test profiles —
apps/cli/tests/profiles/is the integration-test tree that boots the real shippeddshprofiles (acp,headless,sdk) end to end. - App bundles — the runnable products are the new bundles
packages/bundle/acp-app(dsh --profile acp),bundle/sdk-app(dsh --profile sdk), and the standalonebundle/sdk-minimal, composed overdsh-baseby the profile templates inpackages/boot/app-boot/src/profile.ts.
packages/examples/ now retains exactly one package: agent-spine-demo.
The CLI config overlays (apps/cli/config/examples/)
These are patch overlays over the shipped Web composition (dsh-base + dsh-web-app bundle layers) — "not a tree": dsh web --patch <file> applies one more sibling patch list at the same include level, and a patch replaces the targeted row's whole config. Per apps/cli/tests/profiles/AGENTS.md they are product assets, not test fixtures.
| Overlay | Files | What it demonstrates |
|---|---|---|
cordis/ | cordis.yml | The self-referential Cordis-tools demo, moved here: inserts @deepseek-ai/dsh-cordis-host-runner + @deepseek-ai/dsh-tool-cordis; pins the webserver to port 3081 to stay off the default 3080 |
github-review/ | cordis.yml + github-ready-review-rule.mjs | The opt-in GitHub webhook overlay: dsh-webhook + dsh-webhook-github (isolated second webserver in its own realm on DSH_GITHUB_WEBHOOK_PORT ?? 3081) + a local rule module registering a kind: 'github' webhook rule that starts a read-only Workspace Session review when a PR becomes ready_for_review |
mcp-memory/ | memorix.cordis.yml, mcp-reference-memory.cordis.yml, engram.cordis.yml | Three default-off third-party memory MCP reference configs via @deepseek-ai/dsh-mcp-client (Memorix 1.3.0, @modelcontextprotocol/server-memory 2026.7.4, Engram 1.20.0); DSH starts the stdio child / connects the HTTP server but does not install or supervise it |
schedule/ | cordis.yml | The opt-in Schedule overlay: dsh-time-context + dsh-schedule inserted and ui-schedule enabled, so the model can use schedule_create/list/delete with IANA-zone time context |
The mcp-memory run commands are now:
dsh web --patch "$PWD/apps/cli/config/examples/mcp-memory/memorix.cordis.yml"
# or mcp-reference-memory.cordis.yml, or engram.cordis.ymlThe test profiles (apps/cli/tests/profiles/)
apps/cli/tests/profiles/AGENTS.md: this tree owns cross-package behavior of the shipped dsh profiles, and the config examples are product assets, not fixtures.
acp/—cordis.yml(an ACP snapshot-record patch over the shippedacpprofile:llm-deepseekwith the vision model,sandbox-policy/approvaldriven byDSH_PERMISSION_MODE, JSONL sessions) plus the keyless ACP e2e suites (tests/): acp, cleanup, control-surface, escalation, goal, hooks, image-offload — the direct successor of the oldexamples/acp-agent/tests/snapshots/story.headless/—cordis.yml(the one-shot composition base:settings-file,credentials-local, the official DeepSeek extensions, the agent spine,goal,retry, …) plus nine recorded-session overlays (*.cordis.snapshot.yml: credentials, goal, retry, semantic-checkpoint, subagent-diagnostic/inheritance/settlement, team, workspace-context-resume) — the successor ofexamples/headless-agent. Run the product the same way as before:shpnpm dsh --profile headless "fix the failing test in this workspace"sdk/—keyless-smoke.e2e.ts(+fixtures/) spawns the bin with--profile sdkand verifies the JSON-RPC surface without a model credential.
The app bundles (packages/bundle/acp-app, sdk-app, sdk-minimal)
The runnable demo products are now real profile bundles. packages/boot/app-boot/src/profile.ts (PROFILE_TEMPLATES) maps:
| Profile | Bundle stack | Notes |
|---|---|---|
acp | dsh-base + dsh-acp-app | Automation-only ACP over JSON-RPC stdio; cordis.patch.yml disables session-title-llm, inserts acp-app-startup + acp (provider: deepseek-official, model: deepseek-v4-flash) |
sdk | dsh-base + dsh-sdk-app | Stdio JSON-RPC serving and process lifecycle (sdk-app-startup with profile: sdk + sdk-jsonrpc-server) |
sdk-minimal | dsh-sdk-minimal alone | Complete standalone tree — sdk-jsonrpc-server, one DeepSeek adapter, persistent shell, str_replace_editor, JSONL sessions — deliberately not layered over dsh-base |
headless | dsh-base + dsh-headless | One-shot coding agent with format-pure stdout (unchanged seam, now exercised from apps/cli/tests/profiles/headless/) |
First use materializes the template as $DSH_HOME/profiles/<name> (pnpm-workspace.yaml, cordis.patch.yml, dsh.profile.bundles), after which you can extend it with dsh plugin --profile <name> add <package>. The ACP tests are referenced from apps/cli/tests/profiles/acp/.
dsh --profile acp # boot the ACP bundle
dsh --profile sdk # boot the SDK JSON-RPC bundle
dsh --profile sdk-minimal # standalone minimal SDK treepackages/examples/: just the spine
packages/examples/ retains only agent-spine-demo (@deepseek-ai/dsh-agent-spine-demo) — "the default executor-less, UI-less agent spine as one Cordis bundle plugin: the fixed service set, concrete loop, and model-facing consumers an app package composes by adding an entry point and backends." acp-demo and jsonrpc-demo are gone (their roles moved into the dsh-acp-app and dsh-sdk-app bundles).
agent-spine-demo: the "spine"
The spine is the shared, executor-less, UI-less agent bundle — the common services, background-job registry and controls, optional persisted goals, the concrete agent loop, local skill and agent-instructions providers, and model-facing shell/skill consumers. Deployments still choose the LLM adapter, bash executor, and presentation. It mounts dsh-llm, dsh-session, dsh-system-prompt, dsh-tools, dsh-skill + dsh-skill-filesystem, dsh-agent, dsh-goal + dsh-goal-round-driver, dsh-jobs-local, dsh-invariants (with the four core companions), dsh-agent-loop, and dsh-llm-retry — plus dsh-tool-bash, dsh-tool-skill, dsh-tool-jobs, and workspace context via dsh-agent-instructions.
// packages/examples/agent-spine-demo/src/index.ts (excerpt)
export const name = 'agent-spine-demo'
// …imports Timer, LlmRuntime, SessionStore, SessionTitleService, SystemPrompt,
// ToolRuntime, SkillRegistry, AgentRegistry, GoalService, LocalJobRegistry,
// InvariantRegistry + invariant companions, AgentLoop, llmRetry, …The plugin intentionally exposes named exports only — Loader default unwrapping would discard its Config schema (documented in docs/postmortem/0001-acp-default-export-drops-inject.md).
Root scripts at this revision
The old demo:acp / demo:cordis / demo:code-mode scripts are gone. Only two demo:* scripts remain in the root package.json:
"demo:ptc": "node scripts/demo-ptc.mjs",
"demo:inspector":"node --import tsx/esm apps/cli/src/bin.ts web --patch ./packages/experimental/inspector/cordis.source.patch.yml",
"mock:llm": "node --import tsx packages/test-support/llm-mock-server/src/bin.ts"demo:ptcruns one headless task through the shipped PTC-mode composition (dsh --profile headlesswithDSH_TOOLS_MODE=ptc); requires a model credential.demo:inspectorboots the web profile with the experimental inspector overlay.mock:llmstarts the scriptable LLM fault server for local recovery tests (unchanged).
Version table
Further reading
- Testing strategy — the profile e2e suites that boot
apps/cli/tests/profiles/*. - Vendored libraries — the Cordis framework every
cordis.ymlloads. - Agent Client Protocol (ACP) — what
dsh --profile acpserves. apps/cli/tests/profiles/AGENTS.md— the profile test-tree conventions.packages/boot/app-boot/src/profile.ts—PROFILE_TEMPLATES, the authoritative profile→bundle map.packages/examples/agent-spine-demo/README.md— the spine bundle's configuration surface.docs/postmortem/0001-acp-default-export-drops-inject.md— why the spine uses named exports.