Skip to main content
Glama
arkaigrowth

waiting-on

by arkaigrowth

waiting-on

A local-first, tenant-separated open-loops ledger for agentic workflows: it tracks who has the ball, per domain, across email, agent sessions, and other channels.

An "open loop" is anything waiting on a decision or a reply. waiting-on reads the places those loops accumulate (an email account, your Claude Code and Codex session transcripts, a voice queue, manually entered leads), normalizes each one to a single record type, and stores it in a per-domain local SQLite database. It then answers one question from several surfaces: what is still waiting on you, and what are you waiting on someone else for.

The ledger core reads and tunes your data; it never sends anything. The one write it can make to an outside system is an explicit, opt-in draft-creation tool: waiting_on_draft_reply (and its draft --create-gmail-draft CLI equivalent) can create a Gmail draft through an external Gmail MCP server, and that is the only write path off the local store. There is no send path anywhere in the code. waiting-on holds no credentials of its own and stores snippets rather than full message bodies.

Why it is built this way

The interesting parts are the guarantees, not the CRUD.

  • Fail-closed tenant walls. Each domain maps to its own SQLite database file, with a fail-closed profile allow-list enforced in application code (the Ledger facade), not an OS-level sandbox. A session runs under a profile that names the domains it may open; an unknown or unmapped profile resolves to no domains rather than to everything. The Ledger facade raises TenantWallError when a caller reaches for a domain outside its profile, and AmbiguousDomainError when a bare line_id exists in more than one allowed domain, so it refuses to guess which tenant you meant instead of silently writing the wrong one.

  • Optimistic-concurrency writes with named failure modes. Lead writes are versioned compare-and-swap operations against a WAL-mode database. A losing write raises LeadWriteConflict, and a lock-contention retry-exhaustion raises LeadWriteBusy (a subclass). The failure each one guards against is spelled out in its docstring, for example a completed lead being silently reopened by a stale writer.

  • Pluggable adapters over one contract. Email, agent-threads, voice, and manual-lead collectors each normalize their source into a single LineObservation. Adding a channel means writing one adapter, not touching the ledger. The deterministic file-based collectors (agent-threads, voice, manual leads) degrade to empty results when their source is absent: they yield nothing rather than raising. The email path is the exception: it shells out to an external Gmail MCP server, and a failure of that subprocess surfaces as a GmailMcpError rather than being swallowed.

  • Deterministic core, zero-LLM collectors. The agent-threads and voice adapters classify state with deterministic heuristics and replay, not a model call, so their output is reproducible and testable. An injected clock makes all age math deterministic under test.

  • Four surfaces over one ledger. An MCP server (for agent tool use), a CLI, an fzf-driven tuning TUI, and a static self-contained HTML board all read the same store.

The test suite covers the tenant walls, the concurrency failure modes, each adapter's normalization and fail-soft behavior, and the render surfaces. Run it with python3 -m pytest from the repo root; it is 156 tests today.

Related MCP server: project-progress

Architecture

email account         -> GmailMcpClient       -+
Claude/Codex sessions -> AgentThreadsAdapter   -+-> LineObservation -> per-domain
voice queue (JSONL)   -> VoiceAdapter          -+     (one contract)     SQLite DB
manual leads (JSON)   -> ManualLeadAdapter     -+                            |
                                                                            v
                                        MCP server | CLI | TUI | HTML board

The tenant boundary is enforced where roots and accounts resolve to a domain, so an adapter can only ever read the sources authorized for the domain it is collecting.

Install

Requires Python 3.11 or newer. No required third-party dependencies for the core.

python3 -m pip install -e .

Optional extras: .[mcp] for the MCP server, .[parquet] for Parquet export. The tuning TUI additionally needs textual, and the fzf TUI needs fzf.

You can also run straight from a checkout without installing, via the launchers in bin/.

Quickstart

The repository ships a synthetic examples/demo-leads.json so you can see the shape without any configuration. With no config file, waiting-on uses a single default domain.

# Import the demo leads into the local ledger
bin/waiting-on lead seed examples/demo-leads.json

# See who has the ball (your side first)
bin/waiting-on lead list

# A compact open-loops pane, suitable for a terminal or a cmux column
bin/waiting-on pane

# Render a static, self-contained HTML board from the current leads
python3 scripts/render_lead_board.py --out board.html

To wire up real sources (email accounts, agent-session roots, domains, and profiles), copy config.example.toml to ~/.config/waiting-on/config.toml and edit it. The example file documents the tenant-wall and profile model inline.

