背景
当 SubAgent 执行 SQL 或 Python 脚本时,脚本本身不知道自己的执行上下文在哪里。如果环境变量中包含 Session ID、Agent ID 等信息,业务脚本就能利用这些信息进行链路追踪、日志关联、审计记录等。
需求拆分
1. 自动注入系统上下文变量
SubAgent 通过 Bash tool 执行命令时,自动注入以下环境变量:
| 变量名 |
说明 |
QWEN_CODE_SESSION_ID |
当前会话 ID |
QWEN_CODE_AGENT_ID |
当前执行 Agent 的 ID |
QWEN_CODE_PARENT_AGENT_ID |
父 Agent ID(如有) |
QWEN_CODE_PROMPT_ID |
当前 prompt/turn 的 ID(如有) |
业务脚本即可通过 os.environ['QWEN_CODE_SESSION_ID'] 等方式获取上下文。
2. 支持自定义业务变量注入
用户应该能够声明一组自定义环境变量,这些变量会自动注入到所有工具执行的子进程中。可能的方式:
settings.json 的 env 字段(启动时注入)
/env 命令(运行时动态设置)
- Hook 机制(
SessionStart hook 写入 ENV_FILE)
使用场景
- 链路追踪:Python 脚本执行 SQL 时,把
SESSION_ID 写入 SQL comment 或 trace header,便于在数据库侧追踪来源
- 审计日志:知道某条 SQL 是哪个 Session、哪个 Agent 发起的
- 业务关联:自定义注入
PROJECT_ID、TASK_ID 等业务上下文,脚本可据此写入对应的数据表或日志通道
参考:Claude Code 的实现
Claude Code 已有类似机制(源码参考路径:src/utils/Shell.ts、src/utils/shell/bashProvider.ts):
CLAUDE_CODE_SESSION_ID 已在 v2.1.132 起注入 Bash tool 子进程(但曾有 USER_TYPE === 'ant' 门控)
settings.json 的 env 字段支持声明式环境变量
/env 命令支持运行时动态设置
CLAUDE_ENV_FILE 机制支持 hook 写入后自动 source
相关 issue:
建议实现路径
- 在 Shell 执行层(
Shell.ts 等效位置)无条件注入 QWEN_CODE_SESSION_ID 和 QWEN_CODE_AGENT_ID
- 在 bashProvider 的
getEnvironmentOverrides() 等效位置集中管理 per-command 环境变量
- 支持
settings.json env 字段 + /env 命令作为自定义变量入口
背景
当 SubAgent 执行 SQL 或 Python 脚本时,脚本本身不知道自己的执行上下文在哪里。如果环境变量中包含 Session ID、Agent ID 等信息,业务脚本就能利用这些信息进行链路追踪、日志关联、审计记录等。
需求拆分
1. 自动注入系统上下文变量
SubAgent 通过 Bash tool 执行命令时,自动注入以下环境变量:
QWEN_CODE_SESSION_IDQWEN_CODE_AGENT_IDQWEN_CODE_PARENT_AGENT_IDQWEN_CODE_PROMPT_ID业务脚本即可通过
os.environ['QWEN_CODE_SESSION_ID']等方式获取上下文。2. 支持自定义业务变量注入
用户应该能够声明一组自定义环境变量,这些变量会自动注入到所有工具执行的子进程中。可能的方式:
settings.json的env字段(启动时注入)/env命令(运行时动态设置)SessionStarthook 写入ENV_FILE)使用场景
SESSION_ID写入 SQL comment 或 trace header,便于在数据库侧追踪来源PROJECT_ID、TASK_ID等业务上下文,脚本可据此写入对应的数据表或日志通道参考:Claude Code 的实现
Claude Code 已有类似机制(源码参考路径:
src/utils/Shell.ts、src/utils/shell/bashProvider.ts):CLAUDE_CODE_SESSION_ID已在 v2.1.132 起注入 Bash tool 子进程(但曾有USER_TYPE === 'ant'门控)settings.json的env字段支持声明式环境变量/env命令支持运行时动态设置CLAUDE_ENV_FILE机制支持 hook 写入后自动 source相关 issue:
agent_id/parent_agent_id注入)建议实现路径
Shell.ts等效位置)无条件注入QWEN_CODE_SESSION_ID和QWEN_CODE_AGENT_IDgetEnvironmentOverrides()等效位置集中管理 per-command 环境变量settings.jsonenv字段 +/env命令作为自定义变量入口