· 使用手册附录

生成诊断报告

我们可能会请你生成诊断报告,以帮助我们修复你遇到的 bug。

在 Amp CLI 中,打开命令面板(Ctrl-O)并选择 feedback: send report with diagnostics。你也可以运行 amp threads report <thread-id>

在 ampcode.com 查看线程时,你也可以生成诊断报告:

  1. 打开 菜单(位于线程标题栏)。
  2. 选择 生成诊断报告.

这会创建一个诊断报告 ID,你在联系 Amp 支持时可以附上它。诊断数据会在 7 天后删除,且只有在你提供报告 ID 时,Amp 团队成员才能访问这些数据。

我们更希望你从 CLI 生成诊断报告,而不是从网页生成,因为 CLI 会包含网页端无法提供的额外客户端诊断信息(例如客户端日志)。

Amp CLI 在 tmux 中的使用

Tmux 默认不会区分 Shift+EnterEnter 。为了让 Shift+Enter 在 Amp CLI 中插入换行,请启用 extended-keys

如果你不想更改 tmux 设置,使用 Ctrl+J 来插入换行符。

$ tmux set -s extended-keys on

要永久生效,请将 set -s extended-keys on 添加到 ~/.tmux.conf,然后重新加载: tmux source-file ~/.tmux.conf.

Amp 知道如何为此配置 tmux,所以你可以让 Amp 帮你设置。

服务状态

请查看 ampcodestatus.com 了解服务状态并通过邮件、RSS、Slack 订阅警报。或者关注 @ampcodestatus

MCP 注册表白名单

企业版工作区管理员可以强制使用 MCP 注册表,以便只有已批准的 MCP 服务器可供工作区成员使用。如果注册表不可访问,所有 MCP 服务器将被阻止。注册表协议和模式定义在 registry.modelcontextprotocol.io.

设置注册表 URL:

  1. 打开 工作区设置 并找到 MCP 注册表.
  2. 输入注册表 URL( v0.1/servers 端点)并保存。

可选择限制为特定用户:

  1. 应用于 添加到 仅限特定用户.
  2. 输入工作区成员邮箱(每行一个或用逗号分隔)并保存。

注意:

  • 如果你限定为特定用户,只有这些用户受注册表限制;其他人不受影响。
  • 清除 URL 以移除注册表并允许所有 MCP 服务器。

流式 JSON 输出

Amp 的 CLI 支持与 Claude Code 兼容的流式 JSON 输出格式,用于编程集成和实时对话监控。

用法

使用 --stream-json 标志配合 --execute 模式一起使用,以流式 JSON 格式而不是纯文本输出:要包含助手思维块,请添加 --stream-json-thinking (这会扩展 schema,与 Claude Code 不兼容)。

带参数的基本用法:

$ amp --execute "what is 3 + 5?" --stream-json

使用 stdin 输入:

$ echo "analyze this code" | amp --execute --stream-json

流式 JSON 输入模式(更多信息请见下文):

$ echo '{"type":"user","message":{"role":"user","content":[{"type":"text","text":"what is 2+2?"}]}}' | amp --execute --stream-json --stream-json-input

注意: --stream-json 标志需要 --execute 模式。它不能单独使用。 --stream-json-thinking 暗示 --stream-json.

每个对话以一个初始 init system message 开始,然后是一系列 user 和 assistant messages,最后是一个 result system message,包含统计信息。每条消息都以单独的 JSON 对象发出。

消息 Schema

--stream-json-thinking 启用时,assistant 内容可能包含 thinkingredacted_thinking 块。

流式 JSON API 返回的消息根据以下 schema 进行严格类型化:

type StreamJSONMessage =
  // An assistant message
  | {
      type: "assistant";
      message: {
        type: "message";
        role: "assistant";
        content: Array<{
          type: "text";
          text: string;
        } | {
          type: "tool_use";
          id: string;
          name: string;
          input: Record<string, unknown>;
        } | {
          type: "thinking";
          thinking: string;
        } | {
          type: "redacted_thinking";
          data: string;
        }>;
        stop_reason: "end_turn" | "tool_use" | "max_tokens" | null;
        usage?: {
          input_tokens: number;
		  max_tokens: number;
          cache_creation_input_tokens?: number;
          cache_read_input_tokens?: number;
          output_tokens: number;
          service_tier?: string;
        };
      };
      parent_tool_use_id: string | null;
      session_id: string;
    }

  // A user message in stream JSON output (plain text or tool results)
  | {
      type: "user";
      message: {
        role: "user";
        content: Array<{
          type: "text";
          text: string;
        } | {
          type: "tool_result";
          tool_use_id: string;
          content: string;
          is_error: boolean;
        }>;
      };
      parent_tool_use_id: string | null;
      session_id: string;
    }

  // Emitted as the last message on success
  | {
      type: "result";
      subtype: "success";
      duration_ms: number;
      is_error: false;
      num_turns: number;
      result: string;
      session_id: string;
      usage?: {
        input_tokens: number;
		max_tokens: number;
        cache_creation_input_tokens?: number;
        cache_read_input_tokens?: number;
        output_tokens: number;
        service_tier?: string;
      };
      permission_denials?: string[];
    }

  // Emitted as the last message on error
  | {
      type: "result";
      subtype: "error_during_execution" | "error_max_turns";
      duration_ms: number;
      is_error: true;
      num_turns: number;
      error: string;
      session_id: string;
      usage?: {
        input_tokens: number;
		max_tokens: number;
        cache_creation_input_tokens?: number;
        cache_read_input_tokens?: number;
        output_tokens: number;
        service_tier?: string;
      };
      permission_denials?: string[];
    }

  // Emitted as the first message at the start of a conversation
  | {
      type: "system";
      subtype: "init";
      cwd: string;
      session_id: string;
      tools: string[];
      mcp_servers: { name: string; status: "connected" | "connecting" | "connection-failed" | "disabled" }[];
      // Agent mode for this run (e.g. "medium", "high"). Omitted if unknown.
      agent_mode?: string;
    };

输出示例

简单数学查询:

$ amp --execute "what is 3 + 5?" --stream-json
{"type":"system","subtype":"init","cwd":"/Users/orb","session_id":"T-f9941a55-3765-421e-972f-05dc1138c3a3","tools":["Bash","finder","create_file","edit_file","glob","Grep","mcp__postgres__query","oracle","Read","read_mcp_resource","read_web_page","Task","todo_read","todo_write","undo_edit","web_search"],"mcp_servers":[{"name":"postgres","status":"connected"}]}
{"type":"user","message":{"role":"user","content":[{"type":"text","text":"what is 3 + 5?"}]},"parent_tool_use_id":null,"session_id":"T-f9941a55-3765-421e-972f-05dc1138c3a3"}
{"type":"assistant","message":{"type":"message","role":"assistant","content":[{"type":"text","text":"8"}],"stop_reason":"end_turn","usage":{"input_tokens":10,"cache_creation_input_tokens":16256,"cache_read_input_tokens":0,"output_tokens":99,"max_tokens":968000,"service_tier":"standard"}},"parent_tool_use_id":null,"session_id":"T-f9941a55-3765-421e-972f-05dc1138c3a3"}
{"type":"result","subtype":"success","duration_ms":5400,"is_error":false,"num_turns":1,"result":"8","session_id":"T-f9941a55-3765-421e-972f-05dc1138c3a3"}

工具使用示例:

$ amp --execute "list files using a tool" --stream-json
{"type":"system","subtype":"init","cwd":"/Users/orb/project","session_id":"T-d2fc4acc-dd1d-497f-9609-ed0da22a7c95","tools":["Bash","finder" ,"create_file","edit_file","glob","Grep","mcp__postgres__query","oracle","Read","read_mcp_resource","read_web_page","Task","todo_rea d","todo_write","undo_edit","web_search"],"mcp_servers":[{"name":"postgres","status":"connected"}]}
{"type":"user","message":{"role":"user","content":[{"type":"text","text":"list files using a tool"}]},"parent_tool_use_id":null,"session_id":"T-d2fc4acc-dd1d-4 97f-9609-ed0da22a7c95"}
{"type":"assistant","message":{"type":"message","role":"assistant","content":[{"type":"tool_use","id":"toolu_019cyniPYrSgaJitUSMyxyNV","name": "read", "input":{"path":"/Users/orb/project"}}],"stop_reason":"tool_use","usage":{"input_tokens":10,"cache_creation_input_tokens":13150,"cache_read_input_tokens": 0,"output_tokens":111,"max_tokens":968000,"service_tier":"standard"}},"parent_tool_use_id":null,"session_id":"T-d2fc4acc-dd1d-497f-9609-ed0da22a7c95"}
{"type":"user","message":{"role":"user","content":[{"type":"tool_result","tool_use_id":"toolu_019cyniPYrSgaJitUSMyxyNV","content":"[\"index.js\",\"README.md\"] ","is_error":false}]},"parent_tool_use_id":null,"session_id":"T-d2fc4acc-dd1d-497f-9609-ed0da22a7c95"}
{"type":"assistant","message":{"type":"message","role":"assistant","content":[{"type":"text","text":"Two files: index.js and README.md"}],"stop_reason":"end_tu rn","usage":{"input_tokens":7,"cache_creation_input_tokens":133,"cache_read_input_tokens":13150,"output_tokens":13,"max_tokens":968000,"service_tier":"standard "}},"parent_tool_use_id":null,"session_id":"T-d2fc4acc-dd1d-497f-9609-ed0da22a7c95"}
{"type":"result","subtype":"success","duration_ms":7363,"is_error":false,"num_turns":2,"result":"Two files: index.js and README.md","session_id":"T-d2fc4acc-dd1d-497f-9609-ed0da22a7c95"}

