Cofounder CLI
Playbooks
Cofounder-defined goals an agent pursues for your company, one routine run at a time, using the cofounder CLI on the company's behalf.
A playbook is a goal Cofounder defines, such as creating a brand identity or generating a video. Cofounder writes and maintains each playbook's instructions, so improvements reach every company on its next routine run.
A playbook run is your company pursuing one playbook. It is one agent in a
sandbox that has the cofounder CLI, signed in as the person who started the
run. The agent works in routine runs: each one is a turn of that same
agent, so it keeps its context and sandbox from one routine run to the next.
Routine runs happen on the run's schedule, or right away when you continue the
run. The agent keeps its progress in two places: Library files people read,
and progress notes it posts to the company's event log, tagged with the run's
id, which cofounder events list --attribute run_id=<id> returns. When the
goal is met, the backend completes goal-driven runs automatically and future routine runs stop. A
company can have several playbook runs, of the same playbook too.
Find a playbook and start a run
| MCP | CLI | API |
|---|---|---|
playbooks_list | cofounder playbooks list | GET /cofounder-cli/v1/playbooks |
playbooks_get | cofounder playbooks get --playbook-key <key> | GET /cofounder-cli/v1/playbooks/{playbook_key} |
playbooks_runs_start | cofounder playbooks runs start --playbook-key <key> --request-id <uuid> | POST /cofounder-cli/v1/playbooks/{playbook_key}/runs |
start creates the run, starts its first routine run right away, and
schedules the rest on the playbook's default schedule. It spends model
usage. Generate a fresh --request-id UUID and reuse it if the response gets
lost: the request id becomes the run's id, and reusing it never starts a
second run.
Set --max-routine-turns <count> and/or --deadline-at <timestamp> on start
or update to bound a run. The deadline must include a timezone. The turn limit
includes the first turn, scheduled turns, and manual continue requests;
replaying the same request does not use another turn. A failed or interrupted
launch still counts once it has been admitted, because the runner may have
accepted it. Historical successful turns count too.
Both limits default to unlimited. Updating one leaves omitted fields unchanged;
an explicit JSON null in the update API clears that limit. Reusing a start
request returns the existing run and does not change its limits.
At the limit or deadline, no new turn starts and scheduling switches off. The run stays incomplete, with its files and progress intact. Work already running, including verification, may finish. Raise or clear the limit and re-enable scheduling to resume; manual continuation also checks the limits.
Every run also has a budget: a lifetime cap on the company credits it may
spend, set with --budget-cents <cents> on start. Without it, a run gets its
playbook's default_budget_cents, which list and get show: $50 (5000)
unless the playbook sets its own. The paid operations the run's agent performs
draw from the company's credit balance as usual and count against the budget,
net of refunds, along with holds for work still in progress. A charge that
would take the run past its budget is refused, and the run pauses with reason
budget_exhausted. Raise the budget with update --budget-cents <cents>, then
resume the run with runs resume, which is refused while the run's spend is at
or above its budget. Lowering a budget to the run's spend or below pauses the
run. A paused run's limits and budget can change, but its schedule changes only
once it runs again.
list and get include each playbook's prerequisite guidance and structured
prerequisite_checks, with recovery instructions for requirements the backend enforces.
If a prerequisite is missing, start returns a 409 error with
missing_prerequisites before creating a run or schedule or launching the agent.
Fix the missing input and retry with the same request id.
Manage a run
| MCP | CLI | API |
|---|---|---|
playbooks_runs_list | cofounder playbooks runs list | GET /cofounder-cli/v1/playbooks/runs |
playbooks_runs_get | cofounder playbooks runs get --run-id <id> | GET /cofounder-cli/v1/playbooks/runs/{run_id} |
playbooks_runs_update | cofounder playbooks runs update --run-id <id> | PATCH /cofounder-cli/v1/playbooks/runs/{run_id} |
playbooks_runs_cancel | cofounder playbooks runs cancel --run-id <id> | POST /cofounder-cli/v1/playbooks/runs/{run_id}/cancel |
runs get shows a run's status (running, paused, completed, or cancelled),
why a paused run is paused, its limits, budget and spend, schedule, and next
routine run time.
update changes the --schedule, a standard
five-field cron expression (minute, hour, day of month, month, day of week)
evaluated in the run creator's timezone, or turns scheduled routine runs on
and off with --enabled. The run's agent posts progress notes to the company
event log with events post; each playbook describes what its notes carry,
and they read back through events list --attribute run_id=<id>.
cancel permanently stops future routine turns and records cancelled, preserving
files and verification history. Work already admitted may finish, but cannot mark
the run completed. Repeating cancellation is safe. A completed or cancelled run
cannot be reopened; start a new run to pursue the goal again.
Completion requires the nonempty Library files listed in the run's
required_outputs, plus passing results for every required verification criterion.
Saved Library files must still match their reviewed revisions. Editing a stage's
files requires verification again. Missing files or unfinished, failed, or
uncertain required judgments leave the run open. Optional criteria do not block
completion. The backend checks after relevant Library writes, after judges finish,
and before launching another turn.
Disable a run's schedule with update --enabled false to pause it, or use
cancel to end the run. For a playbook without verification
criteria, completion checks that outputs were delivered, not their quality.
Required user_judge stages must pass before the run can complete. Approval passes a stage. Rejection fails it and gives the agent your feedback. Without a response, the stage waits.
Verification from a playbook agent
These commands require the company API key bound to a playbook run. Ordinary company keys and signed-in user sessions cannot call them. The backend selects the company and run from the credentials; do not supply a run ID.
cofounder playbooks verification show
cofounder playbooks verification show --stage voice
cofounder playbooks verification submit --stage voiceshow returns the stages and statuses, or one stage's criteria, evidence,
findings, and attempts. submit queues evaluation without waiting. Independent
agent judges read the stage's saved Library files through Cofounder CLI and return
a verdict and reason for each criterion. They run in their own sandboxes.
Unchanged files reuse the same submission; interrupted jobs reconnect to the same
judge. Binary checks and human reviews retain their configured Library inputs. Read the
updated board with show. not_configured means no
evaluation was queued, not that the stage passed.
Each run exposes a dated library_folder, for example
general/playbooks/find-customers/2026-10-06_153000.000000Z. Save each stage under its key,
such as .../icp/. The backend inserts this guidance in the run's goal.md.
Choose useful filenames; the judge does not require a file schema or citation
format. Keep canonical company documents in their usual locations and copy the
inputs needed for this review into the stage folder. File revisions are recorded
automatically. If they change, show asks for a new submission and the old pass
cannot complete the run.
The commands appear in CLI help, but access is enforced on every backend request. They are not exposed as MCP tools.
Review a playbook's work
The playbook defines its review question and evidence in code.
When the agent requests verification, Cofounder saves the submitted evidence.
By default, the run creator gets an email linking to the dashboard review.
When PLAYBOOK_DOT_REVIEWS is enabled for the reviewer and company, the
review-request event triggers their subscribed dot instead of sending email.
The dot presents the question and saved evidence, then asks you to Approve
or Reject with an optional comment. The flag defaults off in every environment.
The decision is saved to the same verification attempt: Eve reads the pass/fail
result and your feedback with cofounder playbooks verification show.
Only that person's signed-in session can submit the decision, through the dashboard, CLI, or an authenticated MCP connection. A dot can present the request and record your explicit decision and comment. Company API keys, including the playbook agent's key, cannot approve the work. The dashboard shows the saved version, decision, comment, and decision time. A new submission replaces the pending request when its evidence changes. Replaced requests cannot receive a decision.
| MCP | CLI | API |
|---|---|---|
playbooks_reviews_list | cofounder playbooks reviews list | GET /cofounder-cli/v1/playbooks/reviews |
playbooks_reviews_get | cofounder playbooks reviews get --review-id <id> | GET /cofounder-cli/v1/playbooks/reviews/{review_id} |
playbooks_reviews_submit | cofounder playbooks reviews submit --review-id <id> --decision approve --comment "Ready to use." | POST /cofounder-cli/v1/playbooks/reviews/{review_id}/decision |
playbooks_runs_reviews_list | cofounder playbooks runs reviews list --run-id <id> | GET /cofounder-cli/v1/playbooks/runs/{run_id}/reviews |
Use --decision reject to return feedback for revision. Repeating the same
decision and comment is safe; a conflicting decision is refused.
For notifications in a dot or Work chat, connect the plugin and ask it to
monitor playbook.review.requested for your company after the rollout flag is
enabled. Plugin setup offers this
subscription after selecting a company. Installation alone does not subscribe.
The event contains the company, run, review, and attempt IDs; the dot reads the
saved evidence before asking you to decide. It never treats the event as approval.
New subscriptions cover new requests; playbooks_reviews_list finds earlier
pending requests. With the flag on but no subscription, the request remains
pending until you read and decide it; email is not an automatic fallback.
Turning the flag off stops dot delivery and restores email for new review
notifications. The dashboard continues to show saved requests and decisions.
Brand launch-post rounds
New brand identity runs end with launch-post variants from one canonical brand. Existing runs keep their saved stages. Each variant contains a styled image and caption or description. The playbook creates three variants by default. Each submission accepts one to six variants. It uses existing business documents and a brand kit. A built product or live website is not required.
Every new round requests an independent agent assessment and user review of the same saved evidence. The agent records each variant's verdict and comment, and recommends Pass or Iterate for the round. Its assessment is recorded for comparison and is not shown in the review UI. It does not control completion or replace your guidance.
Approve or reject any number of variants. Add feedback, including required guidance for each rejected variant. Choose Pass stage to approve this stage, or Request another round to continue. The dashboard saves your variant votes and feedback with this explicit round decision. Individual variant approvals do not pass the stage. New runs require only the launch-post stage and the saved canonical outputs to complete.
Eve reads your feedback on its next turn. Guidance that changes the brand must change canonical documents and assets first. Eve generates new variants from the updated sources. Requests for more expressions can reuse the current canonical brand. Changed sources or artifacts require a new submission. Saved rounds retain both judgments for comparison.
The agent acts as the run's creator through one company API key, named
Playbook run <id> in cofounder company api-keys list. Each routine run
keeps it valid for another 24 hours; a run that stops lets it expire. Because
the agent acts with the creator's access, only the creator can update,
continue, or cancel a run; any company member can list and read it. The agent
itself can do anything the creator can do in the company except change
billing, start, update, or resume a run, or decide approvals, so it cannot
raise its own budget.
Continue a run and check its routine runs
| MCP | CLI | API |
|---|---|---|
playbooks_runs_continue | cofounder playbooks runs continue --run-id <id> --request-id <uuid> | POST /cofounder-cli/v1/playbooks/runs/{run_id}/routine-runs |
playbooks_runs_routine_runs_list | cofounder playbooks runs routine-runs list --run-id <id> | GET /cofounder-cli/v1/playbooks/runs/{run_id}/routine-runs |
continue starts one routine run right away, outside the schedule, and
spends model usage like a scheduled one. Reuse its --request-id if the
response gets lost. A routine run is starting until the runner accepts it,
then started; one the runner could not take is failed, with the reason.
An attempt blocked by the turn limit or deadline is skipped, with reason
turn_limit_reached or deadline_reached. A reclaimed launch that may already
have reached the runner is also skipped with already_admitted.
What it produced shows up in the run's progress events and the Library files
it writes.
Prerequisites are checked again before every manual or scheduled turn. If an input has been removed or archived, that routine run fails with a recovery message without launching the agent. Restore the input and continue with a new request id, or wait for the next scheduled turn.
Approvals
| MCP | CLI | API |
|---|---|---|
| — | cofounder playbooks approvals create --request-id <uuid> --kind <kind> --blocking --title <text> | POST /cofounder-cli/v1/playbooks/approvals |
playbooks_approvals_list | cofounder playbooks approvals list --run-id <id> | GET /cofounder-cli/v1/playbooks/runs/{run_id}/approvals |
playbooks_approvals_get | cofounder playbooks approvals get --approval-id <id> | GET /cofounder-cli/v1/playbooks/approvals/{approval_id} |
playbooks_approvals_approve | cofounder playbooks approvals approve --approval-id <id> --feedback <text> | POST /cofounder-cli/v1/playbooks/approvals/{approval_id}/approve |
playbooks_approvals_reject | cofounder playbooks approvals reject --approval-id <id> --feedback <text> | POST /cofounder-cli/v1/playbooks/approvals/{approval_id}/reject |
playbooks_runs_resume | cofounder playbooks runs resume --run-id <id> --request-id <uuid> | POST /cofounder-cli/v1/playbooks/runs/{run_id}/resume |
A run's agent asks for a decision by creating an approval: a social_post,
email_draft, or other, with a title
and a JSON --payload holding what the decider needs to see. Only a playbook
run's own agent can create one, through the CLI, and it belongs to that
agent's run. A blocking approval (--blocking; --no-blocking queues
it) pauses the run: no routine run starts, on demand or on
schedule, until it is decided and the run is resumed. A non-blocking approval
queues while the run keeps going.
approve and reject only record the decision and optional --feedback;
the agent acts on them in a later routine run. A decision is final; repeating
it the same way changes nothing. Once
no blocking approval is pending, the decision's next step is runs resume,
which sets the run running and starts a routine run. The first routine run
after a pause lists every approval decided since, with its feedback, even if
an interrupted resume has to be retried. Resume spends
model usage like continue, and its routine run still counts against the
run's turn limit and deadline. A paused run can still be cancelled. Only the run's creator can decide approvals or
resume a run, and the run's own agent can do neither. Anyone in the company
can list a run's approvals and their history.
The playbooks
Brand identity (brand-identity) creates the company's identity, voice, and
design kit. It requires general/ICP.md, general/product.md,
general/value.md, and general/pain.md to already contain substantive business
context. It does not create these prerequisite documents. The backend requires
all four to be active Library files with nonempty stored content before creating
a run and before each new turn. Missing inputs return specific recovery
instructions; Eve and the verification judges check whether the answers are
substantive and consistent. Before starting, it also requires a
company brand design kit: a generated version or imported design kit in the
company Library. Approval or locking is not required. Create a missing kit with
cofounder company brand generate and inspect cofounder company brand get.
Existing runs created under brand-voice keep their saved key and settings path.
Listing runs for brand-identity includes those earlier runs.
Start it with playbooks runs start. Its routine runs happen hourly until the
backend automatically completes the run. It updates marketing/brand_identity.md,
marketing/brand_voice.md, design/design-tokens.json, and
design/brand-guidelines.md, using the existing brand tools for kit assets
and their canonical design/brand-kit-versions.json history.
Working notes, audits, candidate drafts, and trial responses stay in Eve's
sandbox. The Library holds canonical company documents and reusable assets.
New runs verify the brand through the launch-posts stage. The identity, voice,
and design-kit documents remain required source evidence, without separate agent
approval stages. Save the variants in the Library folder shown by
verification show --stage launch-posts. Automatic completion requires all
canonical outputs and your Pass stage decision on the current submission;
the agent's assessment is advisory. Existing runs keep the stages saved when
they started, including any identity, voice, and design-kit checks on
their verification board. Voice updates preserve founder-approved lines. The
playbook does not lock a kit or deploy it to customer apps without the owner's
authorization.
Generate video (video-gen) makes the video the user asked for. Its
routine runs happen daily at 08:00: each finds the newest video request in the
company's events, installs HyperFrames, authors an HTML/CSS/GSAP composition,
renders it, and improves the video's overall quality.
It saves the MP4 to playbooks/<run id>/video.mp4 in the Library.
It saves your brief to playbooks/<run id>/video-brief.md.
A reference video is optional; your written request can serve as the brief.
Its progress notes hold the request, production status, deliverable path, and next steps.
The required final-video stage asks you to review the video.
The agent requests your approval after saving the brief and playable MP4.
It waits for your decision and uses rejection feedback on its next turn.
After approval, the backend completes the run automatically if the saved work still matches the reviewed version.
An unclear request, blocked render, or missing approval leaves the run open.