Documentation

  • docs/open-loops-ledger-design.md: the design and phased plan, including the tenant-wall model.

  • docs/agent-threads-adapter-spec.md: how the agent-session collector decides a session is a forgotten open loop.

  • docs/cli-contract.md: the machine-readable CLI contract and exit codes.

  • docs/security.md: what is and is not stored, and why there is no send path.

  • docs/studio-spec.md and docs/calibration-and-panes.md: the TUI and the live-tuning panes.

  • docs/agent-integration.md: driving waiting-on from an agent.

Status

Early and actively developed: this repository was extracted from a working personal deployment, so the interfaces are real but may still shift, and the demo leads shipped here are synthetic.

Known rough edges:

  • The agent-threads classifier is a deterministic tail heuristic over transcript events. It is conservative and tunable (idle-hours and max-age dials), but it can still misjudge an unusual session; treat its waiting_on_me calls as strong hints, not verdicts.

  • The email adapter expects an external Gmail MCP server to be configured (its command is set in config). waiting-on deliberately does not hold Gmail credentials itself, so email refresh does nothing until that is wired up.

  • Additional channels (for example iMessage) and an optional LLM enrichment pass are described in the design doc but not yet built. Today the collectors are deterministic and zero-LLM.

  • The config example is intentionally minimal. Multi-domain setups work, but you configure the domains, accounts, and profiles by hand.

License

MIT. See LICENSE.

Available Tools

12 tools
waiting_on_draft_replyC

Preview or create a Gmail draft. Never sends.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_keyNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It explicitly states 'Never sends,' implying safety, but fails to disclose whether the operation is read-only, whether authentication is required, or what side effects (if any) occur on 'create.' The agent lacks critical behavioral context.

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 very concise at two sentences, which is appropriate for a simple tool. It front-loads the core action and critical note. No wasted words.

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 tool with one parameter and no output schema, the description covers basic purpose and a key constraint. However, it lacks explanation of the 'preview' action's return value, the effect of 'create,' and error conditions. It is adequate but not complete.

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

Parameters2/5

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

The sole parameter 'thread_key' has no description in the schema (0% coverage). The description does not explain what a thread key is, how to obtain it, or its purpose. No added semantic value beyond the parameter name.

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 function: preview or create a Gmail draft, with a key disclaimer that it never sends. The verb 'preview or create' and resource 'Gmail draft' are specific. However, it does not differentiate between the two actions (preview vs create), leaving potential ambiguity. It distinguishes from sibling tools by being draft-specific.

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?

No guidance is provided on when to use this tool versus alternatives, or when to preview versus create. The sibling tools list includes various 'waiting_on_*' tools, but no comparison is made. There is no mention of prerequisites or context for invocation.

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

waiting_on_exportD

Export waiting-on data.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo

TDQS

D1.8/5.0
Behavior1/5

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

No annotations are provided, and the description does not disclose any behavioral traits such as whether the tool is read-only, destructive, or what happens to data. The agent has no information on side effects or permissions needed.

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

Conciseness2/5

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

The description is extremely short (two words), which is concise but at the cost of clarity. It fails to provide essential context, making it under-specified rather than efficiently informative.

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

Completeness1/5

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

Given the large set of sibling tools, the description is completely inadequate for an agent to decide whether to invoke this tool. No output schema or return details are provided, and the single parameter is undocumented.

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

Parameters1/5

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

The input schema has a single parameter 'format' with 0% description coverage and no enum constraints. The description provides no explanation of acceptable values or defaults, leaving the agent to guess.

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

Purpose3/5

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

The description states the verb 'Export' and resource 'waiting-on data', indicating a data extraction function. However, it does not differentiate from sibling tools like wait_on_list or wait_on_show, which could also produce data outputs.

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?

No guidance on when to use this tool versus alternatives. The description lacks any context about prerequisites, appropriate scenarios, or whether export is for bulk download vs. a different purpose.

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

waiting_on_healthC

Show waiting-on health.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.7/5.0
Behavior2/5

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

No annotations exist, and the description does not disclose behavioral traits such as read-only nature, authorization needs, or rate limits. Only a brief verb-noun phrase.

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

Conciseness3/5

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

Extremely concise at 3 words, but this brevity sacrifices clarity and completeness. Under-specification is not ideal conciseness.

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

Completeness2/5

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

Given no output schema and many sibling tools, the description is insufficient. It lacks explanation of what 'health' entails and what output 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?

