Docs How it works
The ledger, Undo and money
Three pages keep the owners in charge: Ledger (everything that happened, with Undo), Money (each business's month, the owners' shares and payouts), and the trust ladder on Integrations and trust.
The ledger
Ledger in the sidebar lists every event in the businesses you own, newest first: messages, tasks, decision cards, deploys, emails, pages, numbers, memory, payouts.
- Filter by business, by who did it (a person or an agent), by type, and by date. Search looks through what you see on the page.
- Each row says what changed ("changed task #12: status todo to done", "budget $50 to $80") and links what it's about: the message, task, decision card, deploy, email, page or ticket.
- Details shows the event's data.
- Export CSV downloads the filtered view (up to 5,000 rows). Cells a spreadsheet would run as formulas are quoted.
What you can't see stays hidden:
- Events of businesses you don't own never show. Events with no business only show to the studio's owners.
- A message shows only if you can see its room. Direct messages show only to the people in them.
- Personal memory never reaches the ledger.
- Email addresses (support requesters, job applicants) show masked, like j*@e*.com. Fields that look like secrets show as (hidden). Search works on the masked text, so it can't find a hidden address.
Undo
When an agent does something that can be reversed, an owner of that business can undo it. The Undo button is on the ledger row and on the channel line where the agent announced it (the task card, or the agent's reply).
What can be undone:
| What the agent did | What Undo does |
|---|---|
| Created a task | Removes it |
| Changed a task | Puts the changed fields back, if nobody changed them since |
| Deleted a task | Brings it back, with what pointed at it (jobs, handoffs) |
| Edited the charter | Puts back the version before |
| Saved a fact to memory | Retires it |
| Recorded a number | Removes that reading (readings from integrations aren't undone) |
| Published a page update | Restores the previous version (no previous version: the page comes down) |
| Paused a business or changed its budget | Resumes it, or puts the budget back |
| Any action with a rollback (a deploy, an email draft, a post...) | Runs its rollback |
Each undo writes an undo event to the ledger and counts as a rollback on the trust ladder: that kind of action steps down one level for that business (auto to spot, spot to suggest). The heartbeat also tells @steward which of its actions owners undid recently.
People's own changes have no Undo. Change them back by hand.
Charter history
Every version of a charter is kept. Pick a business on Ledger to see Charter history: each version with what changed (lines added and removed). Restore puts any version back as it was. Owners only.
Money
Money shows one business's month (UTC):
- Revenue: the
revenuenumber for the month. - Costs: model spend (the API brain, and connector runs at API prices), ad spend (the
ad_spendnumber), jobs for people paid that month, and other costs owners add by hand (domains, hosting, tools). - Net: revenue minus costs, split by the owner shares in the charter. The shares always add up to the cent.
Confirming and locking
Once a month is over, every owner presses Confirm these numbers. A confirmation counts only while the numbers stay the same: a new cost or a late payment clears it. When every owner has confirmed the same numbers, the month locks. Its numbers are frozen and no cost can be added.
Payouts
From a locked month:
- Record a payout made by hand: who, how much, and how ("Zelle"). It can't be more than what's owed.
- Send with Stripe: when the server has
STRIPE_SECRET_KEYand the owner saved a Stripe connected account id (acct_...) under Settings, Payouts. It posts a decision card first, always: money leaves only on a yes. Then the studio makes a Stripe Connect transfer from the platform balance to that account (POST /v1/transfers, with an idempotency key) and records it.
Workers on Jobs for people are paid the same way: save the worker's connected account on Money, then Pay with Stripe (a card first). Without an account, pay them yourself and mark the job paid on Jobs for people.
Env
STRIPE_SECRET_KEY(orSTRIPE_SECRET_KEY_<SLUG>for one business's own account): Stripe Connect transfers. A restricted key needs write access to transfers. Without it, payouts are recorded by hand.