Every stalled ticket is an unmade decision.
crastinating reads your repo, Linear and calendar, finds the blocker hiding inside each stalled ticket, drafts the smallest memo that could unblock it, and routes it to the one person who can actually decide.
First-run latency: under 60s from PR to decision request. Works with GitHub + Linear today. Jira and Notion next.
- Decision types
- 14
- Adapters
- 6
- Median decide time
- 4h 12m
- Price per reader seat
- $0
- (a) refund_id + attempt — stable across retries
- (b) new UUID per retry, dedup server-side
- (c) tenant_id + refund_id hash
- Move all webhooks · breaks partner contracts
- Dual-write for 30 days · recommended
- Pause until partner confirms
Six ways a ticket hides a decision. One queue to surface them.
Each decision type is a typed schema you import from @crast/decisions. Crastinating spots the matching pattern, drafts the memo and asks the named decider.
Tech choice· Unopinionated
@crast/decisionsA pick between two-plus packages, protocols or patterns. Crastinating drafts the tradeoff table from your repo and links the artifacts.
- SQS · ships in 3h, $0/mo
- Temporal · higher ceiling, 2w ramp
- Defer — ask again in 2 weeks
Scope cut· Editorial
@crast/decisionsSomeone needs to say the explicit no. We summarise what's in, what's out, and what moves to the next release.
- Ship solo-only, multi-seat in v2
- Hold launch for multi-seat
Access request· Unblock
@crast/decisionsStuck because a human has the key. Crastinating routes to the named grantor with the smallest ask that proves need.
- Grant 24h read role scoped to migrations schema
- Provide a sanitized dump instead
Policy gate· Compliance
@crast/decisionsA decision that needs a reviewer outside engineering — legal, finance, design. Same queue, different routing.
- Keep 90d with DPA in force
- Hash + 30d retention
- Drop PII entirely
Vendor pick· Buy vs build
@crast/decisionsAnother SaaS bill vs another service to run. We pull pricing, SLAs, and the last six months of incidents.
- Typesense Cloud · $199/mo
- Algolia · $0 → $500/mo at scale
- Self-host on Fluid · 1 dev-week
Rollout gate· Launch
@crast/decisionsThe staged rollout step that always stalls at the halfway flag. Crastinating checks criteria and asks the on-call owner.
- Promote · error rate 0.04% under budget
- Hold · wait 24h more
A queue is a file. A routing change is a commit.
Drop a TypeScript file in queue.crastinating.ts, export a defineQueue() result, and crastinating reads your sources, classifies blockers and asks deciders exactly the way the file declares.
- Typed decision schemas — techChoice(), scopeCut(), rollout(), policy().
- Review routing like code — a PR that changes who decides what is the right diff.
- Every decision becomes a searchable memo with context, options and the chosen path.
// queue.crastinating.ts
import { defineQueue, deciders, on } from "@crast/runtime";
import { techChoice, scopeCut, rollout, policy } from "@crast/decisions";
export default defineQueue({
team: "payments",
sources: [
"github:acme/payments",
"linear:PAY",
"calendar:team-payments@acme.com",
],
deciders: deciders({
"staff-eng": ["@maren", "@isak"],
"eng-manager": "@jun",
"security": "@rae",
"legal": "@elena",
}),
escalate: { afterHours: 48, to: "eng-manager" },
route: [
on(techChoice()).askOne("staff-eng"),
on(scopeCut()).askOne("eng-manager"),
on(rollout({ rolloutKey: /^promote:/ })).askOne("on-call"),
on(policy({ kind: "pii" })).askBoth("legal", "eng-manager"),
],
});Three steps. One git workflow. Zero "waiting on" limbo.
- 01Install the CLI
pnpm add -D @crast/cli, run crastinating init. The CLI writes queue.crastinating.ts, installs the GitHub App and connects Linear.
- 02Declare deciders
Name the handful of people who can actually say yes: staff eng, eng manager, security, legal. That's your routing table.
- 03Ship the queue
Merge the PR. Crastinating watches PRs and tickets, spots blockers, drafts memos, and routes each one exactly where it should go.
# bootstrap crastinating in any repo
pnpm add -D @crast/cli
pnpm crastinating init
# scaffold a queue for one team
pnpm crastinating new payments
# ship it
git checkout -b feat/crastinating-payments \
&& git commit -am "feat: decision queue for payments" \
&& gh pr createFour kinds of stalled tickets most of us already have.
Infra choices, out of DMs
Queue, cache, auth, tracing — the picks that drift in Slack for weeks. Crastinating turns each into a PR-reviewable decision with a named owner.
Rollout gates that actually gate
25% → 50% → 100% steps get a real owner and a real timer. No more dashboards watched by nobody at 02:00.
Cutting without the meeting
Ship v1 without multi-seat? Keep the flag or delete it? The answer is a memo, not a three-hour call.
Legal, finance, design in-loop
Decisions that need a non-engineer reviewer stay in the same queue — routed to the right reviewer with the smallest ask that proves need.
Opinionated where it matters. Boring where it should be.
Decisions, deciders, routes and context are typed. Autocomplete every field, catch routing regressions at build time.
Version, review, revert. A routing change is a diff. Who can decide what is the same artifact as the code that needs to decide.
Claude and GPT-5 draft the tradeoff, Crastinating never decides. The memo is a starting point, not an answer.
Server Components, Cache Components per queue, typed routes. Installs into any Next.js repo with zero config.
Watchers reuse instances with graceful shutdown. 300s default timeouts for the deepest Linear backfill.
Ship into your own Next.js app with @crast/runtime, or point the CLI at crastinating.pro Cloud. Same code either way.
Free to self-host. Priced per decider — readers don't pay.
Open core
The crastinating runtime, decisions and routing engine — MIT-licensed. Drop into any Next.js repo.
- @crast/runtime · @crast/decisions · @crast/routing
- MIT licence, MIT-forever
- GitHub App + Linear adapter included
- Unlimited decisions, unlimited readers
Cloud
Most popularHosted watchers, memo drafting, escalation, analytics and a console at app.crastinating.pro.
- Everything in Open core
- AI-drafted memos (Claude + GPT-5)
- Escalation timers + on-call handoff
- Decision analytics + weekly digest
- Readers are free, forever
Business
SSO, private queues, audit log and an SLA — for teams running decisions as infra.
- Everything in Cloud
- Unlimited private queues
- SSO (SAML · OIDC) + SCIM
- Immutable audit log + export
- 99.95% uptime SLA