Routines
A routine is a cron for a report: on a schedule it runs a skill (instructions for the model, optionally using connectors for external data) and appends the output as a new revision of the same report. The URL your team bookmarked on Monday shows Friday's numbers on Friday.
If you're evaluating the concept, the marketing overview is at Routines →; this page is the operational reference.
The three pieces
- Skill — what to produce. A reusable instruction set the model runs ("query last week's signups, render the trend table…").
- Connector — what it may touch. Credentials for an external service (Slack, Stripe, your warehouse), encrypted at rest, granted to skills explicitly.
- Routine — when to run it and which report receives the revision.
Creating a routine
In the app: Routines → New routine, pick or write a skill, set the cadence, choose the destination report. Over the API:
curl -X POST https://commareports.com/api/v1/routines \
-H "Authorization: Bearer $COMMA_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "name": "Weekly metrics", "skill_id": "…", "schedule": "…", "report_id": "…" }'
Agents can do the same through the MCP tools create_routine /
update_routine / run_routine — the routines token scope gates all of
it.
Cadence by plan
| Plan | Fastest cadence |
|---|---|
| Free | Manual runs only |
| Pro | Daily |
| Team | Hourly |
| Enterprise | Sub-hourly / custom |
Each run consumes AI run budget; Pro includes $5/month of runs and then a
prepaid balance, Team pools budget across the team, and Enterprise can
bring its own AWS Bedrock keys. Check your numbers any time with
GET /api/v1/me/plan-caps and GET /api/v1/me/usage.
Running on demand
Every routine can be kicked outside its schedule:
curl -X POST https://commareports.com/api/v1/routines/ROUTINE_ID/run \
-H "Authorization: Bearer $COMMA_API_TOKEN"
This is also the escape hatch for external schedulers — if your
orchestration already lives in Airflow or GitHub Actions, call run from
there and keep Comma as the publishing layer.
What a run produces
- A new revision on the destination report — same URL, full history, diffable against any earlier revision.
- An automatic changelog comment summarizing what changed (rate-limited to one per report per 12 hours, so hourly routines don't spam the thread).
- Optional webhook notifications on
revision.created— Slack, Discord, or plain JSON. See the API reference →.
Reviewers close the loop
Pair a routine with a standing AI reviewer and every refresh gets checked — the reviewer reads the new revision and posts findings as anchored comments before a human ever opens it. See Standing AI reviewers →.