Skip to Content
SettingsHarness Agents

Harness Agents

The harness runs several agents, and they are not alike. One reviews open cases and raises an alert in under three minutes. Another rewrites detector configuration and takes over two hours. Running both on the same schedule means either the fast one is late or the slow one is working from half the picture.

Harness → Agents is where you decide, per agent, which of those it is.


The decision you are making

Two questions, and they pull in opposite directions:

  • Does this agent need to react to new data immediately? A new asset that should reach the glossary, an inquiry that just matched, a case worth escalating — waiting is a cost with no benefit.
  • Does this agent need the whole picture to decide well? Detector tuning and inquiry portfolio design are the opposite: a decision made from whatever the last scan happened to produce is worse than no decision.

Time is not the trigger. An agent runs when something happens or when a condition is met. The two time settings are guardrails around that: a floor so a burst of scans cannot spawn a run apiece, and a backstop so a blocked agent eventually runs anyway.


Runs when

ModeFires when
ImmediatelyAny qualifying event — a new finding, a match, a failed scan. Best for cheap agents that must not lag behind new data.
In the next batchJoins the coalesced batch, so a burst of scans produces one run instead of one per scan.
When the corpus is settledWaits until nothing is scanning and its gates are satisfied. For decisions that need the whole picture.
On its own scheduleRuns on its own interval and ignores scan cycles.
Only when I trigger itNever starts on its own.

A single new finding does not satisfy When the corpus is settled — one event is precisely what that mode is waiting not to be woken by.


Waits for

Three independent conditions. They are separate switches rather than one “readiness” toggle because that is the whole point: detector tuning needs a settled corpus but does not care about the inquiry-matching queue, and the inquiry agent is the exact opposite.

GateThe agent will not start until…
Scans finishedno source is mid-scan.
Matching drainedthe inquiry-matching queue is empty.
Evidence scoredenough findings carry an importance score (see Evidence and urgency).

Gates are ignored for Only when I trigger it and On its own schedule, and a manual trigger always bypasses all of them.


Guardrails

SettingMeaning
Minimum gapNever run more often than this, in minutes. Not pierced by an urgent event. 0 disables the floor.
Run anyway afterForce a run once the gates have blocked this agent for this many hours. 0 disables the backstop.

Important: the backstop is the liveness guarantee. An agent with a gate and no backstop can be blocked indefinitely if the condition it waits on never clears — for example an inquiry-matching queue that is continuously refilled by new scans. Leave it set unless you specifically want that agent to be able to wait forever.

The heartbeat

A finished scan is what normally wakes the harness, so on a corpus that has stopped being scanned there would be no cycle in which to notice that an agent is overdue. A heartbeat runs every 15 minutes and covers exactly that:

  • if sources are waiting from a cycle that deferred them, it runs the ordinary cycle;
  • otherwise it runs only the agents whose backstop has expired;
  • if neither applies it does nothing — a quiet instance stays quiet.

This is what makes “Run anyway after” mean what it says. It matters most for When the corpus is settled, which would otherwise be waiting for a state in which nothing was left to wake it.


Defaults

AgentModeWaits forMin gapRun anyway after
EscalationImmediately5 min24 h
CaseImmediately15 min24 h
InquiryIn the next batchMatching30 min24 h
ConfigWhen settledScans + evidence2 h7 d
Detector authorWhen settledScans + evidence2 h7 d
DreamOn its own schedule

Escalation and Case act on a single new signal and are cheap, so they wait for nothing. Inquiry keeps its matching gate because its entire output is match counts, and counting against a queue that has not drained produces numbers that are wrong the moment they are written.


How agents are chained

Agents do not run as five independent jobs. They run as two chains, side by side, and within a chain the order is a real data dependency rather than a preference.

ChainOrderWhy that order
InvestigationInquiry → Case → EscalationCase reads the inquiries Inquiry just created or widened; Escalation alerts on the final state of the cases Case mutated.
DetectionConfig → Detector authorDetector author reacts to what Config left unaddressed, and both write the same source configuration — running them in series keeps them off each other’s concurrency token.

