← All posts

Claude Code for Business: How We Run Our Company on It, and What Still Needs a Human Yes

How we use Claude Code and a shared Markdown vault in git to run our own company: what the agent may do alone, what needs a human yes, the six hooks we added after real problems, and what we counted in 34 of our own work sessions.

An open card file drawer of blank index cards, a small stack of cards, a leather-bound ledger and a brass key on a dark desk under a brass lamp.
Answer

Claude Code for business, as we run it: the agent works in a shared folder of Markdown notes kept in git. It drafts, files notes and writes proposals on its own. Sending outside the company, publishing, deleting, spending and writing to live systems wait for a human yes. Where a written rule failed, a hook now refuses the action.

As of 28 October 2026 · checked by Oskar Korjus

I build the systems kratt runs on. This post is about our own setup, not a client's. Our company's memory is a folder of plain text notes, and Claude Code works inside it with us. I left out anything I could not check against our files today.

If you run a business and are weighing Claude Code, the list of things our agent may not do is the part worth copying. How we work with clients is in what an audit-first AI consultancy is, and who we are is on our about page.

Where the agent works: a shared Markdown vault in git

The vault is a folder of Markdown notes in a private git repository. We read it in Obsidian, and the same folder is the working directory where Claude Code runs. Obsidian's help page on how it stores data says: "Obsidian stores your notes as Markdown-formatted plain text files in a vault." So the agent reads and writes the same plain files we do.

Everyone writes into one shared set of folders, and nothing is locked. Writers do not collide because every note gets a unique filename, a date or a slug. The obsidian-git plugin commits, pushes and pulls every five minutes, and it is set to sync by merge, not by rebase. The reason for that setting comes further down.

The vault started on 4 June 2026. On 28 October 2026 it held 1,886 tracked Markdown notes. We and the agent write to it, and 1,457 of those notes, about three in four, carry the tag that marks a note the agent wrote. Every note the agent writes must carry that tag. The tag records who typed the note, often at our request. It does not mean the agent decided anything.

Two instruction files load at the start of every session. One holds the vault's conventions, the other the agent's role and safety rules. The agent never deletes anything: it only creates, appends or moves. And keys and tokens never go into the vault.

Claude Code's documentation on how Claude remembers your project says what such files can and cannot do: "Claude treats them as context, not enforced configuration." The same paragraph says that to block an action regardless of what Claude decides, you use a hook. The guards further down exist because of that limit.

In June 2026 we took three hook ideas from an open-source vault template and wrote them ourselves, with no third-party code. We turned down its transcript backup hook. It would have copied full session transcripts into the shared vault, along with any secret or client personal data pasted into a session.

What the agent does alone, and what needs a human yes

On its own, the agent writes briefs, drafts, analyses and notes straight into the vault. It reads live systems with read-only access. When it is unsure, it writes a proposal for us instead of guessing. One line in the conventions file sums up the default: "Drafts are fine; sending needs a human nod."

The other list is short. The agent's rules say: "Never on your own, in any tier: send to a human, spend, delete, write to the CRM, publish, raise a volume cap." We made one standing exception, and it stays inside the company: once a post of ours is published, the agent shares its link in one internal Slack channel, with a suggested comment for each of us, without asking first. Everything else that leaves the vault goes in one order: the agent drafts, a person approves, a person sends. Live systems are read-only by default, and writing to one needs a lane we approved separately.

Choose, do not author

The line between the two lists is a rule we sum up as choose versus author. The agent may choose between options a person already approved: reorder a worklist, move a weight inside a range we set, add an exclusion it can back with evidence, write its own briefs. It may not author anything new: a new rule, new instructions for itself, a changed threshold, or anything outside a range we declared. Those go to a proposal and wait.

OWASP's entry on LLM06:2025 Excessive Agency recommends the same two things: limiting what an agent may do in other systems "to the minimum necessary", and using "human-in-the-loop control to require a human to approve high-impact actions before they are taken." How we keep human review in the systems we build for clients is on our trust page.

Six Claude Code hooks, and the problem behind each

A hook is a command Claude Code runs at a fixed point in a session. The hooks guide says this "gives you deterministic control: certain actions always happen rather than relying on the LLM to choose to run them." The hooks reference adds that a hook running before a tool call can block that call.

We run six hook scripts at six points: session start, each prompt, after a note is written, before a Slack post or a shell command, when a turn ends, and when the session ends. Two of them block. One holds a turn open once. The other three only inform or warn.

