Skip to main content
Glama

Demo

Keep working. Get the result when it is ready. Here a Futu watch spots an unusual AMD move while you work elsewhere, Codex investigates what changed, and Self-Starter notifies your desktop—the same local engine watches your PRs, CI runs, GPUs and services:

Edited replay of a real Futu watch. The interface and desktop notification are illustrated; quotes are historical. For an engineering workflow, see Investigate a new CI failure.

Related MCP server: runvouch

What this plugin solves

Give your agent an ongoing responsibility: watch your PRs, long-running jobs, local services or market activity, and handle the follow-up with the context you already built.

Ask once: "Keep watching this PR. When CI fails or new review comments arrive, investigate and continue in this conversation." Your agent writes and tests a small local TypeScript probe, hands it to a background launchd or systemd service, and steps aside until the condition actually happens.

When this happens…

Your agent picks up the next task

A new CI run fails on your commit

Read the failing job logs and suggest a fix (walkthrough)

Your PR gets new review comments

Investigate the feedback and propose changes

Your training run finishes or nvidia-smi shows an idle GPU

Compare metrics with the last run or start the next experiment

A local or staging service stays down for two minutes

Inspect recent logs and trace the root cause

NVDA moves 6% or analysts change their rating

Investigate what changed and summarize sentiment (futu-news recipe)

Your IBKR account report updates

Explain new trades, option assignments or cash movements (ibkr-account recipe)

Why not built-in polling or cloud schedules?

Approach

Tokens while waiting

Survives closing terminal / app?

Sees local files, GPUs & localhost?

Continues in your local conversation?

In-session polling (/loop, thread timers)

Calls the model on every check

No — stops when the session closes

Yes

Yes, while open

Cloud routines & remote schedules

Calls the model on every scheduled run

Yes (runs in the cloud)

No — isolated from your machine & LAN

No — starts separate cloud runs

Self-Starter

Zero during routine probe checks

Yes (launchd / systemd service)

Yes (logs, nvidia-smi, CLIs, APIs)

Yes in Codex & Claude Code; dedicated CLI session in Antigravity, OpenCode & ZCode

Closing your terminal or app does not end the watch. While your machine is awake, an independent local service keeps running the probe and enforces state transitions (not-met → met), minimum duration, deduplication, cooldowns and expiry. Code does the waiting. Your agent does the work. Routine checks make no model calls; setup, session initialization and agent actions can still use tokens.

Repeating watches use a dedicated result session by default. In Codex and Claude Code, ask to continue in this conversation to keep follow-ups in your original thread (delivered between turns while open, or resumed in the background when closed). See where the agent answers and the platform-specific destinations below.

Local Web console & push routing

Run self-starter ui (~/.self-starter/bin/self-starter ui) to open the local 127.0.0.1 console—inspect active probe tasks across Codex, Claude Code, Antigravity, ZCode and OpenCode, review probe code and 0-token check counters, set quiet hours, and route alerts per probe to Desktop, Feishu / Lark, WeCom, DingTalk, Slack, Discord, Telegram, Bark, ntfy, custom Webhooks, or Email:

Install

Choose the integration for your agent. All five share the same local trigger engine; their installation and result destinations differ.

Agent

Installation

Where the agent answers

Codex

GitHub plugin marketplace

The original conversation or a dedicated thread

Claude Code

GitHub plugin marketplace

The original session or a dedicated session

Antigravity

Local source installation (agy-plugin)

A dedicated CLI conversation (agy --conversation <id>); pairs with agy remote-control

ZCode

Local source installation from v0.0.4

A dedicated CLI result session; no delivery into the original desktop conversation

OpenCode

Local source installation from v0.0.4

A dedicated CLI result session, reused for later events

You need macOS or Linux, Node.js 20+ and your chosen agent configured with working model access. For the current ZCode CLI, use Node.js 24.14.0+.

Codex

With the Codex CLI installed (npm install -g @openai/codex if needed):

codex plugin marketplace add hyprh/self-starter
codex plugin add self-starter@self-starter

Restart the Codex app, or start a new CLI session.

Claude Code

Inside Claude Code:

/plugin marketplace add hyprh/self-starter
/plugin install self-starter@self-starter

Use Claude Code 2.1.224 or newer for delivery into open sessions, then start a new session after installation. See the Claude Code guide for session delivery and permissions.

On their first start, the Codex and Claude Code plugins download the matching runtime (about 50 MB, including Deno) and set up a launchd or systemd background service. Allow a minute or two; later starts need no download. The terminal command is ~/.self-starter/bin/self-starter.

Antigravity

Google Antigravity (agy CLI / Antigravity 2.0) uses a native plugin (agy-plugin/) and dedicated CLI conversations. Install from a checkout of the v0.0.7 tag:

