AI代理行为切换工具

agent-persona是一个用于快速切换AI代理行为的工具,支持定义和共享可重用的指令配置文件,适用于多种AI工具如Claude、Codex、Gemini和OpenCode。

  • by GoodFarming
  • Shell
  • 本地部署
  • 12 星标
  • 更新于
在 GitHub 查看 GoodFarming/agent-persona

使用说明

代理人角色

立即切换AI代理行为。应用角色默认值和策略(严格执行可选)。

为AI编码代理定义可重用的指令配置文件。跨仓库共享它们,动态切换角色,并锁定代理可以做什么。与Claude、Codex、Gemini和OpenCode配合使用。

为什么使用这个?

问题 解决方案
不同的任务需要不同的代理指令 无需编辑文件即可立即交换角色
AGENTS.md 更改杂乱的git历史记录 覆盖系统不会在磁盘上留下任何更改(Linux)
需要安全的默认值,但偶尔会覆盖 默认情况下应用策略;CLI参数可以覆盖(使用 --strict-policy 执行)
每个项目配置的MCP服务器 中的可移植MCP定义 persona.json
团队惯例分散在各个仓库中 共享角色并包括一致性

快速开始

# Install
git clone https://github.com/GoodFarming/agent-persona.git
cd agent-persona && ./install.sh

# Launch Claude with the "blank" persona
agent-persona claude blank

# See what personas are available
agent-persona --list

# Check everything is working
agent-persona doctor

核心概念

什么是Persona?

角色是一个包含AI代理指令(和可选配置)的文件夹:

.personas/
  my-persona/
    AGENTS.md       # Instructions the agent sees (required)
    CLAUDE.md       # Claude-specific instructions (optional)
    GEMINI.md       # Gemini-specific instructions (optional)
    persona.json    # Defaults, MCP servers, policy (optional)

当你奔跑时 agent-persona claude my-persona,启动器:

  1. 找到你的角色
  2. 将指令叠加到目标文件上(CLAUDE.md)
  3. 注入任何MCP服务器和默认值
  4. 启动Claude并配置所有内容

叠加是如何工作的

┌─────────────────────────────────────────────────────────────────┐
│                         agent-persona                           │
├─────────────────────────────────────────────────────────────────┤
│  1. Find persona (repo → home → system)                         │
│  2. Merge repo-wide meta instructions                           │
│  3. Expand include directives                                   │
│  4. Inject MCP servers from persona.json                        │
│  5. Translate policy to tool-specific flags                     │
│  6. If `--strict-policy`, filter user args that conflict        │
│  7. Overlay composed file onto working directory                │
│  8. Launch tool with: defaults + policy + user_args             │
└─────────────────────────────────────────────────────────────────┘
  • 正常模式:用户参数覆盖策略。
  • 严格模式(--strict-policy):policy覆盖用户参数。

在Linux上:使用绑定挂载方式 unshare --你的实际 AGENTS.md 永远不会被修改。

别处:交换文件,运行工具,退出时恢复。如果发生碰撞,请运行 agent-persona recover.


创建人物角色

选项1:复制本地人物

最适合与您的仓库一起使用的项目特定说明:

cd your-project
agent-persona init                     # Creates .personas/ scaffold
mkdir .personas/dev
cat > .personas/dev/AGENTS.md << 'EOF'
# Development Persona

You are helping with active development on this project.

## Guidelines
- Write tests for new functionality
- Keep changes focused and minimal
- Explain trade-offs when relevant
EOF

选项2:全球角色

最适合适用于任何地方的个人偏好:

mkdir -p ~/.personas/reviewer
cat > ~/.personas/reviewer/AGENTS.md << 'EOF'
# Code Reviewer

Focus on code quality, security, and best practices.
Be thorough but constructive.
EOF

添加工具特定说明

Claude和Gemini可以有自己的指令文件:

.personas/my-persona/
  AGENTS.md    # Default (used by Codex, OpenCode)
  CLAUDE.md    # Used by Claude (if present)
  GEMINI.md    # Used by Gemini (if present)

政策体系

策略在中定义了基线约束 persona.json (工具/路径/网络) agent-persona 转换为工具特定的标志/config。

默认情况下, 用户工具标志覆盖策略。这使您可以在中保持安全的默认值 persona.json同时仍然允许高级用户为单次运行突破界限(例如, --yolo 食品法典委员会)。

要强制执行策略(不可重写),请运行 --strict-policy (或 AGENT_PERSONA_STRICT_POLICY=1).

