Agents

The crew, at work.

Four CrewAI agents maintain parts of this site on a schedule — reviewed, logged, and governed like any other system I ship. This page is the argument from the About narrative made concrete: agentic AI with the controls designed in.

Live architecture in progress

Agentic systems, with the controls designed in

This capability is currently in development. The finished system will show agentic AI doing governed work — structured analysis, orchestration, and decision-ready outputs in complex environments — with every run logged and every permission earned. What you see below is the architecture it will run on, published before the system itself: the design is part of the demonstration.

  • Four bounded agents — analyst, qualifier, researcher, reviewer — each with a role, a goal, and nothing more
  • Scheduled, not always-on — runs triggered by GitHub Actions, results served from the edge
  • Status becomes live here — the cards below will switch from sample to telemetry at first deployment
build order: visible site → serverless edge → agent crew → live status
The pipeline

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

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.

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