GuardWhen it runsWhat it doesThe problem behind it
Session briefSession startPulls first, then shows the last 48 hours of commits, new inbox items and blockers that wait on a personOther writers' work was invisible unless you read the git log
Filing hintEach promptSuggests filing a note when a message sounds like a decision, a win or a wrap-upAfter the vault's first week the decisions folder was empty, while decisions were being made in chat
Note checkAfter a note is writtenWarns about missing frontmatter, a missing AI tag or a note with no links32% of notes had no links in or out at our June audit
Slack guardBefore a Slack postRefuses the post and says how to fix itSlack rules written in prose were broken within four days
Corrections guardTurn end, session end, after writesHolds a writing session open once per draft until corrections given in chat are saved as rulesSaving them depended on the model remembering
Rebase guardBefore a shell commandRefuses a rebase pull in the vaultThe vault jammed in September, and a rule kept in memory did not hold

The Slack guard

We wrote rules for how agent sessions post to Slack. Agent sessions broke them within four days, so on 17 August 2026 the rules became a hook that refuses a post before it is sent. It allows no bot direct messages and no unknown channels. Every post needs a fixed first line, every ask needs a named person, and there is a length cap. The guard runs before the human yes, which still applies.

When the guard refuses a post, its message tells the agent how to fix it. The comment in its test suite gives the reason: "an agent that gets 'denied' learns nothing". The suite runs offline. On 28 October 2026 it ran 43 cases and all passed. Its header also explains why we do not test the guard by firing a real message: that "only proves anything if the guard is loaded; if it is not, the test IS the incident."

The alerts we switched off

Scripts can crowd out people too. In one week in August, 68% of the 56 messages in the Slack channel meant for us to talk to each other came from about 14 scripts. One alert lane had sent 155 posts in 14 days from 11 scripts without a single human reply, so in September we switched most alerting off. A script may now reach a person only when waiting would cost money, a client or legal exposure. Everything else goes to a local log.

The vault stopped syncing twice in September

The first time ran from 2 to 6 September 2026. A state file that one of our scripts writes was left halfway through a merge, so the automatic pull at session start failed in every session. The brief printed a warning third in its list, we read it as noise, and 273 commits piled up unseen. Now files that scripts write merge by keeping the local copy, since the next script run regenerates them anyway. A failed pull prints first in the brief, with the number of commits we are behind.

The second time ran from 7 to 9 September. This time a rebase had stopped halfway. Git kept asking us to resolve merge conflicts in a tree that had none. Aborting the rebase and pulling with a merge cleared it: six script-written files were resolved, and no Markdown note was touched.

On 9 September a rule against rebasing the vault went into the agent's memory. It did not hold. Our usage audit on 22 October found a session that had still run a rebase pull in the vault. That day the rule became a hook that refuses the command. On 28 October we fed the hook test events offline: it refused a rebase pull and allowed a merge pull.

The same audit summed up which of our earlier fixes lasted. What survived was code wired into a path we already walk. What died needed a person to keep a habit, or a new command nobody used. In the audit's words: "Warning-only guards don't change behaviour."

Decisions go into dated files

The vault's inbox holds proposals, decisions and handoffs. Nobody edits an existing inbox note: a reply is a new file, and an idea we killed stays on record.

Decisions we want to keep go into a dated file, and a script builds the decision index from those files. Nobody edits the index by hand. When the index was generated on 26 October 2026 it listed 86 decisions: 8 in force, 11 replaced by later ones and 67 with no status set. That last number is our weak spot. Most decisions were filed and never marked as reviewed, and some decisions are still made in chat and never filed.

A decision note on its own does not bind the agent. A rule that has to hold in every future session also goes into the agent's instruction file. Before we added that step, one rule sat in a single decision note for five days.

A council for decisions we cannot undo

For one-way-door decisions we run a council of seven agents. Three members read our notes, each through one lens: skeptic, revenue or risk. An outsider reads only the raw facts, never our own conclusions. Two judges rank the four answers without names, the ranking is added up in code, and a chairman writes the verdict. The chairman may not smooth over where the members disagreed. If they all agree, the note has to say that agreement inside one model family is weak evidence. We do not run it on copy, because "councils average toward bland". Its output is one note, and nothing is sent.

It has run twice, on 26 and 28 October 2026, and each result is still a recommendation waiting for our sign-off. In the first run all four members gave the same answer, and the note flagged that as weak evidence. On 26 November 2026, if no council run has changed a decision, we retire it.

What we counted in 34 of our own work sessions

