--json, plus --url and --app-id when your config lacks them. A failed command prints the reason and exits 1.
Filing works for GitHub, Linear and Jira. A Linear or Jira connection made without write access is refused with tracker_write_not_permitted. spec target and spec search work for all three.
The starter /spec skill runs these commands for you. See Connect an issue tracker.
outerlayer spec target
Say where a spec would be filed, and whether the factory can file there.
A factory with a stored Linear or Jira connection files there. A factory with only linked repositories files in GitHub.
It needs
work.read.
outerlayer spec search
Find open and closed issues that match a query, so a spec is not filed twice.
--json, each issue also carries its tracker, updatedAt and URL. It needs work.read.
outerlayer spec file
File a spec as a new issue.
It prints the key, the URL, the issue’s
updatedAt and the command that builds the issue:
spec.insert. The Agent preset carries it, but keys made before it existed do not, so make a new key or edit the old one. For GitHub, an organization admin must also approve the OuterLayer App’s Issues: Read and write permission (issues: write) once. Until then spec target prints can file: no, and spec file refuses with tracker_write_not_permitted and sends GitHub nothing.
Every attempt that reaches a tracker is recorded in a log that cannot be edited or deleted.
outerlayer spec edit
Replace the body of an issue that holds a spec.
<key> is the issue key, such as acme/api#12. --body-file is the whole new body. Pass the updatedAt that spec file printed, or that your last spec edit of the issue printed, as --updated-at, and the edit is refused with conflict if the issue has changed since. On Linear any change to the issue counts, not only to its description. Without --updated-at, the edit is not checked for someone else’s change. spec search matches words in titles and descriptions, not keys, so it cannot supply updatedAt for a given key. The tracker offers no conditional update, so a small window for a race remains.
It prints the key, the URL and the issue’s new updatedAt, which is the value to pass to the next edit. With --json, the output carries the same updatedAt.
spec.update, held on its own so a key can file without being able to rewrite.
Refusals
A refused command prints the reason and exits1. The message names the choices when there are any.
A key without the permission gets
403 and no tracker request is made.