Bootstrap Workspace (starter blueprint)
Slug:
bootstrap-workspaceType:agent_blueprintSource: code-defined; appears in every tenant'sagent_blueprint://listautomatically. Fork viaagents.fork_blueprintto customize. Outputs: one boolean (bootstrap_complete)
The workspace canon gate. Verifies a voice_profile, at least one content_pillar, and at least one author_profile exist before any content blueprint runs. Halts with structured pause context when canon is missing so the calling LLM can dispatch the matching setup widget.
When to use it
- Composed automatically by
plan_and_draft_window(and indirectly via that composite when drafting throughdraft_piece). You should rarely need to invoke it directly. - Run it on demand from the chat panel when you want to pre-flight a workspace before a long planning run.
- Use it as the first step in a tenant fork that adds custom canon checks (e.g. "must also have an
inspirational_referenceartifact"). Append your own assert steps after the platform asserts in your fork.
What it produces
A single data output: bootstrap_complete: boolean. Reaching the end of the run means every canon assertion passed.
The blueprint does NOT create or modify any artifacts. It only reads workspace state. When it halts, no side effects have happened.
Inputs
This blueprint declares no inputs. It always reads the calling API key's workspace.
How it runs
7 top-level steps:
- list_voice —
tool.read_resource voice_profile://list. Saves the result as$voice_list. - assert_voice —
assert. Halts the run withbootstrap_required: voicehalt message when$voice_listis null. The calling LLM treats the halt message as a pause type and surfaces the voice upload widget. - list_pillars —
tool.read_resource artifact://list?artifact_type=content_pillar. Saves the result as$pillar_list. - assert_pillars —
assert. Halts withbootstrap_required: pillarswhen no content_pillar exists. - list_authors —
tool.read_resource author_profile://list. Saves as$author_list. - assert_authors —
assert. Halts withbootstrap_required: authorswhen no author_profile exists. - assemble_result —
transform. Reaching this step means every canon assertion passed; emits the final boolean.
Pause types and resume contract
The blueprint produces three pause types, one per missing canon kind:
| Pause type | Halt message prefix | Resume requires |
|---|---|---|
bootstrap_required: voice | bootstrap_required: voice. Workspace has... | a voice_profile artifact to exist |
bootstrap_required: pillars | bootstrap_required: pillars. Workspace... | at least one content_pillar artifact |
bootstrap_required: authors | bootstrap_required: authors. Workspace... | at least one author_profile artifact |
The chat panel pause widget registry recognizes the bootstrap_required prefix and dispatches per missing item:
- voice widget — voice upload (writing samples) or manual description form.
- pillars widget — pillar curation (manual entry, doc upload + AI extraction with
review_status='pending_review'). - authors widget — author setup (link to one of the workspace users + select voice_profile).
After the user provides the missing canon, the calling LLM continues walking the recipe. Re-read workspace state from the top; subsequent asserts may halt again on the next missing item until all three are present.
Reading and walking it
On the MCP tool surface there is no run-blueprint tool — read the recipe and walk its steps yourself. Via MCP from an external Claude Desktop:
read_resource agent_blueprint://bootstrap-workspaceThen perform each step with your own primitive tools (no inputs are required for this recipe). Most callers don't walk bootstrap_workspace directly — they walk plan_and_draft_window, which composes bootstrap_workspace as the first sub-step. The pause behavior is the same either way.
This recipe-you-walk model is the interactive MCP path. Platform-initiated runs (the universal-ui "Run now", schedule / event / webhook triggers, replay, and backtest sweeps) instead go through the headless SDK runner, which drives a server-side agent to completion against the app's own /mcp endpoint and writes a blueprint_runs audit row. See blueprint-runner-sdk.md.
Forking it
agents.fork_blueprint source=bootstrap-workspace new_slug=<your-fork>Common forks:
- Stricter pillar rule — assert that at least N pillars are
review_status='approved'(not just present), so unreviewed AI-extracted pillars don't unblock the gate. - Custom canon items — add asserts for tenant-specific canon (e.g. "needs a
brand_guidelinesartifact" or "needs anicp_profileartifact"). - Bypass for explicit override — accept an input flag
force_bypass: booleanthat short-circuits the asserts when an admin needs to run a content blueprint without canon.
Limits
- Reads are not cost-bounded server-side in v1.
- The blueprint reads the API key's workspace only; cross-tenant canon checks are blocked at the operation registry boundary.
- Pause/resume requires the calling LLM to support it. Direct CRUD callers (REST clients hitting
/api/platform/v1/blueprint-runsdirectly) get the structured halt message in the error envelope but must drive their own UI to resolve it.