ProgressGate
npm library where Jev judges whether an agent's recent steps are stuck on the same assumption; code returns CONTINUE, WARN, REPLAN or HALT.
Overview
ProgressGate detects semantic stagnation in agent loops: sequences of different actions still pursuing the same contradicted assumption, such as a permission error followed by trying sudo, a different path and a different service account. A step counter cannot see that, so ProgressGate asks Jev to read the recent trajectory and returns six raw semantic signals; a small deterministic policy turns them into CONTINUE (progress or new evidence), WARN (first stagnation signal), REPLAN (multiple signals agree) or HALT (persistent stagnation or confident regression).
Each result includes a stable reasonCode, the raw signals, a confidence and a debug explanation not meant for parsing. Safe defaults: automatic HALT is off, so a HALT conclusion is returned as REPLAN with recommendedDecision HALT until you enable it after reviewing real trajectories, and Jev or network failures fail open as CONTINUE with a SUPERVISOR_UNAVAILABLE code. Error messages are sanitised so the API key never appears.
What the decision model decides
| Type | Question | Answers |
|---|---|---|
| Yes / no | Is the agent still pursuing the same rejected assumption?(inferred) | yes · no |
| Yes / no | Did this step produce new evidence or progress?(inferred) | yes · no |
| Choice | Policy decision | CONTINUE · WARN · REPLAN · HALT |
How it works
- Create a run with the agent's goal.
- Observe each step's action and result.
- Jev returns trajectory signals; code computes a decision.
- Inject feedback on REPLAN; stop on HALT if enabled.
Strengths
- Catches spinning that step counters miss.
- Safe defaults: no automatic halt, fail open.
- Stable reason codes for branching.
Caveats
- Requires tuning on your own trajectories.
- Requires a TypeSafe key.
Getting started
npm install progressgate, export TYPESAFE_API_KEY, then use new ProgressGate({ apiKey }).run({ goal }).observe(step).At a glance
- Type
- Project
- Status
- beta
- Language
- TypeScript
- Runtime
- Node library
- Has code
- yes
Use cases and integrations
How curated lists describe it
Detects semantic stagnation in agent loops: Jev judges the trajectory; code returns CONTINUE / WARN / REPLAN / HALT
AnotiaWang/awesome-decision-models
Frequently asked questions
Will it stop my agent automatically?
Not by default; HALT is downgraded to REPLAN until you enable allowAutomaticHalt.
What if Jev is unavailable?
It returns CONTINUE with SUPERVISOR_UNAVAILABLE.
What counts as stagnation?
Different actions still pursuing the same contradicted assumption.
Related projects
CLI where several coding agents draft implementation plans and Jev scores them, decides on cross-review and picks the finaliser.
ProjectbetaTypeScriptMinimal web demo: paste an agent step trace and Jev judges whether to continue, retry, escalate or stop.
DemoprototypeTypeScriptFail-open Codex UserPromptSubmit hook that asks Jev for task type, complexity, risk and execution mode and injects it as advisory context.
HookbetaPythonFork of codex-with-chatgpt where Jev plus fixed rules decide when to bring in web ChatGPT to plan or review and when Codex just acts.
ProjectbetaPlugin suite adding Jev judgments to DeepSeek Harness: tool pruning, dead-loop blocking, a safety guard and skill routing.
PluginbetaTypeScriptSupervisor for unattended coding agents: one batched Jev Choice over the trajectory decides continue, pause or escalate.
ProjectbetaPython