--json, plus --url and --app-id when your config lacks them. A failed command prints the reason and exits 1.
outerlayer work build
Start work on an item. A runner builds it, or with--local you do.
--local, the command records a build request naming who asked. A runner takes the item when it has a free slot. Only a build request makes an item startable for a runner. The command never links your session or takes a claim. A failed build never retries itself: run work build again.
Instructions belong to the one build request they come with. A later request without instructions gives its build none. The agent treats them as guidance from you. The issue and its criteria win if the two disagree. Instructions never skip a check or change which issue is built. --instructions with --local exits non-zero and posts nothing, because you build that item in your own session and can say it there. Text over 2000 characters is refused with a 400 naming instructions. The build skill reads them, so a repository whose /build skill predates this flag needs outerlayer init --update first.
It prints the item’s own number, which is not the issue’s, then the item’s page:
outerlayer connect to the factory the request went to. Only that connection names the organization and factory.
With --local, the item goes on Work with no build request, so no runner takes it. The command prints:
--json, the launch line is the launchCommand field, and branch is the branch a runner would build the item on. An item already on Work needs no --local: start a session with OUTERLAYER_WORK=<number>.
A Linear or Jira key must belong to a team or project the factory connected, and the tracker must be able to read it.
See also: Launch a session, Run work on your machines, Connect a tracker.
outerlayer work link-session
Link the calling session to an existing item. The session hooks run this for you.
See also: Launch a session.
outerlayer work remove
Withdraw your own addition of an item, recording why. Nothing is deleted.outerlayer work status
Print one item’s stage, section, gate results, linked pull requests and sessions, additions, and recorded acceptance criteria, as JSON. The output is indented; with--json it is one line.
After the JSON, a Criteria section lists each criterion’s id and text, with its required proof when it names one. It reads “drafted by the build” when the build wrote the list from the issue description instead of a person recording it. It reads “none recorded” when the item has no list. In --json, criteria is null when none are recorded. Otherwise it is { drafted, recordedAt, recordedBy, items: [{ id, text, proof }] }. Only the current list appears.
checks lists every check open on the item: the newest result of each name, with name, result, body, link, source and items. items holds the check’s check items, or null when it has none. After the Criteria section, a Failing checks section lists each failing check with its sentence. Under each one it lists the failing check items, with their reasons.
issue is the item’s issue as OuterLayer last copied it from GitHub, Linear or Jira: { url, state, body, author, openedAt, labels, syncedAt, syncStatus }. body is the description in Markdown. syncStatus is ok, unreadable when the last read failed and the copy is from the read before it, or not_found when the tracker says the issue is gone. A build reads the issue here, so it needs no tracker credential.
no live item for <repo>#<n> or for ENG-123: check --issue and --repo. ENG-123 names an item in jira and linear: pass --tracker.
outerlayer work list
List live work items.--claimed with --unclaimed is refused (invalid_query). Linked sessions and pull requests never block an item.
outerlayer work comment
Post one comment on an item’s general thread, or on one criterion’s thread.
Give at most one of
--pass, --fail, --attach, --ready.
verdict_on_criterion and nothing is stored. A plain comment starts no agent: only a person’s fail on the general thread does.
See also: Review and merge.
outerlayer work threads
Print an item’s general thread, then each criterion thread with proof or a comment, and who each waits on.
See also: Review and merge.
outerlayer work logs
Print the runner’s log for its attempt on an item: what the runner did around the agent, one line per event with its timestamp. Use it to find out why a build ended.
The runner sends its log when it releases the attempt, with secrets removed on the host. It keeps the last 64 KiB. When the attempt ended in provision, sync, cleanup or report, the log ends with the last 200 lines of that stage’s log. It never holds the command’s output.
The command exits with an error and prints no log in two cases. The attempt is still running, or a runner too old to send its log released it. See Find out why a build ended.
outerlayer work stop
Ask the runner that is building an item to stop. The gateway records who asked, when, and the note. The runner reads the request in the reply to its next heartbeat, ends the build, and releases the claim with outcomestopped.
The command prints that the stop is pending and which runner holds the build, then returns. It does not wait for the build to end. A second request while one is pending changes nothing.
A build stopped this way uses up its build request. The item is not claimed again until someone asks for another build, with
outerlayer work build or Rerun on a host. A build ended by outerlayer runner stop --now on the host keeps its request, and the item stays available.
The command exits with an error when no host build is running for the item (no_build_running). A session’s own lease cannot be stopped this way. The gateway records the request for a runner older than protocol 21, but that runner cannot act on it.
On the item page, a member with the same permission selects Stop build in the Building now block and confirms.
outerlayer work pr
Declare that a pull request belongs to the work item this session was launched for. It declares onto theOUTERLAYER_WORK item or refuses: if the session is not on that item, nothing is stored. Running it twice is a no-op.
Withdraw a declaration
work pr <number> --withdraw --item <n> removes that item’s declaration of the pull request. Other items’ declarations of it stay. It needs your own login: a factory key or an agent session is refused with withdraw_needs_person. Withdrawing a declaration that does not exist answers declaration_not_found.
See also: Declare a pull request.
outerlayer work open-pr
Open this session’s pull request, or edit the one already open on its branch.- Host build (an item key is the credential): the gateway opens or edits it as the factory’s GitHub App, from the branch the claim named in that repository. No
ghruns.OUTERLAYER_WORKmust be set. Refusals: Opening the pull request. - Your own session: runs
gh pr create, orgh pr edit, under your login, then declares it aswork prdoes: onto theOUTERLAYER_WORKitem or refuses. If declaring fails, runwork pr <number>.
--repository. Every pull request links to the same item:
repository from OUTERLAYER_REPOSITORIES. A repository the claim does not name is refused with repository_not_in_claim. A repository the build did not change gets no pull request.
See also: Declare a pull request.
outerlayer work claim, renew, release
Take, extend or give up a runner’s claim on an item, so two runners never build it at once. The runner makes these calls.release also gives up the calling session’s own lease. Flags, help text and outcomes call a claim a lease.
outerlayer work release also releases the calling session’s own lease. A session that names an item holds a lease on it, and the item’s review stays closed until that lease ends. Run inside a session with no --host, the command releases that session’s lease, so review opens without closing the session. It never releases another session’s lease, and --outcome applies only to a runner’s claim. Releasing a session’s lease needs work.insert, not work.claim. A later tool call in the same session takes the lease again. The build skill runs this as its last step in a local session.
See also: Run work on your machines.