流式 JSON 输入(--stream-json-input)

--stream-json-input 标志启用 流式输入 ,其中 Amp 从 stdin 读取消息直到关闭。

每条消息应为单行的有效 JSON 对象。输入内容块可以是纯文本或 base64 编码的图片:

type StreamJSONInputMessage = {
  type: "user";
  message: {
    role: "user";
    content: Array<{
      type: "text";
      text: string;
    } | {
      type: "image";
      source_path?: string;
      source: {
        type: "base64";
        media_type: "image/jpeg" | "image/png" | "image/gif" | "image/webp";
        data: string;
      };
    }>;
  };
}

设置 steer 添加到 true ,当消息在代理忙碌时排队时,将其标记为 steering。steering 排队消息会在下一个中断点处理。

type StreamJSONInputMessage = {
  type: "user";
  steer?: boolean;
  message: { ... };
}

示例消息:

{
  "type": "user",
  "message": {
    "role": "user",
    "content": [
      {
        "type": "text",
        "text": "what do you see?"
      },
      {
        "type": "image",
        "source_path": "file:///Users/alice/images/example.jpg",
        "source": {
          "type": "base64",
          "media_type": "image/jpeg",
          "data": "..."
        }
      }
    ]
  }
}

source_path 是可选的。如果省略,Amp 会自动生成。声明的 media_type 必须与解码后的图片字节匹配。对于 Claude 兼容输出,用户图片块在输入时被接受,但会从 stdout 上的流式 user 消息中省略。

使用 --stream-json-input时, --execute 的行为会变化:Amp 只有在 assistant 完成后 且 stdin 关闭时才会退出。

这允许程序化使用 Amp CLI 进行多条 user messages 的对话。

示例:

#!/bin/bash

send_message() {
  local text="$1"
  echo '{"type":"user","message":{"role":"user","content":[{"type":"text","text":"'$text'"}]}}'
}

{
  send_message "what's 2+2?"
  sleep 10

  send_message "now add 8 to that"
  sleep 10

  send_message "now add 5 to that"
} | amp --execute --stream-json --stream-json-input

此脚本产生以下输出:

$ ./script.sh
{"type":"system","subtype":"init","cwd":"/Users/orb","session_id":"T-addfb7a4-61d9-41e1-890b-7330aa54087a","tools":["Bash","finder","create_file","edit_file","glob","Grep","mcp__postgres__query","oracle","Read","read_mcp_resource","read_web_page","Task","todo_read","todo_write","undo_edit","web_search"],"mcp_servers":[{"name":"postgres","status":"connected"}]}
{"type":"user","message":{"role":"user","content":[{"type":"text","text":"what's 2+2?"}]},"parent_tool_use_id":null,"session_id":"T-addfb7a4-61d9-41e1-890b-7330aa54087a"}
{"type":"assistant","message":{"type":"message","role":"assistant","content":[{"type":"text","text":"4"}],"stop_reason":"end_turn","usage":{"input_tokens":10,"cache_creation_input_tokens":13993,"cache_read_input_tokens":0,"output_tokens":67,"max_tokens":968000,"service_tier":"standard"}},"parent_tool_use_id":null,"session_id":"T-addfb7a4-61d9-41e1-890b-7330aa54087a"}
{"type":"user","message":{"role":"user","content":[{"type":"text","text":"now add 8 to that"}]},"parent_tool_use_id":null,"session_id":"T-addfb7a4-61d9-41e1-890b-7330aa54087a"}
{"type":"assistant","message":{"type":"message","role":"assistant","content":[{"type":"text","text":"12"}],"stop_reason":"end_turn","usage":{"input_tokens":10,"cache_creation_input_tokens":36,"cache_read_input_tokens":13993,"output_tokens":76,"max_tokens":968000,"service_tier":"standard"}},"parent_tool_use_id":null,"session_id":"T-addfb7a4-61d9-41e1-890b-7330aa54087a"}
{"type":"user","message":{"role":"user","content":[{"type":"text","text":"now add 5 to that"}]},"parent_tool_use_id":null,"session_id":"T-addfb7a4-61d9-41e1-890b-7330aa54087a"}
{"type":"assistant","message":{"type":"message","role":"assistant","content":[{"type":"text","text":"17"}],"stop_reason":"end_turn","usage":{"input_tokens":10,"cache_creation_input_tokens":36,"cache_read_input_tokens":14029,"output_tokens":43,"max_tokens":968000,"service_tier":"standard"}},"parent_tool_use_id":null,"session_id":"T-addfb7a4-61d9-41e1-890b-7330aa54087a"}
{"type":"result","subtype":"success","duration_ms":21639,"is_error":false,"num_turns":3,"result":"17","session_id":"T-addfb7a4-61d9-41e1-890b-7330aa54087a"}

