Slop Docs Home

Configuration Reference

Three layers: four .env process vars, ~45 database-backed runtime keys on the Config page, and per-issue overrides in IssueConfig. All runtime config takes effect on the next daemon poll cycle - no restart needed.

SQLite backed Runtime editable Per-issue overrides Multi-harness

Environment Variables

Read once at process start from .env or the shell. Cannot change without restarting the server.

Variable Type Default Description
DATABASE_URL string ~/.slop/data/slop.db Path to the SQLite database file. Override only when you need the DB outside the default location.
PORT number 3000 Next.js HTTP port. Convention for local dev is 3100.
SLOP_SECRET string (unset) Optional bearer token gating the web UI. When unset, server binds to 127.0.0.1 only. When set, all requests must carry Authorization: Bearer <SLOP_SECRET>.
SLOP_URL string http://localhost:3100 Base URL that harness skills use when calling back into Slop. Must be reachable from wherever the agent subprocess runs.
GITHUB_TOKEN: Provide this in the environment on first boot and the daemon seeds it into the githubToken Config key automatically. After that it is read from the database and the env var is no longer required.

Watched Repo

Watched repos are Repo rows added on the Config page. The keys below are the global connection settings plus the legacy single-repo keys (used during the one-shot migration to the multi-repo model).

Key Type Default Description
githubToken string (must set) Personal access token (or fine-grained token) with repo and workflow scopes. Used for all GitHub API calls across all watched repos. Seeded from GITHUB_TOKEN env var on first boot.
baseBranch string main Default base branch for PRs and fast-forward merges. Can be overridden per Repo row on the Config page.
watchedRepo string (none) Legacy single-repo owner/name slug. Consumed once during migration to the Repo table. New installs add repos on the Config page instead.
watchedRepoPath string (none) Legacy absolute path to the local checkout. Consumed once during migration. New installs set path on the Config page.

Automation Modes

Each flag is stored as "true" or "false" in the Config table. They compose independently: you can enable auto-merge without auto-mode, or auto-review without auto-address.

autoMode
Default: false

Master auto-pilot. When true, the daemon claims issues from the ready queue each poll cycle (up to parallelismCap). When false, issues must be dispatched manually from the board.

autoMergeMode
Default: true

When true, Slop enables GitHub auto-merge on the PR after the agent pushes. The PR merges automatically once all required CI checks pass. When false, a human must merge manually.

autoReportMode
Default: false

When true, the daemon automatically generates and posts a completion report after each worker finishes, without waiting for a manual trigger.

autoReviewMode
Default: false

When true, the daemon automatically dispatches a /pr-review skill session for PRs entering waiting_review status. Works with autoAddressMode for a fully autonomous review cycle.

autoAddressMode
Default: false

When true, the daemon automatically dispatches an /address-comments session after a /pr-review verdict that does not meet acceptedReviewLevel. Requires autoReviewMode to also be true.

Address pipeline dependency: autoAddressMode is gated on autoReviewMode. Enabling address-mode without review-mode has no effect - a review must run first to produce comments to address.

Implementation Settings

Implement Mode

Remote Mode

Agent commits, pushes branch, opens a PR. Slop enables GitHub auto-merge, waits for CI checks to pass, then merges via the GitHub API. Full PR review pipeline is available in this mode.

Local Mode

Agent commits to a local branch. Slop fast-forward merges directly into the base branch - no PR is opened and no GitHub merge API call is made. Faster, but no CI gate or PR review pipeline.

Key Type Default Description
implementMode enum local How the agent ships work. remote or local. See cards above.
verifyGate boolean false When true, a /verify-gate skill session runs after implementation. Worker advances only on SLOP_VERDICT: pass. Any other or missing verdict counts as findings and re-dispatches implement.
agentModel enum opus Model used for implementation. Determines the harness (claude / codex / copilot). See model catalog below.
agentEffort enum medium SDK effort level. Values: low, medium, high, xhigh, max. Claude harness only: ultracode maps to max and opts into multi-agent Workflow orchestration.
agentTimeoutMs number 1800000 (30 min) Hard timeout per individual agent session/query. If exceeded, the session is killed and the worker fails or retries.
implementTimeoutMs number 3600000 (60 min) Total wall-clock timeout for the entire implement phase.
verifyTimeoutMs number 3600000 (60 min) Timeout for the verify-gate skill session.
verifyCommand string (none) Custom shell command the verify agent runs to check the implementation. When unset, the harness uses its default verification skill.
pointsHarness enum claude Which harness tier map to use for story-point scoring: claude, codex, or copilot. Unrecognized values fall back to claude.

Agent Model Catalog