定义策略

添加一个 policy 阻止到 persona.json:

{
  "policy": {
    "tools": {
      "allow": ["bash", "read", "edit", "write", "glob", "grep"],
      "deny": ["webfetch", "websearch", "task"]
    },
    "paths": {
      "allow": ["./src", "./tests", "/tmp"],
      "deny": [".env", "credentials.json", "~/.ssh/**"]
    },
    "network": {
      "deny": ["*"]
    }
  }
}

优先级规则

  • 正常模式(默认): defaults → policy → 用户工具参数
  • 严格模式(--strict-policy): defaults → 用户工具参数(已筛选)→ policy
  • 自动旁路默认值(codex --full-auto, claude --permission-mode bypassPermissions)当存在策略时被抑制;如果你需要,可以明确地传递它们。

政策控制覆盖(严格模式)

当 --strict-policy 如果使用,这些用户工具标志将被忽略/过滤,因此无法覆盖策略:

工具 由控制的用户工具标志 --strict-policy
克劳德 --permission-mode, --tools, --allowedTools, --disallowedTools, --settings, --dangerously-skip-permissions
法典 --full-auto, --yolo, --dangerously-bypass-*, -c sandbox_mode=*, -c sandbox_workspace_write.*
双子座 严格模式力量 GEMINI_CLI_SYSTEM_SETTINGS_PATH 到生成的设置文件
开源代码 严格模式力量 OPENCODE_CONFIG 到生成的配置文件

预览政策翻译

查看您的政策将如何翻译:

agent-persona print-policy claude my-persona
agent-persona print-policy codex my-persona

严格模式

执行策略,如果不能可靠地执行,则失败:

agent-persona claude my-persona --strict-policy

这可以解决以下问题:

  • 使用 network.deny 当 bash 允许(shell can curl/wget)
  • 使用 paths.deny 使用Codex(不支持)
  • 使用 paths Gemini的限制(不支持)

执行能力矩阵(严格模式)

政策要素 Codex Claude Gemini OpenCode
tools.allow -- 强壮的 强壮的 强壮的
tools.deny 部分(仅限网络搜索) 强壮的 强壮的 强壮的
paths.allow 强壮的 -- 无 --
paths.deny 无 部分(Claude设置) 无 --
network.deny("*") 强壮的 无 无 无

传说: 强壮的 =沙盒/配置强制执行, 部分的 =具有已知的间隙, 无 =不支持, — =未实施

备注:

  • Codex工具.否认:仅 websearch 今天翻译(features.web_search_request=false).
  • 非Codex工具上没有网络:拒绝网络功能工具(例如。, websearch/webfetch)并否认 bash 如果你需要“无网络”保证。
  • 克劳德路径否认:部分通孔 --settings 否定规则;带有MCP工具的边缘案例
  • 非食品法典委员会网络.deny:不存在沙箱级网络隔离;请参阅下面的硬化指南

硬化导向

对于Claude、Gemini或OpenCode上的“无网络访问”:

这些工具缺乏操作系统级的网络沙盒。要实现网络隔离:

  1. 拒绝bash和拒绝web工具 --防止 curl/wget 在壳和块 webfetch/websearch:

    {
      "policy": {
        "tools": {
          "deny": ["bash", "webfetch", "websearch"]
        }
      }
    }
    
  2. 或者在外部网络沙箱中运行 (容器、VM、网络命名空间)

  3. 使用 --strict-policy 在无法保证的情况下快速失败:

    agent-persona claude my-persona --strict-policy
    

    如果发生以下情况,则失败 network.deny: ["*"] 已设置,但 bash 是允许的。

Bash命令限制不能可靠地执行。 曾经 bash 在...里 tools.allow,代理可以运行任意shell命令。没有跨工具机制来限制特定命令(例如。, git clean).如果需要命令级控制,请拒绝 bash 完全或使用操作系统级沙盒。

使用Codex进行最强隔离。 Codex的沙盒模式提供了其他工具无法比拟的实际操作系统级路径和网络限制。


包括和组成

共享片段

在中创建可重用块 .personas/.shared/:

# .personas/.shared/security-rules.md
## Security Requirements
- Never expose credentials
- Validate all user input
- Use parameterized queries

将他们纳入任何角色:

# My Persona

<!-- include {"file":"security-rules.md"} -->

## Additional Guidelines
...

模板变量

使用 {{persona}} 在共享块或元文件中引用当前角色名称:

# .personas/.shared/planning-rules.md

