Reference

On this page

Configuration#

Every setting Prepcook keeps, grouped the way Settings groups them, with its default. Settings are stored in config.json in the app data directory (~/.local/share/prepcook on Linux, ~/Library/Application Support/prepcook on macOS), currently in its v10 shape. The Settings pages write that file; a setting marked file only has no control on a page and is changed by editing the file while Prepcook is stopped. The orchestrator re-reads its settings on every poll, so a change made in Settings applies without a restart.

Defaults below are what a new config starts with. "Unset" means the key is null or absent, and the behaviour described applies.

Orchestrator#

Settings → Orchestrator. Global values; most can be overridden per board (below).

Key Default What it does
orchestrator.mode off Enable automatic agent launches. auto scans the boards and runs the stages; off runs nothing on its own.
orchestrator.poll_interval_secs 15 Poll interval: seconds between scans.
orchestrator.max_launches_per_tick 3 Max launches per tick: new agent sessions started per scan, highest priority first.
orchestrator.autonomy off Autonomy mode. full is Prep mode: passing plans self-approve, verified fixes go to Review, approved reviews go to Shipped. off is Chef mode.
orchestrator.autonomy_review_iterations 3 Review-fix rounds before escalating: fix rounds before a card that keeps getting REQUEST CHANGES waits for a person. Applies in both modes.
orchestrator.pattern_threshold 5 Pattern-review threshold: linked RCAs on one graph node that file a pattern review (rca-graph.md). Older configs call it investigation_threshold, which is still read.
orchestrator.default_board unset (the first board in project_defaults) File only. The board POST /api/cards files into when the request names none (api.md).
orchestrator.deployed_retention_days unset (off) Auto clean-up after: days a card may sit in an older board's Close column before it moves to Clean up (a card Clean up would refuse stays). A board with Shipped is cleaned up by hand.
orchestrator.cleanup_retention_days unset (keep) Delete after: days a card may sit in Clean up before it is deleted. Cards with a pinned workspace or a takeover are kept.
orchestrator.workspace_retention_days 30 Workspace retention: days after clean-up before a workspace's records, sessions and logs are deleted. Unset keeps them.
orchestrator.digest_at_local unset (off) File only. Local HH:MM at which the engineers' digest is sent to each board's notification targets.
orchestrator.eob_at_local unset (off) File only. Local HH:MM at which each in-flight ticket gets its daily update on the tracker (working-alongside-people.md).
orchestrator.daily_timezone unset (America/Los_Angeles) File only. IANA zone the two times above are read in.
orchestrator.project_defaults empty Automated projects: the boards the orchestrator scans, keyed by board id, each with its repositories and overrides. A board needs at least one repository.
orchestrator.seat_monitor false File only. Probe the Claude subscription seat with a headless claude -p every six hours and notify the global notification targets when its login has expired, for a shared runner. Off, Prepcook never runs claude on its own; Settings → Claude → Re-check now still probes on demand.
executor_profile Claude Code, default variant Settings → Agents → Default profile (also Settings → General → Default Coding Agent): the profile every stage starts from (Agents).

Agents#

Settings → Agents. Which coding agent profile runs each orchestrator stage. A profile is an agent and an optional variant, written { "executor": "CLAUDE_CODE", "variant": "SONNET" }; the agents and their shipped variants are listed under Coding agents, and Settings → Agent profiles adds variants of your own.

