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:
skillsDirmissing 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:
sgclawowns skill lookup- SuperRPA only passes
--config-path skillsDiris 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"