## Planning
Save your plans to `.persona/{{persona}}/PLAN.md`.
Update `.persona/{{persona}}/SPEC.md` with requirements.

当扩展为人物角色时 dev-agent,这变成了:

## Planning
Save your plans to `.persona/dev-agent/PLAN.md`.
Update `.persona/dev-agent/SPEC.md` with requirements.

无法识别 {{...}} 模式会发出警告,但不会阻止执行。

继承其他角色

# Extended Persona

<!-- include {"persona":"base-persona"} -->

## My Additions
...

撰写政策片段

persona.json 支持还包括:

{
  "include": [
    { "file": "policy-base.json" },
    { "persona": "secure-base" }
  ],
  "policy": {
    "tools": {
      "deny": ["task"]
    }
  }
}

包括加法合并。冲突(例如,允许和拒绝的工具相同)会导致错误。


回购范围元指令

添加适用于的上下文 全部 repo中的人物角色:

# .personas/.shared/meta.AGENTS.md

## Project Context
This is a TypeScript monorepo using pnpm workspaces.

## Conventions
- Use vitest for tests
- Run `pnpm lint` before committing

## Off-Limits
- Don't modify `packages/legacy/`

Meta被合并在每个角色的顶部(或底部) --meta-position=bottom).

由创建的模板 agent-persona init 是 在编辑之前忽略它.


MCP服务器注入

在中定义MCP服务器 persona.json 并且它们是自动配置的:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@anthropic/mcp-filesystem"],
      "env": { "ALLOWED_PATHS": "/home/user/projects" }
    },
    "database": {
      "command": "mcp-postgres",
      "args": ["--connection-string", "postgres://..."]
    }
  }
}
  • 克劳德:生成温度 --mcp-config JSON 文件
  • 法典:排放 -c mcp_servers.*=... 覆盖
  • 禁用 --no-mcp 或 AGENT_PERSONA_MCP=0

默认值和覆盖

每个工具默认值

{
  "defaults": {
    "*": ["--verbose"],
    "codex": ["--model", "o3"],
    "claude": ["--model", "sonnet"]
  }
}

全局默认值(*)先申请;工具特定的默认值附加在后面。

内置默认值

除非策略存在,否则代理角色会添加合理的默认值:

  • 法典: --full-auto (自动批准安全操作)
  • 克劳德: --permission-mode bypassPermissions (跳过提示)

当存在策略时,这些将被抑制(策略控制权限)。

用户Args总是赢

# persona.json: "claude": ["--model", "opus"]
agent-persona claude my-persona --model sonnet
# Result: only --model sonnet is passed

禁用默认值

agent-persona claude my-persona --no-defaults

Persona探索

决议顺序(第一场比赛获胜):

  1. Repo本地: .personas/<name>/ 在当前目录或父目录中
  2. 额外路径: AGENT_PERSONA_PATHS 环境变量(以冒号分隔)
  3. 家: ~/.personas/<name>/
  4. 用户: ~/.local/share/agent-persona/.personas/<name>/
  5. 系统: /usr/local/share/agent-persona/.personas/<name>/
agent-persona which my-persona  # Show where persona resolves from

集 AGENT_PERSONA_PREFER_REPO=0 在repo之前检查home/user。


命令

命令 描述
agent-persona <tool> <persona> 使用人物角色启动工具
agent-persona init 脚手架 .personas/ 在当前回购中
agent-persona doctor 验证安装并检查问题
agent-persona recover 硬终止后恢复文件(交换模式)
agent-persona which <persona> 显示人物角色从何处解析
agent-persona print-overlay <tool> <persona> 预览编写的说明
agent-persona print-policy <tool> <persona> 显示策略翻译摘要
agent-persona --list 列出所有可用的角色

刀具垫片

Symlinks允许您跳过指定工具:

claude-persona my-agent    # same as: agent-persona claude my-agent
codex-persona my-agent
gemini-persona my-agent
opencode-persona my-agent

旗帜

标志 描述
--no-meta 跳过仓库元合并
--no-mcp 跳过MCP注射
--no-defaults 跳过所有默认值
--meta-file=<path> 覆盖元文件位置
--meta-position=top|bottom 在哪里合并meta(默认值:top)
--force-swap 强制交换和恢复(跳过绑定挂载)
--strict-policy 如果无法可靠地执行策略,则失败
--version 显示版本
-h, --help 显示帮助

环境变量

输入(配置代理角色)

