Post the agent's comment on its work item. The harness uses it instead of gh for the ticket's paper trail: spec-gate replies, the completion summary, the reviewer briefing, decision records.
Posts the comment on the work item. The issues endpoint serves PR conversations too, so a PR ref works. The loop-prevention marker and an event envelope are stamped centrally, so the agent does not have to remember them, and its own comment never resumes its own session (issue-104).
Mirrors it to every channel subscribed to comment.agent (the Slack room, say). The poller and the webhook receiver see the envelope when they read the comment back, and publish nothing, so the room gets it once.
It prints the comment's URL. To ask a human and wait for the answer, use ask instead: it records the wait, and comment does not.
Through the control-plane service when one is running, so the daemon's token posts the comment and the session holds none. When no service answers, it runs in-process on the token integrations.github.api.tokenEnv names (default GH_TOKEN, then GITHUB_TOKEN), and says so on stderr. It never starts a service for this (decision-140). A service older than the CLI, which lacks the route, is treated the same way, with a note to restart it. The same holds for ticket and pr.
On a Jira ref the Jira ledger posts the comment on the ticket through the configured service account, ending with the visible self-marker Jira keeps (a Jira comment cannot hide text), and a ref on another site or in an unconfigured project is refused with exit 2 before anything is sent.
Every verb addresses only github.com and the operator's own GitHub host (integrations.github.host, an enterprise baseUrl, $GH_HOST). A ref, URL or repository on any other host is refused with exit 2 before anything is sent, so the token never reaches a server the operator did not name.
commentPost the agent's comment on its work item. The harness uses it instead of
ghfor the ticket's paper trail: spec-gate replies, the completion summary, the reviewer briefing, decision records.What it does
comment.agent(the Slack room, say). The poller and the webhook receiver see the envelope when they read the comment back, and publish nothing, so the room gets it once.It prints the comment's URL. To ask a human and wait for the answer, use
askinstead: it records the wait, andcommentdoes not.Flags
--work-itemgithub:[HOST/]OWNER/REPO#N, orjira:<site>/<KEY>-<n>withintegrations.jiraconfigured).--body--body-file-reads stdin. Exactly one of the two.Where it runs, and whose token
Through the control-plane service when one is running, so the daemon's token posts the comment and the session holds none. When no service answers, it runs in-process on the token
integrations.github.api.tokenEnvnames (defaultGH_TOKEN, thenGITHUB_TOKEN), and says so on stderr. It never starts a service for this (decision-140). A service older than the CLI, which lacks the route, is treated the same way, with a note to restart it. The same holds forticketandpr.On a Jira ref the Jira ledger posts the comment on the ticket through the configured service account, ending with the visible self-marker Jira keeps (a Jira comment cannot hide text), and a ref on another site or in an unconfigured project is refused with exit 2 before anything is sent.
Every verb addresses only github.com and the operator's own GitHub host (
integrations.github.host, an enterprisebaseUrl,$GH_HOST). A ref, URL or repository on any other host is refused with exit 2 before anything is sent, so the token never reaches a server the operator did not name.Exit codes
--body-file. Nothing is sent.