Simple Agility is a small-business software stack that lets a company use Generative Artificial Intelligence (GenAI) in a handful of concrete capacities — Search Engine Optimization (SEO) first, proactive customer communication next, with more to follow. It is assembled from separately-developed pieces that already exist and share one data backbone. This hub is the entry point for any human or agent working on any piece of the stack: read it before deciding where a capability belongs.
Ownership principle (the one sentence to remember): every product in the stack optimizes itself by joining its own data against whatever the observability plane makes visible — external signals (search engines, edge analytics) and the product's own error and behavioral events, aggregated back to it. Products do not build their own metrics stores, log stores, alerting, or third-party pollers; the plane does not build product logic.
| You are about to… | Read | Why |
|---|---|---|
| Add logging, metrics, health, or events to any product | SimpleAgilityTelemetryContract | The envelope, the correlation_id rules, and the one mistake that damages the whole Loki instance |
| Build a table for analytics, usage, or "user did X" | SimpleAgilityObservabilityPlane § The rule that decides where data lives | Some such tables are correct and some are contract violations; the rule tells them apart |
| Poll a third-party API (search, analytics, anything) | SimpleAgilityObservabilityPlane § Requesting a new feed | Products never poll; the plane captures and ships |
| Build a ranking, recommendation, or optimization loop | SimpleAgilityFeedbackLoopPattern | Stage ownership plus three mandatory properties that are not optional |
| Add an alert, a runbook, or an operational action | SimpleAgilityOnCallAutomation | The alert→runbook binding convention and the scoped-surface requirement |
| Look for a capability the contracts describe | SimpleAgilityRoadmap | Several are not built; this says which, in what order, and what blocks them |
| Verify a product actually conforms | bin/simple-agility-conformance.sh (Wikantik repo) | Machine-checked, not a prose checklist |
| Role in the stack | Implemented by | Repository | Status |
|---|---|---|---|
| Observability plane — capture, retention, alerting, source-generic signals | jakemon | ~/source/jakemon | Live on docker2 |
| Knowledge and content — agentic wiki; software documentation, support content, SEO content; also the runbook store for on-call | Wikantik | ~/source/jspwiki | Live (wiki.wikantik.com, docker1); more than one instance expected |
| Customer communication — blog/newsletter for proactive customer contact | Roller (Apache Roller 6.2 fork) | see RollerBlogPlatform | In development |
| Agent runtime — scheduling, ledgers, circuit breakers, blast-radius limits and agent identities for the agents that close the loops (SEO actuator, on-call agent) | not yet built — a stack-level component, deliberately not part of jakemon | — | Planned (roadmap phase 4) |
jakemon, Wikantik and Roller are sub-concepts of the Simple Agility domain: each has its own hub for its internals (JakemonHub, WikantikPlatformHub, RollerBlogPlatform), and each of those pages carries a "part of the Simple Agility stack" callout back here. The hierarchy is expressed by links, not by cluster nesting — the existing jakemon, wikantik-development and web-properties clusters stay where they are; a cluster restructure is available later if the company framing solidifies.
/metrics endpoint, the small evolvable log envelope with correlation_id, events-as-log-lines, and the health endpoint. Read this before writing a line of logging in a new product.service / instance / site_host labels distinguish products, deployments and web properties. Multi-tenant observability (shared Prometheus/Loki with per-tenant isolation) is not designed and no product should pre-empt it by putting tenant identifiers into its telemetry.instance label because there the plane is genuinely shared. The two rules pull in opposite directions on purpose — the plane page explains why.visibility/opportunities.py); as products mature that logic tends to move into the product that has the domain context, while the capture stays in the plane.CLAUDE.md and jakemon CLAUDE.md point here.