Files
claw/docs/plans/2026-03-27-sgclaw-configurable-skills-dir-plan.md

5.1 KiB

SGClaw Configurable Skills Directory Implementation Plan

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

Goal: Let sgclaw own skill-directory resolution and allow users to set a custom skills directory in sgclaw_config.json without relying on SuperRPA to copy skills into the runtime workspace.

Architecture: Extend the existing browser JSON config parser so sgclaw can read an optional skillsDir field alongside DeepSeek settings. Keep the current embedded ZeroClaw workspace for memory/config internals, but decouple skill loading from that fixed path by resolving a configurable skills root at runtime. Preserve backward compatibility by defaulting to <workspace_root>/.sgclaw-zeroclaw-workspace/skills when skillsDir is absent or empty.

Tech Stack: Rust, serde JSON parsing, existing ZeroClaw compatibility runtime, cargo test

Task 1: Capture browser config requirements

Files:

  • Modify: /home/zyl/projects/sgClaw/claw/src/config/settings.rs
  • Test: /home/zyl/projects/sgClaw/claw/tests/compat_config_test.rs

Step 1: Write the failing test

Add tests that load sgclaw_config.json containing:

  • no skillsDir
  • a relative skillsDir
  • an absolute skillsDir

Assert that:

  • skillsDir missing falls back to default workspace skills path
  • relative values resolve against the browser config directory
  • absolute values are preserved

Step 2: Run test to verify it fails

Run: cargo test compat_config -- --nocapture

Expected: FAIL because DeepSeekSettings / config adapter do not expose any skills directory override yet.

Step 3: Write minimal implementation

Add a browser-config structure that parses skillsDir and expose a resolver function that returns the effective skills directory for sgclaw.

Step 4: Run test to verify it passes

Run: cargo test compat_config -- --nocapture

Expected: PASS for the new parsing and path-resolution cases.

Task 2: Route compat runtime skill loading through sgclaw-owned resolution

Files:

  • Modify: /home/zyl/projects/sgClaw/claw/src/compat/config_adapter.rs
  • Modify: /home/zyl/projects/sgClaw/claw/src/compat/runtime.rs
  • Test: /home/zyl/projects/sgClaw/claw/tests/compat_runtime_test.rs

Step 1: Write the failing test

Add a compat runtime test that creates:

  • a default workspace skill package under .sgclaw-zeroclaw-workspace/skills
  • a custom skill package under another directory configured via skillsDir

Assert that provider request payload contains only the configured skill name when skillsDir is set, and still contains workspace skill names when the override is absent.

Step 2: Run test to verify it fails

Run: cargo test compat_runtime -- --nocapture

Expected: FAIL because the runtime currently always loads skills from config.workspace_dir.

Step 3: Write minimal implementation

Keep config.workspace_dir for ZeroClaw internal state, but load skills from the resolved effective skills directory by calling load_skills_from_directory directly when a custom directory is configured.

Step 4: Run test to verify it passes

Run: cargo test compat_runtime -- --nocapture

Expected: PASS and provider request payload shows the right Available Skills content.

Task 3: Document and verify backward compatibility

Files:

  • Modify: /home/zyl/projects/sgClaw/claw/docs/README.md
  • Modify: /home/zyl/projects/sgClaw/claw/docs/L5-提示词分布与安全改造方案.md

Step 1: Write the failing check

Record the expected runtime behavior:

  • sgclaw owns skill lookup
  • SuperRPA only passes --config-path
  • skillsDir is optional

Step 2: Run verification

Run: rg -n "skillsDir|sgclaw owns skill lookup|config-path" docs

Expected: missing text before docs are updated.

Step 3: Write minimal documentation

Document:

  • JSON field name
  • relative-path resolution base
  • default fallback
  • operational implication for SuperRPA integration

Step 4: Run verification

Run: rg -n "skillsDir|sgclaw owns skill lookup|config-path" docs

Expected: PASS with updated docs.

Task 4: Final verification

Files:

  • Review only: /home/zyl/projects/sgClaw/claw/src/config/settings.rs
  • Review only: /home/zyl/projects/sgClaw/claw/src/compat/config_adapter.rs
  • Review only: /home/zyl/projects/sgClaw/claw/src/compat/runtime.rs
  • Review only: /home/zyl/projects/sgClaw/claw/tests/compat_config_test.rs
  • Review only: /home/zyl/projects/sgClaw/claw/tests/compat_runtime_test.rs

Step 1: Run targeted tests

Run: cargo test compat_config -- --nocapture

Expected: PASS

Step 2: Run runtime tests

Run: cargo test compat_runtime -- --nocapture

Expected: PASS

Step 3: Run skill-lib structural validation

Run: python3 -m unittest tests.skill_lib_validation_test -v

Expected: PASS

Step 4: Commit

git add docs/plans/2026-03-27-sgclaw-configurable-skills-dir-plan.md \
  src/config/settings.rs \
  src/compat/config_adapter.rs \
  src/compat/runtime.rs \
  tests/compat_config_test.rs \
  tests/compat_runtime_test.rs \
  docs/README.md \
  docs/L5-提示词分布与安全改造方案.md
git commit -m "feat: make sgclaw skills directory configurable"