Skip to content

[Bug]: Skill Workshop agent-tool apply times out because approval wait exceeds tool watchdog #91266

Description

@EmpireCreator

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

skill_workshop(action="apply") times out after 90 seconds under the default Skill Workshop lifecycle approval policy, while the equivalent openclaw skills workshop apply CLI command succeeds quickly on the same clean proposal.

Steps to reproduce

  1. Use OpenClaw 2026.6.1 with default Skill Workshop lifecycle approval behavior, or with skills.workshop.approvalPolicy unset / pending.
  2. Create a small clean Skill Workshop proposal for a disposable workspace skill.
  3. From an agent session, call the dynamic tool with skill_workshop(action="apply", proposal_id="<proposal-id>").
  4. Observe the dynamic tool call time out after 90 seconds.
  5. Check that the proposal remains pending and the target workspace SKILL.md was not created.
  6. Run openclaw skills workshop apply <proposal-id> --json against an equivalent clean proposal.
  7. Observe that the CLI apply succeeds quickly.

Expected behavior

The agent-tool apply path should either complete successfully after the user approves the lifecycle action, or return a clear approval-related error before the dynamic tool watchdog expires. It should not appear as a generic hung/timed-out skill_workshop execution.

Actual behavior

The agent-tool call returned:

OpenClaw dynamic tool call timed out after 90000ms while running tool skill_workshop.

After the timeout, the proposal was still pending and the target workspace skill file had not been created. The equivalent CLI apply path succeeded quickly on clean proposals.

OpenClaw version

OpenClaw 2026.6.1 (2e08f0f)

Operating system

macOS 26.5 (25F71)

Install method

npm global under a Homebrew Node prefix

Model

openai/gpt-5.5

Provider / routing chain

OpenClaw -> local Gateway dynamic tool runtime -> skill_workshop -> Skill Workshop approval gate

Additional provider/model setup details

This does not appear to be model/provider-specific. The failure occurs in the OpenClaw dynamic tool / Skill Workshop lifecycle approval path before the proposal reaches the normal apply implementation.

Logs, screenshots, and evidence

Observed dynamic tool timeout:


OpenClaw dynamic tool call timed out after 90000ms while running tool skill_workshop.


Local code inspection found the Skill Workshop default config uses pending lifecycle approval:


const DEFAULT_CONFIG = {
  autonomous: { enabled: false },
  approvalPolicy: "pending",
  maxPending: 50,
  maxSkillBytes: 4e4
};


The agent-tool pre-call hook requires approval for Skill Workshop lifecycle actions unless `skills.workshop.approvalPolicy` is set to `auto`:


const SKILL_WORKSHOP_LIFECYCLE_ACTIONS = new Set([
  "apply",
  "reject",
  "quarantine"
]);

function resolveSkillWorkshopToolApproval(params) {
  if (params.toolName !== "skill_workshop") return;
  const action = readLifecycleAction(params.toolParams);
  if (!action) return;
  if (resolveSkillWorkshopConfig(params.config).approvalPolicy === "auto") return;
  return { requireApproval: {
    ...lifecycleApprovalText(action),
    allowedDecisions: ["allow-once", "deny"]
  } };
}


A local workaround was verified by setting:


{
  "skills": {
    "workshop": {
      "approvalPolicy": "auto"
    }
  }
}


After restarting Gateway with that config, agent-tool apply succeeded on a disposable clean proposal. CLI apply continued to succeed. Skill Workshop list/inspect/create/revise paths also continued to work.

Impact and severity

Affected users/systems/channels: OpenClaw agent sessions using the skill_workshop dynamic tool to apply Skill Workshop proposals with the default pending lifecycle approval policy.

Severity: High for Skill Workshop usage through agents. It blocks applying proposals via the agent tool and presents as a generic timeout rather than an actionable approval-state message.

Frequency: Repeatedly observed before workaround when using the agent-tool apply path; CLI apply succeeded on the same class of clean proposals.

Consequence: Users may believe Skill Workshop apply is broken or that proposal content is invalid, even though the underlying CLI/service path works. The practical workaround, approvalPolicy: "auto", disables the secondary lifecycle approval gate for apply, reject, and quarantine, which may be too broad for some environments.

Additional information

The suspected mismatch is:

  • Skill Workshop lifecycle approval waits longer than the dynamic tool watchdog.
  • The dynamic tool watchdog expires first, returning a generic 90-second timeout.
  • The underlying apply function is not reached in the agent-tool path.
  • CLI apply succeeds because it bypasses the agent-tool lifecycle approval gate.

Suggested fixes:

  1. Ensure the Skill Workshop lifecycle approval wait cannot exceed the dynamic tool watchdog.
  2. Return a clear error such as waiting for Skill Workshop lifecycle approval timed out instead of a generic tool timeout.
  3. Consider making lifecycle approval policy configurable per action or workspace, so users can allow apply in trusted admin workspaces without also broadening reject and quarantine.
  4. Document skills.workshop.approvalPolicy and the security tradeoff of setting it to auto.

Workaround

Set skills.workshop.approvalPolicy to auto in the trusted workspace config and restart Gateway. This restores agent-tool apply behavior, but it also bypasses the secondary lifecycle approval gate for Skill Workshop lifecycle actions.

Metadata

Metadata

Assignees

Labels

P2Normal backlog priority with limited blast radius.bugSomething isn't workingbug:behaviorIncorrect behavior without a crashclawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.clawsweeper:needs-security-reviewClawSweeper marked this issue as needing security-sensitive review.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.impact:securitySecurity boundary, credential, authz, sandbox, or sensitive-data risk.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.

Type

No type

Fields

Priority

None yet

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions