M Made Scientific MADE OS · 01 · Agent Fleet

Agent Fleet

An agent is a skill plus an operational wrapper: a trigger, a fleet, an owner, a schedule and a kill-switch. Forty-nine are registered. Twelve are verifiably running right now. Four claim to be running and are not — those are the only red rows on this page, and they are the reason it exists.

Swept 2026-08-04 — root + claude-user crontabs, 27 containers, /var/log/made-*, and os_agents.
Verified — a cron, timer or container was found Runs with a limit — working, caveat attached Believed live, isn't — urgent Not built yet — roadmap, fine Deep dive available: underlined name
Verified running
12
cron / container found
Live but unscheduled
4
R-01 … R-04
Planned
9
p1, next up
Draft
23
p2 / p3, catalogued
Fleets
9
incl. 1 client-specific
Harnesses in use
8
see Method
Tier 1 · urgent

Believed live. Is not.

Four findings. In each case a system of record says live and the machine disagrees. None of these is a missing feature — they are all integrity problems in something already being counted as working, which is why they outrank every item in the roadmap below.

None of them is expensive to fix. Three are a status field or a rename. That is precisely what makes leaving them alone indefensible.

#AgentRegistry saysMachine saysConsequenceFix
R-01 FORGE live claude-code-loop, cron Last output 2026-06-11. No cron under any user, no timer, no container, no logs dir. The app's overnight code review has been off for ~8 weeks while reading as on. Add the cron, or set paused.
R-02 RALPH vs RESOLVER both live both claim /opt/made-ralph Binder attributes the real nightly run to RALPH — an unbuilt legal-language concept. Two schedules exist: root 0 9 nightly.sh, claude-user 0 7 run.sh. 48 rebinds/day file production work under a non-existent agent. Wiki documents only one of two schedules. Rename the concept; reconcile schedules.
R-03 PULSE vs MEDIC both live One cron set (*/15, :17, 06:40) at /opt/made-pulse. Binder says PULSE; wiki says MEDIC and that PULSE is a separate n8n build. Live count inflated by one. Cannot tell whether the n8n PULSE exists at all. Pick an owner; retire the other.
R-04 made-fleet absent not in os_agents Two production crons: os_fleet_report.py */30, os_provision_worker.py */10. Reports itself catalogued:false. drift_count: 22 every run, unchanging, therefore ignored. Same failure that hid ORPHAN-SEEDER until July. Register both; add a not-an-agent class.
The pattern underneath all four is one thing: nothing on this box distinguishes "an agent exists as a directory" from "an agent is scheduled to run." A /opt folder is treated as evidence of life. It isn't — it's evidence that someone once built something there. Until live requires a found trigger, this class of error will keep recurring, and it will always be discovered by a manual sweep rather than by the system.
Amber, adjacent: MEDIC's live-tier probe currently returns probed=13 ok=11 down=2 key_failing=['svc_n8n_made']. n8n on bc-made is failing as a key target — and n8n is the candidate harness for ~14 of the 32 unbuilt agents. Fix the harness before committing the roadmap to it.
Verified running

Twelve agents with a trigger we can point at

Each row below was matched to a specific running container, a specific cron line, or a live HTTP endpoint. Grouped by fleet. Where a schedule is listed it was read from the crontab this pass, not from documentation.

Knowledge Platform 6 verified
AgentJobHarness · archetypeTriggerEvidence found
CHIEF CEO conductor + Brain-for-Made runtime: grounded RAG route plus typed, propose-only status/dispatch over the /opt fleet. claude-agent-sdk · conductor event Container chief, up 3 weeks · chief.srv1472429.hstgr.cloud
MADE BRAIN Conversational RAG over the Made knowledge base — the grounded question-answering surface. n8n · chatbot manual Container brain-api-made, up 3 weeks · brain-made.srv1472429.hstgr.cloud
RESOLVER Nightly entity resolution — news, trials, SFDC accounts, leads, transcript mentions → canonical companies/contacts. Propose-only. claude-agent-sdk · resolver-cron cron Ran 2026-08-04 09:04Z, clean exit. But see R-02 — two schedules, wrong binding, and cumulative_cents: 0 on the run.
MADE-ID CUSTODIAN Owns the canonical MADE-ID and the cross-system ID map (SFDC ↔ HubSpot ↔ BC Hub ↔ Transfer). Dedup, drift, SFDC bridge. Propose-only. cron-worker · resolver-cron cron 08:30 Root cron 30 8 * * */opt/made-id-registry/sfdc_bridge/run.sh all
ORPHAN-SEEDER Matches and seeds orphaned Made contacts against the BC hub. fastapi-litellm · enrichment-worker always-on Container made-orphan-seeder, up 3 weeks, healthy
MEDIC Probes every regularly-running connection, API, webhook and cron; records to monitor_*; emails an operator after 3 consecutive failures on a key target. cron-worker · monitor */15 · hourly · 06:40 Three root crons at /opt/made-pulse. Currently reporting 2 down. Identity contested — see R-03.
Growth 1 verified · 1 contested
AgentJobHarness · archetypeTriggerEvidence found
SSO AGENT Generates and validates personalised outreach messages from the SSO skill playbooks. ICP-gated, hold-out validator, daily and monthly cost caps. fastapi-litellm · outreach-agent webhook Container made-sso-agent, up 3 weeks, healthy · :8080 internal
EVENT-SCRAPER Given an event URL: discover, scrape (public or portal) attendees/agenda/exhibitors via Firecrawl, LLM-extract, load raw Transfer tables, validate — then stop. cron-worker · signal-desk-monitor manual Code at /opt/made-event-scraper, last touched 2026-06-25. No cron, no container — correct for a manual agent, but "live" overstates it.
A definitional note, not a defect. EVENT-SCRAPER is trigger manual: it runs when a human points it at an event URL. So "no cron" is expected, and it is not in the red tier. But calling it live alongside a container that has been up three weeks flattens a real difference. A manual agent is better described as available — it is ready, not running. Worth a status value.
Commercial 1 verified · 2 contested
AgentJobHarness · archetypeTriggerEvidence found
parley Claim-decomposed action-item extraction from Fireflies transcripts, behind a validator gate. Doubles as the Fellow eval baseline. fastapi-litellm · digest-composer webhook Container parley-ingest, up 3 weeks
PULSE Periodic pipeline health summary. n8n · monitor cron R-03. Bound to MEDIC's crons. No distinct n8n workflow confirmed.
RALPH Legal/agreement language redlining helper. Its own description says "concept; not the live entity RESOLVER." — · qc-validator manual R-02. A concept marked live, and the auto-binder is assigning RESOLVER's real work to it.
Research · Scientific · Training 4 verified
AgentJobHarness · archetypeTriggerEvidence found
SCOUT On-demand single-company BD research brief for Account Atlas. Brave + Firecrawl + news + SEC + ClinicalTrials.gov → Claude synthesis → scout_briefs → branded PDF. edge-functions · research-agent on_demand EF scout-research deployed on Transfer, endpoint live
REGEN-RADAR Regen-medicine / longevity signal desk. News, regulation and science sweeps feeding the regen brief surfaces. signal-desk · signal-desk */4h · 06:40 · 06:50 Three root crons → /opt/regen/regen-radar/run_all.sh · container regen-radar-app up 2 weeks
KFSH EXEC TRAINER Generates KFSHRC executive training content; output served as a branded microsite. n8n · digest-composer manual Container kfsh-brand-web-1, up 3 weeks
BIBLIOGRAPHER Compiles multi-chapter market-research dossiers from the Made BRAIN; delivers HTML/PDF/DOCX/JSON/Slides to Storage with live progress in the Leadership Research Reports tab. edge-functions · research-agent manual Status testing — honestly labelled, not counted as live
Tier 2 · roadmap, not a problem

Thirty-two agents deliberately not built

Everything below is a future item: named, given an archetype and a candidate harness, assigned a priority and an owner, and then left alone. This list is an asset. Its whole function is to make "we should build something that does X" answerable with a name, a shape and a priority instead of a new project.

Nothing here needs attention this week. If a row below turns out to be urgent, the correct move is to change its priority — not to start building it quietly.

