Atlas recap · build proposal

2026-10-16

SEO ideas inside Fimo's agents and routines

Follow-up to 8 ideas to make our SEO agents better, rebuilt on today's develop: the SEO, GEO, Content and Quality agents, their routines and their memory. It answers the team's questions and shows where each idea fits, which routine it becomes, and what blocks it.

Base origin/develop · cddcddd9ee · Oct 16 Sources templates.ts · agents catalog.ts · fimo-agents skill · memory prompt Depth Normal · 10 minutes Proposal

Checked in code

What Fimo has today

Agents are teammates with one job each: a chat, routines that run alone, their own memory, and a skill that holds the know-how.

Short answer

Yes, we have memory: three levels of notes plus data files that scripts save and compare. No, we do not track AI answers or competitors yet: those routines are in the catalog as "Needs data". The model to build them already exists. Most of the ideas become routines on agents we already ship, not new agents.

The 4 agents

SEO and GEO start with every project; Content and Quality open from the + menu

Each routine checks the site with scripts first and calls the model only when there is something to fix or ask, so a quiet day costs almost nothing. Fixes wait on the Branch until someone publishes. Blue routines ship today. Orange ones are in the catalog as "Needs data".

SEO · ranks on Google

Technical · Broken links · Meta tagsDaily
Image SEO · Hreflang · MonitoringDaily
Internal linkingWeekly
Keywords · Competing pages · Keyword researchNeeds data

GEO · quoted by AI assistants

AI readiness · Structured dataDaily
AI citation optimizationWeekly
AI visibilityNeeds data

Content · keeps pages true

Refresh · TranslationWeekly
LifecycleMonthly
Writing · CompetitorsNeeds data

Quality · works for every visitor

Accessibility · MobileWeekly
BrandNeeds guidelines

Q · Don't we have memory already?

Yes: three levels of notes, and data files for exact numbers

"Each run starts from zero" in the first recap was wrong. Every run loads its notes, and what one routine learns, the others can read. A person's answer is saved so the routine never asks twice. Exact data, such as a crawl snapshot, goes to a data file that a script saves and reloads without the model reading it.

flowchart TB
  P[Project MEMORY.md<br/>+ topic files<br/>rules for every chat]
  P --> A[agents/seo/MEMORY.md<br/>shared by SEO chat and routines]
  A --> R[routines/seo-monitoring/NOTES.md<br/>answers, values to compare]
  R -.-> D[(snapshot.txt<br/>data file · script only<br/>1 MB each · 10 MB per project)]
SEO monitoring already works like this: it saves a site snapshot each run and compares the next run against it.

When routines wake

Schedules today; events exist, but templates cannot ship them yet

A routine can already wake on a site event (an edit, a publish, a merge) when someone writes the trigger in plain words. The default templates still use only schedules: FIMO-2809 adds stored event rules to templates. The catalog also lists three "when we notice" triggers that nothing fires yet.

ShipsSchedule

Daily, weekly or monthly cron in every template.

ShipsSite events

Content, code, assets, locales, schema, forms, publish, merge, routine finished. Grouped per minute, once per chain, ordered by a planner.

NextEvents in templates

FIMO-2809. Then default routines can wake on an edit instead of every day.

MissingTraffic drops · a competitor changes · an AI cites a competitor

In the catalog as triggers. No data source fires them.

Checked in code

What is waiting

Seven routines in the catalog say "Needs data". Two of the data sources are already in Fimo.

Finding

The catalog says AI visibility needs "Profound or Peec" and keyword research needs "Semrush". But agents can already call Semrush, Ahrefs and ChatGPT/Perplexity/Gemini answers through the paid data tools (dataCall). So two blockers are product decisions, not integrations. Only Search Console is truly missing.

Unlock map

Search Console unlocks the most; the data tools unlock the rest now

Each arrow goes from a data source to the routines or triggers it unblocks. Search Console is free for the site owner but needs a Google login and a new integration. The data tools cost credits per call, charged to the run.