The two chains run concurrently. Detection reads the finding landscape from the database rather than from what the investigation agents produced, so there is nothing to wait for. Running all five in series once cost a live instance roughly an order of magnitude in cycle throughput.

Dream belongs to no chain: it consolidates memory on its own schedule, alone.

The Agents tab shows this layout at the top, with each agent’s trigger mode and whether it is switched off.

What stops a chain

EventEffect
An agent is gated or inside its minimum gapIt is skipped; the rest of the chain still runs.
An agent fails on its own logicIt is recorded as failed; the rest of the chain still runs.
A provider-level failure — rate limit, bad key, missing modelThe rest of that chain is abandoned and the cycle is retried later.
The cycle budget expiresThe rest of that chain is skipped until the next cycle.

The provider case is deliberately different: a 429 will meet the next agent exactly as it met this one, so continuing would only spend more calls into the same limit. Every other failure belongs to one agent, and its chain-mates run.

If an agent shows no runs at all, check the agent before it in its chain. A provider error there stops everything behind it — which is why a rate-limited Inquiry agent can leave Case and Escalation with zero runs while both are enabled, ungated and perfectly healthy.


The system prompt

Each agent’s mission is thousands of words. It lives behind the System prompt button rather than on the card.

Editing it changes how that agent reasons. Restore default puts the shipped mission back — use it if results get worse after an edit. A card whose prompt differs from the default is marked Edited.


Advanced

SettingMeaning
Max stepsHow many times the agent may think before it must stop.
Run budgetOverrides the instance run budget for this agent alone. Leave empty to follow the instance value.

Instance limits

These live under Harness → Config because they apply to every agent at once.

Run limits

SettingDefaultMeaning
Run budget20 minMaximum wall-clock time for one agent run. A run holds a job slot, so a wedged one stalls everything behind it.
Presume dead after60 minA run still marked running past this is reaped and marked failed. Keep it above the run budget.
Cycle budget30 minWall-clock budget for one full cycle. Checked before each agent starts, so a chain can overshoot by at most one run budget.

Evidence and urgency

SettingDefaultMeaning
Scored findings floor2000Above this many scored findings the evidence gate opens regardless of coverage.
Coverage fallback0.25Fraction that must be scored when the floor above is not met.
Partial-ranking warning0.8Below this coverage, agents are told their triage order is incomplete. Shapes the prompt; does not block a run.
Urgent finding score0.75A finding at or above this importance triggers an immediate cycle.

The floor and the fallback are deliberately two tests. On a large corpus the ratio falls as ingestion outpaces analysis, so a ratio alone re-engages the gate exactly when the corpus is largest — 1.5 million scored findings can read as “22%, not ready” while being far more than any single run could consume.

What each run sees

SettingDefaultMeaning
Characters per tool result8000One tool result is truncated beyond this.
Characters per turn24000All tool results in one turn share this budget.
Ranked findings25How many ranked findings a run may see at once.
Glossary entries20Canonical names injected into each run.
Recalled memories30Past lessons injected into each run.
Memory consolidation2 daysHow often the harness prunes and distils its own memory.

Larger values cost more tokens and can crowd out the reasoning: the transcript is resent on every iteration, so its growth is quadratic in the number of steps.


Why are my agents not running?

Work through this in order.

  1. Is an AI provider configured? Without one under Harness → Config, no agent runs at all.
  2. Is the agent switched on? The toggle on its card.
  3. Is it waiting on a gate? The most common cause. Check the agent’s Waits for switches against what your instance is doing — an inquiry agent gated on matching will not run while a large matching backlog is being continuously refilled by new scans.
  4. Is it inside its minimum gap? Compare the gap against how recently it last ran.
  5. Is the mode right? Only when I trigger it and On its own schedule never start from a scan.

Two things that will get an agent moving immediately:

  • Trigger it manually. A manual run bypasses every gate and both guardrails.
  • Lower “Run anyway after”. The backstop overrides the gates, so setting it short forces the run without changing what the agent waits for the rest of the time. The heartbeat picks it up within 15 minutes even if nothing is being scanned.

Last updated on