# 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 `/.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** ```bash 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" ```