The first need seemed minimal: show how much time had passed since the last incident. But an isolated number did not explain what had happened, whether the problem was still open or which part of the environment was affected.
The product ended up becoming a small operations center: continuity, an incident log, metrics and the health of several services on a single surface.
The architecture that made it possible
Layer
Technology
Responsibility
Interface
Astro + Tailwind CSS
Fast, responsive static site that is easy to deploy
Domain
TypeScript
Continuity calculation, states, normalization and signal merging
Local fallback
localStorage
Keep actions when the remote layer does not respond
Integration
n8n
Incident persistence and running checks
Persistence
Data Tables
Syncing history across devices
Delivery
Static hosting with security policies
Publishing the frontend with no embedded secrets
The central decision was to keep the browser as the consumer of a narrow contract. Authenticated access and credentials stayed on the integration layer’s side, which only published normalized states.
From a timestamp to a lifecycle
An incident is not just a reset date. It has a real start, a reporting time, a status, a closure and an optional resolution note.
Modeling it that way solved cases the simple counter was hiding:
an open incident stops the continuity count and avoids a false “all good”;
several incidents can overlap;
the new healthy period starts after the last effective closure;
old records can still be read without rewriting history;
a connectivity outage does not force you to lose the local creation or closure.
The interface went from celebrating a number to honestly representing the operational state.
Progressive health, not a monolithic wait
Checks were split into groups and the frontend requested them in parallel. Each partial response is merged with the existing state without erasing services that branch did not observe.
This let a known outage show up as soon as it was detected, even while other sources were still slow. It also required explicit rules to avoid races, stale data and misleading transient states.
Semantics before color
Not every successful HTTP response proves the service is healthy. A frontend can return its generic HTML for a nonexistent route and produce a false green.
That is why the dashboard distinguishes:
operational: the expected signal responded and its content is valid;
degraded: the process is alive but cannot serve correctly yet;
down: there is concrete evidence of unavailability;
unverifiable: there was a response, but it does not prove the condition being checked;
no data or checking: there is not yet a sufficient reading.
Separating liveness from readiness avoided alerting every normal restart as an outage. Validating the body as well as the HTTP code avoided green checks that did not actually measure anything.
Security and resilience as part of the product
Hardening was not left for the end:
the frontend never receives provider credentials;
a strict CSP limits unexpected execution;
dependencies are audited and updated;
accepted endpoints are normalized and restricted;
partial states keep the last valid observation;
animations respect reduced-motion preferences;
the scrolling area can be navigated with the keyboard.
Workflows were also treated as code: their nodes, contracts and paths were checked to catch generation errors, duplicated groups and crossed responses.
Benefits
a shared reading of continuity, incidents and dependencies;
earlier detection thanks to progressive responses;
fewer false positives and false greens;
continued use during temporary integration failures;
a clear boundary between public visualization and authenticated access;
verifiable behavior even when the automation lives outside the traditional repository.
The transferable lesson
Useful observability is not about adding checks. It is about defining what each signal proves, what it cannot prove and how incomplete results are combined without lying to the operator.
The counter remained the central image, but the real product became the continuity model behind it.
Case based on a real implementation. Names, domains, endpoints, quantities, internal providers and identifiable operational data have been removed.
Agent Development Environment: an environment built to run, organize and supervise development agents.
Agent
A system that combines a model, instructions and tools to carry out tasks within a defined scope. Its ability to act depends on the harness, environment and permissions.
Agent-to-agent
Delegation between full agents that work in separate conversations and environments, exchange instructions or files and return results.
Amp
Agentic development environment that brings models, threads, remote machines, Git and coordination together on a single platform.
Benchmark
An evaluation with defined tasks, conditions and scoring rules. It compares results within that protocol; a score does not demonstrate the same performance in your project.
BYOK
Bring Your Own Key: a setup where you supply your own provider API key. Usage follows that account and integration’s terms; it is not the same as using a chat subscription.
Choice
A Jev decision primitive that chooses among application-defined options and returns an option with a probability distribution.
Claude Code
Anthropic’s coding agent, combining project context and tools. Instructions, skills, hooks and subagents can specialize its work, depending on configuration.
CLI
Command-line interface. Lets you work with tools and agents from a terminal, with direct access to the project and its environment.
Cline
A coding agent that can work interactively or through its CLI without an interactive interface. Automation requires a bounded goal, authorized changes and output validation.
Codex CLI
The Codex terminal interface for working on a repository with an agent. The sandbox limits execution, while the approval policy determines which actions require authorization.
Context window
The token capacity a model can handle in an interaction, depending on its configuration. The advertised maximum, actual context usage and information-retrieval quality are different things.
Control plane
The layer used to organize and supervise agents, sessions and execution environments. It coordinates work without being the model or the machine running it.
Cost per completed task
The cost of work that meets its acceptance criteria, including failed attempts, tools and review. It evaluates productivity beyond price per token or session.
Cost per session
Observed spending in an agent session. Comparisons must fix the harness, turn-count range and aggregation; a cheap session may have failed and is not the same as a completed task.
CRM
A system that centralizes relationships, data and commercial processes. In these cases it also acts as the operational source of truth.
Curated memory
A selection of decisions, conventions and discoveries useful to later sessions. Each memory retains context and must be checked against the current state before use.
Daemon
A process that keeps running in the background and sustains services, sessions or tasks even when an interface is closed.
Decision gate
A checkpoint that stops progress until a decision is resolved or a condition is met. Confidence in an answer does not replace required authorization.
DESIGN.md
A portable file that encodes colors, typography, composition and visual rules so different agents produce consistent artifacts.
Engram
A local, persistent memory system for agents that lets them save and search project observations through a CLI, MCP and other interfaces.
Gentle AI
A coding-agent configurator that prepares integrations, memory, skills and workflow or review components to tailor the environment’s governance.
Grant
A Tailscale rule that grants network or application capabilities between defined sources and destinations. Permissions add together; one rule does not subtract access granted by another.
Handoff
A transfer of context and responsibility to another agent or person: goal, changes, tests, limits, open issues and the result’s location. It lets work continue without reconstructing it from scratch.
Harness
The system that manages the agent loop: preparing context, exposing tools, executing calls, collecting results and applying controls. A CLI is an interface to it, not a synonym.
Healthcheck
A service health check. It must validate a signal that represents the expected capability, rather than merely receiving an HTTP response.
Hermes
An operational agent that can live on a server, connect to channels and integrations and run tasks with continuity.
Jev
A TypeSafe model for structured decisions: it takes text or state and returns typed answers using options and criteria defined by the application.
Latency
Waiting time between a request and a response milestone. Specify whether it ends at the first token or the complete response, and under which conditions and percentile.
Least privilege
The principle of granting only the permissions, credentials and network access a task requires. It reduces the impact of mistakes and prevents a broad request from becoming unlimited authority.
Liveness
A signal that checks whether a process is alive. On its own, it does not establish that the service can handle traffic correctly.
MagicDNS
A Tailscale feature that makes tailnet devices discoverable by name. It helps locate a destination but does not grant access.
MCP
Model Context Protocol: an open protocol connecting AI applications to tools and data sources. A connection does not replace permissions or approval for actions.
Median
A measure that divides an ordered dataset into two halves. It describes the center but does not show spread or the cost of extreme sessions. It is not the same as the mean.
Model
A trained component that processes inputs and generates outputs, including proposed tool calls. An agent adds instructions, context, execution and controls around that model.
n8n
A visual automation platform used to coordinate integrations, webhooks and steps across different systems.
Negative test
A check that a forbidden action actually fails. For networking, test against an available service so an outage is not mistaken for an effective restriction.
Noul
A Jev primitive that estimates, between 0 and 1, the probability that a defined condition holds.
Observability
Evidence for understanding what a system is doing: state, output, events and health signals. It distinguishes active work, waiting, blockage and failure instead of relying on an open interface.
ODD
Organic Driven Development: Gentle AI’s approach to exploring, implementing authorized changes, verifying results and leaving recoverable references in proportion to the work’s size.
OpenCode
An open coding-agent tool with configurable models and providers. Catalog flexibility requires checking compatibility, permissions and results for each task.
OpenDesign
A local-first workspace that combines coding agents, skills, templates and DESIGN.md systems to produce visual artifacts as real files.
OpenRouter
A platform that provides access to models from different providers through a common API. Its rankings describe the data included in each view, not the entire market or the quality of every task.
Oracle
A second-opinion role inside Amp, used by the main agent to consult on reasoning, planning or hard decisions.
Orb
A fresh, isolated remote machine where an Amp agent can work with code, tools and services even while the user’s computer is off.
Orca
An ADE and control plane for organizing agents, repositories, workspaces, terminals and hosts without replacing the model.
Orchestration
Coordination of agents through a shared goal, tasks, dependencies, ownership and completion evidence. Parallel sessions alone do not establish who decides or integrates.
Pareto frontier
Options for which no other is at least as good on every chosen dimension and better on at least one, such as cost and score. The frontier changes when dimensions or candidates change.
Preflight
A pre-deployment check that runs the actual production command in a test environment and verifies that the service starts and responds.
Process tree
An organization of business workflows and the functions in each branch. It bounds analysis and defines verifiable evidence for a unit of work.
Provider
A service that receives requests and runs a model. It may differ from the model’s author; the endpoint, limits and performance are part of the configuration being compared.
Read-only
Access that allows inspection without changing the source system. A real boundary is enforced through credentials, tools and architecture, not just an instruction to the agent.
Readiness
A signal that checks whether a service is ready to handle traffic. It can fail even while the process remains alive.
Reasoning effort
A control for a model’s deliberation effort, depending on provider and harness options. It can increase time and usage; it does not replace context, tools or verification.
Routing
Selection of the model or provider that will handle a request, using rules or a router. It changes cost, availability and behavior, so it should be recorded when comparing results.
Runner
A self-owned or managed machine that Amp can use as its execution environment instead of an Orb from its own infrastructure.
Sandbox
An environment with technical limits on resources such as files, processes or network access. It reduces what execution can affect; protection depends on the actual configured boundaries.
Score
A Jev primitive that scores a case on a configured scale. Its raw value should not automatically be interpreted as a number between 0 and 1.
Share of spend
The percentage of observed spending attributable to a model or task in a view. It combines price and usage; it is not token share, user count or quality.
Skill
A reusable package of instructions and resources for a specialized task. It helps repeat a working method; it does not grant permissions or guarantee a correct result.
SSH
A secure protocol for accessing and running work on another machine or environment, such as WSL or a remote server.
Subagent
An agent delegated part of a task by another agent, with its own context. A separate conversation does not necessarily mean independent machines, files or permissions.
Tailnet
A private Tailscale network that groups authenticated identities and devices. Membership does not replace each service’s own permissions.
Tailscale
A tool that connects users and devices in an identity-based private network, with encrypted traffic and explicit access rules.
Tailscale Funnel
A feature that exposes a local service to the public internet. It should be used with a deliberate public audience, application controls and a defined exposure period.
Tailscale Serve
A feature that shares a local service within the tailnet, subject to its access rules. Useful for previews and internal dashboards.
Tailscale SSH
A feature that manages SSH authentication and authorization on supported nodes through separate policy rules. Allowing TCP 22 on the tailnet is not enough to configure it.
The Dial
Amp’s selector for how much effort a task needs, through the low, medium, high and ultra modes, regardless of which model sits behind it.
Thread
A conversation that retains a task’s context and results. In Amp it can coordinate work in its own environment; a persistent thread does not guarantee that the machine keeps running.
Throughput
Generation speed, usually measured in tokens per second. Compare it under equivalent conditions; it does not by itself include an agent’s tool, turn and retry time.
Token
A unit used by a model to represent and process content. It is not always a word: segmentation depends on the tokenizer. More usage tokens do not mean more users or more completed tasks.
Tool calling
A mechanism through which a model requests a tool execution with arguments. The surrounding system performs it and may require permissions; counting calls does not establish correctness.
TTFT
Time to First Token: elapsed time from sending a request to receiving the first token. It describes the initial wait, not the time to finish the full response or task.
Usage share
The portion of a total attributable to a model or author within a population and period. It can be measured in tokens or requests; the denominator is essential to interpreting the percentage.
WireGuard
The protocol Tailscale uses to encrypt traffic between devices. Encryption is maintained over both direct connections and relays.
Worker
An executing agent assigned a bounded task. It receives scope, permissions and completion criteria, then returns verifiable results to the coordinator.
Workspace
A visible work front that groups tabs, terminals, editors and a task; on its own it is not the same as Git isolation.
Worktree
An additional working directory of a Git repository, usually on another branch. It separates files for parallel tasks but shares repository data and is not a security sandbox.
WSL
Windows Subsystem for Linux: a Linux environment built into Windows where repositories, runtimes and CLI agents can live.