Everything your team decides, kept and chased.
The company brain your team and its agents share. Gus writes down what your calls and threads settle,
answers the next person who asks, and follows up on what nobody closed. Ask him in Slack, Discord or
Telegram. Your engineers get the same answers from a brain/ folder in their own repo, in Claude
Code, Cursor and Codex. Nothing new for anyone to open.
Early days: v0.x, and breaking changes are still on the table.
$ where do our deploys go?
Deployment strategies typically vary by organization...
The answer exists. It's in a Slack thread, someone's head, and a doc nobody can find. Put it in Gus instead, and every agent on the team gets this:
$ where do our deploys go?
staging on merge, prod on tag. The runbook is in Engineering.
And the half nobody automates:
Gus → @sam the Postgres upgrade from Tuesday's call is still open.
You said Friday. Done, or move it?
Nobody writes a wiki. Gus builds one out of the work you already do, and it stays yours: cancel your account and the brain is still sitting in your repo.
docker run -d --name gus -p 8080:8080 -v craftspace-data:/data ghcr.io/abuaboud/gusOpen http://localhost:8080. The first account to sign in owns the install, so sign in before you
share the URL. That sign-in goes through craftspace.app by default: add -e BROKER_URL= to keep it on
your own box, and take the six-digit code out of docker logs gus.
A public deployment sets CRAFTSPACE_URL to its real hostname and puts a proxy in front for TLS;
the docs cover both.
Pages, spaces and the MCP endpoint work straight away, with keyword search. Semantic search switches on with an OpenRouter key, and Gus needs that plus a sandbox, both below.
| Feature | What it is |
|---|---|
| Pages and playbooks | Plain markdown as a wiki. A space is the permission boundary. |
| An MCP endpoint per org | Read, write and search pages, record decisions, drive your connected tools. OAuth, no key to paste. |
| Gus | Answers from your context in the app, Slack, Discord and Telegram, then goes and does the next thing. |
| Connections | Vendor tokens sealed at rest. One gateway module can unseal them, and it imports nothing else in the app. |
| Brain as Code | A repo's brain/ folder is the page tree, so context ships in a pull request. |
| No database to install | Postgres runs inside the process as PGlite. No Redis, no object store, no cluster to provision. |
Gus is the one who remembers. He carries the work. You press send.
Mention him in a thread and he shows what he read before he answers. A direct message runs as you, with your permissions. A channel runs as its own identity, with an explicit list of page subtrees it can see, so a support channel does not quietly read the whole brain.
When he needs a human he opens an errand: one ask, one person, one deadline. Not a silent block, and one errand out per person at a time. Every errand ends. He is very polite about this and completely impossible to outlast.
| What | Why |
|---|---|
| An OpenRouter key | Never one vendor's assistant: pick the model, bring your own key. Use a plain inference key: Settings checks it when you paste it and rejects a provisioning key, or one with no spend left. |
| A Vercel Sandbox | Token, team id, project id. Gus runs his harness there and nowhere else. |
Both go in Settings once the install is up. Until then Gus reports himself as unconfigured rather than answering badly.
Same application, and this repository is the whole of it, MIT.
| Self-hosted | craftspace.app | |
|---|---|---|
| Pages, spaces, MCP, Gus, connections | ✅ | ✅ |
| Brain as Code | ✅ | ✅ |
| Your data on your box | ✅ | – |
| Built-in notetaker | – | ✅ |
| Managed upgrades | – | ✅ |
The notetaker joins calls from a recording account that can't be handed on, so it lives on the hosted version only. Meeting notes from a Granola, Avoma, Fathom or Attio connection sync either way. Everything else, you run.
npm install
npm run dev # server on :8080, web on :5173, /api proxied across
npm -w @craftspace/server test # the integration suiteThe server starts its own PGlite under ~/.craftspace, and the tests bring up a throwaway database
per worker. Nothing to install first, and rm -rf on this checkout takes no data with it.
| Package | What it is |
|---|---|
packages/app/server |
The Fastify app: /api, /mcp, auth, the sealed gateway, the embedded database |
packages/app/web |
The React client |
packages/shared |
Zod schemas and wire contracts shared by both |
CODING_STYLE.md is the rulebook every change follows and DESIGN.md
is the visual one. CONTEXT.md is the domain language: what a space, a page, a connection and an
errand each mean here.
Issues and pull requests welcome. Start with CONTRIBUTING.md, or SECURITY.md if you found something that shouldn't be filed in public.
MIT, see LICENSE. The name Gus, the Gus artwork and the Craftspace name and logo are not covered by it, see TRADEMARK.md.
