Operations runbook
This page maps common operator questions to the lmctl commands to run.
For the full command list, see the CLI reference.
Start by orienting
lmctl status
lmctl api attentions --json
Use lmctl status for the human-readable operator view. It resolves the
current project from your working directory when possible. Use
lmctl api status when you need the daemon status payload.
What is waiting for me?
lmctl api attentions --json
lmctl api escalations list --json
Attentions are durable notifications. Escalations are workflow pauses waiting for operator input.
Respond to an escalation:
lmctl api escalations respond <attention_id> "Use the smaller scope and continue."
Show one escalation when you need the exact prompt:
lmctl api escalations show <attention_id> --json
What happened in a run?
List recent runs and inspect one:
lmctl api runs
lmctl api run <id>
List queued jobs:
lmctl api jobs
lmctl api job <id>
A job is the queued request. A run is the workflow execution created from the job.
Run a workflow
lmctl api submit-job \
--workflow qa-suite \
--project my-project \
--inputs '{"project_name":"my-project"}'
submit-job waits for the run to reach a terminal state.
You can also use the top-level runner:
lmctl workflow run --workflow qa-suite --project my-project --inputs '{"project_name":"my-project"}' --json
Diagnose a stuck run
Start with:
lmctl status
lmctl api run <id>
lmctl api run timeline <id>
lmctl api attentions --json
lmctl diagnose
If the run is paused for input, answer the escalation. If the run failed, use the run detail and diagnostic bundle as evidence for an issue.
Issue lifecycle
List open issues:
lmctl api issues list my-project --status open --json
Create an issue:
lmctl api issues create my-project \
--title "Status smoke failed" \
--body "Expected status data; observed a terminal failure in the workflow run." \
--severity high
Close an issue after the fix is verified:
lmctl api issues close <id> --commit-hash <sha> --closed-run-id <run>
Teamfile maintenance
lmctl lint ./team.lmctl
lmctl seed ./team.lmctl
lmctl clone ./team.lmctl ./team-template.lmctl
Run lint before seed after editing a teamfile. Cross-team calls work
automatically at runtime — there is nothing to wire up.