StratOps

00

A record that keeps itself

You already said it. Stop typing it in again.

The work happens. Then somebody is supposed to write down that it happened. Nobody does. That is how every tracker you abandoned died.

StratOps removes the second step. You tell Claude what you did, and the record updates itself. Nobody does data entry. It is for people who already work through Claude.

No signup form, because there is no signup. The button writes to a person.

It is deployed. Check that before you read another word.

$ curl https://stratops.stratops.workers.dev/health
{"ok":true,"environment":"production","foreign_keys":"enforced"}

01

The cost you already pay

The work happened. The record of it did not.

Here is a Tuesday you have had.

  1. 9:40 You tell Claude about the call with Sarah at Acme. They want the pilot. You owe her a proposal by Friday. They moved on migration cost, not price.
  2. 11:15 Three hours on the onboarding flow. It ships. You mention it in passing.
  3. 2:00 You rule out the pricier vendor, and say exactly why — better than you ever will again.

By Friday the proposal is late, because nothing was tracking it. Sarah is in no CRM, because adding her meant retyping a name you had already said. In November someone asks why you chose the cheaper vendor. You remember there being a good reason.

That is not a discipline problem. You did the work and described it precisely, first time. Every system you own asks for a second pass, and that pass never happens.

Scrollback is not a system of record. No schema. No sortable dates. No answer to what moved this week. And it disappears.

StratOps is not another place to type. It removes the second typing.

02

Setup

Three steps, and then you stop thinking about it.

01

Connect it once.

StratOps is an MCP connector, not an app. In Claude: Settings → Connectors → Add custom connector. A URL ending in /mcp, then sign in with Google. Claude gains thirty tools — eleven read, nineteen write.

One deployment: a Cloudflare Worker over a D1 database, in the account of the person who built it. There is no self-serve way to stand up your own. That is what "not for sale" means.

02

Talk about work that already happened.

Past tense, your own words, in the conversation you were already having. No syntax to learn. Each write tool is named for the verb in your sentence, so one sentence costs one approval instead of six. Claude shows what it will record, and you approve once. The eleven reads never prompt: asking should be free, writing visible.

03

Ask it back.

Same conversation, whenever you want. There is no dashboard to keep current, because nothing is stored that could go stale. Health, momentum and throughput are worked out when you ask. Nothing runs on a schedule, and nothing arrives unprompted. That is a limit, and also why no background process holds your record.

Write to Jake Tell me what you run, and how much of it already goes through Claude.

03

The whole product, in one exchange

One sentence. One approval. Four records.

Not mocked-up screens. Each is a real tool call writing real rows.

You say

Just got off a call with Sarah at Acme. They want the pilot, and I owe her a proposal by Friday.

Claude asks once, for log_meeting. You approve once.

What lands in the record

  1. meeting Acme pilot call — dated when it happened, never invented. If you did not say when, you are asked.
  2. contact Sarah, Acme — matched to the Sarah you have, or created if new.
  3. deal Acme pilot — moved to its new stage, not duplicated. The change goes to a trail, so "how long has this sat in proposal" stays answerable.
  4. task Send Sarah the proposal — due Friday in your timezone, attributed to the call.

If "Sarah" could be two people you know, it names both rather than picking one. A duplicate contact splits her deals in two, and there is no undoing it.

You say

Spent about three hours on the onboarding flow this afternoon, and it is out.

One call to log_time.

  1. timeThree hours against today, in your calendar day.
  2. taskOnboarding flow completed, and the move written to the trail.
  3. shippedA changelog entry — what next week's review counts as shipped.

One batch, so a failure cannot leave the task completed while you are told it failed.

You say

We are going with the cheaper vendor because the migration cost is the real risk. Look at it again in November.

One call to record_decision.

  1. decisionThe context, the option taken, and why.
  2. reviewA November date, so it resurfaces.
  3. outcomeBlank on purpose. In November you say how it went.

Write to Jake One address, a person on the end of it, no list to unsubscribe from.

04

Reading

Questions, not screens.

The reads are named for the question a person actually asks. They never ask permission.

  • "What should I work on?"

    Overdue, due today, in flight, stalled, and how heavy the days ahead look. Due today is not called late: the day boundary is yours.

  • "What actually happened last week?"

    What shipped, completed and stalled, hours by initiative, deals that moved. Announced and measured stay separate, and the two disagreeing is the finding.

  • "Why did we decide that in March?"

    The decision, its context, the option chosen and how it turned out. When nothing formal matches, it returns the nearest notes, labelled as that.

  • "How is the pilot doing?"

    Health and momentum, each with the breakdown behind it. Stalled work, hours, shipments, open decisions. A component that cannot be measured comes back empty, never a placeholder.

05

Who this is for, and who should stop reading.

One seat, no signup. Better to lose the wrong reader early.

This is for you if

  • You already work through Claude, and that is where the thinking happens.
  • You are one person carrying the whole picture: deals, delivery, decisions.
  • You have abandoned two trackers, and know which step killed them.
  • You would rather hear a number cannot be computed than see a fake one.