We counted 34 of our own Claude Code work sessions that started between 8 and 22 October 2026: 27 in the workspace we use for client work and 7 in the vault. A counting script that lives in the vault did the count.

  • About four in ten prompts were six words or fewer: 349 of 871 (40%), or 313 of 753 (42%) with a stricter filter that also drops text Claude Code inserts on its own.
  • 17 of the 34 sessions ran long enough that Claude Code compacted the conversation at least once, 29 times in all.
  • Most of the agent's actions were shell commands: 6,033 of 8,336 tool calls (72%). 182 tool calls (2%) returned an error.
  • 87% of the agent's turns (15,668 of 17,980) ran in the workspace we use for client work, and 13% in the vault.

Many of the short prompts are approvals after the agent offered numbered options, a word like "send" or "ship". The count measures length, and it cannot tell an approval from an instruction.

These are our own logs, from one machine over 15 days. There is no control group, and they say nothing about time saved. A session is one transcript file, so a session left open for days counts once. Claude Code deletes old transcripts after about 30 days, so the oldest sessions in this window start to disappear in early to mid November, and the count cannot be repeated after that.

If you want Claude Code in your business

This is what we would do again, in this order.

  1. Start read-only. Give the agent read access to the systems that matter and write access to nothing live. Claude Code's permission rules let you set a tool to allow, ask or deny, and the docs say deny rules are checked first.
  2. Write the two lists down. Put what the agent may do alone and what needs a human yes in the instruction file it loads every session. Our dividing line is choose versus author.
  3. Keep a decision log. Dated files and a generated index are enough to start. Expect gaps, and count them.
  4. Add a guard only after a real problem. Each of our six hooks traces back to something that went wrong. Where a warning was ignored, make the guard block.
  5. Test a blocking guard offline. Feed it test events. A live test of a guard that is not loaded is the mistake itself.

The vault is plain text and the rules are sentences, so neither needs code. The hooks are scripts, so someone has to write and test them.

If you want an agent like this in your company, start with our automation service. For where an agent fits in your wider plan, see how to write an AI strategy. For what an agent costs to keep running, see our post on AI running costs. If your company is in Estonia, our page on AI consultancy in Estonia describes how we start.

What this post does not claim

  • It does not claim the agent saves us time. We have not measured that.
  • It does not claim our session logs show anything about other companies. They are our own logs, from one machine, over 15 days.
  • It does not claim every decision gets filed. 67 of the 86 indexed decisions have no status, and some decisions are still made in chat.
  • It does not claim the council works. It has run twice and faces a kill test on 26 November 2026.
  • It does not claim the hooks catch everything. Three of the six only inform or warn.

Frequently asked questions

Can a business use Claude Code without developers?

Partly. The vault is plain Markdown and the rules the agent follows are sentences in an instruction file it loads every session, so neither needs code. The hooks are scripts, so someone has to write and test them. I build ours, so this post does not show how far a company with no technical person would get.

Do you need Obsidian to use Claude Code with a vault?

No. Obsidian keeps notes as plain Markdown files, so Claude Code reads and writes them like any other folder. We use Obsidian to read the vault, and its git plugin commits, pushes and pulls every five minutes. Without it you would need another way to sync the folder through git.

What is an example of an AI agent guardrail?

Our Slack guard. It runs before the agent posts to Slack and refuses a bot direct message, a post to an unknown channel, a post without the fixed first line, an ask with no named person, or a post over the length cap. The refusal tells the agent how to fix the post. Its offline test suite ran 43 cases on 28 October 2026, and all passed.

Does the agent ever send anything without a human yes?

In one case, and it stays inside the company. Once a post of ours is published, the agent shares its link in one internal Slack channel, with a suggested comment for each of us, without asking first. Otherwise its rules say no: on its own it may not send to a person, publish, delete, spend or write to the CRM. It drafts, a person approves, and a person sends. Separately, a few of our scripts may still alert us, and only when waiting would cost money, a client or legal exposure.

What does it cost to run an AI agent like this?

This post does not cover cost. Our post on AI running costs lists the lines on an AI bill after launch and the numbers worth tracking once a system is live.

kratt is an audit-led AI systems partner in Tallinn: we work out where a company loses time, money or information in its workflows, then build the practical AI, automation or systems integration that fixes the most valuable part.

Next move

Find your leak. Book the audit.

The free 30-minute audit with Karl looks at how your work runs today and finds where it loses the most time, money or information. You leave knowing what to fix first.

Book your free 30-min audit call
kratt

kratt takes AI in companies from an initial idea to a reliable system. Based on the audit, we define where AI pays off and start development where the return is highest.

Book the free audit call
The newsletter

Occasional notes on
what’s actually working.

No spam. Cancel anytime. Occasional notes only.
Book your free 30-min audit call