Садовник: an operating system that refuses to act on its own

A local-first personal auditor for a portfolio of small products. It gathers evidence, proposes at most three actions, waits for approval, and records an observed before/after instead of inventing a cause. The point is not to become an AI content factory. It is to know which bed is worth watering.

Filed under
Case study · Садовник
Published
Language
EN
Reading time
8 min
Version
v0.10.7

The job is attention, not content

Running several small products at once produces the same failure every time: the founder ends up doing the marketing of a chief executive instead of the work of a gardener. Most "growth" tooling exists to multiply content: more posts, more funnels, more prompts. Садовник exists to spend attention, which is the one thing there is never more of.

The honest job:

Every day, across my products: one worthwhile growth action, proof, prepared work, an approval gate, and a learning receipt: not an AI CMO content factory.

It runs locally, reads a portfolio of products, and produces a single ranked recommendation with the evidence attached. Nothing about it is designed to make the machine louder. Most of it is designed to make the human's next hour smaller and better.

Садовник

Personal auditor · local-first

One action · approval gate
01 · EvidenceSource + timestamp

A dated fact enters with its origin. Unknown stays unknown; it is never upgraded into a number.

02 · ProposalAt most three actions

One ranked primary, at most two alternatives. Not an eleven-product re-rank every morning.

03 · ApprovalNothing leaves on its own

No publish, message, email or deploy without an explicit in-product human approval.

Evidence stateObserved

Outcomes are recorded before and after an action. They are never claimed as causal proof. Садовник is a private local tool, not a multi-tenant SaaS.

The loop

The core is a four-step loop, and every step has a place where the machine is told to stop:

  1. Evidence: a fact enters with a source and a timestamp. Unknown is a valid state; it is never upgraded into a number to make a ranking look complete.
  2. Proposal: at most three actions: one primary and at most two alternatives. Not an eleven-product re-rank every morning.
  3. Approval: nothing leaves the machine without an explicit in-product approval. No publish, no message, no email, no deploy.
  4. Measure: an outcome is recorded as a before/after observation, with the exact metric, source and window. It is never claimed as causal.

The third step is the whole point. A growth tool that can act on its own is a liability. A growth tool that prepares the work and hands the decision back is an instrument.

Observed, not causal

The receipt system records what was observed before an action and what was observed after. That is a pair of readings, not a proof that the action caused the difference. Most growth dashboards do the opposite: they draw a causal arrow where there is only a before and an after, because the arrow looks better in a review.

Садовник keeps the arrow off the page. If the window, the baseline or the source cannot be named, the outcome is recorded as not fixed rather than inferred. A null reading stays null.

The division of labour

Садовник is the opposite half of the agent factory. The factory ships: it opens issues, writes code, produces volume. Садовник allocates attention: it decides what deserves the next slot and kills the beds that are not worth watering. The factory can propose; Садовник owns the gate between a proposal and a change that touches the outside world.

In practice this is three roles with clear authority:

  • The factory proposes work and ships inside a sandbox.
  • Садовник decides, approves and measures.
  • I hold taste, money, legal and the final okay.

The agent in the middle is replaceable. The workflow is not.

What has been verified

The system runs locally against a SQLite ledger and a small set of connectors: Supabase funnel data for Flatmate, Search Console, Plausible. The approval gate, the max-three rule and the observed-not-causal receipts are enforced in code and covered by tests.

The evidence boundary remains:

Local-first personal tool        IMPLEMENTED
Approval gate                    ENFORCED
Observed before/after receipts   IMPLEMENTED
Public deployment                NONE
Multi-tenant SaaS                NOT PLANNED
Auto-publish / auto-act          FORBIDDEN
Causal growth claim              NEVER MADE
Closed measurement loop          IN PROGRESS

The hardest open item is honest: the system has not yet closed a full loop: an executed action with a real baseline, an observed outcome and at least one learning event. Until that loop closes once, the generator is deliberately frozen from proposing new opportunities. The tool is disciplined enough to admit it is still looking for its first complete proof.

What I was responsible for

I set the operating model, the approval gate and the evidence boundaries. The central decision was to make the machine refuse: to build the "no" into the interface rather than trusting a prompt that asks an agent to please be careful.

AI agents implemented and reviewed much of the system. The division is explicit: agents write and verify code; they never own workflow state, approvals, schedules, budgets or metrics.

What comes next

Before Садовник is anything more than a private instrument, it needs one closed loop: a real action with a dated baseline, an observed outcome and a learning receipt. Everything else (more connectors, a shared deployment, a friend pilot) is downstream of that first complete proof.

For now it is a private decision tool and an operating-model case study. Its strongest feature is not a recommendation. It is that the recommendation stops and asks.