变量 描述 默认值
AGENT_PERSONA_DEBUG 启用调试日志记录 关闭
AGENT_PERSONA_META 启用元合并 1
AGENT_PERSONA_MCP 启用MCP注入 1
AGENT_PERSONA_DEFAULTS 启用角色/工具默认值 1
AGENT_PERSONA_STRICT_POLICY 未执行的政策失败 0
AGENT_PERSONA_FORCE_SWAP 强制交换模式 0
AGENT_PERSONA_PATHS 额外搜索路径(冒号分隔) 空
AGENT_PERSONA_HOME 用户角色目录 ~/.local/share/agent-persona
AGENT_PERSONA_PREFER_REPO 更喜欢回购本地角色 1
AGENT_PERSONA_INCLUDE_DEPTH 最大包含递归深度 10
AGENT_PERSONA_UPDATE_CHECK 启用更新检查 1
AGENT_PERSONA_UPDATE_CHECK_INTERVAL 更新检查间隔(秒) 86400 (24小时)
AGENT_PERSONA_GEMINI_DISABLE_IDE 禁用Gemini IDE模式 0
AGENT_PERSONA_GEMINI_FORCE_TTY 双子座的力伪TTY auto

输出(导出到工具流程)

适用于钩子、脚本、内存和日志记录:

变量 描述 示例
AGENT_PERSONA_NAME Persona slug code-reviewer
AGENT_PERSONA_PATH 已解析的角色目录 /home/user/.personas/code-reviewer
AGENT_PERSONA_TOOL 工具正在启动 claude
AGENT_PERSONA_OVERLAY_FILE 目标覆盖文件 CLAUDE.md
AGENT_PERSONA_RUN_MODE 启动模式 unshare 或 swap

用例

任务特定代理

agent-persona claude researcher  # Deep research, thorough exploration
agent-persona codex fixer        # Quick fixes, minimal changes
agent-persona claude reviewer    # Code review, security focus

安全沙盒开发

{
  "policy": {
    "tools": { "allow": ["bash", "read", "edit", "write", "glob", "grep"] },
    "paths": { "allow": ["./src", "./tests"] },
    "network": { "deny": ["*"] }
  }
}

多工具工作流

相同的角色,不同的工具:

agent-persona codex architect   # Planning with Codex
agent-persona claude architect  # Implementation with Claude

团队标准

通过点文件或团队仓库共享角色:

export AGENT_PERSONA_PATHS="$HOME/team-personas:$AGENT_PERSONA_PATHS"

根据项目MCP配置

// frontend/.personas/dev/persona.json
{
  "mcpServers": {
    "browser": { "command": "mcp-browser-tools" }
  }
}

// backend/.personas/dev/persona.json
{
  "mcpServers": {
    "postgres": { "command": "mcp-postgres", "args": ["--local"] }
  }
}

覆盖安全

环境 方法 磁盘上的更改 硬杀伤风险
Linux与 unshare 绑定挂载 无 无
其他/ --force-swap 交换和恢复 临时 使用 recover

如果会话在交换模式下意外终止(SIGKILL、崩溃、断电):

agent-persona recover  # Restores from backup
agent-persona doctor   # Shows any orphaned backups

安装

看 安装.md 详细说明。

git clone https://github.com/GoodFarming/agent-persona.git
cd agent-persona && ./install.sh
agent-persona doctor

需求

  • Linux (在Ubuntu上测试,应该适用于大多数发行版)
  • Bash 4.0+ (策略功能需要)
  • Python 3 (策略执行、persona.json解析、包括扩展所需)
  • 一个或多个AI工具: codex, claude, gemini, opencode

卸载

./uninstall.sh
# or manually:
rm -f ~/.local/bin/agent-persona ~/.local/bin/*-persona
rm -rf ~/.local/share/agent-persona

测试

# Core functionality
bash tests/smoke.sh

# CLI argument/env translation (no model calls)
bash tests/integration-cli-parse.sh

# Real CLI tests (requires credentials, may incur cost)
AGENT_PERSONA_RUN_REAL_TESTS=1 bash tests/integration-real.sh

有关完整的测试选项和手动测试程序,请参阅 tests/MANUAL-TESTS.md.


支持的工具

工具 覆盖文件 策略支持
克劳德/克劳德代码 CLAUDE.md 满
法典 AGENTS.md 完整(基于沙盒)
双子座 GEMINI.md 完整(基于设置)
开源代码 AGENTS.md 完整(基于配置)
PATH上的任何可执行文件 AGENTS.md 没有

贡献

欢迎在 github/GoodFarming/agent-persona.

许可证

麻省理工学院