The first half is the app: what a card holds, what the six stages mean, and the one number that only moves when something real happened. The second half is the connector, which is how Claude or ChatGPT reads and works on the same board you do.
Part one, the app
Brassdeck holds everything you have started on one canvas, one card per idea, and keeps an honest record of where each one actually stands. It is not a list of things you owe: a card is an intention worth keeping, and stopping one on purpose is an outcome the app is built to make easy.
There is no ranking anywhere in it, no red, and no count of what you have failed to do.
Eight words, each meaning one thing. The app uses them the same way everywhere, and so does the assistant when you connect one, because the connector is handed this list before it does anything.
| Word | Means |
|---|---|
| card | One idea. The thing you name, stage, star and write steps on. |
| canvas | The surface cards sit on, and the thing you pan and zoom. |
| board | All your cards together. What a share link covers by default. |
| deck | Your board as a list, which is what a phone gets. |
| view | A named subset of cards. A lens you choose. |
| step | One line written inside a card. |
| stage | Where a card is on spark, shaping, building, live. |
| workspace | Who is in it, what they can do, the billing boundary. |
Two of them are worth pinning down. The canvas is the surface and the board is the content: you pan the canvas, and you share the board. And a stage says how far an idea has travelled toward being real, which is a different question from whether you touched it today.
Four of them are a journey. The last two are exits, and they are not failures: they are kept, so the decision survives the idea.
A thought, written down so it stops taking up room in your head.
Working out what it actually is, before building anything.
Actively being made.
It exists in the world.
Deliberately stopped, with a date it comes back.
Decided against. Kept so the decision survives.
Parked and dropped are left out of every count in the app. Counting them would quietly turn your own decisions back into obligations.
Every card carries one number: how long since it last actually moved. Most tools lift a card to the top the moment you rename it, reorder it or drag it somewhere neater, so the list flatters you and the number stops meaning anything. This one is kept separately and moves only when something real happened.
A card dragged across the canvas after 147 days still reads 147 days. That is the whole point of it, and this is the full list rather than a rule of thumb.
| What you did | Moves the clock | Why |
|---|---|---|
| You made the card | yes | |
| You set the next step | yes | Often the only thing between a card and moving. |
| You finished a step | yes | |
| You changed the stage | yes | |
| You parked it, or dropped it | yes | Stopping on purpose is an outcome, never neglect. |
| You added a step | no | Planning is not progress. A long list of intentions is not activity. |
| You renamed it, or edited its details | no | Renaming something you have not touched in a year must not reset the clock. |
| You moved the card on the canvas | no | Tidying your board is not progress. |
| You resized the card | no | |
| You starred it | no | A star says you are on it, which is not the same as having worked on it. |
| You looked at it and said it is still on | no | Looking at something is not working on it. |
| You skipped a check-in | no |
Parking or dropping counting as progress is not a trick. Treating a deliberate stop as neglect would be the same as shaming it.
A card nobody has moved in a while recedes. It loses contrast and lift rather than turning a colour meant to alarm you. The information is identical and the feeling is not, which is the entire argument.
A star means "I am on this right now". It is one bit. There is no second level, no ranking behind it, and starring a card is not progress: it does not touch the clock.
Star anything and a Starred row appears in the views menu, showing only those cards. It is built in rather than a view you made, so there is nothing to name and nothing to keep in step. Parking or dropping a card clears its star, because being on something you have deliberately stopped is a contradiction.
Open a card and the panel offers Mark it done. Finished is not a seventh stage, deliberately: how far an idea travelled and whether you are done with it are two different questions, and they genuinely disagree. A thing can be live and still being worked on. A thing can be finished having never left building.
Finishing a card is for members of the workspace. Someone holding an editing link can tick steps and write, but cannot make a card vanish from a link somebody else is reading.
A view is a lens, not a folder. A card can be in several of them and it never moves to get there. Switching is instant because everything is already on the page.
Three named pages ask a different question of the same board: Focus for how the load divides right now and what is actually moving, Patterns for why things stop, counted across every stall, and Everything for the whole board as one list ranked by how long each thing has sat.
A share link is a bearer credential: whoever holds it has the access it was made with, and there is no sign-in behind it. Everything below is chosen when you make one, and can be changed on a link already handed out.
Ask is the assistant inside the app, in the toolbar and on the phone's tab bar. It runs the same tools the connector does, against your board, and it streams its answer as it works so you can see which tools it called.
This is the opposite direction from the connector. Ask runs a model on your behalf and is billed per message. Connecting Claude or ChatGPT is not.
A routine is a standing notification: when something on the board reaches a number you chose, the workspace gets an email. You set one up by asking for it in plain words rather than filling in a form, and every routine fires once and then stops. A notification that arrives every night is a feed, and a feed gets muted.
| Kind | Fires when |
|---|---|
| video_views | A YouTube link on a card passes a view count you named. |
| domain_free | A domain written on a card becomes available. The registry saying nothing is not the same as available, and is never reported as it. |
| project_quiet | A card goes untouched for a number of days. Parked and dropped cards are excluded, because they stopped on purpose. |
Every routine is listed under Connectors with the number it is watching for and a way to stop it, whoever or whatever created it. The email quotes your own request back at you and carries nothing else.
Write a step that is nothing but a link or a name, and the app asks the world about it. There is nothing to connect and no key to paste. The rule is the same for all three: the whole line has to be the thing, because "look at that repo later" is a step and putting a reading on it would be answering a question nobody asked.
A phone gets the deck rather than a shrunken canvas. An infinite canvas is a desktop idea: fit a real board onto a 375px screen and you land at twenty per cent, where a card is fifty-six pixels wide.
On the canvas. All of these are ignored while you are typing in a field, except find and Escape, which belong to whatever is open.
| N | A new card, on the canvas where you are looking. |
|---|---|
| / | Find. It travels to a match rather than filtering to it. |
| CmdF | Find, and it works while the find field already has focus. |
| CmdK | Ask, the assistant that runs on your own board. |
| = | Zoom in, about the pointer. |
| - | Zoom out. |
| 0 | Fit everything on screen. |
| Esc | Close what is open: find first, then the card panel, then the room. |
| Enter | Travel to the next match. |
|---|---|
| ShiftEnter | The previous one. |
| DownUp | The same, without leaving the field. |
| Esc | Close find and stay where you are. |
Cmd is Ctrl on Windows and Linux. Opening a card gives that panel Escape, so it closes before the room does.
Part two, the connector
Brassdeck speaks the Model Context Protocol, and it is the server. Claude and ChatGPT connect to it. The instinct is the other way round, and which way it goes is the whole reason this is free:
It is JSON-RPC 2.0 over a single POST to a URL that carries your connection's token in the path. Protocol version 2024-11-05. The server advertises tools and nothing else: no prompts, no resources, no sampling.
Sign in, open Connectors, choose Claude or ChatGPT, and decide before you press Connect whether it may edit. You are shown a URL once. Paste it into the assistant.
One token per connection. Connect both and you get two, so disconnecting one does not sign the other out. Each row on the Connectors page shows a hint from the token, whether it can edit, how many calls it has made and when it was last used.
Read-only is not a refusal, it is a shorter list. A read-only connection is never even shown the tools that write, so the assistant does not try one and then report the refusal as though the app were broken. Of the 12 tools, 4 read and 8 write.
Read out of the server itself, so this table cannot fall behind it. Names are what an assistant would ask for rather than what the database calls it. Inputs marked required are the ones a call fails without.
| Tool | What it does | Inputs | Writes |
|---|---|---|---|
| list_projects | Every card on the Brassdeck canvas: what stage it is at, what the next step is, how long since it last moved, and whether it is stalled. `steps_left` is what remains (up to six) and `last_done` is the most recent finish. Start here — one call gives the whole picture and avoids a round trip per card; use get_project for the full list. |
| no |
| get_project | One card in full, including every step in the order it was written. Use this when asked to work THROUGH something — list_projects only carries the first six steps. |
| no |
| search | Find cards by any word in their name, summary, next step or any step written on them. |
| no |
| create_project | Put a new card on the canvas. Use for an idea worth keeping, not for a task. |
| yes |
| create_routine | Set up a standing notification: when something on the board reaches a threshold, email the account. Use this when someone says "tell me when", "let me know if", "notify me once". It fires ONCE and then stops. ALWAYS say back in plain words what you set up, including the exact number — a routine nobody knows was created is worse than none. |
| yes |
| list_routines | Every standing notification on this board, including ones that have already fired. Use it when someone asks what they are being told about. | none | no |
| delete_routine | Stop a standing notification. Takes the id from list_routines. |
| yes |
| add_step | Write a step onto a card. Adding steps is planning, so it does NOT count as progress. |
| yes |
| complete_step | Tick a step off. This DOES count as progress and resets the card's clock. |
| yes |
| set_next_action | Set the one next thing for a card. A card with nothing here is what this app calls stalled, so this is often the single most useful change to make. |
| yes |
| set_star | Star or unstar a card. A star means "I am on this right now" — it is one bit, not a priority level, and there is no ranking. Starring is NOT progress: it does not touch how long since the card last moved, and it must never be described as if it were work done. Parking or dropping a card clears its star. |
| yes |
| set_stage | Move a card along: spark (a thought), shaping (working out what it is), building, live. parked means deliberately stopped, dropped means decided against — both are kept, never deleted. |
| yes |
A tool that refuses answers normally and says why, rather than ending the exchange with an error. "Nothing here by that name" is a fact the assistant should read and act on, not a fault.
The server does not only hand over a list of tools. Every connection is given a short briefing on the first call, so an assistant that has never seen this app does not invent its own words for it. In summary, it is told:
Say so, and it gets fixed.