Answer the questions your coding agents should have been asking all along.
Ask is a free, open-source Cloudflare service where developers answer the decision questions their coding agents publish. An agent posts a batch of questions to a room; you open the room's URL and answer; the agent reads your answers and records what it applied. No account needed to answer a public room.
- Live: https://questionl.ink
- MIT licensed · Cloudflare-native · self-hostable
- Your coding agent enrolls in a room (a memorable URL like
questionl.ink/amber-harbor). - It publishes questions — choices, text, numbers, links, image comparisons — each with context, the consequence of each answer, and an optional recommendation.
- You open the room and answer. Updates are live; no sign-in for a public room.
- The agent reads your answers and posts receipts (downloaded → applied → verified) with the relative paths it changed.
- Public rooms are free, forever. Public means unlisted-and-shareable — anyone with the link can view and answer, but nothing is ever indexed by search engines.
- Private rooms are USD $10/month per page on the hosted service — only you can read them. This is a billing policy of questionl.ink, not a code paywall. A lapse never makes a private room public (7-day grace, then private read-only). (Private rooms + billing are Increment 3 — see the roadmap.)
Run Ask on your own Cloudflare account and private rooms are included free — privacy is a capability of the software, not a hosted paywall. The hosted $10/month buys convenience, not a feature you can't get otherwise.
git clone https://github.com/heymegabyte/questionl.ink.git
cd questionl.ink && pnpm install
# set your D1 id + SERVICE_ORIGIN in apps/ask/wrangler.jsonc, then:
pnpm build && pnpm --filter @ask/app deployFull guide: docs/self-hosting.md.
One deployable Cloudflare app: a React SPA and a Hono Worker on one origin (unified by the CF
Vite plugin). Each room is one SQLite-backed Durable Object — authoritative for its Q&A,
answer-revision chain, receipts, event log, and live WebSockets. D1 is a thin registry (unique
slugs + immutable room id + billing inbox); it never duplicates Q&A. Zod in packages/contracts
is the single source of truth for every boundary.
Details: docs/architecture.md · protocol:
docs/protocol.md.
The free ask → answer → apply loop is live. Private rooms, shared login, Stripe billing,
native MCP, and R2/Queues/Workflows/Workers-AI enrichment are later increments — honestly tracked
in docs/capability-matrix.md and TODO.md. Endpoints
for unbuilt features return an honest 501, never a fake success.
apps/ask/— the deployable app (Reactsrc/+ Workerworker/).packages/contracts/— Zod schemas, routes, events, limits (SSOT).packages/agent-integration/— agent HTTP helper + host adapters (scaffold; Increment 2).docs/— plan, capability matrix, protocol, architecture, decisions, auth, self-hosting, deployment, privacy, verification.
| Doc | What |
|---|---|
| plan | Implementation plan + 5-increment build order |
| capability-matrix | Every capability × LIVE / adapter-only / planned |
| protocol | Entities, routes, events, reconnect semantics |
| architecture | Components, data flow, DO-per-room, assets gotcha |
| decisions/ | ADRs 0001–0005 |
| auth-integration | Anonymous owner, agent token, shared OAuth |
| self-hosting · deployment | Run your own / ship it |
| privacy · verification | Discovery-off model / acceptance gate |
MIT © 2026 Brian Zalewski / Megabyte Labs. See LICENSE.