Skip to content

Invalid Value: 'tools'. Function 'functions.followup_task' declares encrypted parameters but is not configured for encrypted tool use by this model. #27205

Open

Description

@cowwoc

What version of Codex CLI is running?

codex-cli 0.138.0

What subscription do you have?

Pro 20x

Which model were you using?

gpt-5.4

What platform is your computer?

Linux 6.6.114.1-microsoft-standard-WSL2 x86_64 x86_64

What terminal emulator and version are you using (if applicable)?

Windows Terminal

Codex doctor report

{
  "schemaVersion": 1,
  "generatedAt": "1781019894s since unix epoch",
  "overallStatus": "warning",
  "codexVersion": "0.138.0",
  "checks": {
    "app_server.status": {
      "id": "app_server.status",
      "category": "app-server",
      "status": "ok",
      "summary": "background server is not running",
      "details": {
        "control socket": "/home/node/.codex/app-server-control/app-server-control.sock",
        "daemon state dir": "/home/node/.codex/app-server-daemon",
        "mode": "ephemeral",
        "pid file": "/home/node/.codex/app-server-daemon/app-server.pid (missing)",
        "settings": "/home/node/.codex/app-server-daemon/settings.json (missing)",
        "status": "not running",
        "update-loop pid file": "/home/node/.codex/app-server-daemon/app-server-updater.pid (missing)"
      },
      "remediation": null,
      "durationMs": 0
    },
    "auth.credentials": {
      "id": "auth.credentials",
      "category": "auth",
      "status": "ok",
      "summary": "auth is configured",
      "details": {
        "auth env vars present": "OPENAI_API_KEY",
        "auth file": "/home/node/.codex/auth.json",
        "auth storage mode": "File",
        "stored API key": "true",
        "stored ChatGPT tokens": "false",
        "stored agent identity": "false",
        "stored auth mode": "api_key"
      },
      "remediation": null,
      "durationMs": 0
    },
    "config.load": {
      "id": "config.load",
      "category": "config",
      "status": "ok",
      "summary": "config loaded",
      "details": {
        "CODEX_HOME": "/home/node/.codex",
        "config.toml": "/home/node/.codex/config.toml",
        "config.toml parse": "ok",
        "cwd": "/workspace",
        "enabled feature flags": "shell_tool, unified_exec, shell_snapshot, terminal_resize_reflow, sqlite, enable_request_compression, multi_agent, multi_agent_v2, apps, tool_suggest, plugins, in_app_browser, browser_use, browser_use_external, computer_use, plugin_sharing, image_generation, skill_mcp_dependency_install, steer, guardian_approval, goals, collaboration_modes, tool_call_mcp_elicitation, personality, fast_mode, tui_app_server, prevent_idle_sleep, workspace_dependencies",
        "feature flag overrides": "hooks=false, multi_agent_v2=true, prevent_idle_sleep=true",
        "feature flags enabled": "28",
        "log dir": "/home/node/.codex/log",
        "mcp servers": "0",
        "model": "gpt-5.4",
        "model provider": "openai",
        "sqlite home": "/home/node/.codex"
      },
      "remediation": null,
      "durationMs": 0
    },
    "git.environment": {
      "id": "git.environment",
      "category": "git",
      "status": "ok",
      "summary": "git version 2.47.3",
      "details": {
        ".git entry": "directory",
        "PATH git #1": "/usr/bin/git",
        "PATH git #2": "/bin/git",
        "PATH git entries": "2",
        "git branch": "v2.1",
        "git build options": "git version 2.47.3; cpu: x86_64; no commit associated with this build; sizeof-long: 8; sizeof-size_t: 8; shell-path: /bin/sh; libcurl: 8.14.1; zlib: 1.3.1",
        "git exec path": "/usr/lib/git-core",
        "git version": "git version 2.47.3",
        "repo detected": "true",
        "repo root": "/workspace",
        "selected git": "/usr/bin/git"
      },
      "remediation": null,
      "durationMs": 17
    },
    "installation": {
      "id": "installation",
      "category": "install",
      "status": "ok",
      "summary": "installation looks consistent",
      "details": {
        "PATH codex #1": "/usr/local/bin/codex",
        "PATH codex #2": "/usr/local/share/npm-global/bin/codex",
        "PATH codex entries": "2",
        "current executable": "/usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex",
        "install context": "npm (package /usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl, bin /usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin, resources /usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-resources, path /usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-path)",
        "managed by bun": "false",
        "managed by npm": "true",
        "managed package root": "/usr/local/share/npm-global/lib/node_modules/@openai/codex",
        "npm update target": "/usr/local/share/npm-global/lib/node_modules/@openai/codex"
      },
      "remediation": null,
      "durationMs": 112
    },
    "mcp.config": {
      "id": "mcp.config",
      "category": "mcp",
      "status": "ok",
      "summary": "no MCP servers configured",
      "details": {},
      "remediation": null,
      "durationMs": 0
    },
    "network.env": {
      "id": "network.env",
      "category": "network",
      "status": "ok",
      "summary": "network-related environment looks readable",
      "details": {
        "proxy env vars": "none"
      },
      "remediation": null,
      "durationMs": 0
    },
    "network.provider_reachability": {
      "id": "network.provider_reachability",
      "category": "reachability",
      "status": "ok",
      "summary": "active provider endpoints are reachable over HTTP",
      "details": {
        "openai API base URL": "http://host.docker.internal:2455/backend-api/<redacted> reachable (HTTP 405)",
        "openai API route probe": "http://host.docker.internal:2455/backend-api/<redacted> route exists (HTTP 401)",
        "reachability mode": "API key auth"
      },
      "remediation": null,
      "durationMs": 46
    },
    "network.websocket_reachability": {
      "id": "network.websocket_reachability",
      "category": "websocket",
      "status": "ok",
      "summary": "Responses WebSocket handshake succeeded",
      "details": {
        "DNS": "1 IPv4, 1 IPv6, first IPv4",
        "auth mode": "api_key",
        "connect timeout": "15000 ms",
        "endpoint": "ws://host.docker.internal:2455/backend-api/<redacted>",
        "handshake result": "HTTP 101 Switching Protocols",
        "model provider": "openai",
        "models etag present": "false",
        "provider name": "OpenAI",
        "proxy env vars": "none",
        "reasoning header": "false",
        "server model present": "false",
        "supports websockets": "true",
        "wire API": "responses"
      },
      "remediation": null,
      "durationMs": 293
    },
    "runtime.provenance": {
      "id": "runtime.provenance",
      "category": "runtime",
      "status": "ok",
      "summary": "running npm on linux-x86_64",
      "details": {
        "commit": "unknown",
        "current executable": "/usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin/codex",
        "install method": "npm (package /usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl, bin /usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/bin, resources /usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-resources, path /usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-path)",
        "platform": "linux-x86_64",
        "version": "0.138.0"
      },
      "remediation": null,
      "durationMs": 0
    },
    "runtime.search": {
      "id": "runtime.search",
      "category": "search",
      "status": "ok",
      "summary": "search is OK (bundled)",
      "details": {
        "search command": "/usr/local/share/npm-global/lib/node_modules/@openai/codex/node_modules/@openai/codex-linux-x64/vendor/x86_64-unknown-linux-musl/codex-path/rg",
        "search command readiness": "file exists",
        "search provider": "bundled"
      },
      "remediation": null,
      "durationMs": 0
    },
    "sandbox.helpers": {
      "id": "sandbox.helpers",
      "category": "sandbox",
      "status": "ok",
      "summary": "sandbox configuration is readable",
      "details": {
        "approval policy": "Never",
        "codex-linux-sandbox helper": "/home/node/.codex/tmp/arg0/codex-arg0uboZ57/codex-linux-sandbox",
        "execve wrapper helper": "/home/node/.codex/tmp/arg0/codex-arg0uboZ57/codex-execve-wrapper",
        "filesystem sandbox": "unrestricted",
        "network sandbox": "enabled"
      },
      "remediation": null,
      "durationMs": 0
    },
    "state.paths": {
      "id": "state.paths",
      "category": "state",
      "status": "ok",
      "summary": "state paths and databases are inspectable",
      "details": {
        "CODEX_HOME": "/home/node/.codex (dir)",
        "active rollout files": "4680 files, 6362255156 total bytes, 1359456 average bytes",
        "archived rollout files": "0 files, 0 total bytes, 0 average bytes",
        "goals DB": "/home/node/.codex/goals_1.sqlite (file)",
        "goals DB integrity": "ok",
        "log DB": "/home/node/.codex/logs_2.sqlite (file)",
        "log DB integrity": "ok",
        "log dir": "/home/node/.codex/log (dir)",
        "memories DB": "/home/node/.codex/memories_1.sqlite (file)",
        "memories DB integrity": "ok",
        "sqlite home": "/home/node/.codex (dir)",
        "state DB": "/home/node/.codex/state_5.sqlite (file)",
        "state DB integrity": "ok"
      },
      "remediation": null,
      "durationMs": 2487
    },
    "state.rollout_db_parity": {
      "id": "state.rollout_db_parity",
      "category": "threads",
      "status": "warning",
      "summary": "rollout files and state DB thread inventory differ",
      "details": {
        "default model provider": "openai",
        "rollout DB active files": "4680",
        "rollout DB active rows": "4680",
        "rollout DB archive mismatches": "0",
        "rollout DB archived files": "0",
        "rollout DB archived rows": "0",
        "rollout DB duplicate DB paths": "0",
        "rollout DB duplicate rollout thread ids": "0",
        "rollout DB malformed file names": "0",
        "rollout DB missing active rows": "150",
        "rollout DB missing active sample": [
          "/home/node/.codex/sessions/2026/05/10/rollout-2026-05-10T17-02-36-019e13b2-f6ea-74a3-9e21-83c212334986.jsonl",
          "/home/node/.codex/sessions/2026/05/10/rollout-2026-05-10T17-03-11-019e13b3-8140-7990-8fc6-e6a830763665.jsonl",
          "/home/node/.codex/sessions/2026/05/10/rollout-2026-05-10T07-24-21-019e11a1-917a-7c33-a4ad-dde2c002eb03.jsonl",
          "/home/node/.codex/sessions/2026/05/10/rollout-2026-05-10T07-59-13-019e11c1-7b8f-7822-8c5b-44b295c032ea.jsonl",
          "/home/node/.codex/sessions/2026/05/10/rollout-2026-05-10T08-00-46-019e11c2-e777-7af1-9df3-2aa26a740269.jsonl"
        ],
        "rollout DB missing archived rows": "0",
        "rollout DB model providers": "openai=4666, headroom=14",
        "rollout DB rows": "4680",
        "rollout DB scan cap reached": "false",
        "rollout DB scan errors": "0",
        "rollout DB sources": "subagent:thread_spawn=2543, exec=1777, cli=358, vscode=2",
        "rollout DB stale row sample": [
          "/home/node/.config/codex/sessions/2026/03/30/rollout-2026-03-30T16-29-26-019d406f-dd12-7663-82d5-2028d5606386.jsonl",
          "/home/node/.config/codex/sessions/2026/03/30/rollout-2026-03-30T16-37-17-019d4077-0dff-7103-977b-2dba26f5e24f.jsonl",
          "/home/node/.config/codex/sessions/2026/03/30/rollout-2026-03-30T16-38-48-019d4078-72ad-7270-8e2a-253266f38b5d.jsonl",
          "/home/node/.config/codex/sessions/2026/03/30/rollout-2026-03-30T16-39-16-019d4078-ddea-7000-88c5-48980bbce297.jsonl",
          "/home/node/.config/codex/sessions/2026/03/30/rollout-2026-03-30T16-50-40-019d4083-4e5a-71e0-bf36-f6af1701d4f4.jsonl"
        ],
        "rollout DB stale rows": "150"
      },
      "issues": [
        {
          "severity": "warning",
          "cause": "rollout files are missing from the state DB",
          "measured": "150 active, 0 archived",
          "expected": "every rollout file has a matching threads row",
          "remedy": null,
          "fields": []
        },
        {
          "severity": "warning",
          "cause": "state DB rows point at missing or unusable rollout files",
          "measured": "150 stale rows",
          "expected": "every state DB rollout path is a file on disk",
          "remedy": null,
          "fields": []
        }
      ],
      "remediation": null,
      "durationMs": 135044
    },
    "system.environment": {
      "id": "system.environment",
      "category": "system",
      "status": "ok",
      "summary": "OS language unavailable",
      "details": {
        "os": "Debian 13.0.0 [64-bit]",
        "os language": "unavailable",
        "os type": "Debian",
        "os version": "13.0.0"
      },
      "remediation": null,
      "durationMs": 2
    },
    "terminal.env": {
      "id": "terminal.env",
      "category": "terminal",
      "status": "ok",
      "summary": "terminal metadata was detected",
      "details": {
        "COLORTERM": "truecolor",
        "DISPLAY": "present",
        "TERM": "xterm-direct",
        "WAYLAND_DISPLAY": "present",
        "color output": "enabled",
        "stderr is terminal": "true",
        "stdin is terminal": "true",
        "stdout is terminal": "true",
        "terminal": "unknown",
        "terminal size": "252x67"
      },
      "remediation": null,
      "durationMs": 0
    },
    "terminal.title": {
      "id": "terminal.title",
      "category": "title",
      "status": "ok",
      "summary": "terminal title configured",
      "details": {
        "terminal title activity": "true",
        "terminal title items": "activity, project-name, thread-title, task-progress",
        "terminal title project source": "git repo root",
        "terminal title project value": "workspace",
        "terminal title source": "configured"
      },
      "remediation": null,
      "durationMs": 0
    },
    "updates.status": {
      "id": "updates.status",
      "category": "updates",
      "status": "ok",
      "summary": "update configuration is locally consistent",
      "details": {
        "cached latest version": "0.138.0",
        "check for update on startup": "true",
        "last checked at": "2026-06-09T15:19:04.255301229Z",
        "latest version": "0.138.0",
        "latest version status": "current version is not older",
        "npm update target": "/usr/local/share/npm-global/lib/node_modules/@openai/codex",
        "update action": "npm install -g @openai/codex",
        "version cache": "/home/node/.codex/version.json"
      },
      "remediation": null,
      "durationMs": 380
    }
  }
}

