Skip to main content
Glama

Fable Mode

Agents that think before they write.

       


Fable Mode is an open-source control plane for AI coding agents.

It makes an agent deliberate, produce evidence, and survive adversarial review before it earns permission to write to your workspace. The gates are mechanical, not prompt advice: no timer, no proof, no write access.

Demo

KERR // ORRERY

One self-contained HTML file. Raw WebGL, zero libraries, zero external assets, and zero build step.

https://github.com/user-attachments/assets/8287bbfe-e3ee-4dcf-ba0f-f9ff22ae79bd

7 renders rejected before final · 2 bugs caught · 10/10 red-team probes passed

Fable Mode overview

https://github.com/user-attachments/assets/27f4f8a2-b1bb-4398-a08c-bc9fd93d69d7

Quick start

A session starts locked. Confidence does not unlock it.

  1. Install the MCP server using one of the options below.

  2. Add the optional Agent Skill if you want the full workflow.

  3. Ask your agent to use Fable Mode for a concrete coding task and choose a time budget.

A new session starts with execution locked:

{
  "action": "create_session",
  "session_name": "demo-refactor",
  "objective": "Refactor the parser without changing public behavior",
  "time_budget_minutes": 2
}

The agent then records evidence and an invariant. An early unlock_execution request is rejected until the authority timer and proof prerequisites pass. Use get_status at any point to see the active phase, remaining time, evidence counts, and lock state.

The same gates guard every phase: evidence receipts for claims, a five-vector red-team swarm for code, and a sealed record of what was verified.

One package, two agent environments

Fable ships as one PyPI package. The same package contains the runtime, stdio MCP server, and complete Agent Skill. Setup is explicit so installing an MCP server never silently activates workspace instructions.

Run setup from the project the agent will work in:

uvx --from fable-engine==1.3.9 fable-mode setup --yes

This resolves the pinned package in an isolated uv environment and copies the bundled skill to .agents/skills/fable-mode. Use --dry-run to preview or --target <dir> for another skill directory. For a persistent install, use:

python -m pip install fable-engine
fable-mode setup --yes

Then choose only the invocation that matches the agent environment.

Native MCP client

Run fable-engine as the stdio server. For example:

// Claude Code: claude mcp add fable-engine -- uvx --from fable-engine==1.3.9 fable-engine
// Cursor or another JSON-configured client:
{
  "mcpServers": {
    "fable-engine": {
      "command": "uvx",
      "args": ["--from", "fable-engine==1.3.9", "fable-engine"]
    }
  }
}

Install MCP server in VS Code

Shell sandbox with internet, no MCP host

The same package exposes a direct JSON transport. Pipe one fable_session argument object to fable-mode call:

printf '%s\n' '{"action":"create_session","session_name":"demo","objective":"Verify this change","time_budget_minutes":2}' \
  | uvx --from fable-engine==1.3.9 fable-mode call

The command uses JSON Lines: one fable_session argument object per input line and one JSON result per output line. Keep that process open for a full workflow so the authority timer and session stay in the same trusted runtime. A one-line pipe is useful for a single inspection call. Each uvx command can resolve an isolated environment; pip install is better when the sandbox keeps a Python environment between calls. Session data persists outside that environment in Fable's data directory (FABLE_DATA_DIR can override it).

Python 3.10+, zero runtime dependencies. Published on PyPI as fable-engine.

Skill activation remains explicit

setup is the unified path. The older install-skill command remains as a compatible alias for skill-only installation. Neither fable-engine nor pip install fable-engine writes instructions into a workspace on its own.

How it works

  1. Think — Time-locked deliberation. The agent cannot write until the timer ends.

  2. Prove — Claims need real evidence (tool receipts, hashes, invariants).

  3. Attack — A red-team swarm tries to break the code.

  4. Write — Only then is the workspace unlocked.

Optional: AI evidence adjudicator

The evidence in a session is written by an AI agent, so Fable can optionally ask an external reviewer model to audit that evidence before the workspace unlocks. Stdlib-only, one bounded HTTPS call, no local model, no extra RAM to speak of. Off by default; fail-closed when enforcing. It raises the cost of fabricated proof - it cannot guarantee deception is impossible, and the mechanical gates stay the primary authority. Setup and honest limits: AI evidence adjudicator.

What it is not

  • Not a claim of flawless code. It is a checkable workflow, not a guarantee.

  • Not a bigger prompt. The locks are enforced by the engine, not by wording.

  • Not a framework lock-in. It speaks MCP and runs beside your current agent.

Docs

Contributing

Issues and pull requests are welcome. See CONTRIBUTING.md.


MIT License · Built by REX

Available Tools

14 tools
browser_backGo back in browser historyA

Loads the previous history entry in the active or named browser session without adding a new history entry. Use it for history traversal rather than browser_navigate. If history is already at its first entry, it is a no-op that returns current page status. A navigation failure returns an error and preserves the history index; omitting session_id reuses or creates the active/default session.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional browser tab/session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are sparse, so the description carries the burden and succeeds. It discloses that the operation does not add a new history entry, becomes a no-op at the first entry, returns an error on navigation failure while preserving the history index, and reuses/creates the default session when session_id is omitted. This goes well beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences deliver all essential information with no filler. The main purpose is front-loaded, and each sentence earns its place by clarifying scope, edge behavior, and error handling.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter tool with an output schema, the description covers the necessary behavioral, error, and session semantics. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% for the single session_id parameter, but the description adds meaningful behavior: omitting session_id reuses or creates the active/default session, and the first sentence notes 'active or named browser session.' This extra context pushes it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation: 'Loads the previous history entry in the active or named browser session' with the key nuance 'without adding a new history entry.' It explicitly differentiates from browser_navigate, and the name plus context make the distinction from browser_forward obvious.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit usage directive: 'Use it for history traversal rather than browser_navigate.' It also covers edge conditions (no-op at first entry), behavior on failure, and session fallback semantics, providing enough guidance for an agent to choose this tool appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_clickActivate a safe browser targetA

Activates an href-bearing link or submits a GET form through normal browser navigation. POST and other form methods are refused, and GET forms containing password fields are blocked to prevent credential leakage. Returns the resulting page status or a bounded error without bypassing existing navigation controls.

ParametersJSON Schema
NameRequiredDescriptionDefault
element_idYesStable element ID of an href-bearing link or submit control inside a safe GET form.
session_idNoOptional browser tab/session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description adds meaningful behavioral constraints: POST is refused, password fields are blocked to prevent credential leakage, and errors are bounded without bypassing navigation controls. This gives agents important safety context beyond the structured annotation hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences deliver purpose, restrictions, safety rationale, and outcome with no filler. The most important scoping information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple two-parameter schema, the output schema, and annotations, the description covers what the tool does, what it refuses, why it refuses it, and what it returns. No critical contextual gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description reinforces that element_id targets links or submit controls, but it does not add substantive new semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action: activating an href-bearing link or submitting a GET form via normal browser navigation. It gives a concrete verb and target, though it does not explicitly contrast itself with sibling tools like browser_navigate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies when the tool applies (links and GET forms) and explicitly excludes POST/other methods and password-containing GET forms. It provides clear conditions but does not name alternative sibling tools for divergent cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_closeClose browser sessionA
Destructive

Closes and permanently discards one in-memory browser session, including its current document and history; persistent profile cookies remain saved. Use it when that tab is no longer needed. session_id targets a specific session; if omitted, the active session is closed. Returns closed, or not_found without changing another session.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional browser tab/session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds significant behavioral context beyond the destructiveHint=true annotation: it specifies that the session is permanently discarded, history is removed, but persistent cookies remain saved. It also discloses the return values ('closed', 'not_found') and guarantees no effect on other sessions, which is useful for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: action, usage, and parameter behavior. The most critical information (destructive action) is front-loaded, and there is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully covers what the agent needs: the action, its effects (including cookies and history), parameter behavior, and return values. The output schema exists for additional detail, but nothing critical is missing. The tool is simple, and the description is complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% (session_id is described as 'Optional browser tab/session identifier'), but the description adds meaningful clarification: 'targets a specific session; if omitted, the active session is closed.' This explains the default behavior and parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'Closes and permanently discards one in-memory browser session', which clearly distinguishes it from siblings like browser_open or browser_navigate. The scope is precise (one session, including document and history), leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear usage condition: 'Use it when that tab is no longer needed.' It also explains the optional session_id behavior, which helps the agent decide whether to pass it. It doesn't explicitly name alternatives, but the operation is simple and the context of siblings (all navigation/control) makes the intended use obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_forwardGo forward in browser historyA

Loads the next history entry in the active or named browser session without adding a new history entry. Use it after browser_back rather than browser_navigate. If no forward entry exists, it is a no-op that returns current page status. A navigation failure returns an error and preserves the history index; omitting session_id reuses or creates the active/default session.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional browser tab/session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond annotations by detailing that it does not add a history entry, is a no-op if no forward entry exists, returns an error on navigation failure while preserving the history index, and clarifies session_id omission behavior. These are valuable behavioral traits not covered by annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet information-dense, with logical flow: primary action, usage guidance, edge cases, and parameter nuance. Every sentence adds value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of an output schema, the description covers all necessary aspects: behavior, usage, error handling, and session semantics. No critical information is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Although the schema already documents session_id as optional, the description adds the important semantic that omitting it reuses or creates the active/default session, giving agents the context needed for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: loads the next history entry in a session without adding a new entry. It also differentiates from browser_navigate by specifying usage after browser_back, making its purpose distinct among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs the agent to use it after browser_back rather than browser_navigate, and describes the no-op behavior when no forward entry exists. This provides clear when-to-use guidance and an alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_navigateNavigate current browser sessionA

Loads url into an existing browser session, replacing its current document and adding a history entry. Use this instead of browser_open when continuing in a known session; if session_id is omitted, the active session is reused or a default session is created. It waits up to timeout seconds and returns the resulting URL, title, viewport, scroll position, and indexed elements; network, timeout, size, and parse failures return an error object without changing committed page state.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTarget URL to navigate to.
timeoutNoTimeout in seconds for page load (maximum 30 seconds).
session_idNoOptional browser tab/session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only mark safety traits; the description adds substantive behavior: active-session reuse or default session creation, the exact data returned, and the guarantee that failures return an error without changing committed page state. This is beyond what annotations provide and does not contradict them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-load the core navigation action, then add usage routing and failure behavior without redundancy. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with an output schema, the description covers invocation context, behavior, return contents, and error semantics. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema carries the parameter basics. The description adds value for session_id by defining what happens when it is omitted, and it confirms url and timeout semantics in context. This justifies moving above the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Loads `url` into an existing browser session') and explains the document-replacing, history-adding effect. It also names the sibling alternative (browser_open), so an agent can distinguish navigation from opening a session.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to choose this over browser_open ('continuing in a known session') and explains fallback behavior when session_id is omitted. It also covers timeout and failure conditions, giving clear context for invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_openA

