Company formation
The brand files the certificate itself, as an open act. An attorney admitted where the founders are advises on the entity and the 83(b) election, the state turns down a name and the founders rename it, and every founder signs.
legal's wordsmatter is a jobasset is a subjectreview is a tasksigner is a membernetwork is a pooloutcome is a end
The brand forms the company itself. Filing the certificate is an open act, so no attorney signs it. Two answers are advice, reserved to an attorney admitted where the founders are: which entity to form, and whether to make the 83(b) election. Any founder consents for all, and every founder signs.
Three of its clocks outlive the matter.
cat services/formation.ts roles: { attorney: { pool: attorneys, pay: 60 } },
talk: { adopt: 'attorney' },
advise_entity: { by: 'attorney', act: 'advise_entity_choice', est: '30min', checklist: ['the founders know why this entity, in this state'] },
form_entity: { submit: 'https://filings.example.test/secretary-of-state', to: 'the state', receipt: 'file_number', rejected: { name_unavailable: 'rename' } },
rename: { routed: true, ask: 'founders', to: 'answer', next: () => 'form_entity' },
adopt: { ask: 'founders', to: 'sign', what: 'documents', all: true, how: 'esign', capacity: ['director', 'founder'] },
advise_83b: { by: 'attorney', est: '20min', when: job => job.input.vesting, checklist: ['the founder knows the 30-day limit'] },
clocks: {
election: { due: '30d after adopt', owner: 'buyer', rungs: ['notice 14d', 'ack daily 7d'], lapse: ['mailed, with proof', 'not filing, in writing'] },
agent: { due: '1y after form_entity', every: 'year', owner: 'brand', lives_on: 'subject' },
franchise_tax: { due: job => franchiseTaxDue(job.input.state, job.record), every: 'year', owner: 'buyer', lives_on: 'subject', rungs: ['notice 30d'] },
price: { usd: 299, release: 'form_entity' },The whole file, and check after it.
Each founder gets a link. The first to consent consents for the founders, and the other link is voided:
→ POST /matters {"service":"formation","name":"Acme Robotics","founders":[{"name":"Ada Lovelace","email":"ada@example.com"},{"name":"Grace Hopper","email":"grace@example.com"}],"state":"DE","shares":10000000,"vesting":true,"client_region":"US-CA","max_usd":299,"key":"formation","metadata":{"sandbox":{"outside":{"reject":["name_unavailable"]}}}}← job_7Hq2 · waiting · on party · $299.00 held · consent · ask_7Hq2, ask_7Hq3
# the founders, each through their own link
→ POST /asks/ask_7Hq2?t=… {} # Ada Lovelace: consent, to consent
← 200 done
→ POST /asks/ask_7Hq3?t=… {} # Grace Hopper: consent, to consent
← 410 ask_voided: This ask was voided, so its link no longer works.
← job_7Hq2 · waiting · on claim · $299.00 held · advise_entity · tsk_7Hq2An attorney admitted in California tells the founders why this entity, in this state:
→ POST /reviews/tsk_7Hq2/attest {"checklist":["the founders know why this entity, in this state"]} # as mbr_eligible← 200 tsk_7Hq2 · done · attorney · advise_entity_choice · US-CA · $60.00 · attested · 30 min · $120.00 an hour · due 2026-10-27 14:02
14:02 · step.committed · advise_entity · person · bar admission · US-CA · mbr_eligible
14:02 · pay.accrued · mbr_eligible · attest · $60.00The state rejects the first filing with name_unavailable, which routes to rename. The founders pick another name, and the second filing's receipt releases the charge:
→ POST /asks/ask_7Hq4?t=… {"answer":"Acme Robotics Labs"} # Ada Lovelace: rename, to answer← 200 done
→ POST /asks/ask_7Hq5?t=… {"answer":"Acme Robotics Labs"} # Grace Hopper: rename, to answer
← 410 ask_voided: This ask was voided, so its link no longer works.
← job_7Hq2 · waiting · on party · $299.00 charged · adopt · ask_7Hq6, ask_7Hq7all: true asks each founder to sign the documents, and the step waits for every one:
→ POST /asks/ask_7Hq6?t=… {} # Ada Lovelace: adopt, to sign← 200 done
→ POST /asks/ask_7Hq7?t=… {} # Grace Hopper: adopt, to sign
← 200 done
← job_7Hq2 · waiting · on claim · $299.00 charged · advise_83b · tsk_7Hq3Because the founders vest, an attorney advises on the 83(b) election, and checks the founder knows the deadline:
→ POST /reviews/tsk_7Hq3/attest {"checklist":["the founder knows the 30-day limit"]} # as mbr_eligible← 200 tsk_7Hq3 · done · attorney · advise_83b · US-CA · $60.00 · attested · 20 min · $180.00 an hour · due 2026-10-27 14:02
14:02 · step.committed · advise_83b · person · bar admission · US-CA · mbr_eligible
14:02 · pay.accrued · mbr_eligible · attest · $60.00The state's receipt opens two yearly clocks on the company, the brand's registered agent and the buyer's franchise tax. Signing opens the election's 30 days:
npx services.dev check clocks election · 30d after adopt · the buyer
agent · 1y after form_entity · the brand · every year · on the company
franchise_tax · a date your code decides · the buyer · every year · on the companySatisfying the franchise tax rolls it to next year. It never closes:
node -e "import('./flows.ts')" # api.lawyer at a6b27b1: 77 tests in contract-review-playbook, de-formation-playbook, demand-letter-playbook, trademark-oa-playbook, gate, settle, eligibility de-formation-playbook#satisfying the franchise tax ROLLS the next occurrence forward — it never terminates the obligation
→ legal › formation: satisfying the franchise tax rolls the next occurrence forwardA clock on the company keeps running after the matter ends. subject-watch runs the hand-off on a one-clock company: the end asks the client to own the date, and the customer portal offers the company's steward beside I'll own this date:
→ GET /owner/jobs/job_7Hq2 clock.outlived · franchise_tax · 2027-03-25 · the client owns it, or orders Company Watch
ask.opened · own_dates · sign · buyer
# the customer portal: the date, who answers for it, its next rung, and the two ways to keep it
→ GET /portal
franchise tax · due 25 Mar 2027 · you answer for it · notice 23 Feb
[Mark it done] clock.satisfy · POST /clocks/clk_7Hq2/satisfy
[Keep it with Company Watch · $9] service.order · POST /company-watch
[I'll own this date] ask.complete · POST /asks/ask_7Hq2
# the client signs that they own the date, through their own link
→ POST /asks/ask_7Hq2?t=… {}
← 200 · ask_7Hq2 · done
→ GET /clocks?job=job_7Hq2
← 200 · OK · 1 clock
clk_7Hq2 · franchise_tax · due 2027-03-25 · buyer · open · on the subject · every year · the client signed for it 2026-10-25Clocks and the customer portal cover the rest.
→ GET /owner/matters/job_7Hq2 # the owner console← job_7Hq2 · delivered · $299.00 charged
record consent · founders · consent | advise_entity · person · bar admission · US-CA · mbr_eligible | review · ai · pass | form_entity · the state · rejected · name_unavailable · repairing at rename | rename · founders · answer | form_entity · the state · accepted · rcp_7Hq3 | documents · ai | adopt · founders · sign · esign | advise_83b · person · bar admission · US-CA · mbr_eligible
ledger +$299.00 · attorney's fee $60.00 at advise_entity, sold by the attorney (rail member) · attorney's fee $60.00 at advise_83b, sold by the attorney (rail member) · brand $179.00 · AI $0.84 · you $178.16
events matter.ordered · charge.held · ask.opened · ask.opened · matter.paused · consent.given · ask.done · ask.voided · step.proposed · step.committed · matter.paused · review.posted · review.offered · review.claimed · matter.paused · step.proposed · step.committed · pay.accrued · decision.made · review.done · step.proposed · step.committed · submission.sent · receipt.rejected · ask.opened · ask.opened · matter.paused · ask.done · ask.voided · step.proposed · step.committed · submission.sent · receipt.accepted · step.proposed · step.committed · clock.opened · clock.opened · charge.collected · decision.made · step.proposed · step.committed · ask.opened · ask.opened · matter.paused · ask.done · ask.done · step.proposed · step.committed · clock.opened · matter.paused · review.posted · review.offered · review.claimed · matter.paused · step.proposed · step.committed · pay.accrued · matter.deliveredEvery branch lists the magic value that turns the name down.