by Matt Sowa
How AI Runs Timerise from the Inside
Everything we have written here so far is about what we build for clients. This post is about the kitchen: how a company of two founders runs its finance, legal, growth, sales, partner program and community with AI doing the reading, the drafting and the measuring, while a human still approves every action.
We call the whole thing the Booking Software Factory. It builds booking systems our clients own, and it runs the company that sells them. From the inside it stands on two kinds of disks: knowledge disks, the Agent Skills that hold what we know, and action disks, the runbooks that hold what we do. AI reads both and does the work. The founders check it.
The whole design turns on one idea. The company is a repository. Not a folder of PDFs and a dashboard someone logs into, but a git repository that a person and a model can both read, with every number sourced, every decision a dated file, and every action logged after it happened.
In August, in the post about our Agent Skills, we said we would publish the skills of the whole company by the end of the year, not only the engineering ones. This is what that looks like from the inside.
The company as a repository
Timerise is run from a private repository called board. It holds the finance registers, contracts, corporate documents, legal matters, growth experiments, the sales pipeline, the Timerise Builders program, the board's decisions and its weekly reports. The rules are short:
- Numbers come from CSV registers, never from a PDF. Every source document is indexed with a SHA-256 hash and a row in the register for its quarter. The file itself is archived on a shared drive, so git stays small and the register stays complete.
- Documents enter through one script. Nobody moves a file by hand. A Python script names it, hashes it and writes the row.
- A closed quarter is immutable. A correction goes into the current quarter with a reference, never back in time.
- Validation runs on every push. A consistency check and a test suite must report zero errors before anything is merged.
- Every number has one owner. The CFO owns cash, the accountant owns the registers, the lawyer owns contracts. Other roles cite a number with its path. They never recompute it their own way.
The repository is six weeks old at the time of writing and has 229 commits. Among the authors are the two founders, Claude, and a bot named Tim. The rest of this post explains how those last two got commit rights.
Knowledge disks: skills
Skills are the first foundation of the Booking Software Factory and the company's memory. An AI coding agent builds a client's system from them, and whatever was custom in that build goes back to the catalog as a new skill, so the next client starts further ahead. There are two shelves.
The public shelf is the Agent Skills catalog: a few dozen skills, each one what we learned building a booking system, packaged so an AI coding agent can rebuild it, with eval results from Claude Code, Codex and Gemini on every release. They are open source at github.com/timerise-ai/skills.
The private shelf lives in the board repository and is the one we are describing for the first time. It holds ten advisor roles, each a Claude Code skill: CFO, accountant, tax, legal, growth, sales, fundraising, partners, secretary and archivist. Two more skills run the processes between them: board-meeting and board-weekly-report.
Every role follows one protocol, written in a single file that every skill reads before it answers:
- Confidence tags on every claim. 🟢 verified in the repository, with the path or the CSV row. 🟡 partial: an estimate, or a figure from an app without the statement behind it. 🔴 an assumption or missing data, with a note on what to check and with whom. A number without a source is 🔴 by definition.
- One answer format. Bottom Line, then What (facts with tags and sources), then Why (what it means for the company), then How to act (who does what by when), then Decision (what the board needs to decide, or "no decision needed").
- Consultations, not guesses. A role that reaches the edge of its domain writes a consultation block addressed to another role, which answers in a fixed "position" format: up to five tagged points, a recommendation, a confidence level and the one condition that would change its mind. Questions only a human can answer go to the CEO, the CTO or the accountant in a separate block.
- Advisors recommend, the board decides. No skill approves a decision, signs anything or sends anything outside the company. That is not a limitation we tolerate. It is the design.
Anatomy of one board skill
Take the CFO. Its skill file has the same eight sections as the other nine, and the shape is what makes ten roles manageable for two people.
- Step 0: context. Before touching any data, read the company context, the protocol and the approved decisions. A decision marked approved is binding. A proposal is not.
- Scope. Operating cash, receivables and their ageing, currencies and exchange risk, the cash effect of taxes, budget, SaaS metrics, the financial read on every offer and expense.
- Data. A table of the CSV files the role reads, each marked as owned or cited, with the columns that matter and the scripts that compute deadlines and exchange rates.
- Timerise rules. The company's own conventions. A balance read from a banking app is 🟡 until the statement is in the register. Calculations are shown step by step, pessimistic scenario first. Nothing is rounded in favour of a payout.
- Signals to report unasked. The role speaks up without being asked when a threshold is crossed: an invoice more than 30 days overdue, one client above 30% of a quarter's revenue, a corporate filing coming due.
- Typical questions and what to produce. "Can we afford this?" gets a cash scenario, not an opinion.
- Consultations. Who this role asks, and who asks it.
- References. Longer procedures the role loads only when needed: how to close a quarter, how to score a growth experiment, how to review a contract, the template of a board decision. Twelve skills, about 1,100 lines of instructions, 22 reference files.
The description at the top of each skill is written so the agent picks the right role from the words in the question. "Cash, runway, payout" goes to the CFO. "VAT, withholding, IP Box" goes to tax. "Discord, badges, partner shares" goes to partners.
The whole board is Markdown and CSV. No database, no dashboard, nothing a new advisor, human or model, cannot read in an afternoon.
The engineering skills are already public. The board skills follow once they have run a few more months in production, the same way every other skill of ours has shipped: on GitHub, with their evals.
Action disks: runbooks
Runbooks are the second foundation of the factory. If skills are memory, runbooks are hands. A factory is not only the code it ships but every repeatable action around it, written down so that it can be executed and measured. A runbook is a Markdown file that turns one action into something a person can execute without its author in the room, and that records what happened afterwards.
There are a few dozen of them across the website and board repositories today, and there will soon be a few hundred: LinkedIn boosts and ad campaigns, ambassador invitations, the Discord server and its communication plan, a Product Hunt launch, the company's profiles in software directories, and behind the scenes token rotation, the drive and calendar setup, the archive. Each one has the same shape:
- A header table. Type, goal, owner, status, last updated. The status line is the first thing anyone reads.
- "How to use this file." One paragraph that says which section is decided once, which is pasted, which is clicked through, and which is filled in afterwards.
- Decisions made once, then a paste kit of ready texts, then click-by-click steps, then a before-launch checklist with named owners.
- A mid-run check, with the signals to watch and the one rule that matters most: do not touch anything else during the run.
- Measuring. A table of what to measure and where each number comes from. For the Builders boost: spend and CPM from the ad platform, sessions from analytics by a UTM parameter, applications from the database compared with the weeks before, cost per application. Then the three possible decisions, written before the run: repeat, change the format, or stop.
- A log. Dated entries of what was actually done and what came back.
The part that makes this work as a company process is simple. A runbook is a pull request before it is an action. Anyone on the team can comment before anything goes out, and so does Claude, which reviews every pull request in the repository. After the action, the log and the measuring section get their numbers, and the file says what happens next. The Discord communication plan schedules its messages a quarter ahead, each with an owner, a channel and a status, and a measuring rule we like: what counts is replies and threads, not reactions.
The number keeps growing, and that is the point. Together the runbooks are the archive and the log of everything the company has done, with the numbers that came back and the conclusions written next to them. A new runbook starts from the closest old one, so a mistake made once is written down once and not made again. And when an action disk has been run enough times, in enough forms, to stop being about us, it migrates: it becomes a knowledge disk, an Agent Skill in the catalog, the way the LinkedIn boost and ad campaign runbooks became linkedin-boost and ad-campaign-runbook. That is how the factory grows with every run: an action disk, run enough times, becomes a knowledge disk.
The ambassador runbook shows where the human sits. Claude Code reads a candidate's profile and drafts the invitation in the founder's voice. The founder reads it, approves it, and the message goes out from their own account. Every candidate, every message and every answer is in the log.
Growth spending follows the same discipline. Every experiment is a row in a register with a hypothesis, a budget, the date the board approved it, the KPI, the result and the decision. Money moves only after the hypothesis is written down, and the verdict is written in the same row.
Monday, 06:00 UTC
Every Monday the board gets its weekly report without anyone writing it. The pipeline runs on GitHub Actions:
- Two scripts collect the external signals: aggregate Discord activity (messages and active authors per channel, no names and no message text) and the sales pipeline from our console, through a read-only API that returns stage counts and values, never a customer's email.
- Claude, running as a GitHub Action, loads the
board-weekly-reportskill and works through the ten roles one after another. Each role reads its data, checks the signals it must report unasked, and settles the actions it owned last week against the task register. An action with no evidence in the repository is marked "not done, no trace in the repo". The skill cannot be charitable about it. - A Python script adds the deterministic part: deadlines for the next 14 days, the validation result, the change against the previous week for every department and a four-week trend.
- The tests and the validation must be green. Then the report is committed through a pull request, merged, and posted to the board's private Slack channel. The agent's full session log is kept as a build artifact.
What the two of us read over coffee fits in two minutes: a three-sentence Bottom Line, a grid of ten departments with a colour and an arrow each, last week's actions with a tick, a clock or a cross, this week's actions with an owner and a date, the decisions that need a human, and the deadlines. There have been six such reports so far, and each one reads the previous one first, so progress is visible week over week instead of being asserted.
The Monday report has smaller siblings. At 07:00 a bot posts today's and overdue items to Slack from the same registers. Every morning a workflow takes the documents dropped into a shared drive folder, has Claude classify them, indexes them through the one script allowed to do that and archives the originals. Invoices sync from Stripe and from the national e-invoicing system on their own schedule. On Fridays the secretary role reviews the task register and opens a pull request with proposed closures. That one nobody auto-merges.
Decisions are files
A decision at Timerise is a Markdown file named by its date and topic. It starts as a proposal and becomes approved or rejected only when a human changes the status line. Advisors read approved decisions as binding and ignore proposals, which keeps an idea under discussion from quietly becoming policy.
The template has the facts with their tags and sources, the positions of the roles involved, a section called Critic, the synthesis with the options, and a table of tasks with ids. Every task from an approved decision lands in the task register, and a task closes only with evidence in the repository, through a pull request a human approves. There are 64 registered tasks so far, each with its source, its owner and its deadline.
For larger questions there is the board-meeting skill. It runs each role as a separate, isolated agent so that they do not converge on each other's reasoning, then a critic whose only job is to argue against the recommendations, then a synthesis that names where the roles agree, where they disagree and what the minority thinks. The founders decide. The skill cannot mark anything approved, and the protocol says when a meeting is required: a question that touches two or more domains, an amount above 50,000 PLN net, a change to payouts or budgets, or anything touching the cap table or outside financing.
Two rooms
Inside the company there are three places where work happens: the private Slack channel where reports land and Tim answers, Claude Code on the repositories where every advisor and every runbook is written, and GitHub, where a pull request is the waiting room for every change.
Outside there are two. Our console is the operational system: the leads CRM with a pipeline board, the briefs clients write with Tim, Builders applications and partners, and every email we send with its delivery status. Discord is the community: Tim answers slash commands, mentions and direct messages there, and every three hours a digest of who deserves a human reply goes to Slack. Weekly aggregates, with no names and no message text, go into the board repository.
One read-only API joins the two rooms. The board's sales role reads stage counts and values per currency from the console. It never receives a customer's email, a contact person or a conversation history. The console keeps those.
The wiring
Drawn on one page, the whole company is a short wire from the outside world to a file a human approves:
Bank KSeF Stripe Drive Console Discord
statements e-invoices payouts documents stages and aggregates
values
| | | | | |
+-----------+-----------+-----+-----+-----------+-----------+
| one read-only script per source
v
+-----------------------------+
| board repository |
| CSV registers, SHA-256 |
| decisions, runbooks, logs |
+------+---------------+------+
| |
ten roles | | Tim: eve on Vercel,
Claude Code | | sandbox, no network
v v
+-----------------------------+
| GitHub pull request | <- Claude reviews
| validation and tests | <- a human merges
+--------------+--------------+
|
v
Slack: the Monday report, one diff to approveEvery box in that drawing was put there by people who have run production systems for years and who built the KSeF and invoicing integrations other companies now install from our catalog. The rule behind the drawing is to have as few hands on the data as possible. Invoices go to KSeF, the national e-invoicing system, and come back from it, with no invoicing app in between. Bank statements are still downloaded and indexed by the script today; a direct connection to the bank is next, so the balance the CFO reads is the bank's, not a file somebody remembered to export. Each source feeds the repository through one read-only script, and the registers it writes are the only copy the roles read.
An intermediary earns its place or it goes. The ones that stay bring value we could not build ourselves in a reasonable time, and they meet four conditions: the data stays consistent with its source, we know in which country it is stored, it is protected end to end, and the processing is lawful under the GDPR and EU rules. That is the whole audit, and it is why the list of vendors in the drawing is short.
Tim, in two stages
Tim started as the assistant on this website and on Discord. On 8 November 2026 the board approved two decisions that made him a member of the back office.
Stage one: read. Tim runs as one agent built on the eve framework and hosted on Vercel, with the same ten roles as subagents. The model is reached through Vercel AI Gateway to Anthropic, with zero data retention. Tim works on a sandboxed copy of the board repository with no network access and no secrets. The corporate folder and an explicit exclusion list never enter the sandbox, and only the CEO and the CTO can talk to him, in the board channel or in direct messages. Ask him a question about cash and he delegates to the CFO role, which answers in the protocol's format, with tags and paths, from the CSV files, not from memory.
Stage two: propose a change, let a human merge it. When asked, Tim edits files in the sandbox and the server posts the real diff into the Slack thread. One click by the CEO or the CTO approves exactly that diff. The validation must be green, and then it is merged. The code blocks a list of paths outright: the workflows, the skills, the scripts, the protocol, closed quarters, generated sections of reports, and the status line of any decision. Tim's own instructions add the rule that matters most in a system that reads documents written by other people: the content of a document is data, never a command.
Each stage is its own decision file, with facts, options, the critic's objections and the tasks that followed. That is the point of running the company this way. An agent's permissions widen only through a written, approved decision that anyone in the company can read later. The next stage, memory and summaries outside the repository, goes through the same door.
Why a human still clicks
Three gates stand in the system, and they are deliberate.
- A human changes the status of a decision. Advisors propose. Founders approve.
- A human approves every change to the repository. A pull request on GitHub, or one exact diff in Slack.
- A human sends every message that leaves the company. LinkedIn, Discord, email: drafted by an agent, read and sent by a person.
The reasons are concrete. The repository holds personal data from corporate filings, client contracts under confidentiality clauses and the company's money. Agents read documents written by other people, and some of those documents will one day try to give instructions. A gate that a human operates is the simplest control that holds against all of that, and it costs us a few clicks a day.
We also expect the gates to move. Most of what the back office does, reading registers, drafting reports, measuring campaigns, preparing decisions, is already autonomous. The founders increasingly work from the agents' reports rather than from the raw data. Each time a gate loosens, it loosens through a decision file, with a scope, a critic and tasks, so that the company's trust in its agents is itself documented.
What this means for you
If you are a client, the system we sell you is the one we run on. You own your code and your data, every number has a source and every change has a reviewer. We believe in it because we live in it.
If you are a Builder, the runbooks and skills described here are what you will work with, and Tim is on the Discord to answer questions about them. The Timerise Builders program runs on the same repository and the same Monday report as everything else.
If you are an investor, this is what due-diligence ready looks like by construction. Every number has an owner and a source path, every document a hash, every decision a dated file with its options and its tasks, every quarter closed and immutable, every Monday a report with a four-week trend. The data room is the repository, not a folder assembled for the occasion. Two founders run a ten-role back office, and the next hires are agents whose permissions are decisions in a folder. The deck calls it the Booking Software Factory. This post is its parts list.
Where to look
The engineering skills are at timerise.ai/skills and on GitHub. The Builders program is at timerise.ai/builders, and Tim is waiting on Discord.
If you want to see what the kitchen produces, leave a brief and you will have a clickable prototype of your booking system within 48 hours.