Opens a URL in the stealth agent browser using persistent local logins/profile (<=20 MB RAM ceiling). Supports local dev servers across all languages.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesTarget URL or localhost address to open.
timeoutNoTimeout in seconds for page load (maximum 30 seconds).
session_idNoOptional browser tab/session identifier.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does add useful behavioral context: persistent local logins/profile and a 20 MB RAM ceiling. It does not disclose tab/session side effects, failure modes, or timeout behavior, so transparency is partial but not absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler. The primary action and the most decision-relevant constraints are front-loaded, and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema covers parameters and the description provides the key operational constraints, so basic invocation is supported. However, without annotations or an output schema, and without explicit sibling differentiation, the description leaves return behavior and tool-selection context incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no parameter-level detail, but the schema already fully documents url, timeout, and session_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Opens a URL') and the resource ('stealth agent browser'), and adds differentiating context about persistent local logins/profile and a RAM ceiling. It doesn't explicitly name a sibling tool to distinguish itself from, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage contexts: use when persistent logins/profile are needed or when targeting local dev servers. However, it gives no explicit when-not-to-use guidance and doesn't reference alternatives like browser_navigate, leaving the routing decision partially to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_pressA

Edits supported text controls, moves focus with Tab, or activates links with Enter.

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKeyboard key to press (e.g. 'Enter', 'Tab').
element_idNoOptional element ID target.
session_idNoOptional browser tab/session identifier.

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden for disclosing side effects. It fails to mention that pressing Enter on a link may navigate away or trigger forms, or that the tool might alter page state. Given it can 'edit' and 'activate', it should warn about potential navigation or state changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It conveys the core functionality immediately and is appropriately concise for a simple key-press tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one required parameter, and the schema covers parameter details. However, the description lacks essential behavioral caveats like potential navigation or side effects when activating links, which is a notable gap given the absence of annotations. It is adequate but not fully complete for safe invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters, providing baseline 3. The description adds semantic meaning by explaining that specific keys (Enter, Tab) have specific effects (activate links, move focus), which enhances the agent's understanding of how the key parameter behaves beyond the schema's simple example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states three distinct actions: editing text controls, moving focus with Tab, and activating links with Enter. This gives a specific verb-resource pair and differentiates it from siblings like browser_click and browser_type without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear use cases for pressing keys, such as editing, tabbing, and activating links. However, it does not explicitly state when to use this tool versus alternatives like browser_type or browser_click, so the agent must infer the appropriate context from the action list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_reloadA

Reloads the current page in the browser session.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional browser tab/session identifier.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It states the core action but does not mention potential side effects like losing unsaved page state or re-submitting requests, nor does it clarify behavior with multiple sessions. This is adequate but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One focused sentence with no filler. The action is front-loaded and the scoping phrase 'in the browser session' earns its place by connecting to the sibling tool set.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter optional tool, this is nearly sufficient. However, with no annotations and no output schema, it leaves unclear whether an active session is required, what happens if session_id is omitted, and what the tool returns after reloading.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single optional session_id parameter at 100% coverage, so the baseline is 3. The description adds no additional format, default, or fallback semantics beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Reloads') and identifies the resource ('current page in the browser session'). This unambiguously distinguishes it from sibling navigation tools like browser_navigate, browser_back, and browser_forward, even without naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use reload versus navigating to a URL, going back, or going forward. It also does not mention prerequisites such as an active session or when reload would be inappropriate. The intended usage must be inferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_screenshotCapture current viewportA
Read-only

Captures one 1280x800 PNG of the current viewport without navigation or scroll changes. Use this for the visible region; use browser_snapshot_layers for multi-viewport coverage. An omitted session_id targets the active/default session. Returns one layer with its offset, dimensions, and base64 PNG data.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoOptional browser tab/session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and non-destructive, and the description adds useful behavioral guarantees: no navigation/scroll side effects, a fixed 1280x800 image, and a single-layer return value. It does not cover things like rate limits, but those are not material here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler; the primary behavior and key limitation are front-loaded, the sibling comparison follows, and the default-parameter behavior closes the only remaining ambiguity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only one optional parameter, an output schema present, and annotations describing safety, the description covers all necessary selection and invocation guidance. The agent knows exactly what will happen, what it will get back, and which tool to choose instead for broader coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents session_id as an optional identifier, and the description adds the important default behavior (omitted session_id targets the active/default session). This exceeds the baseline because it resolves the main semantic question an agent would have.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise action ('Captures one 1280x800 PNG'), a specific resource ('current viewport'), and an explicit constraint ('without navigation or scroll changes'). It also distinguishes itself from the sibling browser_snapshot_layers, so an agent can identify the correct tool immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says to use this for the visible region and to use browser_snapshot_layers for multi-viewport coverage, and it clarifies the default behavior when session_id is omitted. This gives clear selection criteria without leaving alternatives to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_scrollA

