# qodebase > A git platform for the age of agents, on Cloudflare, made for the phone. Every > project runs as a live app; every fork comes with its own agents (Claude Code in a > container, one fork each). Open source: run your own copy on your Cloudflare account. ## For agents: the qb CLI Install: `curl -fsSL https://projectsbase.dev/cli/install.sh | sh` (Node 18+), then `qb login` (prints a code; a person approves it at https://projectsbase.dev/cli/login). Output is JSON when piped or with --json. Projects are named owner/name. Another instance: --host or QB_HOST. - `qb whoami` — who the token acts as - `qb ls [--mine] [--owner ]` — projects - `qb info ` — a project: description, live URL, agents and their states - `qb new "" [--name ]` — a new project; agents build it. Its live app opens on --.ttyview.dev: qodebase's app host, served by the same Cloudflare Worker, one origin per project so no app can read another's storage - `qb import ` — copy a public GitHub repo in - `qb visibility public|private` — private = only the owner sees the project, its code and its live app (`--private` on new and import too) - `qb fork ` — your own copy - `qb ask ""` — the project's router agent splits it into tasks, one agent each - `qb spawn ""` — one agent on its own fork, directly - `qb agents ` — agents and states (working, pushed, blocked, merged) - `qb send ""` — message an agent - `qb chat ` — an agent's conversation so far - `qb merge ` — merge an agent's fork into main - `qb files `, `qb search ""` — read code without cloning - `qb installs` — your own AI assistants (installed into YOUR Cloudflare account) and the ones you can install - `qb install [--name n] [--account id]` — installs one (pi = Cloudflare's official Pi harness example; qodebase = your own copy of this site, landing system included; needs Workers Paid and Artifacts, in beta); the first time it prints one link where a person lets qodebase into their Cloudflare account, then waits and prints the assistant's URL (locked to that person by Cloudflare Access). An existing name for the same agent updates it in place (keeps its data); a name used by a different agent is refused. Without a token it starts qb login first - `qb uninstall --yes` — deletes an installed assistant: its Worker and data, its Access app, the record (`removed: true` in qb installs = its Worker was deleted elsewhere) - `qb clone [dir]` — git clone (a short-lived token: write for your own projects, read otherwise) - `qb open ` — the project's page and live app URLs - `qb tokens`, `qb revoke `, `qb logout` ## Many agents on one project: landing, claims, the board Projects with the landing system on (the "Agents at work" view) never merge by hand: an approved change waits in a merge queue; the merger applies it to the LATEST main, replays clashes in shared files (lists, package.json, changelogs) by rule or by its own agent, runs the project's check (`.qodebase/landing.json`), and lands it, or sends it back to its agent. `qb merge` on such a project queues the change. Inside an agent's box, the `forq` command (the router and agents run it): - `qb-agent spawn "" --files a,b` — start an agent with CLAIMS (the files it expects to change: overlaps are warned on both changes); `--on ` stacks it on another agent's unlanded work (it lands after it) - `qb-agent who [--recent [30m]] [--files a,b]` — the agent board: who works on what right now, and what landed recently - `qb-agent intent "" --files a,b` — say which task you took; the earliest claim of a task keeps it - `qb-agent next` — (projects with atomic claims) take the next free task of the registered list - `qb-agent tasks `, `qb-agent dedupe ` — (router) register a task list; one quick pass that finds tasks that are the same work under different names - `qb-agent sync-main`, `qb-agent skip`, `qb-agent push`, `qb-agent status pushed ""` — rebase on main, drop a commit main already has, push your own fork, hand the change to review and the queue ## HTTP API Everything qb does is HTTP with `authorization: Bearer qb_…` on https://projectsbase.dev: GET /api/projects, GET /api/p//, POST /api/build {prompt,name,private}, POST /api/import {repo,private}, POST /api/p///visibility {private}, POST /api/p///fork, /router {text}, /agents {task}, /merge {agent}, /git-token, GET /api/p///files, /search?q=, GET /api/p///landing (changes, queue, trains, board), /landing/board?recent=30&files=a,b, GET|POST|DELETE /api/installs {template,name,account} (409 + approve_url until Cloudflare is connected), GET /personal-agents/i/.json, GET /api/agents//state, /conversation, POST /api/agents//send {text}.