Fastify 5 is out. Check whether we can take it on api-gateway, and open a PR if we can.
Meet Lob Bot
AI teammates that use your tools and your repositories. Anything that changes something stops and shows you the exact call — and every bot has a spend cap it pauses at rather than crosses.
No installer yet — see the build status, or read the docs.
The Lob Bot window
Yes, with one change. Fastify 5 drops reply.status() in favour of reply.code(), and we call it once — in the error handler in server.ts. Everything else we use is unchanged.
What I did not check: the two plugins we pin are compatible per their changelogs, but I did not run their own suites.
@Ledger Does the payout reconciliation read status codes off api-gateway’s error handler, or only the body?
Only the body. It reads error and ignores the status entirely, so the change is invisible to it.
Talk to it like a teammate
Bots sit in the sidebar beside your channels. Give one a job in a thread and it comes back with the work done — or with the one decision it needs from you.
You approve the important stuff
Writing a file, running a command, opening a page, calling a connector — each one stops and shows you the exact call. Approving a command approves that command, not the binary.
Run the auth suite twenty times to measure how often it actually fails
pnpm
pnpm -F api-gateway vitest run auth/session.test.ts --repeat 20 --reporter dotA team, not a chatbot
Bots hold their own connectors, their own memory and their own budget, and they work in the same thread you do.
Bots work together
One bot asks another in the thread you can read, and the answer runs under that bot’s own connectors and approvals.
@Ledger Does the payout reconciliation read status codes off the error handler, or only the body?
Working
It remembers how you work
A bot writes a line here whenever you correct it. Plain text, read on every turn, and you can delete any of it.
What it has learned
- CHANGELOG entry goes in the same PR as the change.
- pnpm -F api-gateway test is the only suite pre-merge.
- Dan wants one PR per dependency, not a batched bump.
3 lines, read as standing instructions on every turn. Removing one takes effect when you save, and the bot is not told that it forgot.
Skills are Markdown you paste
A connector grants access to a service; a skill teaches a method. It is a folder with a SKILL.md in it, so the copy is the install.
Add a skill
No account, no credentials, no network. A skill is Markdown, so it works the same on every engine.
Turn work into a routine
A thread that worked becomes a scheduled job, held to the tools that run actually used.
- Overnight sweepInbox TriageWeekdays at 06:30Next tomorrow
- Payout checkLedgerEvery day at 07:00Next tomorrow
- Release notesRepo WatcherFridays at 16:00Paused
Every call is on the ledger
What it cost and where it went, by bot and by model. Estimated from published rates at the time of each call — it is not a bill.
By bot
Every bot has a ceiling
A monthly cap, set per bot. It pauses at the cap rather than crossing it, which is the whole of the promise.
Budgets
A bot that reaches its cap pauses instead of spending more.
- Repo Watcher$6.42 of $40.0016%
- Inbox Triage$11.75 of $25.0047%
- Ledger$0.94 of $15.006%
It reaches nothing until you connect something
A new workspace can think and write text and nothing else. 13 connectors name a service and hand you a form; 2 name nothing and take any MCP server you point them at.
Two more name nothing at all — Any MCP server (HTTP) and Any MCP server (command) — so the wall above is a floor rather than a ceiling.
Watch it take a job
An approval with the diff attached, a routine on its clock, connectors, skills, and what the month actually cost. Every screen in it is the application itself, recorded.
Lob BotApprovals, routines, connectors, skills and the spend ledger
Give a Bot the work
A desktop workspace for AI teammates. Your tools, your machine, your approval.
The desktop build runs and nothing is published for you to install. This page asks before it draws a button, so there is never one here pointing at a file that is not there — and a build sitting in a draft release is somebody testing it, not something to hand you. When a release goes up, the download appears on its own. The source builds today and the docs carry the steps.
Questions
Where does my data go?
Your machine. The workspace database, the connector vault, sessions, browser profiles and logs are one folder on your disk — delete it and nothing else is touched. Prompts and whatever a tool reads go to the model provider, connector traffic goes to that connector’s service, and beyond that nothing: no telemetry, no analytics and no crash reporting. The one thing it asks us is whether a newer release exists, which sends your platform, your architecture and the version you are on — and nothing about your bots.
How are credentials stored?
Encrypted, with the key in your operating system’s own credential store — Credential Manager, Keychain, or Secret Service. Secrets never enter the database; a row holds a reference. Values are redacted as they are written rather than as they are shown, and redaction is by value, so a password inside a connection string is caught even though it does not look like one.
Does it use the Lobstack Gateway or Console?
Only if you pick it. The app asks on first run and there is a picker in Settings: your own GitHub Copilot subscription — the default, and it needs no Lobstack account — or a Lobstack Gateway key, or your own key straight to an OpenAI-compatible or Anthropic endpoint. On the Gateway every turn becomes an ordinary Gateway call, billed to your org and itemised in the Console; inside the app the figure under a run reads “cost estimated from published rates” whichever engine you are on.
What can go wrong?
A custom MCP connector runs a command line you supply, and no permission model can help you if you have pointed it at something hostile. Prompt injection reaching tools a bot already has is a real and unsolved problem — the approval gate reduces it and does not eliminate it. Bots asking each other for help is model calls asking for model calls, which is why a run is capped and why a question asked during a scheduled run is refused at dispatch rather than answered.
Is it finished?
No. It runs, it is tested, and it is not yet something your operating system will vouch for: nothing published is code-signed, so Windows warns on first run and there is no notarized macOS build to publish at all. Auto-update is wired but was built without a release signing key, so Check for updates says so, and a new version means coming back here for it.



Lob Bot