flowchart LR
  GSC[Search Console<br/>not built · free]:::miss
  DT[Data tools<br/>Semrush · Ahrefs · AI answers<br/>already in Fimo]:::have
  BG[Brand guidelines<br/>from the team]:::miss
  GSC --> K[SEO · Keywords<br/>page 2 → 1]
  GSC --> C[SEO · Competing pages]
  GSC --> T[Trigger: traffic drops<br/>wakes 6 routines]
  DT --> V[GEO · AI visibility]
  DT --> KR[SEO · Keyword research]
  DT --> CO[Content · Competitors]
  KR --> W[Content · Writing<br/>needs briefs]
  BG --> B[Quality · Brand]
  classDef have fill:#123a2c,stroke:#3fbf86,color:#e8edf3
  classDef miss fill:#3a2412,stroke:#f0a35e,color:#e8edf3
Green: available today. Orange: must be built or provided.

The rule that shapes everything

"An agent that only reports is a dashboard, not an agent"

The fimo-agents skill says a routine must fix or decide something, and "most runs should end with no message at all". So "track 25 AI questions" or "watch competitors" cannot be routines that only send charts. Each one must end in a fix (auto), a decision (suggest), or silence.

Same data, two kinds of routineOnly the right side fits Fimo

Dashboard · rejected

1ChatGPT cited you in 12/25
2Sanity added 4 pages this week
3(person: "so what do I do?")

Routine · fits

1ChatGPT says your plan is $29.
2It reads /faq, which still says $29.
3Change it to $39? [Yes] [No]

Proposal

The ideas as routines

Each idea lands on an agent that already exists, with an owner, a trigger, a memory file and its auto / suggest classes.

Recommendation

No new agents. AI answers become the GEO agent's AI visibility routine. Competitor watching becomes a signal that wakes existing routines, not a report. Page 2 → 1 is the SEO agent's Keywords routine once Search Console is connected. Fact check extends Content Refresh.

GEO · AI visibility · the 25 questions

Same questions every week, saved answers, and a fix when an answer is wrong

On its first run, the routine proposes about 25 questions a buyer asks (one decision for the person). It saves them in its NOTES.md. Each week a script asks ChatGPT, Perplexity and Gemini through the data tools and saves the answers as a data file. The model looks only at what changed since last week.

flowchart LR
  S([Weekly]) --> Ask[Script asks 25 questions<br/>× 3 assistants]
  Ask --> Cmp[Compare with<br/>answers.json data file]
  Cmp -->|nothing changed| Q[Quiet]
  Cmp -->|wrong fact about us| F{Source is<br/>our page?}
  F -->|yes| Sug[suggest: fix the page]
  F -->|no| N[note in report]
  Cmp -->|competitor cited, not us| Ev[Fire trigger<br/>AI cites a competitor]
  Ev --> Cit[GEO · Citation<br/>rewrites the opening]
The routine finds the problem; Citation and Content fix it. One owner per finding.
MemoryFits today
NOTES.md
The 25 questions, the expected facts ("plan: $39")
answers.json
Data file · last answers + cited sources
cost
225 asks a week · well under $1 a week at catalog prices

Content · Competitors · what routine is it?

A quiet watcher that wakes the routines that can act

Today's catalog entry asks the person for "up to five competitor addresses" and sends "a weekly summary". Both go against the vision. Instead, competitors are found from Google's top 10 for our searches (Ahrefs via the data tools), and a change fires the a competitor changes trigger. The person only sees a decision from Refresh, Writing or Citation.

flowchart LR
  W([Weekly]) --> Snap[Script: competitor sitemaps<br/>+ top 10 for our searches]
  Snap --> Diff[Diff with<br/>competitors.json]
  Diff -->|no change| Q[Quiet · no model call]
  Diff -->|change| Tr[Trigger:<br/>a competitor changes]
  Tr --> R1[Content · Refresh<br/>our comparison page is outdated]
  Tr --> R2[Content · Writing<br/>new comparison page brief]
  Tr --> R3[SEO · Keywords<br/>they passed us on a search]
Uses what already ships: data files, event triggers, once per chain, and the planner that orders routines.
OpinionFimo decides who competes

From Google, not typed in. The person can remove one, and the answer is saved so the routine never asks again.

OpinionFimo decides what matters

The ranking know-how lives in the skills: what a winning page has (direct answer, facts, freshness, structure).

PersonThe person decides the changes

Prices and claims about competitors are always suggest.

SEO · Keywords · page 2 → 1

Already in the catalog and in the SEO agent's description: it needs Search Console

