Raw capture β€” raw/weft.md


url: https://github.com/jonesphillip/weft date_fetched: 2026-07-05 backfilled: true


Task management, but AI agents do your tasks.

Weft is a personal task board where AI agents work on your tasks. Create a task, assign it to an agent, and it gets to work. Agents can read your emails, draft responses, update spreadsheets, create PRs, and write code.

Run as many agents in parallel as you want. Schedule recurring tasks to run daily or weekly. Get notified when tasks complete or need your approval. All actions that mutate state (sending emails, creating PRs, modifying documents) require your approval before committing.

Built-in integrations:

Self-hosted and private. Deploy to your own Cloudflare account. Your data stays in your account.

Weft runs entirely on Cloudflare's Developer Platform:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                                         β”‚
β”‚   Browser ◄──────► Worker ◄──────► Durable Objects ◄──────► Workflows  β”‚
β”‚     β”‚               (HTTP)          (BoardDO, UserDO)      (AgentWorkflow)
β”‚     β”‚                                     β”‚                      β”‚      β”‚
β”‚     β”‚                                     β”‚                      β–Ό      β”‚
β”‚     └─────── WebSocket ──────────────────►│              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚              (real-time updates)                         β”‚  Anthropic β”‚ β”‚
β”‚                                                          β”‚  + Tools   β”‚ β”‚
β”‚                                                          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Component Purpose
Workers HTTP routing, auth, serves React frontend
Durable Objects Persistent state (boards, tasks, credentials) and real-time WebSocket updates
Workflows Durable agent loop with automatic checkpointing and retry
git clone https://github.com/jonesphillip/weft.git
cd weft
npm install

Copy the example environment file:

cp .env.example .envEdit .env with your secrets:

# Encryption key for stored credentials (generate with: openssl rand -base64 32)
ENCRYPTION_KEY=your-generated-key
# OAuth credentials (add the ones you need)
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...

See Setting up OAuth credentials for detailed instructions on creating Google and GitHub OAuth apps.

npm run devThis starts both the Vite dev server (frontend) and Wrangler (worker). Open http://localhost:5174.

By default, Weft runs without authentication. Boards and tasks are stored under the user defined by USER_ID in wrangler.jsonc.

After creating your first board, go to Settings and add your Anthropic API key. This key is stored per-board and is required for agents to run.

Set your secrets (only set the ones you need):

Secret Required Description
ENCRYPTION_KEY Yes Encrypts stored credentials. Generate with openssl rand -base64 32
GOOGLE_CLIENT_ID For Google integrations From Google Cloud Console
GOOGLE_CLIENT_SECRET For Google integrations From Google Cloud Console
GITHUB_CLIENT_ID For GitHub integration From GitHub Developer Settings
GITHUB_CLIENT_SECRET For GitHub integration From GitHub Developer Settings
npx wrangler secret put ENCRYPTION_KEY --env production
npx wrangler secret put GOOGLE_CLIENT_ID --env production
npx wrangler secret put GOOGLE_CLIENT_SECRET --env production
npx wrangler secret put GITHUB_CLIENT_ID --env production
npx wrangler secret put GITHUB_CLIENT_SECRET --env production
npm run deploy:prod

Authentication is controlled by the AUTH_MODE variable in wrangler.jsonc:

AUTH_MODE Description Use case
none No authentication. Uses USER_ID/USER_EMAILfrom config as singleton user. Personal/single-user deployments
access Cloudflare Access JWT verification. Requires ACCESS_AUD/ACCESS_TEAMsecrets. Multi-user or login-protected deployments

By default, AUTH_MODE is set to "none" for both development and production.

For multi-user deployments or if you want login protection, enable Cloudflare Access:

Set the secrets:

npx wrangler secret put ACCESS_AUD --env production
npx wrangler secret put ACCESS_TEAM --env production

Then in wrangler.jsonc, change AUTH_MODE to "access" in the production environment:

worker/
β”œβ”€β”€ index.ts              # HTTP routing and auth
β”œβ”€β”€ handlers/             # Request handlers
β”œβ”€β”€ services/             # Business logic
β”œβ”€β”€ workflows/            # Cloudflare Workflows (agent loop)
β”œβ”€β”€ mcp/                  # MCP server registry
β”œβ”€β”€ google/               # Google integrations (Gmail, Docs, Sheets)
└── github/               # GitHub integration
src/
β”œβ”€β”€ components/           # React components
β”œβ”€β”€ context/              # React context providers
β”œβ”€β”€ hooks/                # Custom hooks
└── api/                  # API client

Tasks can be configured to run on a schedule (daily, weekly, or cron). When a scheduled task runs, it operates differently from regular tasks:

This separation means scheduled agents can analyze your inbox or repos overnight, but actual changes still require your review.

Schedule Type Example
Daily 8:00 AM in your timezone
Weekly Monday and Thursday at 9:00 AM
Custom Cron expression ( 0 */6 * * *)

Each board has its own configuration in Settings, organized into tabs:

To add a built-in integration, Weft uses a registry-driven architecture:

The registry defines tool schemas, OAuth configuration, and workflow guidanceβ€”no changes needed to the agent workflow itself.

Apache License 2.0 - see LICENSE