Skip to content
ALC

Manifest

Every field in .alc/manifest.yaml — the root of the Operator Layer — with its default and what it changes.

.alc/manifest.yaml is the root of the Operator Layer. Three fields are required; everything else has a default that matches the behaviour you get without declaring it.

version: 1
default_engine: claude-code
 
compute_tiers:
  standard:
    mock: "mock-small"
    claude-code: "claude-sonnet-4-6"
    gemini: "gemini-2.5-flash"
  deep:
    mock: "mock-large"
    claude-code: "claude-opus-4-8"
    gemini: "gemini-2.5-pro"
 
engines:
  mock:
    type: mock
  claude-code:
    type: claude-code
  gemini:
    type: gemini

Required

FieldTypeMeaning
default_enginestringEngine used when no --engine is passed. Must appear in engines
compute_tierstier → engine → model idNamed compute levels. Every tier must map default_engine
enginesname → configDeclared execution planes
versionintSchema version. Defaults to 1

Engine entries

KeyApplies toMeaning
typeallAdapter type: mock, claude-code or gemini. Required
clean_configclaude-codeRestrict the CLI to user-level settings, skipping the host project's .claude/ hooks and configuration. Default false

The engine name is yours; type is what resolves to an adapter. That is what lets you declare two entries of the same type with different settings.

alc init writes a binary: key on the claude-code and gemini entries. Nothing currently reads it — the adapters call their tool by its conventional name. Treat it as documentation of intent rather than a working override.

Check sets

Reusable named check sets a Blueprint may opt into with check_set: <name>.

check_sets:
  project:
    - name: test
      command: ["make", "test"]
  security:
    - name: secrets
      command: ["gitleaks", "detect", "--no-banner"]

alc init pre-fills one set per detected stack, plus security. alc onboard adds a project set harvested from what you already declare. See Make the checks real and the Blueprint reference for the shape of a check entry.

FieldDefaultMeaning
check_sets{}Named sets of checks
quarantined_checks[]Checks that still run but can never fail a run. Each produces a permanent alc lint warning

Behavioural knobs

FieldDefaultMeaning
default_timeout_s1800Per-turn engine kill timeout when a Blueprint sets none
check_timeout_s600Per-check wall-clock kill deadline. Kills the check and its child process group
check_output_chars4096Characters of a failing check's output captured into the repair directive
bundle_output_chars1500Characters of output_text kept in a bundle replay summary
plan_tier"standard"Compute tier for Conductor planning turns
plan_retries2Corrective retries when a plan's JSON comes back malformed
fanout_concurrency4Parallel workers for alc conduct --parallel and alc explore

Queue and retries

FieldDefaultMeaning
max_task_retries0Per-task retry cap for the queue drain. 0 disables automatic retries
retry_strategy"immediate"immediate drains a retry in the same pass; deferred waits for the next one. Inert unless max_task_retries > 0

Commits and worktrees

FieldDefaultMeaning
generate_commit_messagestrueAsk the engine for a Conventional Commits subject from the staged diff. The static template is the fallback
worktree_commit_message"alc: {branch}"Exit-commit template. {branch} is substituted
worktree_provision[]Gitignored runtime dependencies provisioned into each worktree
worktree_ports0Free TCP ports allocated per isolated queue task. 0 injects nothing

worktree_provision entries

Exactly one of link, copy or clone per entry; its value is a path relative to the project root. Absolute paths and .. are rejected.

worktree_provision:
  - link: node_modules
    refresh: ["npm", "install"]
    when_changed: ["package.json", "package-lock.json"]
  - clone: .env
KeyMeaning
linkSymlink the path in. Shared across worktrees — read-only-safe only
copyA full, isolated deep copy per worktree
cloneA copy-on-write clone: fast and isolated, falling back to a deep copy where the filesystem has no COW support
refreshInstall command (argv) run before the checks when a when_changed path was modified
when_changedGlobs that trigger refresh

refresh and when_changed are only meaningful together, and either one without the other is rejected at load time rather than silently ignored.

With worktree_ports > 0, the queue drain injects ALC_PORT, PORT, ALC_PORT_2 upward, and ALC_PORTS (comma-separated) into the engine's environment.

Runtime service

The app ALC starts for runtime validation. Unset means ALC never owns a service.

service:
  start: "npm run dev"
  health: "/health"
  ready_timeout_s: 30
KeyDefaultMeaning
startrequiredShell command that launches the app
health"/health"Path polled until it returns HTTP 200
ready_timeout_s30Seconds to wait for health before giving up

Only Blueprints declaring needs_service: true use it. ALC starts the app on its allocated port, exposes $ALC_BASE_URL, and tears it down after the run.

Delivery

How alc land hands an already-landed branch to the remote. The local cherry-pick is the actual landing; this is the last mile on top of it.

delivery:
  mode: local          # local | push | pr
  remote: origin
  base: main

alc land --push and --pr override mode for one invocation. A push failure or a missing gh never fails the land.

Notifications

Each hook is either a command — an argv list, run with the JSON payload on stdin — or a webhook URL, which is POSTed the payload. Delivery never raises.

notify:
  on_task_failed: ["scripts/notify.sh"]
  on_loop_stopped: ["scripts/notify.sh"]
  on_budget_exceeded: ["scripts/notify.sh"]
  on_merge_conflict: "https://hooks.example.com/alc"

Stage

Advisory throughout. The stage never changes how a mandate executes; its authority stops at warnings, reports and scaffolds.

FieldDefaultMeaning
stagenonepre-pmf, growth or strong-pmf
stage_mixnoneReplaces the built-in target mix wholesale
stage: growth
stage_mix:
  core: [builder, sweeper, grower]
  secondary: [maintainer]

With no stage declared, no mix rule fires anywhere.

Directories

Every path is relative to the project root. The defaults are what alc init writes.

FieldDefault
blueprints_dir.alc/blueprints
flows_dir.alc/flows
specialists_dir.alc/specialists
primers_dir.alc/primers
prompts_dir.alc/prompts
bundles_dir.alc/bundles
queue_dir.alc/queue
loops_dir.alc/loops
runs_dir.alc/runs
variants_dir.alc/variants
metrics_dir.alc/metrics
signals_dir.alc/signals
artifacts_dir.alc/artifacts

Next