npm ci
npm run build
node dist/src/cli/main.js install --agy /absolute/path/to/agy
node dist/src/cli/main.js doctor

Start a new Antigravity conversation after installation. Each watch runs in a dedicated agy --conversation <id> result session guarded by a PreToolUse sandbox hook (read-only, workspace-write or danger-full-access). Remote Control synergy: unlike cloud-hosted Remote Agents that spin down after ~15 minutes of inactivity, running agy remote-control on your workstation pairs directly with Self-Starter—local probes keep watching GPUs, localhost and logs at zero tokens, and you can inspect or continue any triggered conversation from your phone. See the Antigravity plugin guide.

ZCode

ZCode support has been available since v0.0.4 and uses a local source installation. Install from a checkout of the v0.0.7 tag:

npm ci
npm run build
node dist/src/cli/main.js install --zcode /absolute/path/to/zcode
node dist/src/cli/main.js doctor

Replace the placeholder with the absolute path to an authenticated ZCode CLI executable, not the desktop launcher. Keep the checkout available and start a new ZCode session. The installer registers a local marketplace and the background service. See the ZCode guide for setup, model access and permission modes.

OpenCode

OpenCode support has been available since v0.0.4 and uses a local source installation. Install from a checkout of the v0.0.7 tag:

npm ci
npm run build
node dist/src/cli/main.js install --opencode /absolute/path/to/opencode
node dist/src/cli/main.js doctor

Use OpenCode 1.x, version 1.19.3 or newer, with working model access. Keep the checkout available and start a new OpenCode session after installation. The installer adds a native plugin loader without changing your OpenCode configuration. Each watch uses a dedicated result session; later events resume that session through the CLI, including when the UI is closed. Delivery into the conversation where you created the watch is not supported. See the OpenCode guide.

Other MCP clients

Any stdio MCP client (Cursor, Windsurf, Cline, Claude Desktop, and others) can connect to self-starter mcp directly to draft, test, activate and manage local zero-token notify watches across all 10 push channels (action.type: "agent" conversation wakeups require one of the five native coding-agent integrations above). Build a checkout of the v0.0.7 tag, start the background service (node dist/src/cli/main.js service install), and add the MCP server:

{
  "mcpServers": {
    "self-starter": {
      "command": "node",
      "args": ["/absolute/path/to/self-starter/dist/src/cli/main.js", "mcp"]
    }
  }
}

Quick start

Test the three things built-in timers cannot do—filtering noise at zero tokens, surviving a closed terminal, and resuming your conversation—with no API key or external service.

  1. Remove any leftover log (rm -f /tmp/self-starter-demo.log), open your agent in a project folder that has a README.md, and ask:

    Watch /tmp/self-starter-demo.log for the next hour (within ~10s latency). Ignore INFO lines—wake up once only when an ERROR line appears, include the matching log lines in the event data, inspect the file it names in this folder, and summarize what to check. Keep the task read-only, and confirm after activation that the first check did not fire.

  2. Once confirmed, close your agent completely (exit in Claude Code, or quit the Codex / OpenCode session). In a normal shell, write routine noise first:

    echo "INFO: healthcheck ok" >> /tmp/self-starter-demo.log

    Wait 15 seconds: local code checks the log with zero model calls and ignores the INFO line (~/.self-starter/bin/self-starter list shows the latest check summary).

  3. Now write an error while your agent is still closed:

    echo "ERROR: broken anchor or installation step in README.md" >> /tmp/self-starter-demo.log
  4. Within ~30 seconds, Self-Starter spots the ERROR line and runs the follow-up in the background:

    • Codex and Claude Code resume the closed conversation where you created the watch (claude --resume or reopen Codex to find the analysis already waiting).

    • Antigravity, ZCode and OpenCode run the task in a dedicated CLI result session (agy --conversation <id>, zcode --resume <id> or opencode --session <id>).

    Run ~/.self-starter/bin/self-starter history (or node dist/src/cli/main.js history from a source checkout) to see the fire, receipt and destination—such as (your session, resumed in the background)—then delete the demo watch and /tmp/self-starter-demo.log.

For a live GitHub workflow, try watching a CI failure.

What to watch

Anything a small program can check. Your agent writes the probe, tries it once, and sets up the watch with the action you authorize.

Watch

Ask your agent

Source

Long jobs

"When the training run finishes, compare it with the last one."

A log or output file

GPU availability

"When the GPU is idle for ten minutes, start the next experiment."

nvidia-smi

PR reviews

"When my PR gets new review comments, investigate them and propose changes."

GitHub pull requests

Issues

"When a new issue is labelled bug, read the report and suggest where to investigate."

GitHub Issues

CI

"When CI fails on main, investigate and suggest a fix."

GitHub Actions (guide)

Releases

"When a new version of zod is out, try it on a branch."

The npm registry

Services

