Skip to content

Commit bf9811a

Browse files
fix: deny codex bash when index mcp is available
Closes #1505
1 parent 732deba commit bf9811a

3 files changed

Lines changed: 15 additions & 0 deletions

File tree

packages/agent/codex/default.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ let
140140
# Codex does not use Claude's `permissions.deny` JSON shape.
141141
sharedPermissions = import (ix.paths.packagesRoot + "/agent/policy/permissions.nix") {
142142
inherit lib;
143+
mcpServers = mcpStdioServers;
143144
};
144145
in
145146
# These baked defaults also reach the Codex GUI app's remote-SSH sessions, not

packages/agent/policy/permissions.nix

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,16 @@ let
1414
"WebFetch"
1515
]
1616
++ lib.optional (mcpServers ? index) "Bash";
17+
18+
supersededCodexTools = lib.optional (mcpServers ? index) "Bash";
1719
in
1820
{
1921
claude = {
2022
deniedToolPatterns = protectedMergeToolPatterns ++ supersededBuiltinTools;
2123
};
2224

2325
codex = {
26+
deniedToolPatterns = supersededCodexTools;
2427
protectedMergeCommandPatterns = [
2528
"gh pr merge*--admin*"
2629
"gh pr merge*--force*"

tests/default.nix

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3384,6 +3384,17 @@ let
33843384
assertion = !(builtins.elem "cursor-cli" developmentBase.packageNames);
33853385
message = "development-base should keep unrelated unfree CLIs out of the image";
33863386
}
3387+
{
3388+
assertion =
3389+
let
3390+
policy = import (paths.packagesRoot + "/agent/policy/permissions.nix") {
3391+
inherit lib;
3392+
mcpServers.index = { };
3393+
};
3394+
in
3395+
policy.codex.deniedToolPatterns == [ "Bash" ];
3396+
message = "Codex should deny the Bash tool when the index MCP is available";
3397+
}
33873398
{
33883399
# Bypass-permissions is enforced through Claude's managed-settings layer
33893400
# (/etc/claude-code/managed-settings.json): read-only, highest precedence,

0 commit comments

Comments
 (0)