Scrolls the page vertically by delta pixels.

ParametersJSON Schema
NameRequiredDescriptionDefault
delta_yYesVertical pixel scroll offset.
session_idNoOptional browser tab/session identifier.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the mechanical action and gives no indication of side effects, whether it is read-only, or what happens if the page is not scrollable. It also does not mention that scrolling is relative to the current position. This is a notable gap for an action without annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence with no fluff. It front-loads the action and unit, and the key parameter meaning is conveyed immediately. It is appropriately concise for the simplicity of the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is minimal but acceptable for a simple, two-parameter tool. It covers the core 'do what' but omits behavioral transparency and usage context, which are important given no annotations and no output schema. The absence of any guidance about when to use this tool versus sibling tools leaves the description incomplete in a broader operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description mentions 'delta pixels,' which aligns with delta_y and clarifies the unit, adding a small amount of semantic value beyond the schema. It does not describe the direction convention (positive vs. negative), which is left to the parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Scrolls the page vertically by delta pixels.' It uses a specific verb, resource (page), and unit (pixels), making it easily distinguishable from sibling tools like browser_navigate or browser_click. The tool's purpose is unambiguous even without referencing siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: scroll when you need to move the viewport vertically. However, it provides no explicit guidance on when to choose scroll over alternative navigation tools, and it does not mention any prerequisites like a loaded page or session context. This leaves some inference burden to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_snapshot_layersCapture layered page snapshotsA
Read-only

Captures up to max_layers PNGs from the top of the current document, one 1280x800 viewport per layer, without changing the session scroll position. Use this for multi-viewport page coverage; use browser_screenshot for only the current viewport. An omitted session_id targets the active/default session. Returns layer count, offsets, dimensions, and base64 PNG data; max_layers defaults to 3 and is capped at 10.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_layersNoMaximum number of screen-sized viewport layers to capture (default 3).
session_idNoOptional browser tab/session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable traits beyond those: it captures from the top, uses a fixed 1280x800 viewport per layer, avoids changing session scroll position, and lists the returned data shape. This is rich behavioral context for an agent deciding whether invocation has side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The first explains how the tool operates, the second gives usage routing, and the third covers defaults and return values. Information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two optional parameters, 100% schema coverage, rich annotations, and an output schema present, the description supplies all necessary behavioral and selection context. An agent can confidently decide when to invoke it and what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaning by explaining that an omitted session_id targets the active/default session and that max_layers defaults to 3 and is capped at 10, which is not fully specified in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('Captures'), a precise resource ('layers of the current document'), and the operational details (1280x800 viewport per layer, from the top). It explicitly differentiates itself from browser_screenshot, so an agent can disambiguate without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to use this tool ('multi-viewport page coverage') and names the alternative ('browser_screenshot for only the current viewport'). It also clarifies the behavior of an omitted session_id, giving complete selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_typeReplace text field valueA

Replaces the full value of a text-like input or textarea identified by element_id; it does not submit the form. Use browser_press for single-key edits or activation. An omitted session_id targets the active/default session. Returns status typed, the element ID, and the supplied text; missing or non-editable elements return an error object and are not changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText content to enter into element.
element_idYesStable element ID to type into.
session_idNoOptional browser tab/session identifier.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses error behavior for missing or non-editable elements (returns an error object and does not change them), confirms no form submission, and describes the return payload (status 'typed', element ID, supplied text). This goes well beyond the sparse annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences pack the main effect, alternative usage, session default, return value, and error behavior with zero filler, front-loading the core action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers selection, invocation, session handling, and success/failure results. Sibling differentiation and output schema remove remaining ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 100% schema coverage, the description adds meaning: 'full value' and 'text-like input or textarea' clarify text/element_id semantics, and the session_id default behavior is specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource: replaces the full value of a text-like input or textarea identified by element_id. Explicitly notes that it does not submit the form, distinguishing it from activation and navigation siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names browser_press as the alternative for single-key edits or activation, giving an agent actionable routing criteria. Also clarifies that an omitted session_id targets the active/default session.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

browser_waitA

Waits for a specified duration in seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
secondsYesSeconds to wait.
session_idNoOptional browser tab/session identifier.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It states the core behavior but does not mention blocking semantics, session-scoped behavior, or what happens with edge values such as 0 or 10 seconds. As a simple, non-destructive wait operation, the minimal disclosure is acceptable but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with zero wasted words. It states the action and the unit of measurement, which is all that is needed for a tool of this simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, a two-parameter schema with full descriptions, and the absence of an output schema, the description is nearly sufficient for an agent to call the tool correctly. It could be more complete by mentioning when a wait is appropriate, but nothing essential about invoking the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already documented. The description adds no meaning beyond what the schema provides; it only restates the notion of a duration. Accordingly, baseline score 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('waits') and a specific resource ('a specified duration in seconds'), making the tool's function immediately clear. It also distinguishes itself from sibling browser actions like browser_navigate or browser_click, which perform different operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use guidance or exclusion cases. However, in a browser automation context, waiting is a recognizable low-level utility, and no sibling tool duplicates this function, so the appropriate usage is largely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fable_sessionFable session, evidence, and review workflowA
Destructive