No parameters, so schema coverage is 100%. With zero params, baseline is 4. Description adds nothing beyond schema, but nothing else is needed.

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

Purpose3/5

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

The description states 'Show waiting-on health,' which gives a verb and resource, but 'health' is vague. It does not distinguish from sibling tools like waiting_on_list or waiting_on_show.

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?

No guidance on when to use this tool versus alternatives. No context or exclusions provided.

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

waiting_on_lead_addC

Add one manual lead. Requires name, channel, and ball.

ParametersJSON Schema
NameRequiredDescriptionDefault
dueNo
orgNo
ballYes
nameYes
notesNo
domainNo
statusNo
channelYes
contactNo
thread_refNo

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries full burden but only repeats required parameters. It omits behavioral traits such as side effects, idempotency, error cases, or what happens after adding a lead.

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

Conciseness3/5

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

The description is extremely concise, consisting of one sentence. While there is no wasted text, it lacks structure and detail, making it minimally acceptable.

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

Completeness1/5

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

Given 10 parameters, no output schema, and no annotations, the description is woefully incomplete. It provides insufficient context for an AI agent to correctly invoke the tool and understand its behavior.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description fails to explain any parameter meaning beyond naming them. Parameters like due, org, notes, domain, status, contact, thread_ref are entirely undefined.

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 'Add one manual lead', specifying a precise verb and resource. It distinguishes from siblings like waiting_on_lead_list and waiting_on_lead_bump by indicating this is a create operation.

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?

No guidance on when to use this tool versus alternatives. The description only lists required parameters but does not explain context, prerequisites, or when not to use it.

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

waiting_on_lead_bumpC

Set who has the ball and record a note. Transactional; returns a structured conflict on a lost race.

ParametersJSON Schema
NameRequiredDescriptionDefault
ballYes
noteYes
domainNo
line_idYes

TDQS

C2.9/5.0
Behavior3/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 notes the tool is 'Transactional' and that it 'returns a structured conflict on a lost race,' which reveals important edge-case behavior. However, it does not disclose whether the operation modifies existing data, required permissions, or side effects beyond the note and ball setting. The information is useful but incomplete.

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 very concise: two short sentences. The first sentence front-loads the primary purpose ('Set who has the ball and record a note'), and the second adds transactional context and output behavior. No unnecessary words. However, the conciseness comes at the expense of completeness for parameters and guidelines.

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

Completeness2/5

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

Given 4 parameters, no output schema, and no annotations, the description is insufficiently complete. It does not explain what 'line_id' or 'domain' represent, nor the structure of the returned conflict object. For a tool that seems to handle race conditions ('on a lost race'), more context about the workflow or when conflicts occur would be necessary for an AI agent to use it correctly.

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

Parameters2/5

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

The input schema has 4 parameters with 0% description coverage. The description only loosely explains 'ball' (who has the ball) and 'note' (record a note), but does not clarify 'line_id' or 'domain'. Since the schema provides no descriptions, the tool description should compensate by explaining each parameter's meaning, which it fails to do. Thus, it adds minimal semantic value beyond the parameter names.

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: 'Set who has the ball and record a note.' This gives a specific verb and resource, distinguishing it from sibling tools like waiting_on_lead_list (listing) or waiting_on_lead_add (adding). The 'ball' metaphor is domain-specific but likely clear to users. The additional phrase about returning a structured conflict adds context about output, though not strictly about purpose.

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?

The description provides no guidance on when to use this tool versus its siblings. It mentions 'Transactional' and 'returns a structured conflict on a lost race,' which hints at a specific scenario (race conditions) but does not explicitly state when to choose this tool over alternatives like waiting_on_lead_add or waiting_on_loops. No exclusions or prerequisites are given.

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

waiting_on_lead_listC

List manual leads (our ball first). Filters: status/ball/org/match/domain.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgNo
ballNo
limitNo
matchNo
domainNo
statusNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations exist, so the description must convey behavioral traits. It implies a read operation (list) but does not disclose side effects, permissions, pagination, or ordering details beyond a vague 'our ball first'.

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

Conciseness3/5

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

The description is very short, which is concise, but it fails to provide essential information. It front-loads the action but the single sentence does not earn its place given the lack of detail.

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

Completeness1/5

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

With no output schema, no annotations, and 6 undocumented parameters, the description is woefully incomplete. It does not explain what manual leads are, what the output looks like, or any operational limits.

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

Parameters1/5

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

