Skip to content

bensenescu/downy

Repository files navigation

Downy

Build a team of agents and work with them from any device.

  • Best UX for working with multiple agents.
  • Each agent has its own personality, skills, tools, and workspace.
  • OpenAI Sub compatible for frontier models at a flat rate. Or, use any model on OpenRouter or Workers AI.

Downy demo

Why Downy

  • Self-hosted.
    • Runs in your Cloudflare account or locally.
  • Multi-agent w/ purpose built UX.
    • Each agent has its own personality, skills, tools, and workspace.
    • Manage workspaces, tools, and background tasks directly in the app — no Obsidian, no CLI.
  • Use w/ any Model, including your OpenAI Sub.
    • Kimi 2.6 on Workers AI by default — no API keys to wire up.
    • Swap in ChatGPT Plus/Pro or any OpenRouter model when you want.
  • Access anywhere.
    • Reach Downy from any device behind Cloudflare's secure network.

How does it work?

I had been meaning to make something like Downy for a while, but this blog post made me actually build it: https://blog.cloudflare.com/project-think/. I highly recommend reading it if you want to understand how Downy works. But, basically each agent and subagent is its own Durable Object.

Architecture diagram

Full system map: docs/architecture.md.

Deploy

Warning

This is a brand new project being "agentically engineered" rapidly. It's self editing features are very powerful, but inherently prone to prompt injection like OpenClaw. Be considerate of what data and tools you give it access to. Use at your own risk.

You'll need:

  • Node 24 LTS and pnpm:
    nvm install 24 && nvm use 24
    npm install -g pnpm
  • Cloudflare account — the free Workers plan works if you bring your own model.
    • Workers AI (the default Kimi setup) needs the Workers Paid plan ($5/mo).
    • Pi proxy (ChatGPT) and OpenRouter both run on the free plan.
  • Exa API key — free $10 credit, effectively unlimited for personal use. Required for search.

Clone the repo and install dependencies:

git clone https://github.com/bensenescu/downy
cd downy
pnpm install

Login into Cloudflare with Alchemy

  • Alchemy makes it simpler to deploy to Cloudflare.
npx alchemy configure         # Authorize in Cloudflare and accept the defaults
pnpm alchemy login            # one-time browser OAuth to your Cloudflare account

Set up env vars and deploy:

  • Read through the .env which has further instructions
cp .env.example .env          # then fill in EXA_API_KEY and ALCHEMY_PASSWORD (random string)
pnpm deploy

The Worker rejects every request until Cloudflare Access is in front of it — that's next.

Authentication: Cloudflare Access

By putting Downy behind Cloudflare Access, it gates all traffic to the service unless you've authenticated. This authentication is managed by Cloudflare, not Downy. By default, Cloudflare Access adds the email tied to your Cloudflare Account to the allow list and authenticates by sending a One Time Password to your email.

Here is how you set it up:

  1. Go to your Worker's settings in the Cloudflare dashboard:
    • Open the sidebar and find Workers & Pages.
    • Click into your downy worker.
    • Open the Settings tab.
  2. Turn on Cloudflare Access:
    • Under Domains & Routes, click the three-dot menu next to your workers.dev value.
    • Toggle Cloudflare Access on.
    • A modal pops up with your TEAM_DOMAIN and POLICY_AUD.
  3. Copy those values into .env:
    • TEAM_DOMAIN=https://<team>.cloudflareaccess.com
    • POLICY_AUD=<aud-tag>
  4. pnpm deploy, then open your Worker URL and log in.
Sign-in works but you still see "Authentication required"?

pnpm tail shows the verifier's failure reason — usually TEAM_DOMAIN missing https:// or a stale POLICY_AUD.

Deploy fails with VPC service ... does not exist?

PI_RELAY_VPC_SERVICE_ID should be unset in .env by default. If you set it, either remove it or follow docs/pi-proxy-setup.md to provision the VPC service.

Optional: ChatGPT subscription

Point Downy at your ChatGPT Plus/Pro subscription instead of Kimi:

  • Smarter models at a flat rate — no per-token API billing.
  • Secure by network boundary — a small proxy on your hardware holds the OAuth tokens, reached only via a Cloudflare Tunnel + Workers VPC binding (never the public internet).
  • Walkthrough: docs/pi-proxy-setup.md.

Note: OpenAI currently allows third-party harnesses to use ChatGPT subscriptions for personal use, but that policy could change.

CI

pnpm run ci:check       # prettier + knip + tsc + oxlint
pnpm run format:write
pnpm run lint:fix

About

Create a team of agents and work with them from anywhere.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors