One agent per app

It watches how your team works. Then it fixes the app.

Every Generic SaaS ships with its own agent. It specialises in that one app, learns from how people actually use it, and proposes changes — with evidence and a diff. Nothing ships without a human saying yes.

LIVE · agent/{{ heroApp }}.gsaas{{ heroWindow }}
What humans did{{ heroUsers }}
{{ e.t }}{{ e.text }}{{ e.n }}
What the agent proposedrisk: {{ heroRisk }}
{{ heroProposal }}

{{ heroEvidence }}

diff: {{ heroDiff }} evals: 48/48 never-touch: clear
{{ heroStatus }}
The loop

Four steps.
Runs continuously.
Never skips one.

The agent is not a chatbot bolted onto the app. It's a loop with a harness around it: it can only move forward through these steps, and the evals and the approval seat sit between "propose" and "ship".

01 — OBSERVE
Event-driven behaviour

Clicks, paths, abandoned forms, exports, searches, time-on-task, incidents. Never the text people type, never PII. Everything it reads is journaled.

02 — LEARN
Patterns into memory

It writes what it learns to its own branch of the Knowledge Graph — plain Open Knowledge Format, with provenance. Merged to main only after review.

03 — PROPOSE
Evidence, diff, risk

A proposal is a change with the numbers behind it, a code diff plus before/after screens, a risk level, and the eval results. It stays open until someone decides.

04 — SHIP
Staged, watched, reversible

Approved changes roll out 1% → 10% → 100%. Error-budget breach or a thumbs-down threshold rolls it back automatically. Then it observes again.

What it watches

Eight signals. Zero content.

The agent sees the shape of work, not the work itself. It knows a form was abandoned at field four; it never sees what was in fields one to three.

{{ s.name }} {{ s.what }}
■Events only — never PII, never the content of a field or a page ■Everything the agent reads is a line in the Audit journal ■Runs on local models through the Inference Gateway — nothing leaves your network
CONSOLE · agent/{{ consoleApp }}.gsaas{{ consoleMode }}
{{ c.tag }}{{ c.time }}
{{ c.text }}
Anatomy of a proposal

Every change arrives with its receipts.

This is what lands in the app owner's inbox. Click the tabs.

PROPOSAL #212 · shifts.gsaasRISK: LOWopen · 2 days
Make "duplicate last week" the default when creating a schedule
proposed by agent/shifts · generated 2026-09-11 · specialises in this app since day 0
OBSERVED · 6 WEEKS14 / 14store managers opened last week's schedule, copied it, then edited — every Sunday.
TIME-ON-TASK11 minmedian from "new week" to first edit. Expected after change: under 1 minute.
SUPPORT3tickets in the last month asking "how do I copy last week".
SOURCESjournal: sessions/shifts/2026-w32..w37
tickets: helpdesk #4471, #4502, #4519
graph: stores/*.md (opening hours)
apps/shifts/src/week/NewWeek.tsx
@@ -12,7 +12,9 @@
  const [mode, setMode] = useState(
-    'blank'
+    store.hasPreviousWeek ? 'duplicate' : 'blank'
  );
+ // agent/shifts #212 — 14/14 managers duplicate first
+ track('week.new', { mode });
  return (
BEFORE
New week
● Blank
○ Duplicate last week
AFTER
New week
● Duplicate last week
○ Blank
LOWThis proposalChanges a default. Reversible by the user in one click. Touches no data, no rules, no permissions. Eligible for auto-ship if the app owner opts in.
MEDIUMAlways needs the app ownerNew views, new fields, changed workflows, notification timing. Staged rollout mandatory.
HIGHApp owner + securityAnything touching permissions, integrations, or money. Two approvals, 1% canary held 48 hours.
✓Regression suite — 41 flows replayed from real sessions (anonymised)41 / 41
✓Never-touch check — LabourRule, contract_hours, payroll export untouchedclear
✓Accessibility — keyboard order, contrast, labels on the changed screen4 / 4
✓Performance budget — publish p95 under 2s1.4s
✓Policy-as-code — no new egress, no new permissionspass
STAGE 11%1 store · 2 hours
STAGE 210%2 stores · 1 day
STAGE 3100%all 14 stores
↩Auto-rollback if the error budget is breached at any stage ↩Auto-rollback if thumbs-down passes 20% of users who saw the change ↩Manual rollback available for 30 days, keeps data and audit trail ✓Users see a one-line toast on first use; a weekly digest lists every change with 👍 / 👎
Approval modes

You decide how much rope it gets. Per app.

Start tight. Loosen when the changelog earns it. The journal records which mode was on for every change ever shipped.

{{ modeEffect }}
Who does what

Five humans around every agent.

App ownerApproves, rejects, annotates. Picks the mode. Usually the person who ran the old tool.
Platform ownerSets the never-touch list and the ceiling on modes across all apps. One person, part-time.
Team leadAnnotates proposals with context the events can't show, and files requests the agent turns into proposals.
SecuritySecond approval on anything risk-high. Sees the same evidence and diff, plus the policy report.
End users👍 / 👎 on every change — in a toast the first time they meet it, and in a weekly digest. Enough 👎 rolls it back.
Memory & sharing

Each agent knows one app deeply. Together they know the company.

An agent's memory is a branch of the shared Knowledge Graph — git-based, plain Open Knowledge Format. Facts it learns about the company (a store's hours, who approves what) merge to main and every other agent sees them. Features it ships stay its own — but when a pattern would help a sibling app, it can propose the same change there, with its own evidence.

  • ■Facts travel through the graph; features travel as proposals
  • ■Conflicting facts block the merge and go to a human — one truth per concept
  • ■Every memory has a commit, an author, and a trust tier (unverified → human-reviewed)
How the graph works →
LIVE · agents/share
agent/{{ a.name }}
graph/main{{ shareCommits }} commits · 1 truth per concept
{{ l.kind }}{{ l.text }}
90 days of shifts.gsaas

Mostly small. Occasionally not.

A real changelog is boring, and that's the point: dozens of five-minute annoyances removed, and every few weeks something the vendor would have put on a roadmap for next year.

23proposed
17shipped
1rolled back
{{ c.day }} {{ c.title }}{{ c.note }} {{ c.tag }}
Straight answers

What people ask about the agents.

{{ f.a }}

See what an agent proposed last week and the evidence it brought.

We walk through a real proposal inbox from an agentic loop: observe, propose, approve, roll out. 45 minutes.