Schema description coverage is 0%, and the description merely lists filter names without explaining their meanings, allowed values, or syntax. The 'limit' parameter is not even mentioned. This does not compensate for the absent schema descriptions.

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 the tool lists manual leads and specifies a default sort order ('our ball first'). It is clear about the resource and action, but does not distinguish from sibling tools like 'waiting_on_list' or 'waiting_on_lead_add'.

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?

No guidance is provided on when to use this tool versus alternatives. There are no conditions, prerequisites, or exclusions mentioned.

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

waiting_on_listB

List tracked threads by ball or state (alias of loops).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/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 full burden. It indicates a read-only listing operation but fails to mention output details, pagination, or any side effects. The alias note adds some context but not enough behavioral depth.

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?

Single sentence of 13 words conveys purpose and alias with no redundancy. Every word earns its place, making it highly efficient.

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 simple, zero-parameter tool with no output schema, the description covers basic purpose but lacks return value description and clarification of domain terms like 'ball'. Adequate but incomplete.

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?

Input schema has zero parameters, so schema coverage is 100%. Description adds no parameter info because none exist. Baseline score of 4 is appropriate.

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?

Description states 'List tracked threads by ball or state', which clearly identifies the action and resource. However, 'ball' is jargon that may not be immediately clear to all agents, slightly reducing clarity.

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 notes it is an alias of 'waiting_on_loops', implying interchangeability, but does not explicitly state when to use this tool over other siblings. Usage context is implied but not explicit.

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

waiting_on_loopsC

Open loops across all allowed domains and channels.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.7/5.0
Behavior1/5

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

No annotations are provided, so the description must fully disclose behavioral traits. It does not mention whether the operation is read-only, destructive, requires authentication, or has side effects. The minimal description fails to compensate for missing 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 a single, front-loaded sentence with no wasted words. It conveys the core action and scope efficiently.

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

Completeness2/5

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

Given zero parameters, no output schema, and no annotations, the description is too brief. It does not explain what the tool returns, the meaning of 'open loops', or any constraints (e.g., pagination, filtering). The agent lacks sufficient information to use the tool confidently.

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?

There are no parameters, so the schema is trivially 100% covered. Baseline for 0 parameters is 4. The description adds the scope 'across all allowed domains and channels', which provides useful context beyond the empty schema.

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

Purpose3/5

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

The description uses a specific verb 'open' and resource 'loops', but 'loops' is ambiguous without domain context. It distinguishes from sibling tools like waiting_on_list (list loops) and waiting_on_show (show a loop), but 'open' is unclear whether it means retrieve, activate, or display.

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?

No guidance on when to use this tool versus siblings like waiting_on_list or waiting_on_show. The description offers no context or alternatives, leaving the agent to infer usage from the name alone.

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

waiting_on_refreshB

Refresh waiting-on from Gmail_multi or a fixture.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/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 full burden. It says 'Refresh', implying state change, but does not disclose idempotency, side effects, permissions, or whether this is a safe operation. Minimal behavioral information.

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 sentence with no extraneous content. It is efficient but could benefit from briefly explaining what 'waiting-on' is or what a 'fixture' refers to.

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 has no parameters, no annotations, and no output schema, so the description is the only context. It explains the source (Gmail_multi or fixture) but leaves ambiguity about the nature of 'waiting-on' and the meaning of 'fixture'. Minimal but functional.

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 input schema has zero parameters, and schema description coverage is 100%. With no parameters to describe, the description adds no additional semantic value, which is adequate. Baseline score of 4 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 clearly states 'Refresh waiting-on from Gmail_multi or a fixture', specifying the verb (refresh) and the resource (waiting-on). It distinguishes from sibling tools like waiting_on_list and waiting_on_show by indicating a data source, but the term 'waiting-on' is jargon and not fully explained.

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?

No guidance is provided on when to use this tool versus alternatives. Sibling tools like waiting_on_list, waiting_on_refresh_agents, and waiting_on_show exist, but the description offers no differentiation or usage context.

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

waiting_on_refresh_agentsB

Refresh agent-thread open loops (Claude Code + Codex sessions).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided; description only says 'refresh' without detailing side effects, rate limits, or what happens to existing loops.

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?

Single sentence with no unnecessary information, efficiently communicates the tool's action.

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

Completeness2/5

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

Lacks details on scope, expected outcomes, or prerequisites; does not compensate for missing output schema or annotations.

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?