This is not for you if

  • You need a shared team record. One person per account, and a second cannot sign up today.
  • You need to buy it. No price, no plan, no trial, no way to pay.
  • Procurement wants a certification. There is none, and none is in progress.
  • You want a screen. There is no dashboard, and no fake one to show you.
  • You want something that watches and tells you. Nothing runs on a schedule.

If three of those five apply, we are both better off knowing now.

06

Instead of a badge

Numbers you can re-run, not logos you have to trust.

No logos, no rating, no testimonial — there are no customers. What exists instead is a set of things that produce a number.

Tier one — check these before you reply

It is deployed.

$ curl https://stratops.stratops.workers.dev/health
{"ok":true,"environment":"production","foreign_keys":"enforced"}

It refuses browsers, by design.

$ curl -i -X POST -H 'Origin: https://example.com' \
    https://stratops.stratops.workers.dev/mcp
HTTP/1.1 403 Forbidden
{"error":"Browser origins are not permitted on this endpoint"}

Claude connects from Anthropic's infrastructure and sends no Origin; a browser always sends one. So a page in a tab cannot reach the record, including this page. It stops the browser class of attack and nothing else — a non-browser caller just omits the header. It is not authentication.

Tier two — ask, and I will send you the file

  • 47 of 55

    A probe builds two accounts from the real migration files. It then writes account A's row into account B's data, across all 27 tables. 47 are refused by the database itself. The other 8 are columns that can point anywhere, where SQLite cannot express such a key, so they are checked in code.

  • 355 of 355

    Automated checks passing, from one command: npm run check. The tests apply the real migration files to a real SQLite database, so the schema checked is the one that ships.

  • 30 tools

    Eleven read, nineteen write. No tool is read-only and quietly writing behind a method parameter. Each declares whether it can overwrite, which lets reads run unprompted.

  • 0 runtime dependencies

    MCP is implemented directly over JSON-RPC, so there is no supply chain to inherit. There is also not one log statement in the source, so no token has reached a log line.

What the audit found: one fixed, one still open

The isolation work has a written audit, the author's own. Its top recommendation was that 22 of those 27 tables depend on Cloudflare's D1 continuing to enforce foreign keys, and nothing checked that it still did. Run the probe with enforcement off and those 22 protections vanish while the trigger-guarded ones survive — the layer assumed to be stronger was the one resting on an outside promise.

That one is closed. The health check now writes a deliberately invalid row on every call and expects the database to refuse it. If the refusal ever stops coming, the endpoint reports NOT ENFORCED and answers 503 rather than 200 — it fails loudly instead of continuing to look healthy. Ask it yourself: /health returns "foreign_keys":"enforced".

The second finding is still open. There is no general audit log. Sign-in events are recorded — every link, consent and token issuance — but ordinary reads and writes to the record itself are not. On a one-person database that is academic. Before a second person, it is not.

This page will not invite you to run the probe yourself: the repository is not public. Putting it on GitHub is an open item, not a policy. Ask, and you get the probe, the API reference and the audit.

Write to Jake Ask for the probe, the API reference and the isolation audit.

07

Status, plainly

What is actually running, as of today.

It is live, and it holds one real business: mine.

StratOps answers on Cloudflare Workers over a D1 database, and /health reports production. Inside it are 8,724 rows of one operator's work.

That record covers about six months, not the two years this page was once handed as approved copy. The number was cut after reading the dates in the export.

Signing in happens through Google, over an OAuth server StratOps runs itself. No password is ever typed into it and none is stored. The Google token is read once to confirm who you are and thrown away — StratOps asks for a name and an email address and nothing else, so there is no mailbox or calendar access to lose.

So the person who built it is the only user. That is the entire customer list.

08

The part other pages leave out

Where it stops.

These are the facts that decide it. Every line describes today, not a roadmap.

One person per account.
The account row is the identity. No user, session, member or role table exists. No seats, no invitations, no signup. Today a second person cannot get a credential except by an operator editing the database by hand.
There is no dashboard.
Talking is the whole surface. No web app, no mobile app. Uploading a file, connecting a mailbox or a bank, and issuing a credential cannot be done by talking, and the page they belong on does not exist. Signing in is the exception and it happens in the browser, but it is the only thing that does.
Nothing runs on a schedule.
You can configure an alert and it is stored faithfully, but no checker exists, so it can never fire. Signals are the same. Nothing arrives while you are asleep. The tools' descriptions mention a checker and a detection engine; neither exists, and the API reference says so.
Documents are filenames.
A document can be recorded and linked. Its contents are not stored, not searched, and there is no upload path. Search reads the words you said, not the inside of a PDF.
Claude reaches your email. StratOps does not.
No integrations directory, no connector list. When Claude reads your Gmail or calendar in the same conversation, that is Claude's own connector, and StratOps neither sees nor stores what comes back. It is the easiest true-sounding thing to imply, so it is said outright.
Day one is honestly empty, and an import does not fix it.
An empty account says so: health comes back with a reason rather than a number. An account with imported rows and no recent history is worse: it returns real arithmetic that means nothing yet. Half of momentum is what completed in the last seven days. Import two years of finished work and that half scores zero, and it cannot climb until you actually do something. So momentum reads weak on your first afternoon, and it is right to. Measured, not assumed: over wizard-seeded data the real analytics return momentum 50, health 23, velocity "stable" at zero. Four numbers, every one an artifact, shown with the confidence of real ones. Capture and recall work from the first sentence; the derived numbers take weeks.
The undo reaches one step back.
retract_capture undoes the most recent capture. Not any past write, and not a contact — contacts have no undo at all, which is why an ambiguous name is refused. No version history, no trash.
No export button, and no lock-in either.
There is no export tool and no route — a real gap, not a boast. What there is instead is the shape of the storage. The rows are in a D1 database, which is SQL, and whoever holds the Cloudflare account can query them. No proprietary format, nothing to revoke.
It is not for sale.
No price, no plan, no trial, no free tier, and nothing withheld as a tactic. Built and run by Jake Hodges, for one operator.