The SEO template already says: "Once Search Console is connected, you also work the searches each page almost ranks for." The routine takes pages in positions 8–20, compares them with the top 3, and proposes the missing section. A title-only rewrite for a page with few clicks is the Meta tags routine's job, on the traffic trigger.

EXAMPLE · /blog/nextjs-cms · position 12 for "headless cms nextjs"suggest · one decision

Top 3 results have

1Code example         3/3  ✓ we have
2Markdown vs CMS      3/3  ✗ missing
3Deploy steps         2/3  ✗ missing

Decision for the person

1Add a "Markdown or a CMS?" section
2(draft on the Branch, 180 words)
3Recommended. [Add] [Skip]

Content · Refresh · fact check

Refresh already catches dates; give it the team's facts to catch prices too

Refresh finds past years, expired offers and retired product names. Add one project memory topic file, facts.md, with prices, numbers and claims. Then Refresh can also find "$29" on a page when the fact is "$39". Prices are team-owned, so it is always suggest with the exact words.

Project memory · facts.mdNew topic file
Pro plan
$39 / month (since 2026-09)
Customers
2,000+
written by
Any chat, when a person states a fact
read by
Refresh, AI visibility, Writing

Experiments · how agents grow

Each change records its baseline; the same routine judges it four weeks later

This is the vision's "Later" step: acting on traffic, not only on what the page says. It needs Search Console numbers. The routine that made a change writes the baseline in its NOTES.md and judges it after four weeks. A win becomes a lesson in the agent's MEMORY.md, so the agent asks less over time.

Example: verdict and lessonIllustration · not real data

Proposal

Order and decisions

Start with what needs no integration, then build Search Console.

Plan

Now: AI visibility (GEO) and the facts file (Content Refresh). Both use only what ships. Next: Search Console, which unlocks Keywords, Competing pages and the traffic trigger. Then: competitor signals and Writing, which need briefs. Each routine change also updates templates.ts, the skill, catalog.ts, the docs and a live E2E on Field Notes.

Order

Three steps, each one unlocks the next

Each box is one routine change. The effort label counts the files the fimo-agents skill says must change together (template, skill, catalog, docs, E2E), plus any new integration. If we skip step 1, the team waits weeks for Search Console before any customer sees a new result.

flowchart LR
  subgraph N[Now · no integration]
    direction TB
    V[GEO · AI visibility] --> Fa[Content · facts.md in Refresh]
  end
  subgraph X[Next · Search Console]
    direction TB
    G[Integration + traffic trigger] --> K[SEO · Keywords] --> Cp[SEO · Competing pages]
  end
  subgraph L[Then]
    direction TB
    Co[Competitor signal] --> KR[Keyword research] --> W[Content · Writing]
  end
  N --> X --> L
Experiments come with step 2, because they need Search Console numbers.
SmallGEO · AI visibility

Routine + script + data file. Change the catalog's "Needs Profound or Peec" to built.

SmallContent · facts.md

A topic file and a few lines in the fimo-content skill.

MediumSearch Console

OAuth integration, a data source for scripts, the traffic trigger.

MediumCompetitor signal

New trigger source in the event catalog, plus a script and data file.

Cost

GEO starts with every project, so AI visibility runs for free projects too

The skill asks for an estimate before adding a routine to a default agent. AI visibility is weekly, script-first, and calls the model only when an answer changes. The data calls are the fixed cost. Free projects could get a smaller question list or none.

AI visibility · per projectEstimate
runs
About 4 a month
data calls
225 asks a week · cloro $0.008 per 10 results · under $1 a week
model
Only when an answer changed · other routines measure $0.10–0.56 a run

For the team

Four decisions before we start

Each item gives our recommendation. A different answer changes the scope of the first step: for example, choosing Profound adds a paid integration before AI visibility can ship. So we should decide these before anyone starts building.

DecideAI answers: data tools or Profound / Peec?

Recommend the data tools we already have. Revisit if quality is poor.

DecideCompetitors: a routine or a signal?

Recommend a signal that wakes Refresh, Writing and Keywords. No weekly summary.

DecideWho picks the 25 questions?

Recommend: the routine proposes them once, the person edits, the list stays fixed.

DecideAI visibility on free projects?

Recommend a short list (5 questions) on Free, the full list on paid plans.

Source peek

Open at head
Path copied