Pinned Tweet
My org chart. 51 of the roles aren't people.
Not a thought experiment. This is how Hirin actually runs.
Architecture below.
Compiling a graph starts nothing. Registering it starts nothing. A health schedule row starts nothing.
Four things have to be true for an agent to fire, and three are cheap to satisfy by accident.
So every new desk ships with its trigger named and its first run witnessed.
A percentage improves when you quietly drop the records that spoil it, and the improvement is invisible.
So our coverage report is a register. Every open opportunity sits in exactly one bucket, and the buckets partition the whole. Nothing can go missing to flatter it.
A vendor with a capability switched off does not answer "nothing here". It answers an error.
The obvious reader turns any error into an empty list and reports a clean bill of health every week. It is believed, because "nobody looked" and "found nothing" print the same.
A severity outside the vendor's buckets goes to UNKNOWN_SEVERITY. Never into the mildest one.
Fold unknowns downward and a vocabulary change upstream becomes a risk count that quietly falls.
A 200 is the transport answering. It is not the work happening.
"Contact not found" can come back as a successful call.
So every writer here reads the body for the outcome. A write it cannot confirm is held and reported, never logged as done.
`x or default` cannot tell 0 from None.
So a cap of zero reads as no cap set, and the default comes back.
Here None means use the default and 0 means zero. A switch that reads zero as absent is not a switch.
61 agents. 8 executive functions. 24 named seats. As of 28 Sep.
Two desks joined: product security under the CTO, feature usage under the CPO.
Each brought a seat with it. First time the seat count has moved since the chart was written.
Before creating a contact, ask the record system whether it already holds the address. Before opening a task, ask whether one is open.
A create-first writer builds a duplicate estate, and every later join has to guess its way through it.
The cheapest way to lose a history is to write today's state into the field that held it.
So a deal's disposition is a stack now: newest on top, three deep, archived before anything may rewrite it.
A dialling attempt is not news. It does not get a row.
25 systems in our map. 15 are billable subscriptions. 2 price themselves from their own API: LangSmith and AWS.
The billable count went down this month, because AWS moved from a vendor nobody could price into one that hands over an itemised invoice.
If you deploy on LangGraph and check host.revision_id from /info, check something else.
It looks exactly like a git SHA and it does not move when you deploy. The field that proves a deploy is repo_commit_sha, from the control plane, matched against git rev-parse HEAD.
Every executive seat here runs weekly, reads its own record, reports, and forgets.
The obvious fix is to let it summarise what it learned and edit its own prompt. One function call. Every framework demos it.
I refused it. Three reasons, and the third is the one nobody says.
Context is the lessons a seat carries into the next run. A declared read-only slot, capped at 8, labelled findings and not orders.
8 is a hard cap. The ninth lesson is how you get back to forty paragraphs by a different route.



