Skip to main content
Glama

Start a peer consultation

consult_start

Starts one or more consultant coding-agent CLIs to obtain independent opinions on a proposal, returning a job or group ID immediately for later results.

Instructions

Start one consultant (target) or several (targets); returns job_id or group_id immediately. Available (name: CLI, model): (none -- no consultant CLI is installed) Pass the user's name/CLI/vendor/model wording; target_ambiguous lists candidates, target_unavailable lists available ones. For a user's second-opinion request without a named consultant, use targets: ["all"]; for a named consultant, use target. targets: ["all"] asks every available consultant, including your CLI (marked same lineage). Each gets an identical brief; one concurrency seat each. Model and limits are operator-owned. concurrency_limit starts nothing. Follow details: wait on already-known holders or retry_after_ms; at most two retries within 60 seconds, only if retryable. Never inspect/cancel unrelated work or replay a start receipt. followup_to: completed job_id or group_id; only question is also needed. Inherits the prior inputs; explicit fields, even empty, replace them. Files are recopied in their current state; add expose_paths or set expose_from_parent: false. retry_of: failed job_id alone replays saved inputs in a new chain, with current files and a link to the failure. Use successful group answers first; retry only failed members after fixing auth/quota causes. No other request fields. mode defaults from context: facts = explore, proposal = review, proposal + counterpoints = debate. For code: expose_diff: { repo, base? } for changes, expose_paths: [absolute paths] for relevant callers, tests and config. Files are copied read-only, secrets masked; symlinks/protected paths skipped. Caps: 20 entries, 500 files, 5 MB. Inspect files_exposed and the manifest; missing premises stay unknown. Other context: facts, artifacts (logs/test output). network: on/off controls web access, not model submission or local reads; boundary states CLI-specific enforcement. caller/caller_model identify you; initiator: user only when asked. Optional prediction: { expected, worry } stays local.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "request": "<request>"
    },
    "name": "consult_start"
  }
}

Input Schema