Model valueLabelHarnessProvider
opusClaude OpusclaudeAnthropic
sonnetClaude SonnetclaudeAnthropic
haikuClaude HaikuclaudeAnthropic
fableClaude FableclaudeAnthropic
gpt-5.5GPT-5.5codexOpenAI
gpt-5.4GPT-5.4codexOpenAI
copilot-claude-sonnet-4.6Claude Sonnet 4.6copilotGitHub
copilot-claude-sonnet-4.5Claude Sonnet 4.5copilotGitHub
copilot-claude-haiku-4.5Claude Haiku 4.5copilotGitHub
copilot-gpt-5.4GPT-5.4copilotGitHub
copilot-gpt-5.3-codexGPT-5.3-CodexcopilotGitHub
copilot-gpt-5-miniGPT-5 minicopilotGitHub
The model value is the single source of truth for which harness handles a worker - the harness is derived from the model prefix, not stored separately.

Concurrency and Polling

Key Type Default Description
parallelismCap number 1 Maximum number of workers that can be actively implementing at the same time. Workers in non-implementing statuses (waiting_ci, merging, etc.) do not count against this cap. Per-repo overrides are set on individual Repo rows.
pollIntervalMs number 30000 (30 s) How often the daemon poll cycle runs. Read fresh from the Config table each cycle, so changes take effect without a restart. Shorter intervals react faster to CI status changes but increase GitHub API usage.
pollPaused boolean false When true, the daemon skips the refreshRepoSnapshot step each cycle and stops claiming new issues. Useful during maintenance. Existing workers continue to completion.

Attempt Budgets

When a counter hits its cap, the worker transitions to failed. A Retry button appears on the board to reset counters and re-queue.

maxCiAttempts
5
CI fix cycles. Each fixing_ci agent session that ends in failure consumes one attempt.
maxConflictAttempts
5
Merge conflict resolution attempts. Each resolving_conflict session consumes one.
maxVerificationAttempts
5
Verify-gate cycles. Each verifying session that does not return pass consumes one.
maxReviewAttempts
3
PR review-and-address cycles. Each in_review session consumes one.
maxResumeAttempts
3
Times a crashed or orphaned implementing worker can auto-resume against its saved session after a daemon restart.

Stuck Detection Thresholds

When a worker stays in a given status longer than the configured threshold, the daemon sends a notification via notificationTarget. Workers are not automatically failed - the alert lets a human decide whether to retry or cancel. All values are in milliseconds.

Important: Keys not seeded at startup (stuckFixingCiMs, stuckVerifyingMs, stuckWaitingReviewMs, stuckInReviewMs, stuckWaitingAddressMs, stuckInAddressMs) fall back to hardcoded defaults in lifecycle-poll.ts when absent from the Config table. Setting them explicitly overrides the hardcoded value.
Key Default (ms) Human Status watched
stuckClaimedMs 300000 5 min claimed - worker created but agent never started. Short because claiming should be near-instant.
stuckWaitingCiMs 3600000 60 min waiting_ci - PR open, waiting for CI checks to complete.
stuckMergingMs 1800000 30 min merging - auto-merge enabled, waiting for GitHub to merge. May indicate auto-merge is blocked.
stuckResolvingConflictMs 1800000 30 min resolving_conflict - agent is resolving a merge conflict.
stuckFixingCiMs 1800000 30 min fixing_ci - agent is fixing CI failures.
stuckVerifyingMs 1800000 30 min verifying - verify-gate skill session is running.
stuckWaitingReviewMs 3600000 60 min waiting_review - PR is open and awaiting a human or automated review.
stuckInReviewMs 1800000 30 min in_review - /pr-review skill session is running.
stuckWaitingAddressMs 3600000 60 min waiting_address - waiting for comments to be addressed.
stuckInAddressMs 1800000 30 min in_address - agent is actively addressing review comments.
stuckRenotifyMs 86400000 24 hr Re-notification cadence. How long to wait before re-alerting about the same stuck worker. Not a status threshold.

PR Review Settings

Key Type Default Description
acceptedReviewLevel enum non_blockers The minimum /pr-review verdict that counts as approved for advancing to merge. non_blockers: only non-blocking findings (strictest autonomous pipeline). nitpick: only nitpick-level or better. none: any verdict passes including blockers.

Per-Issue Overrides (IssueConfig)

Each issue can have individual overrides stored in the IssueConfig table, keyed by (repoId, issueNumber). Overrides are copied onto the Worker row when the issue is claimed and take precedence over global config. null means "fall back to global."

