Program
Read-only inspection of the canonical program ledger: list, show, events, and resume.
The program ledger is the canonical, multi-session record that joins immutable program events to current session-ledger edges and nodes. rensei program (v0.14.21+, rensei-tui #403) is its read-only operator surface. Every subcommand is a GET against /api/cli/programs; the CLI never mutates the ledger.
Requires dispatch:invoke and org-scoped visibility. A program is addressed by its immutable programId (prog_ + 32 hex). Visibility is anchored to the origin session project and clipped to the caller's project fence. A project-fenced credential sees only programs whose origin project it can access; cross_project programs require an org-wide credential.
Commands
program list
Keyset-paginated index, newest first.
rensei program list [--project <slug>] [--scope project|cross_project] [--external-key <key>] [--limit 1..200] [--cursor '<json>'] [--json]| Flag | Description |
|---|---|
--project <slug> | Resolve a project slug or stable UUID to a platform project id and filter to that project. If --project is omitted, the list is org-wide clipped to the caller's project fence. The root --project flag is respected; an implicit active project never silently narrows the list unless you pass the flag. |
--scope project|cross_project | Filter by ledger scope. project is a single-project program; cross_project is a multi-project topology (requires org-wide visibility). |
--external-key <key> | Filter by the caller's external correlation key. |
--limit <n> | Maximum programs to return (1-200, default 50). |
--cursor '<json>' | Opaque keyset cursor from the previous page's nextCursor: {"createdAt":"...","programId":"prog_..."}. Both fields are required when a cursor is present. |
--json | Emit the REST response envelope as JSON. Human output is a table plus Next cursor: when more pages exist. |
# Newest 50 programs visible to the caller
rensei program list
# Project-scoped view
rensei program list --project my-fintech-app --json | jq .programsCursor pagination. Pass the exact JSON the previous response's nextCursor printed. An invalid or partially-specified cursor is rejected before any network call.
program show <program-id>
One immutable program record.
rensei program show <program-id> [--json]<program-id> must match prog_[0-9a-f]{32}; otherwise the CLI rejects it as an invalid request without calling the platform. Human output:
Program: prog_...
Title: ...
External key: ...
Scope: project
Origin: session ... , graph ... , project ...
Created: ... by ...--json prints the ProgramDetail envelope (ledgerVersion, programVersion, programId, externalKey, title, scope, origin, createdByPrincipalRef, createdAt).
program events <program-id>
Ordered, structured-reference events for one program, ascending by decimal seq.
rensei program events <program-id> [--after-seq 0] [--limit 1..1000] [--type <type>] [--wave <waveId>] [--json]| Flag | Description |
|---|---|
--after-seq <decimal> | Return events after this decimal sequence (default 0). Must be an unsigned decimal within 0..9223372036854775807. |
--limit <n> | Maximum events to return (1-1000, default 100). |
--type <type> | Filter by event type: issue_created, wave_opened, wave_closed, child_dispatched, receipt_recorded, handoff_recorded. An unknown type is rejected client-side. |
--wave <waveId> | Filter by wave id. |
--json | Emit the REST response envelope as JSON. Human output is a SEQ TYPE WAVE ACTOR RECORDED table plus Next after-seq: and a (more) hint when hasMore is true. |
rensei program events prog_abc --limit 100 --json | jq .events
rensei program events prog_abc --type child_dispatched --wave wave-10program resume <program-id>
One authoritative resume projection: the immutable event stream joined to current session-ledger edges/nodes.
rensei program resume <program-id> [--json]Human output starts with the same program detail as program show, then:
Resume after-seq: ...
Open waves: ...
In-flight children: ...
Last event: ... (...)
<edgeId> <sessionId> <phase>--json prints ProgramResumeResponse (program, resumeCursor.afterSeq, lastEvent, openWaves[], inFlightChildren[]). Terminal children are absent even when no later program event was appended - the join against session_ledger_edges/session_ledger_nodes is live.
Authentication and project fence
rensei program uses the same credential resolution as every rensei command (--auth, --org, --project, RENSEI_*, and the daemon's bearer when present). The request is authorized by the authenticated principal and the explicit projectId query parameter, never by a remembered X-Rensei-Project header - the program client clears that header.
Project resolution for --project under program list accepts both the stable platform UUID and the human slug. An unknown or misspelled slug is refused before the list call; the error names the candidates rather than silently returning an empty page.
Related pages
- Upgrade - version history and the v0.14.21 / v0.14.22 release notes
- Capacity - receipt forwarding - per-pool
receiptForwardingopt-in that controls whether terminal execution receipts reach the daemon - Capacity Pools - what receipt forwarding does and where receipts are persisted
- Interactive Chat -
session prompt/agent chatwith--idempotency-keyand durable prompt receipts - donmai.dev - layered execution model - OSS session model referenced by the ledger