Write to Jake If you read that list and still want in, you are the reader this is for.

09

Objections

The questions you are actually asking.

Where the honest answer is no, the answer starts with no.

An AI is writing to my records. What stops it writing something wrong?

Three things. You approve every write — all nineteen write tools declare themselves as writing, so Claude names what it is about to record. Writes validate first, so a refused capture costs zero rows. Ambiguity is refused, never guessed. None of that stops you approving a wrong sentence. It is as accurate as what you said.

Isn't this just a Notion database with a chat box on it?

Two differences, neither of them storage. The write surface: nineteen tools named for verbs, so one sentence costs one prompt and writes four linked rows. One tool per table was built and measured — 63 tools, six prompts. And nothing derived is stored, so nothing goes stale.

Where does my data actually live, and who can read it?

In a Cloudflare D1 database behind a Cloudflare Worker. D1 is SQL, so whoever holds that account can query the rows directly. No middle tier, no third party, no analytics. One deployment, in the account of the person who built it.

What if it records the wrong thing — can I undo it?

The most recent capture, yes. Anything older, no — no general undo, no version history, no trash. A contact update has no undo at all.

Can my team use it?

No. One account, one credential, one person, and it is not a setting. A second person cannot obtain a credential short of an operator running SQL by hand.

How do I know my data is isolated from someone else's?

Today there is nobody else. The mechanism is real regardless. Every parent carries a tenancy key and every child references the pair, so a row cannot claim one account while pointing at another's workspace. A probe makes 55 cross-account attempts across all 27 tables: 47 refused by the database itself, the other 8 guarded in code. 22 of those 27 tables rest on Cloudflare continuing to enforce foreign keys, so the health check tests that assumption on every call: it writes a row that must be refused, and reports NOT ENFORCED with a 503 if it ever is not.

What does it cost, and what happens when I stop paying?

Nothing, and nothing. No price, no plan, no trial, no card. Nothing can be held hostage: the rows are plain SQL, readable by whoever holds the Cloudflare account. There is no export button, which is a real gap.

Is it secure? Do you have SOC 2?

No SOC 2. No certification of any kind, no penetration test, no GDPR position, no data processing agreement, no uptime commitment, nothing in progress. If procurement requires one, stop here. What exists is specific. The token is stored only as a SHA-256. No tool returns a credential. Not one log statement exists in the source. Deleting an account cascades all 26 data tables to zero. The endpoint refuses any browser origin. What is missing, equally: no audit log, no rate limiting, no token expiry, no scopes, no revocation short of an operator clearing the column by hand.

Is my data used to train a model?

StratOps stores your records and does nothing with them except answer your questions. No analytics, no telemetry, no outbound call, no logging. But you reach it by talking to Claude, and that conversation is governed by Anthropic's terms.

What happens on day one? I have years of history somewhere else.

Honest and unimpressive. Health, momentum and velocity come from a trail of state changes that has to accumulate, so a new account says so: health comes back empty with a reason. Import two years of work and momentum still reads weak, because momentum asks what moved in the last seven days.

Can I read the source?

Not yet, publicly. The repository is not on GitHub — a real open item, not a policy — so "open source" is not a claim here. Ask, and I will send you the probe and its output.

What if you stop working on this?

Then it stops. No SLA, no support commitment, no escrow, no roadmap, and no company beyond one LLC with one person. If this went dark tomorrow the rows would still be there in SQL.

Why should I believe any of this?

Mostly because of what is missing. No logos, no testimonials, no rating, no uptime number, no compliance badge — none of them exist, and inventing them is a one-way door. Two of the load-bearing claims take ten seconds and a terminal to falsify.

10

If this is the thing you keep wishing existed

No signup, no funnel. One address, with a person on the end.

Tell me two things. What are you keeping in your head because no tool has earned it? And what did you abandon trying to keep it elsewhere? If StratOps would help, I will say how. Mostly it would not: people need a screen or a second seat.

jake@aifrontdesk.com

You will get a reply from a person. No list, no sequence, no newsletter.