NameRequiredDescriptionDefault
requestYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv2.9.0
    • addedInput schema / properties / request / properties / retry_of
      Added value: +{
      +  "maxLength": 80,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • removedInput schema / properties / request / required
      Removed value: -[
      -  "question"
      -]
  2. Changed26 schema fields changedv2.6.1
    • removedInput schema / properties / request / properties / constraints / default
      Removed value: -[]
    • removedInput schema / properties / request / properties / context / default / artifacts
      Removed value: -[]
    • removedInput schema / properties / request / properties / context / default / counterpoints
      Removed value: -[]
    • removedInput schema / properties / request / properties / context / default / facts
      Removed value: -[]
    • removedInput schema / properties / request / properties / context / properties / artifacts / default
      Removed value: -[]
    • addedInput schema / properties / request / properties / context / properties / constraints
      Added value: +{
      +  "items": {
      +    "maxLength": 1000,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • removedInput schema / properties / request / properties / context / properties / counterpoints / default
      Removed value: -[]
    • addedInput schema / properties / request / properties / context / properties / expose_diff
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "base": {
      +          "maxLength": 200,
      +          "minLength": 1,
      +          "pattern": "^[A-Za-z0-9._/~^@{}-]+$",
      +          "type": "string"
      +        },
      +        "repo": {
      +          "maxLength": 1000,
      +          "minLength": 1,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "repo"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedInput schema / properties / request / properties / context / properties / expose_from_parent
      Added value: +{
      +  "type": "boolean"
      +}
    • removedInput schema / properties / request / properties / context / properties / facts / default
      Removed value: -[]
    • addedInput schema / properties / request / properties / context / properties / success_criteria
      Added value: +{
      +  "items": {
      +    "maxLength": 1000,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • changedInput schema / properties / request / properties / initiator / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "user",
      -      "offer_accepted"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "user"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / request / properties / network
      Added value: +{
      +  "enum": [
      +    "on",
      +    "off"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / request / properties / success_criteria / default
      Removed value: -[]
    • removedInput schema / properties / request / properties / target / anyOf
      Removed value: -[
      -  {
      -    "enum": [
      -      "codex",
      -      "gpt",
      -      "chatgpt",
      -      "openai",
      -      "claude-code",
      -      "claude",
      -      "anthropic",
      -      "antigravity",
      -      "agy",
      -      "gemini",
      -      "google",
      -      "opencode",
      -      "glm"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "pattern": "^[a-z0-9-]+:.*$",
      -    "type": "string"
      -  }
      -]
    • addedInput schema / properties / request / properties / target / maxLength
      Added value: +120
    • addedInput schema / properties / request / properties / target / minLength
      Added value: +1
    • addedInput schema / properties / request / properties / target / pattern
      Added value: +"^[^\\p{Cc}\\p{Cf}]+$"
    • addedInput schema / properties / request / properties / target / type
      Added value: +"string"
    • removedInput schema / properties / request / properties / targets / items / anyOf
      Removed value: -[
      -  {
      -    "enum": [
      -      "codex",
      -      "gpt",
      -      "chatgpt",
      -      "openai",
      -      "claude-code",
      -      "claude",
      -      "anthropic",
      -      "antigravity",
      -      "agy",
      -      "gemini",
      -      "google",
      -      "opencode",
      -      "glm"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "pattern": "^[a-z0-9-]+:.*$",
      -    "type": "string"
      -  }
      -]
    • addedInput schema / properties / request / properties / targets / items / maxLength
      Added value: +120
    • addedInput schema / properties / request / properties / targets / items / minLength
      Added value: +1
    • addedInput schema / properties / request / properties / targets / items / pattern
      Added value: +"^[^\\p{Cc}\\p{Cf}]+$"
    • addedInput schema / properties / request / properties / targets / items / type
      Added value: +"string"
    • changedInput schema / properties / request / properties / targets / maxItems
      Previous value: -4New value: +9
    • changedInput schema / properties / request / required
      Previous value: -[
      -  "mode",
      -  "question"
      -]New value: +[
      +  "question"
      +]
  3. Changed7 schema fields changedv1.4.1
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedInput schema / properties / request / properties / caller / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "codex",
      -      "gpt",
      -      "chatgpt",
      -      "openai",
      -      "claude-code",
      -      "claude",
      -      "anthropic",
      -      "antigravity",
      -      "agy",
      -      "gemini",
      -      "google"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "codex",
      +      "gpt",
      +      "chatgpt",
      +      "openai",
      +      "claude-code",
      +      "claude",
      +      "anthropic",
      +      "antigravity",
      +      "agy",
      +      "gemini",
      +      "google",
      +      "opencode",
      +      "glm"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / request / properties / context / properties / expose_paths
      Added value: +{
      +  "default": [],
      +  "items": {
      +    "maxLength": 1000,
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
    • addedInput schema / properties / request / properties / initiator
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "user",
      +        "offer_accepted"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedInput schema / properties / request / properties / target / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "codex",
      -      "gpt",
      -      "chatgpt",
      -      "openai",
      -      "claude-code",
      -      "claude",
      -      "anthropic",
      -      "antigravity",
      -      "agy",
      -      "gemini",
      -      "google"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "pattern": "^[a-z0-9-]+:.*$",
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "codex",
      +      "gpt",
      +      "chatgpt",
      +      "openai",
      +      "claude-code",
      +      "claude",
      +      "anthropic",
      +      "antigravity",
      +      "agy",
      +      "gemini",
      +      "google",
      +      "opencode",
      +      "glm"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^[a-z0-9-]+:.*$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / request / properties / targets / items / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "codex",
      -      "gpt",
      -      "chatgpt",
      -      "openai",
      -      "claude-code",
      -      "claude",
      -      "anthropic",
      -      "antigravity",
      -      "agy",
      -      "gemini",
      -      "google"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "pattern": "^[a-z0-9-]+:.*$",
      -    "type": "string"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "codex",
      +      "gpt",
      +      "chatgpt",
      +      "openai",
      +      "claude-code",
      +      "claude",
      +      "anthropic",
      +      "antigravity",
      +      "agy",
      +      "gemini",
      +      "google",
      +      "opencode",
      +      "glm"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "pattern": "^[a-z0-9-]+:.*$",
      +    "type": "string"
      +  }
      +]
    • changedInput schema / properties / request / properties / targets / maxItems
      Previous value: -3New value: +4
  4. First observedv1.1.0

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the annotations, it discloses async return behavior, concurrency-seat constraints, file-copy handling with read-only copies and secret masking, caps on entries/files/size, network boundaries, and retry policy. This is consistent with readOnlyHint=false, idempotentHint=false, and destructiveHint=false.

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 purpose is front-loaded, but the remainder is a dense wall of fragments with little structural grouping. Much of the detail is useful, yet phrases such as "concurrency_limit starts nothing" are cryptic and reduce scanability.

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 complex asynchronous start tool with no output schema and a deeply nested request object, the description covers the critical behaviors and edge cases. However, it does not explain how to retrieve results from the returned job_id or group_id beyond relying on sibling tools.

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 0%, so the description must carry parameter meaning. It explains target/targets, mode defaults, followup_to, retry_of, expose_diff/expose_paths, network, caller, and prediction, but leaves objective, constraints, success_criteria, and the duplicated top-level versus context versions ambiguous; it also references concurrency_limit even though that field is absent from the schema.

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

Purpose5/5

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

The opening sentence names the exact action (start), the resources (one consultant via target or several via targets), and the immediate return (job_id or group_id). This cleanly separates it from the consult_cancel, consult_get, consult_list, consult_export, and consult_record siblings.

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 concrete routing guidance: use targets: ["all"] for a second-opinion request without a named consultant, target for a named one, followup_to for completed jobs, and retry_of for failed jobs after fixing auth/quota causes. It also states what not to do, such as not inspecting or canceling unrelated work and not replaying a start receipt, but it does not explicitly compare itself against the other consultation tools.

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