No parameters exist, so description adds context by specifying the target (agent-thread loops), which is meaningful beyond the empty 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 clearly states it refreshes agent-thread open loops, specifically for Claude Code + Codex sessions, distinguishing it from generic or voice-specific refresh tools.

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?

No guidance on when to use this tool versus siblings like waiting_on_refresh or waiting_on_refresh_voice; no context on prerequisites or conditions.

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

waiting_on_refresh_voiceA

Refresh voice-queue open loops (JSONL event log; observe-only).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Reveals observe-only nature, which is important for behavior. However, without annotations, the description lacks detail on what 'refresh' entails (e.g., triggers server-side processing, side effects), leaving ambiguity.

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?

Single sentence that packs key info (action, resource, format, read-only) with no wasted words.

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?

Adequate for a zero-parameter tool, but lacks explanation of what 'open loops' are, the event log's role, or typical use cases, leaving some gaps for an agent.

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?

No parameters in schema (100% coverage), so description adds no param info—appropriate baseline as there is nothing to document.

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?

Clear verb 'refresh' and specific resource 'voice-queue open loops', with parenthetical clarification 'JSONL event log; observe-only' that distinguishes it from siblings like 'waiting_on_refresh' or 'waiting_on_loops'.

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?

No explicit guidance on when to use this tool versus siblings like 'waiting_on_refresh', 'waiting_on_loops', or 'waiting_on_show'. The 'observe-only' hint is implicit, but not enough to differentiate usage context.

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

waiting_on_showC

Show one thread with evidence snippets.

ParametersJSON Schema
NameRequiredDescriptionDefault
thread_keyNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description must fully disclose behavior, but it only says 'show one thread' without mentioning authentication, side effects, or what 'evidence snippets' entails.

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 concise sentence with no unnecessary words, but is arguably too brief, missing key details.

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

Completeness2/5

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

Given one parameter, no output schema, and no annotations, the description lacks completeness: no return type, prerequisites, or parameter semantics are provided.

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

Parameters1/5

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

Schema coverage is 0% and the description does not explain the 'thread_key' parameter, its format, or how it relates to the tool's action.

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 shows one thread with evidence snippets, distinguishing it from siblings like waiting_on_list which likely shows multiple threads.

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?

No guidance on when to use this tool versus alternatives like waiting_on_list or waiting_on_loops; the context is entirely implied.

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. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • Removedwaiting_on_lead_done
    • Removedwaiting_on_lead_edit
    • Addedwaiting_on_list
    • Addedwaiting_on_loops
    • Addedwaiting_on_refresh_voice
    • Addedwaiting_on_show
  2. 10 tool updatesv0.1.0
    • First observedwaiting_on_draft_reply
    • First observedwaiting_on_export
    • First observedwaiting_on_health
    • First observedwaiting_on_lead_add
    • First observedwaiting_on_lead_bump
    • First observedwaiting_on_lead_done
    • First observedwaiting_on_lead_edit
    • First observedwaiting_on_lead_list
    • First observedwaiting_on_refresh
    • First observedwaiting_on_refresh_agents

TDQS

C2.8/5.0
Disambiguation3/5

The alias between waiting_on_loops and waiting_on_list creates direct ambiguity, as they are the same operation. The three refresh tools are distinct but share the same verb prefix, which could cause misselection. Other tools are sufficiently differentiated.

Naming Consistency3/5

All tools share the consistent 'waiting_on_' prefix, but the suffixes are a mix of nouns (loops, health, export) and verb phrases (draft_reply, lead_add, lead_bump), with no clear pattern. The alias also undermines naming distinctness.

Tool Count5/5

With 12 tools, the server covers its domain without being overwhelming or insufficient. Each tool serves a distinct function except for the alias, and the count supports a focused scope.

Completeness3/5

The toolset covers listing, showing, refreshing, and basic lead management, but lacks operations to close or delete threads, send drafts, or remove leads. This leaves obvious gaps for a tracking system, limiting agent autonomy.

Maintenance

ActivitySlowing
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server for tracking issues across multiple AI agent sessions, enabling agents to file, claim, complete, review, and close issues with a web UI for monitoring.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that provides persistent memory for AI agents, enabling context retention across sessions and supporting vibe-loop workflows where agent promises and deliverables are tracked and validated.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that lets AI agents manage an Agent Inbox queue via natural language. It supports listing pending items, adding new URLs with notes, and marking items as reviewed or deleted.
    31
    4
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/arkaigrowth/waiting-on'

If you have feedback or need assistance with the MCP directory API, please join our Discord server