Agents

Agentic systems, on record.

This is where I build and document agentic AI — governed, human-gated, and in the open. A growing technical archive: the principles that outlive any project, the registry of what runs, and the architecture behind each entry.

Principles

Rules before robots.

01 · authority Human-gated by default

Agents propose; a person approves anything visitor-facing. No exceptions earn themselves quietly.

02 · access Least-privilege tools

Every tool is granted per task, never globally — an agent gets a role, a goal, and nothing more.

03 · audit Every action attributable

Runs are logged with timestamp, inputs, outputs, and model. Failures surface too — errors are data.

Registry · 2 in progress · slots open

The projects

AG-001

The Site Crew (CrewAI)

Four bounded maintenance agents — analyst, qualifier, researcher, reviewer — keeping this site honest on a schedule. Expanded in full below.

in build
AG-002

The Editorial Pipeline (CrewAI)

Curated sources in, published Signals and a recurring Brief out — nothing ships without a reviewed pull request. Architecture complete; build follows AG-001.

designed
AG-003

Undisclosed

Scoped once AG-001 ships. No vapourware here.

slot open
AG-001 · expanded entry

From schedule to dashboard — no server, no secrets in the browser

The architecture is published before the system itself: the design is part of the demonstration. Status below switches from bundled sample to live telemetry at first deployment.

01 · Trigger

GitHub Actions — scheduled run

A cron workflow starts run_agents.py on a schedule (or on demand). API keys live in GitHub Secrets — never in the repository.

▼ runs
02 · Crew

CrewAI — four agents, sequential process

Open-source CrewAI (local Python, not the hosted platform). Each agent has a role, goal, tools, and a bounded task; results are written as JSON with a timestamp and status per agent.

▼ posts results (HMAC-signed webhook)
03 · Edge

Cloudflare Worker — KV storage

The Worker validates the webhook, stores the JSON in KV, and serves it read-only at /api/agents with rate limiting and CORS locked to this site.

▼ fetch()
04 · Here

Dashboard & this page

The frontend renders status and latest outputs. Until the pipeline’s first deployment it reads the bundled sample file — labelled as such, never pretending to be live.

AG-001 · the crew

Four roles, bounded tasks

Portfolio Analyst

idle

Reviews the live site against the CV and recent work; flags stale sections, missing proof points, and content gaps.

Goal

Keep every page current enough that nothing on it needs an apology.

Tools · cadence

Site reader · content checklist — weekly

Latest output
{ "status": "awaiting first scheduled run" }

Lead Qualifier

idle

Classifies contact-form submissions by topic, seniority, and urgency, and drafts a one-paragraph brief per lead.

Goal

No interesting conversation waits longer than it should.

Tools · cadence

Classification rubric · processes only text explicitly submitted via the form — on submission

Latest output
{ "status": "awaiting first scheduled run" }

Blog Researcher

idle

Scans AI-governance and transformation sources; proposes three outline candidates with linked references.

Goal

A standing shortlist of posts worth writing — with receipts.

Tools · cadence

Web search · source ranking — weekly

Latest output
{ "status": "awaiting first scheduled run" }

Code Reviewer

idle

Audits this repository for quality and accessibility regressions; files prioritised findings, never silent fixes.

Goal

The site that demonstrates governed AI should itself survive a review.

Tools · cadence

Repo reader · WCAG checklist — on push

Latest output
{ "status": "awaiting first scheduled run" }

status source: bundled sample — live after the pipeline’s first deployment

The rules they run under

Governed by design, not by disclaimer

Bounded authority
  • Read-mostly: agents propose; they do not publish or merge
  • No tool an agent didn’t earn: each tool is granted per task, not globally
  • Human in the loop for anything visitor-facing
Traceability
  • Every run logged: timestamp, inputs, outputs, model
  • Outputs versioned as JSON artefacts in the pipeline
  • Failures surface on the dashboard — errors are data too
Privacy
  • No visitor tracking feeds any agent
  • Lead texts are processed only when explicitly submitted
  • Secrets server-side: GitHub Secrets + Worker secrets, never the browser