Skip to main content
Glama
aiterm-mcp
by kitepon

agent_approval

Inspect a Codex approval prompt and respond with a digest-bound one-time approve or deny, returning a typed blocked error for unknown dialogs.

Instructions

Codexの現在の承認をinspectし、digestへ束縛した単発許可または拒否をrespondする。恒久許可は選ばない。Claudeは既存claude_approvalを使う。未知dialogはblockedのtyped errorで返す。

Input Schema

NameRequiredDescriptionDefault
actionYes
remoteNo別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。
session_idYes
approval_choiceNo
observed_prompt_digestNo

Output Schema

NameRequiredDescriptionDefault
atYes
kindYes
actionYes
promptYes
reasonYes
schemaYes
statusYes
choicesYes
harnessYes
launch_idYes
session_idYes
prompt_digestYes
selected_choiceYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv0.62.2
    • changedOutput schema / properties / harness / enum
      Previous value: -[
      -  "claude-code",
      -  "codex-cli",
      -  "grok-cli",
      -  "cursor-cli"
      -]New value: +[
      +  "claude-code",
      +  "codex-cli",
      +  "grok-cli",
      +  "cursor-cli",
      +  "antigravity-cli"
      +]
  2. Changed1 schema field changedv0.39.1
    • addedInput schema / properties / remote
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "別端末のAitermで実行する時のSSH接続情報。hostだけならssh_configの接続名として使う。Aitermは接続情報を保存・管理しない。passphraseは会話記録に残るため、ssh-agentかpassphrase_env(環境変数名)を推奨する。",
      +  "properties": {
      +    "host": {
      +      "pattern": "^(?!-)[A-Za-z0-9._%:\\[\\]-]{1,255}$",
      +      "type": "string"
      +    },
      +    "identity_file": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "passphrase": {
      +      "minLength": 1,
      +      "type": "string"
      +    },
      +    "passphrase_env": {
      +      "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
      +      "type": "string"
      +    },
      +    "port": {
      +      "maximum": 65535,
      +      "minimum": 1,
      +      "type": "integer"
      +    },
      +    "ssh_options": {
      +      "items": {
      +        "pattern": "^[A-Za-z][A-Za-z0-9]*=[^\\r\\n]*$",
      +        "type": "string"
      +      },
      +      "maxItems": 32,
      +      "type": "array"
      +    },
      +    "user": {
      +      "pattern": "^(?!-)[A-Za-z0-9._@\\\\-]{1,128}$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "host"
      +  ],
      +  "type": "object"
      +}
  3. Addedv0.35.0

TDQS

A4.2/5.0
Behavior4/5

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

No annotations exist, so the description carries the full burden, and it does deliver real behavioral facts: responses are single-shot, permanently bound to the observed digest, permanent grants are disallowed, and unknown dialogs surface as a typed 'blocked' error rather than a silent failure. It still omits what approve_once actually authorizes downstream and whether denial halts the session.

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?

Four short sentences, front-loaded with the primary capability before the sibling routing note. Dense but no filler; only the trailing error-behavior sentence is slightly compressed at the expense of clarity.

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?

An output schema exists so return values need no explanation, and the description covers purpose, the alternative tool, the one-shot constraint, digest binding, and error behavior. The remote/SSH parameter is documented in its own schema description, so remaining gaps are minor for a high-consequence approval tool.

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 only 20%, so the description must compensate; it does explain the digest binding for observed_prompt_digest and the one-shot allow/deny nature of approval_choice. However session_id is never characterized and the inspect/respond action semantics versus the approval_choice requirement (only meaningful for respond) are left to inference.

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 specific verbs and resource: inspect the current Codex approval and respond with a digest-bound one-shot allow/deny. It explicitly distinguishes itself from the sibling claude_approval, so an agent can pick between them 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?

Explicitly routes Claude traffic to claude_approval and rules out permanent approval ('恒久許可は選ばない'), which is a genuine exclusion. It does not directly say the inspect-then-respond sequencing or what to do when no approval is pending, leaving part of the flow implicit in the action enum.

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