Runs one Fable operation selected by action. Use it for Fable sessions, gates, evidence/proofs, review rubrics, checkpoints, compression, design audits, research scrapers, and explicitly experimental System 3 operations; use browser_* tools for web-page navigation and interaction. Start stateful workflows with create_session and a session_name; later session actions reuse that name. Only fields documented for the selected action are read, and missing or invalid inputs return an Error: message without raising an MCP transport error. Status/list/telemetry/get/view/check operations are read-only. Create, log, record, set, advance, checkpoint, restore, track, evaluate, register, compress/accumulate, evolve, generate, and scraper operations can persist Fable state or artifacts. unlock_execution remains blocked until its time and rationale gates pass; apply_auto_update can replace installed Fable files. The result is action-specific human-readable text in result; inspect that text for success or Error: before continuing.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNoEpistemic classification tag for truth calibration.
codeNoSource code content (HTML, JSX, CSS, or TSX) to audit or validate against anti-slop gates.
nameNoName identifier for automation pipeline spec.
treeNoTree hierarchy adjacency list or nested dict for hyperbolic embedding.
claimNoFact, hypothesis statement, or unknown parameter to track in epistemic ledger.
edgesNoList of directed edge dictionaries for Causal DAG construction.
gammaNoPolicy precision inverse temperature gamma for Active Inference softmax (default 16.0).
labelNoOptional label or description for compressed CAS node.
nodesNoList of node dictionaries for Causal DAG construction.
actionYesThe Fable session action to perform.
axiomsNoList of reference axiom names or strings for proof oracle.
domainNoDomain boundary for the invariant or cortical plasticity consolidation.
statesNoList of hidden state identifiers for Active Inference POMDP.
targetNoTarget URL, ID, subreddit, repo, paper ID, handle, or search query string for research scraping actions.
worldsNoList of world/state definitions for Kripke structure.
actionsNoList of control action identifiers for Active Inference POMDP.
cas_refNoCAS reference URI (cas://<sha256_hex>) or 64-char hash.
contentNoRaw text content or payload to store/compress into Content-Addressed Storage (CAS).
contextNoHypothesis typing context dictionary {name: type} for proof oracle.
d_priorNoPrior initial state belief distribution D for Active Inference.
formulaNoCTL / modal formula string to verify against Kripke structure (e.g. 'AG(safe)', 'EF(goal)').
mockupsNoList of concept dictionaries for visual mockup recording.
payloadNoMicro-payload text for adaptive batch accumulator or CAS storage.
root_idNoRoot node ID for hyperbolic tree embedding or initial world.
task_idNoTask identifier for cortical plasticity consolidation or session lineage.
a_matrixNoObservation likelihood matrix A [O x S] for Active Inference.
criteriaNoList of criteria pointers or JSON string of rubric items for goal score evaluation.
end_lineNoEnding line number (1-indexed inclusive) for windowed line slice viewing.
evidenceNoSource file, command output, line number, or URL supporting the claim.
metadataNoOptional metadata dictionary attached to accumulated micro-payload.
policiesNoList of candidate action sequence policies for Expected Free Energy evaluation.
archetypeNoHaute aesthetic archetype identifier for design tokens or scaffolding.
base_stepNoBase geodesic step distance for hyperbolic tree embedding (default 1.0).
curvatureNoSectional curvature c > 0 of Poincaré manifold (default 1.0).
dimensionNoDimension of Poincaré ball manifold (default 2).
file_pathNoTarget file path for file change tracking or proof verification.
objectiveNoHigh-level goal or problem statement for the reasoning session.
rationaleNoJustification for unlocking code execution after satisfying cognitive gates.
rubric_idNoIdentifier of the goal rubric.
b_matricesNoState transition matrices B [Action -> S x S] for Active Inference.
entrypointNoOptional function name to probe inside the target source for red-team review. Auto-detected when the source defines exactly one public function.
focus_areaNoSpecific subsystem, component, algorithm, or interface being critically re-evaluated.
model_nameNoName for the causal DAG model in System 3 simulation.
next_phaseNoTarget phase to advance the session into.
proof_typeNoDeterministic proof type.
start_lineNoStarting line number (1-indexed inclusive) for windowed line slice viewing.
change_typeNoClassification of file change.
evaluationsNoAlias for item_evaluations: list or dict of criterion evaluation updates.
force_flushNoForce flush buffered micro-payloads immediately into a composite frame.
generationsNoNumber of evolutionary generations to run (default 3).
node_labelsNoOptional mapping of node IDs to readable labels.
observationNoCurrent sensory observation for Active Inference belief updating.
target_codeNoSource-code string input. Loaded and probed in an isolated subprocess sandbox (process boundary, resource limits, per-call timeout).
target_nameNoIdentifier or name of the target module, class, or function for red-team review.
transitionsNoList of transitions or adjacency dictionary for Kripke structure.
user_promptNoAlias for prompt: high-level design prompt describing desired web experience.
code_snippetNoAlternative alias for source-code string input. Executed in the isolated subprocess sandbox.
diff_summaryNoConcise summary of file changes, diff, or slated edits.
observationsNoList of observation identifiers for Active Inference POMDP.
prior_reportNoPrior red-team breakage report dictionary or JSON string to verify remediation against.
session_nameNoUnique identifier / name for the Fable session.
target_scoreNoTarget composite goal score threshold (default 0.95, min 0.0, max 1.0).
thesis_titleNoTitle of the thesis paradigm for System 3 dialectical synthesis.
artifact_pathNoAbsolute filesystem path to blueprint artifact, proof, or benchmark script documenting the refinement.
c_preferencesNoPrior preference distribution C over observations for Active Inference.
evaluator_cmdNoAlias for evaluator_command: shell command or tool invocation for candidate evaluator.
failure_countNoHistorical failure count for tri-level cognitive gear arbitration.
failure_modesNoList of adversarial failure modes identified in critique.
generator_cmdNoAlias for generator_command: shell command or tool invocation for candidate generator.
initial_worldNoInitial world ID for Kripke model checking.
interventionsNoDictionary of Pearl's do-operator interventions: {node_id: value}.
mutation_rateNoGenetic mutation rate probability (default 0.15).
phase_summaryNoConcise summary of findings or deliverables completed in the previous phase.
pipeline_nameNoAlternative alias for automation pipeline name.
pipeline_typeNoType of autonomous pipeline (default 'closed_loop').
target_metricNoTarget KPI node ID for sensitivity and structural brittleness analysis.
contradictionsNoList of parameter trade-offs / contradictions to resolve with TRIZ principles.
crossover_rateNoGenetic crossover rate probability (default 0.80).
dials_overrideNoOptional discrete dials override: variance (1-10), motion (1-10), density (1-10).
invariant_nameNoIdentifier or title of the formal invariant (e.g., 'INV-01: Zero-Deadlock Ring Buffer').
max_iterationsNoMaximum closed-loop iterations before halting (default 10).
seed_paradigmsNoOptional list of initial paradigm definitions to seed the gene pool.
task_objectiveNoTask objective or target outcome for goal scoring rubric.
min_improvementNoMinimum scalar measured-fitness gain required to reset stagnation (default 0.001).
population_sizeNoPopulation size for evolutionary gene pool (default 12).
refinement_typeNoType of rethink-refine cycle (e.g. 'archetype_exploration', 'triz_resolution', 'adversarial_falsification', 'benchmark_probe', 'failure_mode_analysis').
remediated_codeNoRemediated source-code string input. Executed in the isolated subprocess sandbox.
subagent_promptNoThe delegation prompt or contract text for the subagent to validate.
target_resourceNoTarget resource (file path, receipt ID) for proof verification.
task_complexityNoTask complexity index [0.0, 1.0] for tri-level cognitive arbitration.
antithesis_titleNoTitle of the antithesis / adversarial critique.
broken_scenariosNoList or JSON string of broken attack scenarios found during red-team review.
formal_statementNoMathematical or formal contract specification that must never be violated.
item_evaluationsNoItem evaluations mapping, list, or JSON string with pointer_id, satisfied, score, evidence_receipt_id.
observed_fitnessNoOptional measured fitness object keyed by genome ID, with '*' as a default row. Supplying it enables bounded evidence-fed evolution with stagnation stopping; values are clamped to [0, 1] and never authorize deployment.
selected_conceptNoIdentifier of the selected visual concept archetype.
target_thresholdNoTarget threshold score for pipeline iteration termination (default 0.95).
custom_hypothesesNoList or JSON string of custom adversarial hypotheses / attack vectors.
evaluator_commandNoShell command or tool invocation for candidate evaluator.
generator_commandNoShell command or tool invocation for candidate generator.
max_debate_roundsNoMaximum number of dialectical debate rounds for synthesis (default 4).
objective_weightsNoOptional dictionary of weights across the 10 Pareto dimensions.
archetype_overrideNoOptional override for Haute aesthetic archetype.
auto_log_epistemicNoWhether to automatically record retrieved research findings as a [HYPOTHESIS] candidate item in Fable Session's epistemic ledger for subsequent cross-verification.
proof_or_rationaleNoProof sketch, rationale, or inductive argument establishing the invariant.
thesis_descriptionNoCore architecture description and assumptions for the thesis candidate.
affected_invariantsNoList or string of invariant names affected by this file change.
stagnation_patienceNoMeasured generations without improvement before automatic evolution stops (default min(4, generations)).
time_budget_minutesNoImmutable outer authority budget in minutes. set_timer can only change the internal pacing timer.
include_line_numbersNoWhether to format line slice with line numbers.
contradiction_densityNoContradiction density index [0.0, 1.0] for cognitive gear shifting.
epistemic_uncertaintyNoEpistemic uncertainty index [0.0, 1.0] for arbitration.
critique_or_bottleneckNoCritical flaw, vulnerability, edge case, memory/latency bottleneck, or assumption scrutinized.
terminal_probe_resultsNoLive empirical probe output, benchmark figures, latency numbers, or profiling stats supporting the refinement.
architectural_refinementNoConcrete architectural evolution, optimization, or algorithm change derived from the critique.
target_residual_thresholdNoTarget residual contradiction score threshold for convergence (default 0.15).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYesAction-specific result text. Failures begin with `Error:`.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: it partitions operations into read-only families (status/list/telemetry/get/view/check) vs. stateful ones (create, log, record, checkpoint, etc.), discloses error semantics ('missing or invalid inputs return an `Error:` message without raising an MCP transport error'), warns that `unlock_execution` stays blocked until gates pass, and flags that `apply_auto_update` can replace installed Fable files. This materially enriches the annotation-level safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph of moderate length, but for a tool with 116 parameters and 61 actions, the density is justified and nearly every clause earns its place. It is front-loaded with the core dispatcher concept and action-selection rule. Minor deduction: the long comma-enumerated lists of operation names and families are harder to scan than structured bullets or a small table would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the extreme complexity (116 params, 61 actions, output schema present), the description covers the essentials an agent needs: dispatch semantics, sibling-tool routing, session lifecycle, read-only vs. persistent operations, error-handling behavior, and two dangerous operations that require caution. Because an output schema exists, not restating return-value structure is acceptable; nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter, giving a baseline of 3. The description adds genuinely useful parameter behavior beyond the schema: 'Only fields documented for the selected action are read' — a critical clarification for a 116-parameter dispatcher — plus the `session_name` reuse convention and the note that results live in `result`. These rules prevent an agent from assuming all 116 parameters are applicable to every call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Runs one Fable operation selected by `action`' — accurately framing this as an action-dispatching umbrella tool. It then enumerates the domains it covers (sessions, gates, evidence, rubrics, checkpoints, etc.) and explicitly distinguishes itself from the browser_* sibling family, so an agent can determine what this tool is versus what it is not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance ('Use it for Fable sessions, gates, evidence/proofs...') and explicit when-not-to-use routing ('use browser_* tools for web-page navigation and interaction'). It also gives a concrete workflow rule: start stateful flows with `create_session` and `session_name`, then reuse the name — actionable direction an agent can follow without opening the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.3.9
    • Changedbrowser_click2 fields changed
      • changedInput schema / properties / element_id / description
        Previous value: -"Stable element ID of an href-bearing link."New value: +"Stable element ID of an href-bearing link or submit control inside a safe GET form."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedfable_session3 fields changed
      • addedInput schema / properties / min_improvement
        Added value: +{
        +  "description": "Minimum scalar measured-fitness gain required to reset stagnation (default 0.001).",
        +  "minimum": 0,
        +  "type": "number"
        +}
      • addedInput schema / properties / observed_fitness
        Added value: +{
        +  "description": "Optional measured fitness object keyed by genome ID, with '*' as a default row. Supplying it enables bounded evidence-fed evolution with stagnation stopping; values are clamped to [0, 1] and never authorize deployment.",
        +  "type": [
        +    "object",
        +    "string"
        +  ]
        +}
      • addedInput schema / properties / stagnation_patience
        Added value: +{
        +  "description": "Measured generations without improvement before automatic evolution stops (default min(4, generations)).",
        +  "minimum": 1,
        +  "type": "integer"
        +}
  2. 1 tool updatev1.3.7
    • Changedfable_session5 fields changed
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "create_session",
        -  "set_timer",
        -  "get_status",
        -  "telemetry",
        -  "advance_phase",
        -  "log_epistemic_item",
        -  "record_invariant",
        -  "log_refinement_cycle",
        -  "unlock_execution",
        -  "checkpoint_session",
        -  "restore_session",
        -  "list_sessions",
        -  "compile_delegation_contract",
        -  "compress_payload",
        -  "decompress_payload",
        -  "view_slice",
        -  "accumulate_payload",
        -  "flush_accumulator",
        -  "get_compression_stats",
        -  "system3_dialectical_synthesis",
        -  "system3_causal_simulate",
        -  "system3_evolve_paradigms",
        -  "system3_induce_axioms",
        -  "system3_meta_reflect",
        -  "system3_tri_level_orchestrate",
        -  "system3_hyperbolic_embed",
        -  "system3_kripke_verify",
        -  "system3_active_inference",
        -  "system3_proof_oracle",
        -  "track_file_change",
        -  "get_session_lineage",
        -  "inspect_plan",
        -  "verify_proof",
        -  "record_visual_mockups",
        -  "validate_event_history",
        -  "set_goal_rubric",
        -  "evaluate_goal_rubric",
        -  "get_goal_rubric",
        -  "register_automation_pipeline",
        -  "red_team_code_review",
        -  "record_breakage_report",
        -  "verify_red_team_remediation",
        -  "cortical_define_lobe",
        -  "cortical_list_lobes",
        -  "check_auto_update",
        -  "apply_auto_update",
        -  "evolve_cortex",
        -  "audit_anti_slop",
        -  "infer_design_brief",
        -  "generate_design_tokens",
        -  "generate_awwwards_scaffold",
        -  "validate_preflight_design",
        -  "list_design_archetypes",
        -  "scrape_web",
        -  "scrape_youtube",
        -  "scrape_reddit",
        -  "scrape_x",
        -  "scrape_github",
        -  "scrape_arxiv"
        -]New value: +[
        +  "create_session",
        +  "set_timer",
        +  "get_status",
        +  "telemetry",
        +  "advance_phase",
        +  "log_epistemic_item",
        +  "record_invariant",
        +  "log_refinement_cycle",
        +  "unlock_execution",
        +  "checkpoint_session",
        +  "restore_session",
        +  "list_sessions",
        +  "compile_delegation_contract",
        +  "compress_payload",
        +  "decompress_payload",
        +  "view_slice",
        +  "accumulate_payload",
        +  "flush_accumulator",
        +  "get_compression_stats",
        +  "system3_dialectical_synthesis",
        +  "system3_causal_simulate",
        +  "system3_evolve_paradigms",
        +  "system3_induce_axioms",
        +  "system3_meta_reflect",
        +  "system3_tri_level_orchestrate",
        +  "system3_hyperbolic_embed",
        +  "system3_kripke_verify",
        +  "system3_active_inference",
        +  "system3_proof_oracle",
        +  "track_file_change",
        +  "get_session_lineage",
        +  "inspect_plan",
        +  "verify_proof",
        +  "adjudicate_evidence",
        +  "record_visual_mockups",
        +  "validate_event_history",
        +  "set_goal_rubric",
        +  "evaluate_goal_rubric",
        +  "get_goal_rubric",
        +  "register_automation_pipeline",
        +  "red_team_code_review",
        +  "record_breakage_report",
        +  "verify_red_team_remediation",
        +  "cortical_define_lobe",
        +  "cortical_list_lobes",
        +  "check_auto_update",
        +  "apply_auto_update",
        +  "evolve_cortex",
        +  "audit_anti_slop",
        +  "infer_design_brief",
        +  "generate_design_tokens",
        +  "generate_awwwards_scaffold",
        +  "validate_preflight_design",
        +  "list_design_archetypes",
        +  "scrape_web",
        +  "scrape_youtube",
        +  "scrape_reddit",
        +  "scrape_x",
        +  "scrape_github",
        +  "scrape_arxiv"
        +]
      • changedInput schema / properties / code_snippet / description
        Previous value: -"Alternative alias for source-code string input. Dynamic target execution from source-code strings is disabled and requires a separate sandboxed executor."New value: +"Alternative alias for source-code string input. Executed in the isolated subprocess sandbox."
      • addedInput schema / properties / entrypoint
        Added value: +{
        +  "description": "Optional function name to probe inside the target source for red-team review. Auto-detected when the source defines exactly one public function.",
        +  "type": "string"
        +}
      • changedInput schema / properties / remediated_code / description
        Previous value: -"Remediated source-code string input. Dynamic target execution from source-code strings is disabled and requires a separate sandboxed executor."New value: +"Remediated source-code string input. Executed in the isolated subprocess sandbox."
      • changedInput schema / properties / target_code / description
        Previous value: -"Source-code string input. Dynamic target execution from source-code strings is disabled and requires a separate sandboxed executor."New value: +"Source-code string input. Loaded and probed in an isolated subprocess sandbox (process boundary, resource limits, per-call timeout)."
  3. 8 tool updatesv1.3.5
    • Changedbrowser_back1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbrowser_close1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbrowser_forward1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbrowser_navigate1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbrowser_screenshot1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbrowser_snapshot_layers1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedbrowser_type1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": true,
        +  "type": "object"
        +}
    • Changedfable_session1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "result": {
        +      "description": "Action-specific result text. Failures begin with `Error:`.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "result"
        +  ],
        +  "type": "object"
        +}
  4. 14 tool updatesv1.3.2
    • First observedbrowser_back
    • First observedbrowser_click
    • First observedbrowser_close
    • First observedbrowser_forward
    • First observedbrowser_navigate
    • First observedbrowser_open
    • First observedbrowser_press
    • First observedbrowser_reload
    • First observedbrowser_screenshot
    • First observedbrowser_scroll
    • First observedbrowser_snapshot_layers
    • First observedbrowser_type
    • First observedbrowser_wait
    • First observedfable_session