Two surfaces: IssueConfig overrides are set before claiming (from the issue card on the board). Worker overrides are set on an active worker via the gear popover in the worker list and take effect on the next agent dispatch.
Field Type Description
agentModelOverride enum? Override agentModel for this issue. Must be a value from the model catalog. Determines the harness.
agentEffortOverride enum? Override agentEffort for this issue.
implementModeOverride enum? Override implementMode (remote or local) for this issue only.
autoMergeModeOverride string? Override autoMergeMode for this issue. Three-way: null = use global, "true" = enable, "false" = disable.
autoReviewModeOverride string? Override autoReviewMode for this issue. Same three-way semantics.
autoAddressModeOverride string? Override autoAddressMode for this issue. Same three-way semantics.
acceptedReviewLevelOverride enum? Override acceptedReviewLevel for this issue only.
storyPoints number? Story point estimate (1-5 scale). Used for automatic model/effort selection when modelEffortFromStoryPoints is true.
pointsAutoScored boolean Default false. Set to true when story points were assigned automatically by the scoring agent rather than set manually.
modelEffortFromStoryPoints boolean Default true. When true and storyPoints is set, the configured harness tier map picks model and effort automatically. When false, explicit overrides or global config are used instead.

Miscellaneous

Key Type Default Description
notificationTarget string "" Notification destination (e.g. a webhook URL or identifier). When empty, all notifications are suppressed.
memoryThresholdBytes number 2147483648 (2 GiB) RSS memory threshold for active agent subprocesses. When a running process exceeds this, memoryBreachAction is triggered.
memoryBreachAction enum warn What to do when memoryThresholdBytes is exceeded. warn: log and notify only. stop: stop the worker after reporting.
usdToBrlRate number (none) Exchange rate for converting USD agent costs to BRL in the board UI. When unset, only USD costs are shown.
costCoefficient number (none) Multiplier applied to raw API cost figures before display. Useful to account for markup or seat fees. When unset, raw cost is shown.
guardStatus string (internal) Setup wizard state cached by the daemon. Managed internally - do not set manually.
baseCiStatus string (internal) Base branch CI health cached by the CI health controller. Goes red after 2 consecutive failing cycles (anti-flake debounce). New workers are not claimed when red.

Full Config Key Reference

Alphabetical index of every CONFIG_KEYS constant and which section covers it.

Key Type Default Section
acceptedReviewLevelenumnon_blockersPR Review Settings
agentEffortenummediumImplementation Settings
agentModelenumopusImplementation Settings
agentTimeoutMsnumber1800000Implementation Settings
autoAddressModebooleanfalseAutomation Modes
autoMergeModebooleantrueAutomation Modes
autoModebooleanfalseAutomation Modes
autoReportModebooleanfalseAutomation Modes
autoReviewModebooleanfalseAutomation Modes
baseBranchstringmainWatched Repo
baseCiStatusstring(internal)Miscellaneous
costCoefficientnumber(none)Miscellaneous
githubTokenstring(must set)Watched Repo
guardStatusstring(internal)Miscellaneous
implementModeenumlocalImplementation Settings
implementTimeoutMsnumber3600000Implementation Settings
maxCiAttemptsnumber5Attempt Budgets
maxConflictAttemptsnumber5Attempt Budgets
maxResumeAttemptsnumber3Attempt Budgets
maxReviewAttemptsnumber3Attempt Budgets
maxVerificationAttemptsnumber5Attempt Budgets
memoryBreachActionenumwarnMiscellaneous
memoryThresholdBytesnumber2147483648Miscellaneous
notificationTargetstring""Miscellaneous
parallelismCapnumber1Concurrency and Polling
pointsHarnessenumclaudeImplementation Settings
pollIntervalMsnumber30000Concurrency and Polling
pollPausedbooleanfalseConcurrency and Polling
stuckClaimedMsnumber300000Stuck Detection
stuckFixingCiMsnumber1800000Stuck Detection
stuckInAddressMsnumber1800000Stuck Detection
stuckInReviewMsnumber1800000Stuck Detection
stuckMergingMsnumber1800000Stuck Detection
stuckRenotifyMsnumber86400000Stuck Detection
stuckResolvingConflictMsnumber1800000Stuck Detection
stuckVerifyingMsnumber1800000Stuck Detection
stuckWaitingAddressMsnumber3600000Stuck Detection
stuckWaitingCiMsnumber3600000Stuck Detection
stuckWaitingReviewMsnumber3600000Stuck Detection
usdToBrlRatenumber(none)Miscellaneous
verifyCommandstring(none)Implementation Settings
verifyGatebooleanfalseImplementation Settings
verifyTimeoutMsnumber3600000Implementation Settings
watchedRepostring(legacy)Watched Repo
watchedRepoPathstring(legacy)Watched Repo