Standups & blockers
Post your daily update to a team, raise and clear blockers, and read the feed. Most commands take a
TEAM argument — the team's slug or name (see stn team
list).
Posting updates
stn push TEAM "your update" # post today's update to a team
stn push TEAM "..." --blocked # mark it a blocker (@mention who's blocking you)
stn push TEAM "..." --blocked --severity high # low | normal | high | critical (high+ relays now)
stn push TEAM "..." --context # attach your current git snapshot (branch/commit)
stn push TEAM --auto # AI-draft from your local git activity, then edit & confirm
stn push TEAM --from CHECKPOINT_ID # promote a checkpoint's focus into the update
stn push TEAM "..." --update ID # edit an existing entry by id
stn push TEAM "..." --update ID --replace # ...overwriting in place, no version saved
stn edit ID "new text" # edit an entry (keeps the old text as a version)
stn edit ID "new text" --replace # overwrite without saving a version (typos)
stn delete ID # delete an entry
stn show ID # show one entry, with its block resolutions
stn versions ID # an entry's edit history (superseded versions, oldest first)
@mentions. Mention teammates inline (e.g. "blocked by @alice on X");
every @handle must be a real user or the push is rejected. On a blocker, the people you
@mention are the named blockers who can clear it.
Versions. A normal edit keeps the prior text as a version you can read
back with stn versions; pass --replace to discard it instead — meant for
typo fixes. stn push --update ID is the same edit, inline.
--auto. Generates a draft from your local git activity and opens it for you to
edit and confirm before anything posts (requires stn ai
on). It needs an interactive terminal — in a script or CI, pass explicit content
instead.
Generates. On success the CLI prints the new entry's id
(posted entry #<id>) — that id is the handle every other command takes
(--update, edit, delete, resolve,
link). Each posted or edited entry is also mirrored locally as Markdown under
~/.stndp/YYYY/MM/YYYY-MM-DD.md, and entries are stamped with your local date, so a
late-night push still lands on the right day.
Blockers
stn block TEAM "what you're blocked on" # raise a blocker — an alias for `push --blocked`
stn block TEAM "..." --severity critical # low | normal | high | critical
stn resolve ID "how it was cleared" # clear a block, with a resolution note (required)
stn resolve ID "..." --blocker @handle # admin: clear one specific blocker's part
stn unresolve ID # re-open a block you previously resolved
stn unresolve ID --blocker @handle # admin: re-open a specific blocker's part
Severity. One of low, normal, high,
critical. high and critical relay to the team immediately
rather than waiting for the next digest. An unknown severity is rejected before anything is sent.
Multiple blockers. A block that @mentions several people stays active until
each named blocker has cleared their part. Resolving as a named blocker clears your part;
a team admin can clear one specific blocker with --blocker, or every remaining one at
once by omitting it. The resolution note is required — it's what the team reads in the feed.
Reading entries
stn status TEAM # today's entries in a team
stn log TEAM # your recent entries (the last 7 days)
stn log TEAM --week # this calendar week (from Monday)
stn log TEAM --from YYYY-MM-DD
stn team feed TEAM # one team's full feed, blocks with resolutions nested beneath
stn team feed TEAM --week
stn inbox # entries across your teams that @mention you
stn inbox --unresolved # only blocks naming you that you haven't cleared yet (-u)
Feeds render in the terminal: each entry shows the author, date, and its
#<id> — the same id you pass to stn show, edit,
delete, resolve, or link. Blockers are tagged
[blocked] or [resolved] (plus the severity when above normal), and each
resolution hangs off its block like a file tree. stn inbox is the cross-team view of
everything put on you.