Key Default What it does
agents.stages.planning unset (executor_profile) Planning: specs, RCAs and investigations, and the follow-ups that revise them.
agents.stages.executing unset (executor_profile with the agent's economy variant: Claude Code SONNET) Executing: the change, and every fix round, CI fix, rebase and merge-request description in its worktree. The economy variant applies, here and below, only when executor_profile names no variant (method.md).
agents.stages.reviewing unset (executor_profile with the economy variant) Reviewing: the independent review session. A fresh review started from a workspace defaults to it when it is set.
agents.stages.comment_reply unset (executor_profile with the economy variant) Comment replies: answers to comments on shipped tickets (the comment_reply playbook).
agents.stages.pattern unset (executor_profile with the economy variant) Pattern reviews: the pattern:planning session and the rca_analysis runs that link RCAs into the graph.

A stage resolves, most specific first: the board's agents.stages.<stage>, the global agents.stages.<stage>, then the stage's default built from the board's executor_profile, else the global one. A follow-up continues its session's conversation, so it can change variant but not agent: a stage moved to another agent takes effect from that stage's next new session.

Each agent's card shows whether a sign-in was found, read from the agent's own files when the page opens (nothing is probed at startup), and Test runs its command with --version for at most 10 seconds.

Ticketing#

Settings → Integrations → Ticketing. Where cards come from: a ticket tracker, or an incident tool whose open incidents become investigation cards (incidents.md). Without one no tracker is configured: every card is made on the board, the ticket pickup does not poll, and nothing is written to a ticket (method.md).

The section is ticketing. A config that still calls it tracker (and a board override called tracker or jira) is read the same way and saved as ticketing. One section serves every kind: each kind reads the fields its provider names (below), and fields that only one kind reads carry its name, so switching kinds never hands one service another's credentials.

Key Default What it does
ticketing.mode tickets Source. tickets takes tickets from a tracker (jira, github_issues); incidents takes open incidents from an incident tool (pagerduty) as investigation cards. A kind that does not serve the mode leaves no tracker configured, and Prepcook logs why.
ticketing.kind jira The provider: jira, github_issues, pagerduty, or linear (named, not implemented: every call to it says so). Its own fields are in Ticketing providers.
ticketing.import_filter unset (by kind: Jira's open-sprint To Do tickets assigned to you, by priority; GitHub's state:open assignee:@me; PagerDuty's open incidents) Import filter: the query the import dialog runs, in the provider's syntax. {project_key} is substituted.
ticketing.enabled false Pick up new tickets automatically for the board below.
ticketing.project_id unset Import into project: the board picked-up tickets land on.
ticketing.pickup_filter unset (by kind: project = {project_key} AND priority in (P0, P1) AND issuetype = Bug; state:open label:bug; status:triggered,acknowledged) Pickup filter: which new tickets are picked up.
ticketing.assigned_filter unset (off) Assigned pickup filter: tickets assigned to the agent's account, imported and started whatever their priority.
ticketing.poll_secs 45 Poll interval of the ticket pickup.
ticketing.incidents.resolve_on_triage false Resolve the incident when it is triaged (incidents mode). Off, the incident only gets the triage report as a note.
ticketing.status_mapping.planning unset (In Progress) Stage statuses: where a ticket moves when Plan starts (a label on GitHub Issues). Plan also assigns the ticket to the agent. Not used in incidents mode, where Plan acknowledges the incident.
ticketing.status_mapping.executing, .reviewing, .pushed_mr, .done unset (no move) Where a ticket moves when that stage starts. pushed_mr and done follow the card's pull request, not a column: pushed_mr when it opens, done when it merges (or, for a card that never had one, when it is cleaned up); on GitHub Issues done also closes the issue.
ticketing.status_mapping.triaged unset (no move) Triaged: where an investigation's ticket moves when its triage report is in; the card stays in Plan (method.md).
ticketing.status_mapping.shipped Merged, Deployed to Production, Done Shipped statuses: names that mean the work shipped, for reopen detection and the clean-up sweeps. On GitHub Issues a closed issue's status is its done label, else Closed.
ticketing.blocker_priorities P0, P1 Blocker priorities: their merge requests are labelled Blocker and announced to the notification targets.
ticketing.approvers empty (nobody) Plan approvers: who may decide a plan from a ticket comment (account ids; GitHub logins, lower-cased; PagerDuty user ids).
ticketing.type_mapping Bug→bug, Story→story, Task→story, Small Enhancement Request→story, Epic→epic, Sub-task→subtask File only. Issue type to work class (bug, investigation, story, epic, subtask). Unmapped types are stories in tickets mode and investigations in incidents mode, where every incident's type is Incident. On GitHub Issues the type is the first label that names an entry here. Map a type such as Support Question to investigation to have its tickets reproduced and triaged rather than fixed.

Git host and integrations#

Settings → General (Git, Pull Requests, Commits, GitHub Integration), Settings → Reviewers and Settings → Worktree pool.

Key Default What it does
git_branch_prefix prepcook Branch Prefix of every branch an agent creates.
workspace_dir unset (the default location) Workspace Directory worktrees are created in.
pr_auto_description_enabled true Auto-generate PR description: after Shipped opens a pull request, the implementing agent writes its title and description.
pr_auto_description_prompt unset (the shipped prompt) The prompt for that follow-up.
commit_reminder_enabled true Commit reminder: an agent that ends a turn with uncommitted changes is told to commit.
commit_reminder_prompt unset (the shipped prompt) The reminder's text.
github.pat, github.oauth_token, github.username, github.primary_email, github.default_pr_base unset GitHub Integration. Pull requests are opened with the gh CLI, signed in on this machine.
integrations.auto_assign_reviewers true Auto-assign reviewers from blame on the lines a merge request changes.
integrations.reviewer_map empty Reviewer map: git author email to host login. Unmapped authors are named in a comment instead of assigned.
integrations.reviewer_exclude_emails empty Excluded author emails, on top of the agent's own.
integrations.bot_logins empty Ignored comment authors: merge-request comments from these logins are not fed to the agent.
worktree_pool.enabled false Enable worktree pool: reuse warm worktrees instead of creating one per workspace.
worktree_pool.max_trees 8 Max worktrees per repository.
worktree_pool.root unset (the default location) Pool root directory.

Notifications#

Settings → Integrations → Notifications. Where orchestrator events go: escalations, the daily digest, seat alerts, blocker merge requests and the rest (notifications.md lists every event). Any number of targets at once; each gets every event unless it names some.

Key Default What it does
notifications.targets empty (none) The targets, each { "kind": …, "events": […], …fields }. kind is one of the providers below; the fields are that provider's.
notifications.targets[].events unset (every event) Event kinds this target receives; ["*"] is every event too.

A config written with the older slack_webhook_url, slack_bot_token and slack_channel keys, or a board's slack override, is converted into Slack targets the first time it is read.

Evidence#

Settings → Integrations → Evidence. Where failures leave traces outside the reproduction: error trackers, log services, the app's log files. Each source is described to the planning agents, may give their sessions an MCP server, and is searched by evidence_search (evidence.md).

Key Default What it does
evidence.sources empty (none) The sources, each { "kind": …, "label": …, "areas": …, "notes": …, …fields }. kind is one of the providers below; the fields are that provider's.
orchestrator.project_defaults.<board>.evidence.enabled unset (on) false turns every source off for the board, its own included.
orchestrator.project_defaults.<board>.evidence.skip_global empty Kinds of global source the board does not use.
orchestrator.project_defaults.<board>.evidence.sources empty Sources only that board uses, on top of the global ones it keeps.

A repository adds its own log files under [[profile.evidence]] in its .prepcook/scripts.toml (scripts.md). A config written with integrations.sentry_access_token or integrations.sentry_host is converted into a Sentry source the first time it is read.

Coding agents#

Generated from the agents' descriptors. executor_profile and every agents.stages entry name one of these as executor, with an optional variant; Settings → Agents probes each with its command and --version.

executor Command Signs in MCP servers Variants
CLAUDE_CODE (Claude Code) claude Run claude once and sign in, or set ANTHROPIC_API_KEY (billed per token instead of the subscription). Per session, on its command line, on top of its own DEFAULT, SONNET (economy)
AMP (Amp) npx -y @sourcegraph/amp@latest Run amp login once, or set AMP_API_KEY. Only from its own config (Settings → MCP Servers) DEFAULT
GEMINI (Gemini CLI) npx -y @google/gemini-cli@0.29.3 Run gemini once and sign in with Google, or set GEMINI_API_KEY. Only from its own config (Settings → MCP Servers) DEFAULT
CODEX (Codex) npx -y @openai/codex@0.124.0 Run codex login once, or set CODEX_API_KEY. Per session, on its command line, on top of its own DEFAULT
OPENCODE (OpenCode) npx -y opencode-ai@1.4.7 Run opencode auth login once for each model provider it should use. Only from its own config (Settings → MCP Servers) DEFAULT
CURSOR_AGENT (Cursor Agent) cursor-agent Run cursor-agent login once, or set CURSOR_API_KEY. Only from its own config (Settings → MCP Servers) DEFAULT
QWEN_CODE (Qwen Code) npx -y @qwen-code/qwen-code@0.9.1 Run qwen once and sign in, or set OPENAI_API_KEY for an OpenAI-compatible endpoint. Only from its own config (Settings → MCP Servers) DEFAULT
COPILOT (GitHub Copilot CLI) npx -y @github/copilot@0.0.403 Run copilot once and use /login, or set GH_TOKEN to a token with Copilot access. Only from its own config (Settings → MCP Servers) DEFAULT
DROID (Droid) droid Run droid once and sign in, or set FACTORY_API_KEY. Only from its own config (Settings → MCP Servers) DEFAULT

Evidence sources#

Generated from the providers' descriptors. A secret field is read from the secrets store under the name shown, then from the config, then from the environment variable of that name; a board's own source reads its config value first. Every source also takes label, areas and notes (evidence.md), left out of the table.

kind Field Required Secret name What it is
sentry (Sentry) The errors the app raised in production, grouped into issues: agent sessions get Sentry's MCP server, and evidence_search lists a project's issues seen in a window.
access_token yes SENTRY_ACCESS_TOKEN Access token. A user auth token (Settings → Account → API → Auth Tokens) with org:read, project:read and event:read.
host no Host. The host name of a self-hosted Sentry, e.g. sentry.example.com. Blank is sentry.io.
org no Organization slug. The organization in Sentry's URLs, e.g. acme. With the project, evidence_search can list issues; without them the agent has the MCP server only.
project no Project slug. The project the app reports to, e.g. web.
environment no Environment. Only issues seen in this environment, e.g. production. Blank is every environment.
dataset (DataSet) Logs shipped to DataSet (Scalyr), searched with its query API.
read_token yes DATASET_READ_TOKEN Read Logs token. A "Read Logs" API token (API Keys in DataSet's settings).
server no Server. Your account's region, e.g. https://app.eu.scalyr.com. Blank is https://app.scalyr.com.
filter no Base filter. A DataSet filter every search is narrowed by, e.g. serverHost == "web-1" or $logfile contains "app".
datadog (Datadog) Logs in Datadog, searched with the Logs Search API.
api_key yes DATADOG_API_KEY API key. An API key (Organization Settings → API Keys).
application_key yes DATADOG_APPLICATION_KEY Application key. An application key with the logs_read_data scope (Organization Settings → Application Keys).
site no Site. Your Datadog site, e.g. datadoghq.eu or us5.datadoghq.com. Blank is datadoghq.com.
query no Base query. Log search terms every search is narrowed by, e.g. service:web env:production.
cloudwatch (CloudWatch Logs) A CloudWatch Logs group, searched through the aws CLI on this machine with the credentials it is configured with.
log_group yes Log group. The log group's name, e.g. /ecs/pantry-web.
region no Region. e.g. us-east-1. Blank uses the aws CLI's configured region.
profile no Profile. The aws CLI profile to use. Blank uses its default credentials.
log_files (Log files) Log files the app writes where it runs for the card, read on this machine; a repository can also name its own in [[profile.evidence]].
paths yes Paths. Comma-separated files or globs, relative to the card's worktree (e.g. logs/app.log, logs/*.log) or absolute.

Notification providers#

Generated from the providers' descriptors. A secret field is read from the secrets store under the name shown, then from the config, then from the environment variable of that name; a board's own target reads its config value first.

kind Field Required Secret name What it is
slack (Slack) Posts to a channel through an incoming webhook, a bot, or both; with a bot, escalation threads carry replies back to the agent and the digest keeps a channel canvas.
webhook_url no SLACK_WEBHOOK_URL Incoming webhook URL. A Slack incoming-webhook URL (https://hooks.slack.com/services/…). Needed unless a bot token and channel are set.
bot_token no SLACK_BOT_TOKEN Bot token. A bot token (xoxb-…) with chat:write, channels:history (or groups:history) and canvases:write; the bot must be in the channel. With a channel, escalations open a thread whose replies reach the blocked agent.
channel no Channel ID. The channel the bot posts to, e.g. C0123456.
webhook (Webhook) POSTs every event as signed JSON to a URL you run, for wiring Prepcook into anything else.
url yes URL. Where events are POSTed. A 5xx or timeout is retried three times.
secret no WEBHOOK_SECRET Signing secret. Signs each body with HMAC-SHA256 in the X-PrepCook-Signature header. Unset sends unsigned requests.
discord (Discord) Posts each event as an embed to a Discord channel through its webhook.
webhook_url yes DISCORD_WEBHOOK_URL Webhook URL. The channel's webhook (Channel settings → Integrations → Webhooks), https://discord.com/api/webhooks/….
teams (Microsoft Teams) Posts each event as an Adaptive Card to a Teams channel through an incoming webhook.
webhook_url yes TEAMS_WEBHOOK_URL Webhook URL. The URL of a Teams workflow that posts webhook requests to a channel, or of a channel's Incoming Webhook connector.

Reproduction targets#

Generated from the providers' descriptors. Each field is a key of the app_runs section; a remote target has no global settings, only each repository's [app.remote]. A board picks its target with reproduction.target.

kind Field Required Secret name What it is
local (This machine) Builds and starts the app from [app] in the card's worktree and serves it on a port of this machine.
port_range yes Port range. Ports handed to app runs, <first>-<last> inclusive; each run gets one as $PREPCOOK_PORT.
max_parallel yes Apps at once. Local apps up at the same time. Each is a full app stack, so this is bounded by the machine's memory; a stand-up past it waits for the next scan.
remote (Remote deploy) Runs [app.remote] from the repository's .prepcook/scripts.toml to deploy the branch to a preview environment, dev tenant or staging slot, and reproduces and verifies against the URL the deploy reports. Everything it runs is in the manifest; choose it per board.

Ticketing providers#

Generated from the providers' descriptors. A secret field is read from the secrets store under the name shown, then from the config, then from the environment variable of that name. Each field is a key of the ticketing section.

kind Field Required Secret name What it is
jira (Jira) Jira Cloud: tickets come from a project, filters are JQL, and each stage moves the ticket to the status the workflow mapping names.
site yes Site. Your Atlassian site's host name, e.g. example.atlassian.net.
email yes Email. The email of the agent's Jira account, the one the API token belongs to.
api_token yes JIRA_API_TOKEN API token. An API token for that account (https://id.atlassian.com/manage-profile/security/api-tokens).
bot_identity no Agent account id. The account id the agent's own comments are recognised by. Blank uses the account the token belongs to.
project_key no Project key. The project tickets are imported from and filed into (default BUG).
import_filter no Import filter. JQL the import dialog runs; {project_key} is substituted. Default: To Do tickets in open sprints assigned to you, by priority.
pickup_filter no Pickup filter. JQL selecting new tickets to pick up; a created-recently window is added. Default: project = {project_key} AND priority in (P0, P1) AND issuetype = Bug.
assigned_filter no Assigned pickup filter. JQL for tickets assigned to the agent, started whatever their priority, e.g. project = {project_key} AND assignee = currentUser(). Blank turns it off.
github_issues (GitHub Issues) Issues in one repository, read and written through the gh CLI: it uses the account gh auth login signed in on this machine, so there is no token to enter. Stages are labels; done closes the issue.
repo yes Repository. owner/name, or host/owner/name on GitHub Enterprise. Issue keys are the repository name and number, e.g. WIDGETS-42.
bot_identity no Agent login. The login the agent's own comments are recognised by. Blank uses the account gh is signed in as.
import_filter no Import filter. Terms the import dialog lists: state:open|closed|all, label:bug (repeatable; quote names with spaces), -label:wontfix, assignee:@me|login|none. Default: state:open assignee:@me.
pickup_filter no Pickup filter. Which new issues are picked up, in the same terms; a created-recently window is added. Default: state:open label:bug.
assigned_filter no Assigned pickup filter. Issues assigned to the agent, started whatever their labels, e.g. state:open assignee:@me. Blank turns it off.
linear (Linear) — not implemented Linear is not implemented — contributions welcome. It can be named, and every call to it says it is not supported.
linear_api_key yes LINEAR_API_KEY API key. A Linear personal API key.
team_key yes Team key. The team issues come from, e.g. ENG.
pagerduty (PagerDuty) Incidents mode: open incidents become investigation cards, and the triage report goes back to the incident as a note. Prepcook never pages anyone and resolves an incident only when configured to.
pagerduty_api_token yes PAGERDUTY_API_TOKEN API key. A REST API key (Integrations → API Access Keys) that can read incidents and write notes.
user_id yes User id. The PagerDuty user Prepcook writes as, e.g. PABC123: a dedicated user, not on any schedule, so nothing pages it.
service_ids no Service ids. Comma-separated services whose incidents are picked up, e.g. PSVC123. Blank picks up every service the key can see.
pickup_filter no Pickup filter. Which incidents are picked up: service:PSVC123, urgency:high|low, status:triggered,acknowledged, assigned:@me, team:PTEAM12. Default: status:triggered,acknowledged.
import_filter no Import filter. Incidents the import dialog lists, in the same terms. Default: status:triggered,acknowledged.

Agent MCP servers and skills#

Not settings, but where they end up. The agent sessions Prepcook launches get the prepcook MCP server (the prepcook-mcp binary beside the server, or in ~/.local/bin or /usr/local/bin) and the MCP server of every evidence source that has one (Sentry's, for each Sentry source with a token). Prepcook writes them to agent-mcp.json in the app data directory at startup and when the evidence sources change, and hands that file to each session: Claude Code through --mcp-config, which adds the servers to the user's own for that session only, and Codex as a thread config override (prepcook only). The other agents have no per-session mechanism and get the servers only from their own config.

The skills in assets/agent-skills/ reach Claude Code sessions the same way: Prepcook writes them under agent-skills/.claude/skills/ in the app data directory, refreshing them as each session starts, and passes that directory with --add-dir, which loads its skills for that session only. Nothing is written into the worktree.

Prepcook never writes to an agent's own config (Claude Code's user config and ~/.claude/skills, ~/.codex/config.toml and the like) on its own, so sessions outside Prepcook load only what their user installed. Settings → MCP Servers edits that config when you save there, and the toolkit's setup.sh registers prepcook in Claude Code's user config and links the prepcook-* skills into ~/.claude/skills when you run it (toolkit/README.md); nothing else does.

App runs#

Settings → Reproduction. Where bug cards' apps are stood up: the local target on this machine, or the remote target, which deploys with each repository's [app.remote] (scripts.md). The reproduction targets are listed under Reproduction targets.

Key Default What it does
app_runs.port_range 4200-4299 Port range: ports handed to local app runs, inclusive.
app_runs.max_parallel 2 Apps at once: local apps up at once. A stand-up past this waits for the next scan. Remote apps are capped by [app.remote] max_parallel instead.
app_runs.default_target local Default target: local or remote, for every board that does not choose.

Board#

Not part of config.json: the board is configured from the environment, and the board stack reads its own .env (<app data dir>/board/.env, written by prepcook up). There is no sign-in: the server signs every request to the board with the board's secret.

Variable Default What it does
PREPCOOK_SHARED_API_BASE http://127.0.0.1:4110 under prepcook up, else unset The board's URL. Unset, the board features are off.
PREPCOOK_BOARD_SECRET (secret) the board .env's PREPCOOK_JWT_SECRET The board's JWT secret, which the server signs its owner tokens with. prepcook up reads it from the .env of the board it starts. A server started by hand reads the environment variable, then PREPCOOK_BOARD_SECRET in the secrets store, then (for the board on 127.0.0.1:4110) the board .env. Without one the server still starts, and the UI says there is no board secret.
PREPCOOK_JWT_SECRET (board .env) generated Standard base64 of at least 32 bytes; signs agent sessions' tokens and verifies owner tokens.
DB_PASSWORD, ELECTRIC_ROLE_PASSWORD (board .env) generated The board's database passwords.

The board reads no sign-in or OAuth settings: SELF_HOST_LOCAL_AUTH_EMAIL, SELF_HOST_LOCAL_AUTH_PASSWORD and GITHUB_/GOOGLE_OAUTH_CLIENT_ID and _SECRET lines in a board .env are ignored.

Approvals#

Key Default What it does
approvals.in_app_gate lavish Settings → Orchestrator → Plan approvals. lavish puts Approve and Request changes buttons in the plan document; none leaves them out and the decision comes from the card, the ticket or the API (approvals.md).
ticketing.approvers empty See Ticketing.
PREPCOOK_API_TOKEN (secret) unset (bearer access off) The bearer token the approvals and card APIs accept from scripts and other services (api.md). Filing a card needs it.

Secrets#

Settings → Secrets, or prepcook secret set|list|unset. Not part of config.json: values live in ~/.config/prepcook/secrets.env (mode 0600). PREPCOOK_SECRETS_FILE points Prepcook at another file, and an environment variable PREPCOOK_SECRET_<NAME> overrides an entry. A repository's [secrets] requires names the ones its scripts need (scripts.md).

Playbooks#

Key Default What it does
playbooks the shipped texts Settings → Playbooks, scope Global: the prompt each stage's agent starts from, keyed <work_class>:<stage> (investigation:planning among them) plus pattern:planning, reviewing, comment_reply and rca_analysis (playbooks.md).
playbook_keys 1 Kept by Prepcook. Which key names playbooks uses. A config without it was saved before investigation:planning (the pattern review's text) became pattern:planning and triage became comment_reply; both are renamed, globally and in every board's overrides, the first time it is read.

Per-board overrides#

Under orchestrator.project_defaults["<board id>"], shown per board in Settings → Orchestrator → Automated projects → Board overrides. Unset or empty inherits the global value.

Key Default What it does
repo_ids empty Repositories checked out for this board's workspaces. Required.
label unset Board label: tagged on its RCAs as board:<label>.
executor_profile unset (inherit) Default agent: the profile this board's stages start from.
agents.stages.<stage> unset (inherit) Planning, Executing, Reviewing, Comment replies, Pattern reviews: this board's profile for that stage, over the global one (Agents).
autonomy unset (inherit) Autonomy for this board.
autonomy_review_iterations unset (inherit) Review-fix rounds for this board.
pattern_threshold unset (inherit) Pattern-review threshold for this board (investigation_threshold in older configs).
deployed_retention inherit off, or { "days": n }: days in an older board's Close before Clean up.
cleanup_retention inherit off, or { "days": n }: days in Clean up before deletion.
ticketing.watcher_enabled unset (on only for ticketing.project_id) Ticket pickup for this board. Older configs call the override tracker or jira; both are read.
ticketing.jql_filter unset (inherit) Pickup filter for this board, in the provider's syntax.
ticketing.assigned_jql unset (inherit) Assigned pickup filter for this board; blank inherits.
ticketing.project_key unset (inherit) Tracker project key, when this board's tickets live elsewhere.
notifications.enabled unset (on) Notifications: false silences every target for this board.
notifications.skip_global empty Kinds of global target (slack, webhook, …) this board does not send to.
notifications.targets empty Targets only this board sends to, on top of the global ones it keeps; same shape as notifications.targets.
merge_requests.auto_assign_reviewers unset (inherit) Assign reviewers from blame.
merge_requests.reviewer_map empty Reviewer map additions, merged over the global map.
merge_requests.reviewer_exclude_emails empty Exclude authors, added to the global list.
merge_requests.bot_logins empty Ignore MR comments from, added to the global list.
deploy_watch unset (off) Staging deploy job and branch: records when each merged change reaches staging. Both are needed.
reproduction.target unset (inherit app_runs.default_target) Settings → Reproduction → Boards: local or remote. A board set to remote whose repository has no [app.remote] stops its stand-ups with target-unconfigured.
playbooks empty Settings → Playbooks, scope this board: texts for this board only.

Everything else#

Settings → General, and state Prepcook keeps for itself.

Key Default What it does
theme SYSTEM Theme.
language BROWSER Language.
editor.editor_type VS_CODE Editor Type that "open in editor" uses; custom_command, remote_ssh_host and remote_ssh_user are unset.
notifications.sound_enabled, .push_enabled true, true Sound and Push Notifications.
notifications.sound_file COW_MOOING Sound.
send_message_shortcut ModifierEnter Send message with.
analytics_enabled true Enable Telemetry.
disclaimer_acknowledged, onboarding_acknowledged, remote_onboarding_acknowledged false Whether the first-run screens were seen.
showcases, last_app_version, show_release_notes empty, unset, false What the app has already shown you.
config_version v10 The shape of the file. An older file is upgraded when read.

Edit this page on GitHub