Writing
Blog post

A sales agent that writes to Obsidian

May 3, 2026

I built a local-first sales agent for Story by Numbers.

It finds Dutch companies that fit the kind of work I sell, scores them against my service wedges, and writes a short brief into Obsidian every day.

Inline comments in the brief feed back into scoring.

How signals work

A signal is a small, observable fact about a company. Does it have a product catalog? An archive? A published research collection? A B2B portal? Editorial output?

Each fact moves a score up or down. Some signals are gates. They reject candidates before any model is called. Others are weights. They tilt similar candidates toward different wedges.

A wholesaler with a deep catalog and a B2B portal will score high in one direction. A research foundation with a digitized archive will score high in another. The same agent looks at both, but reads them very differently.

I keep my full signal set private. It is the encoded version of my offer and my taste, and it changes as I learn.

Filtering before the model

Cleanup happens before the language model is involved. Sectors I never sell into are gone before any reasoning step. Companies outside the service model are rejected at the rule layer. Only the survivors get a structured pass.

That keeps the model focused on judgement, not on cleanup. It also keeps the running cost predictable.

Obsidian as the feedback loop

The brief lands in Obsidian, where I already keep my notes.

A week's brief, grouped by commercial fit.

I mark companies as rejected, parked, lost, or won. Those notes are read back into the local database on the next run. A reflection step proposes scoring adjustments based on recent outcomes. I review them by hand before any take effect.

The agent improves. The final judgement stays with me.

Small, local, inspectable

The stack is intentionally simple. Python, SQLite, public sources, markdown, Obsidian.

No dashboard, no hosted service, no automated outreach. Each phase writes to a local database, so runs can be resumed and decisions can be inspected later.

The agent is useful because it is narrow. It encodes my commercial context and gives me a small number of plausible companies each week.

For a studio like mine, that is enough.

Latest posts