A curated PWV community for founders, developers, and hackers building tools and workflows for agentic software development.
AgentCribs began as a private gathering of PWV founders and close friends sharing the real tools, workflows, repos, and team practices they use to build software and run companies with AI. Now it's opening selectively to more people already building with agents.
Apply at agentcribs.com.
PWV is:
- Tom Preston-Werner
- David Price
- David Thyresson
PWV is the fund we wanted as early-stage founders.
We believe in founder-first values, and have a track record of backing category-defining companies from zero to breakout.
- Node.js 22+
- A Cloudflare account with Workers, KV, R2, Queues, Workers AI Gateway, and Email Send enabled
- A Workers AI Gateway — used for AI-powered story summarization via Llama models. The gateway runs from Cloudflare's edge even in local development (no local model needed).
This is a RedwoodSDK app. Wrangler is already included as a dev dependency via rwsdk — no global install needed.
Learn more: rwsdk.com · docs.rwsdk.com
The worker requires these bindings (configured in wrangler.jsonc):
| Binding | Type | Purpose |
|---|---|---|
AGENTCRIBS_KV |
KV Namespace | Application storage, email dedup, OAuth state, verification tokens |
AGENTCRIBS_R2 |
R2 Bucket | Durable application backup storage |
SEND_EMAIL |
Send Email | Transactional email for magic link verification, notifications |
ASSETS |
Fetcher | Static asset serving |
AI |
Workers AI | AI Gateway binding (remote-only) |
PROCESS_APPLICATION_QUEUE |
Queue | Application processing: backup to R2, set email index, enqueue magic link |
SEND_EMAIL_QUEUE |
Queue | Send magic link verification email |
NOTIFICATION_QUEUE |
Queue | Send pending-review/accepted/rejected emails + enqueue Slack |
SLACK_QUEUE |
Queue | Post notifications to Slack webhook |
DEAD_LETTER_QUEUE |
Queue | Capture failed queue messages for debugging |
The worker defines 5 queues:
agentcribs-process-application— backup to R2, set email index, enqueue magic linkagentcribs-send-email— send magic link verification emailagentcribs-notifications— send pending-review/accepted/rejected emails + enqueue Slackagentcribs-slack— post notifications to Slack webhookagentcribs-dead-letter— capture failed messages from other queues (no retries)
Set these via wrangler secret put <NAME>:
| Secret | Description |
|---|---|
ADMIN_PASSWORD |
Password for the admin panel at /admin (used by dev/password auth fallback) |
ADMIN_COOKIE_NAME |
Cookie name for the admin session (defaults to agentcribs_dev_admin_session) |
GITHUB_CLIENT_ID |
GitHub OAuth App client ID |
GITHUB_CLIENT_SECRET |
GitHub OAuth App client secret |
GITHUB_CALLBACK_URL |
GitHub OAuth callback URL (e.g. https://agentcribs.com/apply/github/callback) |
SEND_EMAIL_FROM |
From address for transactional emails (defaults to agentcribs@agentcribs.com) |
APP_URL |
Public base URL of the app (e.g. https://agentcribs.com or http://localhost:5173) |
SLACK_WEBHOOK_URL |
Slack webhook URL for application notifications (optional) |
CLOUDFLARE_ACCOUNT_ID |
Cloudflare account ID — used by AI Gateway |
AI_GATEWAY_NAME |
Name of your Workers AI Gateway (e.g. agentcribs-ai-gateway) |
CF_AIG_TOKEN |
AI Gateway API token — generate via Cloudflare dashboard under AI Gateway → API Keys |
LUMA_API_SECRET |
Luma API secret for event integration |
# Install dependencies
pnpm install
# Generate worker type bindings
pnpm generate
# Start dev server
pnpm devThe dev server runs on http://localhost:5173 by default. For local testing of email and GitHub OAuth, copy example.env to .dev.vars and fill in the required secrets.
Application topics and playlists are managed via Content Collections. Markdown topic definitions live in content/topics/ and JSON playlists in content/playlist/. The @content-collections/vite plugin generates typed data at build time, consumed by server queries in src/app/queries/.
- Create the KV namespace:
wrangler kv namespace create AGENTCRIBS_KV(updateidinwrangler.jsonc) - Create the R2 bucket:
wrangler r2 bucket create agentcribs-applications - Create the 5 queues (names must match
wrangler.jsonc):wrangler queues create agentcribs-process-applicationwrangler queues create agentcribs-send-emailwrangler queues create agentcribs-notificationswrangler queues create agentcribs-slackwrangler queues create agentcribs-dead-letter - Create a Workers AI Gateway — note the gateway name and generate an API key
- Create a GitHub OAuth App with the callback URL set to your
GITHUB_CALLBACK_URL - (Optional) Set up Slack notifications: Create a Slack webhook and set it as
SLACK_WEBHOOK_URLsecret
The admin panel at /admin/* is protected by Cloudflare One Access in production. Cloudflare's Zero Trust proxy authenticates users and injects cf-access-authenticated-user-email and cf-access-authenticated-user-id headers, which the cloudflareSessionMiddleware reads to populate ctx.session.
In local development (when VITE_IS_DEV_SERVER is set), the admin panel is unauthenticated and displays "User" as the session identity. A basic password-auth middleware (requireAdminPassword) is available in src/app/middleware/auth/basic.ts as a fallback but is not wired by default.
Applicant verification uses two flows:
- GitHub OAuth — verifies applicant identity via GitHub profile. Starts in
actions/github.ts, handled by middleware at/apply/github/callback. - Magic link email — verifies applicant email ownership. A verification link is sent via the
agentcribs-send-emailqueue, and the callback at/apply/verifyvalidates the token.
pnpm release