Planned · p1 · next up 9
AgentJobHarness candidateTriggerOwner
daybreakDaily 06:30 ET morning brief — fans in DOSSIER + PERISCOPE + TRIALWATCH + SENTINEL + PARLEY into one page.claude-agent-sdkcronJoe Sinclair
DOSSIERKeeps per-account dossiers current (news, trials, signals); feeds DAYBREAK.n8ncronDustin Campbell
PERISCOPECompetitive intel monitor — competitor and market moves into the morning brief.n8ncronJoe (caretaker)
trialwatchWeekly Mon 08:00 ET clinical-trial delta scan against active accounts, plus on-demand /nct [account]. Writes an SFDC Account note.signal-deskcronDustin Campbell
sentinelMonthly full + weekly light sweep of FDA/EMA/ICH/AABB/USP guidance. Detects and summarises; explicitly does not interpret.signal-deskcronFurat or Ken
huntsmanOn-demand /prospect [indication] BD prospector. Validator-as-judge with step-parallel ensembling; dedupes against both HubSpot MQLs and SFDC opps.claude-agent-sdkmanualJoe Sinclair
marginNightly 22:00 ET sweep of open quotes for pricing/capacity violations behind a two-pass validator. Catches drift in proposals nobody is touching.cron-workercronFurat or Ken
redlineFires on a HubSpot deal update with a proposal modified <1h ago; grades red/yellow/green against the heaviest domain ruleset. Real-time counterpart to MARGIN.n8nwebhookFurat or Ken
LADDERPlatform stage-gate tracker — moves platform opportunities through gates.edge-functionscronJoe Sinclair
The gate that makes this list trustworthy

DAYBREAK requires ten consecutive clean business days before any specialist promotes

The five specialists that feed the morning brief cannot go live just because they ran once. Ten clean days first. That single rule is the difference between this roadmap and the four red findings above — it makes live mean something, so a promoted agent is a verified one.

Apply the same rule retroactively and FORGE fails it. Which is the point: the gate exists because this failure already happened.

Draft · p2 / p3 · catalogued, not scheduled 23
AgentFleetJobHarness candidateP
BEACONgrowthInbound lead qualifier — scores and routes form fills. Full pre-build map ↗n8np2
ARGUSgrowthSEO sentinel — ranking/site-health regressions.n8np2
ECHOgrowthCampaign performance reporter.n8np2
LANYARDgrowthConference intelligence built on EVENT-SCRAPER's raw data.cron-workerp2
MOSAICgrowthSegmentation + enrichment via Clay webhooks.n8np2
BRIEFCASEcommercialMeeting prep — pre-meeting brief from CRM + intel on a calendar event.claude-agent-sdkp2
GATEKEEPERcommercialRFP triage — classify and route inbound RFPs.n8np2
HORIZONcommercialDemand forecast refresh.n8np2
JANITORcommercialSFDC hygiene sweep — flag stale or malformed records.n8np2
LEDGERcommercialRevenue reconciliation — booked vs recognised across systems.n8np2
VERDICTcommercialQuote win/loss analyst.n8np2
HERALDceo-officeBoard/investor deck drafter from live metrics via Agent SDK + Gamma.claude-agent-sdkp2
ORACLEceo-officeLong-range revenue × capacity scenario model.n8np2
SPOTLIGHTceo-officeMonday-AM executive digest.n8np2
CONCIERGEknowledge-platformIngestion router — inbound docs/signals to the right pipeline.edge-functionsp2
CURATORknowledge-platformKnowledge freshness monitor — flags stale KB content.n8np2
FOREMANknowledge-platformBuild schedule keeper — tracks roadmap cadence via git hooks + n8n.claude-code-loopp2
LOCKSMITHknowledge-platformSecrets rotation scheduling and reminders.cron-workerp3
SCRIBEknowledge-platformSession scribe + skillify — turns sessions into durable skills.claude-code-loopp3
ARCHIVISTresearchKnowledge archival worker.n8np2
SHERLOCKresearchInvestigative research agent.edge-functionsp2
CHRONICLERtrainingTraining-content chronicler.n8np3
TUTORtrainingInteractive training agent.n8np3
Fourteen of these name n8n as the harness — and n8n on bc-made is currently MEDIC's failing key target. That is not a reason to abandon n8n; it is a reason to fix it before it becomes the load-bearing dependency of half the roadmap.
The proposal this page is really making

Make live mean "a trigger was found," and the red tier empties itself

All four red findings share one root cause: the registry lets a human type live. Nothing checks it. Meanwhile /opt/made-fleet/os_fleet_report.py already walks the containers and crontabs every thirty minutes and already knows the answer — it just has nowhere authoritative to write it.

Three changes, none of them large:

  1. Split the status field. status is intent (what we want). Add runtime_state, written only by the fleet reporter (what is true). Disagreement between them is the alert — no separate audit needed.
  2. Add available as a status for manual agents like EVENT-SCRAPER, so "ready when invoked" stops being spelled the same way as "running on a timer."
  3. Let the reporter say not-an-agent so the 22 microsite containers leave the drift count and the number can reach zero — at which point a non-zero drift count becomes worth paging on.

Do those and this page's Tier 1 section becomes generated rather than hand-swept, which is the only version that stays true.