What issue are you seeing?

Any prompt I send returns the same error:

■ {"type":"error","error":{"type":"invalid_request_error","message":"Invalid Value: 'tools'. Function 'functions.followup_task' declares encrypted parameters but is not configured for encrypted tool use by this model.","param":"tools"},"status":400}

What steps can reproduce the bug?

Uploaded thread: 019ead09-6451-75b1-a7e7-3009f4f20b9a

What is the expected behavior?

No response

Additional information

No response

Activity

  1. added
    CLIIssues related to the Codex CLI
    tool-callsIssues related to tool calling
    on Jun 9, 2026
  2. github-actions commented on Jun 9, 2026

    @github-actions
    Contributor

    Potential duplicates detected. Please review them and close your issue if it is a duplicate.

    Powered by Codex Action

  3. cowwoc commented on Jun 9, 2026

    @cowwoc
    Author

    I found the following in config.toml which I don't remember adding:

    [features.multi_agent_v2]
    enabled = true
    

    Removing it fixed the problem. Does version 0.138.0 add this to the config, or was it a coincidence that I ended up with this error when I upgraded to it (not accusing, genuinely curious)?

  4. peterw commented on Jun 10, 2026

    @peterw

    I found the following in config.toml which I don't remember adding:

    [features.multi_agent_v2]
    enabled = true
    

    Removing it fixed the problem. Does version 0.138.0 add this to the config, or was it a coincidence that I ended up with this error when I upgraded to it (not accusing, genuinely curious)?

    thanks this worked, they must have auto updated this because this bug appeared this morning and i didn't change any settings

  5. houskii commented on Jun 10, 2026

    @houskii

    remove

    [features]
    multi_agent_v2=true
    

    seems not work for me

  6. youtae commented on Jun 10, 2026

    @youtae

    I can confirm a related persistence case here. This is not limited to Desktop. Existing threads that had previously used multi_agent_v2 can continue to fail on resume even after the feature is disabled globally, because the saved rollout history still replays the old v2 team context.

    In my case:

    • Codex Desktop App: 26.608.12217
    • Codex CLI: 0.139.0
    • macOS / Apple Silicon
    • Error: Invalid Value: 'tools'. Function 'functions.spawn_agent' declares encrypted parameters but is not configured for encrypted tool use by this model.
    • New sessions worked after disabling multi_agent / multi_agent_v2.
    • Existing threads that had previously used multi_agent_v2 continued to fail when resumed.

    The important detail is that the old rollout JSONL still contained the MultiAgentV2 developer message, including:

    You are /root, the primary agent in a team of agents...
    You can use spawn_agent...

    and many turn_context entries still had "multi_agent_version": "v2".

    So even after disabling the feature globally, resuming the old thread replayed the saved v2 team context and the request still included the encrypted multi-agent tools.

    Local workaround that recovered the thread:

    1. Back up the rollout JSONL.
    2. Remove the persisted MultiAgentV2 developer/team message from the rollout.
    3. Remove multi_agent_version: "v2" from saved turn_context entries.
    4. Resume with --disable multi_agent --disable multi_agent_v2.

    After that, the old thread could respond again.

    I understand multi_agent_v2 is still under development, but it would have been much better if this failed more gracefully: for example by omitting unsupported encrypted multi-agent tools at request time, falling back to a non-multi-agent resume path, or showing a recoverable warning instead of making the whole existing thread unusable.

    This suggests the fix may need not only a feature-flag/tool-schema guard, but also a migration or resume-time guard for older threads that already persisted the v2 team-mode instructions.

  7. mylee04 commented on Jun 10, 2026

    @mylee04

    I found the following in config.toml which I don't remember adding:

    [features.multi_agent_v2]
    enabled = true
    

    Removing it fixed the problem. Does version 0.138.0 add this to the config, or was it a coincidence that I ended up with this error when I upgraded to it (not accusing, genuinely curious)?

    thank you so much, this works for me too.

  8. Shahfarzane commented on Jun 11, 2026

    @Shahfarzane

    I am getting the same error, removing multi_agent_v2, doesnt help when I mention "spawn sub agents" I see this error again

  9. MingyooLee commented on Jun 12, 2026

    @MingyooLee

    Additional confirmed persistence case: resumed threads can keep MultiAgentV2 even after the feature is disabled

    I can confirm the old-session persistence variant of this bug with additional local evidence. This appears to be an upstream Codex resume/history issue rather than a LazyCodex or plugin-specific issue.

    Environment

    • Codex Desktop App: 26.609.x
    • Codex CLI at failing thread creation time: 0.137.0-alpha.4
    • Platform: macOS / Apple Silicon
    • Current config: multi_agent_v2 = false
    • Failing error:
    Invalid Value: 'tools'. Function 'functions.spawn_agent' declares encrypted parameters but is not configured for encrypted tool use by this model.
    

    What I observed

    1. An older thread created on 2026-06-09 failed on resume after a later Codex update.
    2. The old thread's saved rollout still had turn_context.multi_agent_version = "v2" very early in the conversation history.
    3. Later failed resumed turns in the same rollout also continued to carry multi_agent_version = "v2".
    4. A new thread created after disabling multi_agent_v2 used multi_agent_version = "v1" and did not include the encrypted v2-style multi-agent tool schema.
    5. Reinstalling Codex did not recover the old thread, which matches this being persisted session state rather than only the current install/config.

    Timeline evidence

    • A config backup from before disabling v2 had multi_agent_v2 enabled.
    • The problematic thread was created shortly before that disable step.
    • The current config has multi_agent_v2 disabled.
    • Despite the current config, resuming the old thread still selected the v2 multi-agent path from saved history.

    Source-level evidence

    From the current upstream Codex source, the selection path appears to prioritize the conversation history value before falling back to current config:

    • codex-rs/core/src/session/mod.rs: resolve_multi_agent_version() reads conversation_history.get_multi_agent_version() before using config.multi_agent_version_from_features().
    • codex-rs/core/src/tools/handlers/multi_agents_spec.rs: v1 uses the namespaced multi-agent tool spec, while v2 exposes raw function tools with encrypted message fields.
    • codex-rs/core/src/tools/handlers/multi_agents_v2/spawn.rs: v2 registers plain spawn_agent.
    • codex-rs/core/src/tools/handlers/multi_agents/spawn.rs: v1 registers the namespaced v1 spawn_agent.

    That explains the symptom: current config can say v2 is disabled, but an old rollout can still force the resumed request onto the v2 tool schema. If the selected model/session is not configured for encrypted tool use, the request fails before the assistant can respond.

    Why this is slightly different from only disabling the feature

    Disabling multi_agent_v2 fixes new sessions for me. It does not necessarily fix old sessions that already persisted v2 state in their rollout/history. This matches the "new tasks work, old one cannot continue" report in #27548 and the broader config-triggered encrypted-tool failure in #27331.

    Local recovery path that worked

    For the old thread, a safe salvage path was:

    1. Back up the original rollout JSONL.
    2. Extract the user/assistant conversation into a clean continuation artifact.
    3. Exclude raw function_call / function_call_output entries and encrypted multi-agent tool metadata.
    4. Continue from the sanitized transcript in a fresh session where multi_agent_v2 is disabled.

    I avoided editing the original rollout in place for the durable workaround, because the safer recovery path is to preserve the original file and continue from a sanitized transcript.

    Suggested fix direction

    Codex likely needs a resume-time guard or migration for persisted v2 multi-agent state:

    • If multi_agent_v2 is disabled in current config, do not let conversation_history.multi_agent_version = "v2" silently override it on resume.
    • If an old rollout contains v2 team-mode/tool context but the current model/session cannot use encrypted tools, fall back to v1/no-multi-agent or show a recoverable warning.
    • Consider stripping or ignoring persisted v2 tool schema metadata during resume when the active feature flags no longer permit it.

    The important failure mode is that a feature flag/config change can make new sessions healthy while old sessions remain permanently unusable because the rollout history re-selects v2.


    This issue or PR was generated by LazyCodex.
    Tag: lazycodex-generated

  10. zhouzhiouhub commented on Jun 12, 2026

    @zhouzhiouhub

    Issue: Codex Not Working with Multi-Agent Enabled

    Steps Taken

    1. Removed the following entries from config.toml:
    multi_agent = true
    multi_agent_v2 = true
    
    [features.multi_agent_v2]
    enabled = true
  11. ignatremizov commented on Jun 13, 2026

    @ignatremizov

    Rollout auditability matters. Several recovery/workaround comments here involve inspecting or sanitizing old rollout JSONL to get stuck threads working again. #26210 moved MultiAgentV2 subagent task/message text into encrypted payloads, which means the rollout can no longer show what task was delegated to a child agent.

    I opened #28058 for the auditability regression. In addition to the schema-validation failure here, losing readable task history makes recovery/debugging much harder when these failures happen. Please react/comment if this impacts your workflow.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    CLIIssues related to the Codex CLIbugSomething isn't workingtool-callsIssues related to tool calling

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions