Skip to main content

crewship digest

The workspace-digest routine (issue #1422 item 4) is a token-zero ops digest — run counts, total cost, and top failures over a trailing 24h window — posted to the workspace inbox and fanned out to Slack/email/etc via your existing notification channel preferences. It ships seeded into every fresh workspace; crewship digest enable creates it on demand for a workspace that predates the template (or that nuked its seed data) and wires a cron schedule.

How it’s built

Three deterministic step types, zero LLM spend, zero network egress:
  1. query (source: pipeline_runs) — a read-only aggregate over the run’s own workspace, strictly scoped to workspace_id (see the query step docs).
  2. transform — extracts the pre-rendered summary_md field from the query step’s JSON output.
  3. notify (to: workspace) — posts the digest to the workspace inbox. This is the existing #1412 notification system, used unmodified: recipients configure Slack/email/etc delivery via crewship notifychannel + crewship notify prefs, exactly like any other routine’s notify step.
The routine declares agentless: true — genuinely, not “agentless-ish”: every step in the chain is deterministic.

crewship digest enable

Ensures the routine exists and is scheduled. Both steps are idempotent — running it again with the routine and a schedule already in place is a no-op (other than confirming the current state).
What it does, step by step:
  1. GET /pipelines/workspace-digest — if the routine already exists, skip creation.
  2. If missing: resolves --crew to a crew id, then saves seeddata.WorkspaceDigestDefinition — the same definition the seeder uses — through the normal test_runsave_tokensave flow (identical to routine save; no privileged skip-gate path).
  3. Lists existing schedules; if one already targets workspace-digest, leaves it alone and reports its id. Otherwise creates one with the resolved cron expression.
--format json returns {routine_created, schedule_created, schedule_id, cron_expr} for scripting.

Changing the cadence or turning it off

digest enable never touches an existing schedule’s cadence — use the ordinary schedule commands once it exists:

See also