"If the dev server is down for two minutes, find out why."

A health endpoint

Files

"When a new invoice lands in invoices/, add it to expenses.csv."

A local folder

Research

"When a speculative decoding paper hits arXiv, summarize it."

The arXiv API

Markets

"Tell me when analysts change their view on Tencent."

Futu research (recipe)

Accounts

"Watch my IBKR account for anything unusual."

IBKR Flex reports (recipe)

These examples need access to their data sources. Network access and credentials for a probe and its later agent task are configured separately; the CI guide walks through that distinction.

How it works

  1. Describe the event. Your agent writes a TypeScript probe or uses a ready-made recipe, tests it, and sets the action and destination.

  2. Code does the waiting. A local background service runs the probe on a schedule. The engine handles minimum duration, cooldown, deduplication, expiry and delivery retries without calling a model for each check.

  3. Your agent does the work. When the event fires, the task goes to the destination shown above. Codex and Claude Code can resume closed conversations in the background; Antigravity, ZCode and OpenCode resume their dedicated result sessions. You can choose a notification without an agent task instead.

  4. Check the result—or route it anywhere. Open the local Web console (self-starter ui) or run self-starter history to read actionable receipts, resume sessions in one click, manage quiet-hours queues, and route alerts per watch to your desktop, chat channels or email.

Running locally

  • Keep the machine awake. Checks run locally, including when the agent app is closed. External data sources also need connectivity.

  • Review what can run. Probes run as your user by default; API-only probes can use a restricted sandbox. Background agent tasks have separate permissions and cannot obtain interactive approval. Antigravity, ZCode and OpenCode use native hook or tool permissions rather than OS isolation. See the security policy, Antigravity guide, ZCode permissions and OpenCode guide.

  • Verify delivery once. Run the quick start on your own setup. Desktop notifications need a working notification service; on macOS, terminal-notifier enables clicks that open a Codex thread. Use the Codex app checklist to check foreground and background behavior.

  • Keep secrets out of chat. API keys, webhook URLs, bot tokens and email app passwords are stored locally via self-starter ui or the CLI (0600 permissions), never in chat or probe source. What a probe saw is passed to the agent as untrusted data.

More

  • Guide: triggers, local Web console (self-starter ui), outbound push channels, secrets and CLI commands

  • Antigravity guide: native plugin installation, dedicated agy sessions and agy remote-control

  • ZCode guide: local installation and dedicated result sessions

  • OpenCode guide: native plugin installation and background result sessions

  • Design: architecture, execution boundaries and verification

  • Changelog

  • Development: from a clone, npm install && npm link && self-starter install installs the plugin for supported agents it finds. npm test runs unit and integration tests. CI checks installation on macOS and Linux, agent delivery with real CLIs and a stand-in model, and email delivery.

License

MIT

Available Tools

14 tools
service_statusA
Read-only

Check the Self-Starter background service: version, available agent CLIs, trigger counts and today's agent runs.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds that the call surfaces version, CLIs, trigger counts and today's runs, which is useful, but says nothing about whether the check starts a stopped service, how expensive it is, or how failures surface.

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?

A single sentence that front-loads the target ('the Self-Starter background service') and then lists the returned facts. Every clause earns its place and nothing is repeated from the annotations.

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?