TDQS

A4.1/5.0

Scored across 14 tools

Disambiguation4/5

Most tools have clearly distinct purposes: navigation, clicking, typing, scrolling, screenshots, history, and session management. The only potential confusion is between browser_open and browser_navigate, but their descriptions clearly separate the 'new persistent session' vs 'reuse existing session' use cases.

Naming Consistency4/5

The 13 browser tools follow a consistent verb_noun snake_case convention (browser_open, browser_click, browser_screenshot). The lone fable_session tool breaks the pattern by using a noun instead of an action verb, but this deviation is acceptable as it represents a different functional domain.

Tool Count5/5

14 tools is well within the ideal 3-15 range for a server with both browser automation and Fable session management. Each tool covers a distinct action, and the count feels neither bloated nor thin for the stated scope.

Completeness4/5

The browser surface covers the core navigation lifecycle: open, navigate, reload, back, forward, click, type, press, scroll, wait, screenshot, snapshot, and close. Minor gaps like explicit element inspection and form submission are workable via existing tools, and fable_session centralizes Fable operations.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Verifiable action receipts for AI agents — agents sign claims locally, an independent witness countersigns and timestamps, anyone can verify offline.
    17 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Verified memory for AI agents — agents propose memories that are quarantined until verified against evidence, and recall() returns only trusted, fresh, and in-scope facts, preventing poisoned or hallucinated data from spreading.
    8 npm
    1
    MIT