子代理支持

流式 JSON 模式完全支持由 Task 工具创建的子代理:

  • 子代理消息 有其 parent_tool_use_id 字段设置为 Task 工具的 ID
  • 主代理消息parent_tool_use_id 设置为 null
  • 完成邏輯 等待所有子代理完成后才发出最终结果

子代理示例:

$ amp --execute "use Task tool to calculate 4+7" --stream-json
{"type":"system","subtype":"init",...}
{"type":"assistant","message":{"content":[{"type":"tool_use","id":"toolu_123","name":"Task",...}]},"parent_tool_use_id":null,...}
{"type":"assistant","message":{"content":[{"type":"text","text":"11"}]},"parent_tool_use_id":"toolu_123",...}
{"type":"user","message":{"content":[{"type":"tool_result","tool_use_id":"toolu_123",...}]},"parent_tool_use_id":null,...}
{"type":"result","subtype":"success",...}

Claude Code 兼容性

Amp 的流式 JSON 输出尽可能与 Claude Code 的格式兼容。当 --stream-json-thinking 启用时,输出包含不属于 Claude Code 公开模式的额外内容块类型。

工作区对话可见性控制

默认情况下,工作空间成员创建的对话 与工作空间共享,工作区管理员可以更改该默认值。

工作区可在以下页面配置线程可见性的其他选项: 工作区设置 。当前支持的工作区选项包括:

  • 禁止将线程共享到工作区外
  • 默认为私有的对话

企业工作区还可以配置用户组以及按组的线程可见性。

了解更多线程可见性,请参阅 Permissions.

工作区权益

Amp 企业版高级版工作空间可以通过权益设置每个用户的使用配额,例如:

  • 普通用户默认 $50/周,高级工程师 $200/周
  • 对每位工作区成员应用 $100/天的限额
  • 承包商和全职员工有不同的限额

要开始使用,前往 工作区设置 页面并导航到“权益”部分。

分配权益

可以通过四种方式为用户分配权益:

  • 默认:可以将一项权益标记为默认,适用于没有更具体分配的所有工作区成员。
  • 个人:直接将权益分配给特定的工作空间成员。
  • 工作区用户组:将权益分配给一个 Amp 工作区用户组。工作区用户组权益仍处于实验阶段。该组当前成员会获得该权益,成员变更也会更新权益覆盖范围。
  • 目录组:将权益链接到通过 SCIM 从身份提供商(如 Okta、Entra ID)同步的一个或多个目录组。这些组的成员会自动获得该权益。

工作区用户组权益

工作区用户组权益仍处于实验阶段,并使用 Amp 工作区用户组。当工作区管理员希望直接在 Amp 中管理支出类别,而不是通过身份提供商管理时,它们会很有用。

创建或编辑权益时,选择“工作区用户组”作为分配类型,选择一个工作区用户组并保存。所选用户组的当前成员会自动获得该权益。

目录组权益

如果你的工作区启用了目录同步(通过 WorkOS SCIM),你可以根据 IdP 组成员身份分配权益。这对于希望权益分配与身份提供商自动保持同步的组织很有用。

创建或编辑权益时,选择“目录组”作为分配类型,选择一个目录和一个或多个组,然后保存。属于所选组的成员且已加入工作区的用户将自动获得该权益。

解析与用量跟踪

Across all assignment types, when a user qualifies for multiple 权益, the effective 权益 is determined in this order:

  1. 个人 权益
  2. 工作区用户组权益
  3. 目录组权益
  4. 默认 权益

如果用户在同一优先级满足多个权益,则采用标准化每日配额最高的权益。

Amp checks spend against the user’s current effective 权益. Usage is tracked per user and 权益. Changing the settings on the same 权益 keeps usage attached to that 权益. If a user’s effective 权益 changes, prior spend from another 权益 does not count toward the new 权益’s limit.