With no input parameters and no output schema, the description carries the job of saying what comes back, and it enumerates four categories of returned data. The only gap is that the shape of those values (e.g. what a 'trigger count' or 'today's agent runs' entry looks like) is unspecified.

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 tool takes no parameters at all, so there is nothing for the description to disambiguate and the baseline of 4 applies. The schema and description are consistent in describing a parameterless inspection call.

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 pairs a concrete verb ('Check') with a specific resource ('Self-Starter background service') and enumerates what is inspected: version, available agent CLIs, trigger counts, and today's agent runs. That clearly separates it from the trigger_* siblings, which all operate on individual triggers rather than overall service state.

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?

Use is only implied by the content listed — an agent can infer this is the diagnostic/health check to run before working with triggers. There is no explicit when-to-use guidance, no prerequisites, and no statement of what to do instead if the service is down.

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

trigger_activateA

Turn a draft on: its probe starts running on schedule, and each fire hands the task back to you. The trigger keeps working on its own after this, so decide first whether the user should confirm it; the self-starter:triggers skill says when to ask.

NameRequiredDescriptionDefault
draft_idYesThe draft id returned by trigger_draft.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only declare this as non-read-only and non-destructive; the description adds substantial context beyond that — the probe runs on a schedule, each fire hands the task back to the agent, and the trigger persists on its own afterwards. That autonomy/persistence disclosure is exactly the behavior an agent needs before calling. It does not say how to undo it or what the immediate response contains, which keeps it below 5.

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?

Two compact sentences with the primary effect stated first and the caution second — good front-loading and no redundant restatement of the title. 'Hands the task back to you' is slightly colloquial for an operational contract, but it is not wasted text.

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?

For a one-parameter, non-destructive activation tool with no output schema, the description covers the important unknowns: what starts, what keeps happening, and the confirmation question. It is thin on the immediate return value and on how activation relates to trigger_resume, which are the only notable gaps.

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% and the single parameter already documents that draft_id comes from trigger_draft. The description adds no further meaning about the parameter (format, validity, or what happens with a stale id), so baseline 3 applies.

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 uses a concrete verb-plus-resource framing ('Turn a draft on') and explains the immediate consequence ('its probe starts running on schedule'). It implicitly distinguishes itself from trigger_pause/trigger_resume by scoping the input to a draft, but it never names a sibling tool to contrast with, so an agent must infer the draft-vs-existing-trigger distinction.

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?

It gives a real precondition for use: the trigger becomes autonomous, so 'decide first whether the user should confirm it.' The escape hatch is delegated to an external skill ('the self-starter:triggers skill says when to ask') rather than stated inline, which leaves the actual condition unstated in the description itself.

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

trigger_deleteA
Destructive

Delete a trigger, its probe code and its state. Its past fires stay in the history.

NameRequiredDescriptionDefault
trigger_idYesThe trigger id, as shown by trigger_list.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and readOnlyHint=false, so the description is not carrying the safety burden alone. It still adds real context beyond them: exactly what is destroyed (probe code, state) and what is preserved (past fire history), which is what an agent needs before an irreversible call.

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, zero padding, with the core action front-loaded and the scope/consequence detail following immediately. Nothing could be cut without losing meaning.

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?

For a single-parameter destructive tool with a fully described schema and no output schema, the description covers action, collateral damage, and data retention. Only irreversibility confirmation expectations are unstated, a minor gap.

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 coverage is 100% and the trigger_id description already points to trigger_list as the source of valid ids. The tool description adds nothing further about the parameter, so baseline 3 applies.

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?

Specific verb+resource ('Delete a trigger') with an added scope clause naming the collateral ('its probe code and its state'). The verb alone differentiates it from trigger_pause/trigger_resume/trigger_draft among siblings, though no sibling is named explicitly.

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?

Usage is implied by the destructive verb and the note that history survives, which hints at the delete-vs-pause tradeoff, but the description never states when to choose trigger_delete over trigger_pause or trigger_draft, nor any prerequisites or confirmation requirements.

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

trigger_draftA

Submit a new trigger, or a new version of one, as a draft. The engine checks the definition, saves the probe code and runs the probe once. Returns the draft id, the trial run result, warnings and a plain-language description. Nothing runs on a schedule until trigger_activate. Pass either code you wrote or a ready-made recipe from trigger_recipes. Follow the self-starter:triggers skill when writing the definition and the probe.

NameRequiredDescriptionDefault
codeNoThe probe's TypeScript source for Deno. It reads one JSON object on stdin and prints one JSON object on stdout. Unless the definition sets probe.access to sandbox, it runs with the user's permissions: files, commands, any network. Leave it out when using a recipe.
recipeNoId of a ready-made recipe from trigger_recipes, such as ibkr-account. The recipe supplies the code, access, permissions and mode; set its parameters in definition.probe.params.
replaceNoSet to true to replace the existing trigger with the same id (needed to change its code or mode).
definitionYesThe trigger definition: id, name, intent, probe, mode, for, policy, action, target, notify (see the skill).

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the annotations by describing the actual pipeline: the engine validates the definition, saves the probe code, and runs the probe exactly once. It discloses what is returned (draft id, trial run result, warnings, plain-language description) and the key safety property that nothing is scheduled until activation, which the destructiveHint/readOnlyHint flags alone would not convey.

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?

Front-loaded with the core action, then the side effects, then the return values, then the alternatives and authoring reference. Four tight sentences with no filler, though the return-value enumeration and the skill pointer could be trimmed slightly without loss.

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 nested-object, no-output-schema mutation tool, the description supplies everything an agent needs: what it writes, that the probe executes once against the live user permission context (echoed in the code param), the returned artifacts, and the activation gate. The absence of an output schema is compensated by the explicit return list.

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, but the description adds the mutual-exclusivity rule the schema only implies piecemeal: pass either code you wrote or a recipe, not both. That is a genuine constraint that helps the agent construct a valid call, though it does not elaborate on definition sub-fields beyond pointing at the skill.

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 specific verb and resource ('Submit a new trigger, or a new version of one, as a draft') and immediately scopes it against the sibling that actually runs things ('Nothing runs on a schedule until trigger_activate'). An agent can separate this from trigger_activate and trigger_recipes without opening any schema.

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?

Gives clear context for when to use it: drafting rather than activating, and choosing between hand-written code and a ready-made recipe from trigger_recipes. It also points at the self-starter:triggers skill for authoring the definition. The one missing distinction is against the sibling trigger_update, which is not mentioned even though the 'replace' parameter overlaps with it.

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

trigger_getA
Read-only

Details of one trigger: its definition, the state of its firing rules (waiting, cooling down, ...), recent checks and recent fires. Use it to explain why a trigger did or did not fire.

NameRequiredDescriptionDefault
trigger_idYesThe trigger id, as shown by trigger_list.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description goes beyond that by disclosing the composition of the response (definition, firing-rule state, recent checks, recent fires), which is genuinely useful since no output schema exists. It stops short of noting behavior for an unknown/invalid trigger_id or any limits on 'recent'.

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 tightly written sentences with the returned content front-loaded and the purpose second. The parenthetical examples ('waiting, cooling down, ...') clarify the state concept in a few words with no filler.

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?

For a single-parameter read tool with full annotation coverage, the description is nearly sufficient: it explains what the agent gets back and why it would call it. The only gaps are edge behavior (invalid id, empty trigger) and how far back 'recent' extends, which are minor for this complexity.

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?

Only one parameter and schema description coverage is 100%, with the schema itself telling the agent the id comes from trigger_list. The description adds no format, example, or lookup guidance beyond that, so the baseline of 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?

States a specific verb+resource ('Details of one trigger') and enumerates what the detail comprises: definition, firing-rule state (waiting, cooling down), recent checks, recent fires. The singular 'one trigger' plus the schema's reference to trigger_list makes it distinguishable from the list/history siblings without opening either schema.

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?

Gives an explicit diagnostic use case: 'Use it to explain why a trigger did or did not fire.' That is a clear when-to-use signal, but it names no alternatives or exclusions — e.g. when to prefer trigger_history for raw events or trigger_list for discovery — leaving sibling routing partly to inference.

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

trigger_historyA
Read-only

Recent fires, newest first, with how each was handled and the receipt. Leave out trigger_id to see all triggers.

NameRequiredDescriptionDefault
limitNoHow many fires to show (default 10, at most 100).
trigger_idNoThe trigger id, as shown by trigger_list.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral context beyond those annotations: the result ordering (newest first), the grading information returned per fire, and the fact that omitting the id broadens scope to all triggers. It says nothing about retention window or result volume, but with annotations carrying the safety profile this is solid.

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?

Two short sentences, front-loaded with what you get and how it is ordered, followed by the scoping rule. No filler. The phrase "with how each was handled and the receipt" is slightly compressed jargon but stays within budget.

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?

For a two-parameter read-only listing tool with no output schema, the description covers ordering, per-fire contents, and the optional-filter behavior, which is the information an agent needs to call it correctly. Gaps are minor: no retention window, and "receipt" is never explained, leaving the exact return payload partly opaque.

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 both parameters are already documented, which sets a baseline of 3. The description adds meaning the schema does not: omitting the optional trigger_id is defined as "all triggers" rather than an error or empty result, and it cross-references trigger_list as the source of ids. Limit behavior is left entirely to 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 identifies a concrete resource (recent fires, i.e. trigger executions) and states the ordering (newest first) plus the payload shape (how each was handled and the receipt). It is clear what the tool returns, but it never distinguishes itself from plausible siblings such as trigger_report or trigger_get, which could also surface execution information.

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?

Usage is only implied: "Recent fires" signals this is for reviewing past executions, and "Leave out trigger_id to see all triggers" gives a scoping rule. There is no explicit when-to-use statement, no mention of when to prefer trigger_report or trigger_get, and no note about how far back the history goes.

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

trigger_listA
Read-only

List all triggers with their state, last check, next check and number of fires.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

The supplied annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered without the description's help. The description does add real value beyond that by enumerating the response fields, but says nothing about ordering, pagination, or behavior when no triggers exist.

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?

A single front-loaded sentence with no filler; every clause maps to a distinct piece of returned data. There is no repetition of the title or annotations.

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?

For a no-argument read-only listing tool with full annotation coverage, the definition is close to sufficient, and the field list compensates for the absence of an output schema. Ordering and empty-result behavior are the only notable omissions, and both are minor at this complexity.

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 tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline applies. No parameter-level detail is expected or missing.

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 states a specific verb and resource ("List all triggers") and names the fields returned (state, last check, next check, number of fires), so the agent knows exactly what the call produces. It stops short of distinguishing itself from siblings such as trigger_get or trigger_history, which also surface trigger data.

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 explicit when-to-use guidance and no mention of alternatives, even though trigger_get, trigger_history, and trigger_report are close siblings. The only steer is the word "all", which weakly implies a bulk-listing use case rather than a single-record lookup.

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

trigger_pauseA

Pause a trigger: its probe stops running until it is resumed.

NameRequiredDescriptionDefault
trigger_idYesThe trigger id, as shown by trigger_list.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=false and readOnlyHint=false, so the bar is lower, and the description adds real substance: the probe stops running and the state is reversible via resume. It stays silent on what happens to in-flight or queued runs and on any permission requirements, which are the remaining behavioral gaps.

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 short sentence, front-loaded with the verb, effect, and reversal condition. No filler or restatement of the title.

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?

For a one-parameter, non-destructive state-change tool with no output schema, the description covers the essential what and the reversibility. Only edge-case behavior for running or queued executions is left undocumented.

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?

There is a single required parameter with 100% schema description coverage, and the schema itself points to trigger_list as the source of the id. The description adds nothing about the parameter, which is acceptable at full coverage but earns no bonus.

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 gives a specific verb (pause) and resource (trigger) plus the operational meaning — the probe stops running. It gestures at trigger_resume with 'until it is resumed' but never names that sibling or any other, so differentiation is implied rather than explicit.

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?

Usage is implied by the effect: pause when you want a trigger's probe to stop while keeping it resumable. There is no explicit when-to-use versus when-to-delete, when-not-to-pause, or named alternative such as trigger_resume or trigger_deactivate, leaving the agent to infer routing.

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

trigger_recipesA
Read-only

List the ready-made recipes: probes that ship with the plugin for common things to watch, such as an Interactive Brokers account. Each lists its parameters, the secrets the user must store first and the setup steps. Prefer a recipe when one fits.

NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and closed-world scope, so the safety profile is covered. The description adds real value beyond that by disclosing what each returned item contains: parameters, required secrets, and setup steps. It does not mention result count or sizing, which keeps it off a 5.

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?

Three short sentences, front-loaded with the action and resource, with no filler. The usage hint is efficiently placed at the end where it reads as a closing recommendation rather than padding.

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?

For a zero-parameter list tool with no output schema, the description adequately explains what comes back (parameters, secrets to store, setup steps) so an agent knows the shape of results. A brief note on how many recipes are typical or what to do next after listing would make it complete.

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 tool takes zero parameters (schema coverage 100% trivially), so the baseline is 4. Nothing in the description introduces confusing or undocumented inputs.

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 gives a specific verb+resource ("List the ready-made recipes") and immediately defines what a recipe is ("probes that ship with the plugin"). It clearly separates this from trigger_list/trigger_get by framing recipes as pre-built templates rather than user-created triggers, though it never names a sibling explicitly.

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?

"Prefer a recipe when one fits" gives an explicit selection heuristic favoring this tool when a pre-built template matches the need. It stops short of naming the alternative (e.g. building a trigger manually via trigger_draft) or stating when NOT to use it, so it falls just below the top score.

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

trigger_reportA

Report that you finished handling a trigger fire (a message that starts with [self-starter]). Call it once per fire, at the end, with the fire_id from the message, one line on what you found or did, and notify=true only if the user should be told now.

NameRequiredDescriptionDefault
notifyYestrue if the user should get a notification now.
fire_idYesThe fire id from the [self-starter] message, such as fire_...
summaryYesOne line for the user: what you found or did.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover readOnly=false, destructive=false, and openWorld=false, so the safety profile is set; the description adds real behavioral context beyond that: one call per fire, at the end, and that notify=true causes a user-facing notification now. It stops short of saying what happens to the summary (where it surfaces) or whether reporting is idempotent.

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?

A single front-loaded sentence with the action first and the how-to details trailing, and every clause carries information (one call per fire, timing, all three parameters). Nothing is redundant with the schema or annotations.

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?

Small three-parameter tool with no output schema, and the description covers purpose, timing, all parameter usage, and the notification side effect. An agent has everything needed to call it correctly on the first try.

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 baseline is 3, but the description adds meaning: the summary is constrained to 'one line', fire_id comes from the [self-starter] message, and notify should be true only when the user should be told now. This sharpens the schema's terser wording rather than repeating it.

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?

Specific verb and resource: 'Report that you finished handling a trigger fire', and it defines what a fire is ('a message that starts with [self-starter]'), a concept no sibling tool explains. An agent can distinguish this from trigger_history or trigger_get without opening the schema.

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?

Gives explicit timing and frequency: 'Call it once per fire, at the end', which directly answers when to invoke it. It does not name an alternative or a when-not condition, but the sibling set offers no competing 'report completion' tool, so the gap is minor.

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

trigger_resumeA

Resume a paused trigger. Its probe runs again right away.

NameRequiredDescriptionDefault
trigger_idYesThe trigger id, as shown by trigger_list.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds one useful behavioral fact beyond that: the probe runs again immediately, signaling a prompt side effect. It omits what happens if the trigger is not currently paused and whether the call is idempotent.

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 short sentences with zero waste, purpose front-loaded before the behavioral note. Nothing could be removed without losing information.

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?

For a one-parameter, non-destructive mutation with annotations and no output schema, the description covers purpose and immediate effect adequately. The main residual gap is the relationship to trigger_activate, which matters given the sibling list.

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% and the single trigger_id parameter is documented with a pointer to trigger_list. The description adds no further meaning about the identifier, so the baseline of 3 applies.

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?

States a specific verb and resource ('Resume a paused trigger'), which is clearly distinct from trigger_pause. It does not, however, distinguish itself from sibling trigger_activate, which an agent could reasonably confuse with resume.

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 phrase 'a paused trigger' implies the precondition for use, but there is no explicit when-not guidance and no routing to trigger_activate or trigger_draft, which is the main ambiguity in this sibling set.

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

trigger_testA
Read-only

Run an active trigger's probe once now and show the result, without firing or changing anything.

NameRequiredDescriptionDefault
trigger_idYesThe trigger id, as shown by trigger_list.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is largely covered. The description still earns credit by clarifying that the probe neither fires the trigger nor mutates it, which matters because openWorldHint implies an external call that could plausibly have side effects. It does not mention latency, external-service failure modes, or whether repeated probes consume quota.

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?

A single front-loaded sentence with no filler; the action, the one-shot scope and the non-mutating guarantee all appear before any trailing detail.

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?

For a one-parameter tool with full annotation coverage, the definition covers what it does and what it will not do. The gap is 'show the result' — with no output schema, the shape of a probe result (pass/fail, latency, error detail) is left entirely undefined.

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 coverage is 100% and the trigger_id field already documents that the id comes from trigger_list, so the schema does the heavy lifting. The description adds only the qualifier that the referenced trigger must be active, which is a small but real constraint 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?

States a specific verb and resource ('Run an active trigger's probe') plus the scope 'once now', which separates it from trigger_get (read config), trigger_activate (change state) and trigger_tune (adjust settings). An agent can tell from the sentence alone what this does and that it is a one-shot execution rather than a listing or mutation.

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?

Gives clear usage context ('once now' and 'without firing or changing anything') and an implicit precondition that the trigger must already be active, which steers the agent toward trigger_activate first. It never names an alternative sibling explicitly, so the routing logic has to be inferred rather than read.

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

trigger_tuneA

Make a trigger that fires more often than is useful quieter, keeping its state (no new baseline, no fire again for a condition that already holds): check less often, wait longer after a fire, require the condition to hold longer, allow fewer fires, or pause it. It is the one change allowed while handling a fire, and then only for the trigger that fired; the user is told what changed and why. Anything that makes a trigger more sensitive goes through the user and trigger_update.

NameRequiredDescriptionDefault
forNoState triggers: how long the condition must hold before it fires, such as 5m. Only longer than now.
pauseNoPause the trigger until the user resumes it.
reasonYesWhy, in one sentence the user will read, such as: fired 14 times in the last hour on the same flapping health check.
cooldownNoAfter a fire, wait this long before the next one, such as 1h. Only longer than now.
max_firesNoStop after this many fires in total. Only lower than now.
trigger_idYesThe trigger id, as shown by trigger_list.
check_everyNoCheck no more often than this, such as 15m. Only longer than now.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well past annotations (which only say non-read-only, non-destructive) by disclosing the stateful semantics — no new baseline and no re-fire for an already-holding condition — plus the side effect that the user is told what changed and why. The monotonic tightening constraint is established as a behavior, not just a schema rule.

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?

Front-loaded with the core action and state guarantee, then the allowed levers, then the exclusion — a sensible order with no filler sentences. The opening is dense and parenthetical-heavy, bordering on a run-on, which costs a point.

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?

For a 7-parameter mutation with no output schema, the definition covers scope, direction of change, state preservation and user-visible consequences, which is what an agent needs to invoke it correctly. Return behavior and failure modes (e.g. a trigger already paused) are left unstated but are low stakes here.

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 earns a step up by enumerating the five levers in plain language and framing the one-directional constraint ('check less often, wait longer ... allow fewer fires') as a deliberate safety principle rather than an isolated per-field note. It does not add format details beyond what the schema already gives.

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?

Specific verb phrase ('Make a trigger ... quieter') plus resource and the exact dimension of change (check interval, cooldown, hold time, fire cap, pause). It explicitly draws the boundary against trigger_update, so an agent can distinguish it from siblings 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 Guidelines4/5

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

Strong when-to-use ('the one change allowed while handling a fire, and then only for the trigger that fired') and an explicit when-not with the alternative named ('anything that makes a trigger more sensitive goes through the user and trigger_update'). The gap is the 'pause' option, which overlaps the sibling trigger_pause and is never routed or differentiated.

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

trigger_updateA

Change an existing trigger: probe.params, probe.interval, probe.timeout, probe.access, probe.permissions, for, policy, action, target (kind, cwd), notify, name or intent. The change takes effect at once and the firing rules start over. To change the probe code or the mode, use trigger_draft with replace=true instead.

NameRequiredDescriptionDefault
changesYesThe fields to change, shaped like the definition, for example {"probe": {"params": {"threshold": 210}}}. null removes a field.
trigger_idYesThe trigger id, as shown by trigger_list.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior beyond that: changes are applied immediately and firing rules restart, which materially affects how an agent should sequence calls. It stops short of describing validation failures, partial-apply behavior, or auth requirements, so it is strong but not exhaustive.

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?

Three sentences, front-loaded with the action and the changeable fields, then the effect, then the routing rule. The field list is dense but each item earns its place as valid targets. Minor cost: the long comma-separated enumeration is harder to scan than a short structural hint would be.

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?

For a two-parameter mutation with nested objects, the description covers what can change, when changes take effect, and where to go for the excluded cases. With full schema coverage and no output schema, little is missing. It could still say whether a call is atomic or whether unknown fields are rejected, but nothing an agent needs to invoke it correctly is absent.

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% and the schema already explains the changes object shape and null semantics. The description nonetheless adds value by enumerating which nested paths are legal targets (probe.params, probe.timeout, target.kind/cwd, etc.), which the schema only gestures at with 'shaped like the definition'. It does not go deeper into per-field formats, but the enumeration is a real constraint an agent would otherwise have to guess.

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?

Opens with a specific verb and resource ('Change an existing trigger') and immediately enumerates the exact fields that can be modified (probe.params, probe.interval, policy, action, target, notify, name, intent). It also explicitly contrasts itself with the sibling trigger_draft, so an agent can distinguish the two without reading either schema.

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?

States the boundary condition directly: 'To change the probe code or the mode, use trigger_draft with replace=true instead.' This names the alternative tool, the parameter to set, and the exact cases that should be routed elsewhere, leaving nothing to inference.

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. 14 tool updatesv0.0.7
    • First observedservice_status
    • First observedtrigger_activate
    • First observedtrigger_delete
    • First observedtrigger_draft
    • First observedtrigger_get
    • First observedtrigger_history
    • First observedtrigger_list
    • First observedtrigger_pause
    • First observedtrigger_recipes
    • First observedtrigger_report
    • First observedtrigger_resume
    • First observedtrigger_test
    • First observedtrigger_tune
    • First observedtrigger_update

TDQS

A3.9/5.0

Scored across 14 tools

Disambiguation4/5

Most tools map to clearly distinct actions (pause, resume, delete, list, get, test, history, report). The main friction is between trigger_update, trigger_tune and trigger_draft, which all modify a trigger; the descriptions do explicitly partition them (tune = quieter only, draft+replace = code/mode changes), so an agent can resolve it, but it takes careful reading. trigger_test also partly overlaps the trial run performed by trigger_draft.

Naming Consistency4/5

Thirteen of fourteen tools follow a predictable trigger_<verb> pattern in snake_case. The exceptions are trigger_recipes (a noun/listing verb) and service_status, which drops the trigger_ prefix entirely, but both remain readable and unambiguous.

Tool Count5/5

Fourteen tools is well within the ideal range and each one covers a distinct lifecycle stage or informational need (draft, activate, pause, resume, tune, test, history, report, recipes, service status). Nothing feels padded or redundant.

Completeness4/5

The trigger lifecycle is essentially closed: create (draft), activate, pause/resume, update/tune, test, inspect (get/list/history), report a fire, and delete, plus recipes and service health. Minor gaps remain around inspecting raw probe code/execution logs and any bulk or clone operation, but agents can work around these.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Local-first memory for your AI agent. One SQLite file you own — offline, no API key. Plugs straight into Claude Code.
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    The watchdog for unattended AI agents: flags MISSED, FAILED, NO_EVIDENCE, RETRY_STORM, BUDGET, DRIFT and STALLED runs of Claude Code routines, OpenClaw, n8n and cron jobs, and alerts via Telegram, Slack or webhook. MIT and self-hostable.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    One local memory every coding agent on your machine shares — Claude Code, Cursor, Claude Desktop, OpenCode. Answers from past sessions, commits, CLAUDE.md/AGENTS.md and ADRs with the exact source, and withholds work another agent has claimed so two agents don't rewrite the same thing.
    3
    1
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables operating a Claude Code session entirely from Telegram around the clock, with two-way voice messages, persistent memory across restarts, scheduled reminders, calendar access, and a self-restarting daemon. It also streams live progress and every tool call as Claude works, supports inline-button prompts and permission approvals, and exposes session/subagent/token visibility through a Telegram Mini App.
    -