diff --git a/docs/superpowers/plans/2026-05-10-react-agent-skills.md b/docs/superpowers/plans/2026-05-10-react-agent-skills.md
new file mode 100644
index 000000000..d2018e55f
--- /dev/null
+++ b/docs/superpowers/plans/2026-05-10-react-agent-skills.md
@@ -0,0 +1,1310 @@
+# liteflow-react-agent Skills Support Implementation Plan
+
+> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
+
+**Goal:** Add configuration-driven agent-scope skills support to `liteflow-react-agent`, with optional component-level skill allow-lists and `SKILL.md` Java tool binding.
+
+**Architecture:** Add a `SkillsConfig` under `AgentConfig`, create a focused `com.yomahub.liteflow.agent.skill` package that builds `SkillBox` from `FileSystemSkillRepository`, and integrate the result into `ReActAgentComponent#buildAgent()`. Session reuse remains keyed by `(conversationId, agentKey)`; skill sets are treated as stable component capability declarations.
+
+**Tech Stack:** Java 17, Maven, JUnit 5, Spring Boot tests, agent-scope `SkillBox`, `AgentSkill`, `FileSystemSkillRepository`, LiteFlow `ReActAgentComponent`.
+
+---
+
+## File Structure
+
+- Modify: `liteflow-core/src/main/java/com/yomahub/liteflow/property/agent/AgentConfig.java`
+ - Add `SkillsConfig skills` property and accessors.
+- Create: `liteflow-core/src/main/java/com/yomahub/liteflow/property/agent/SkillsConfig.java`
+ - Holds `enabled`, `path`, and `strict`.
+- Create: `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/skill/SkillLoadResult.java`
+ - Immutable build result for `SkillBox`, selected names, and skill id mapping.
+- Create: `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/skill/SkillToolManifest.java`
+ - Scans `SKILL.md` frontmatter and instantiates skill-bound Java tools.
+- Create: `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/skill/SkillBoxFactory.java`
+ - Loads repository skills, filters by component allow-list, validates, and registers skills/tools.
+- Create: `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/skill/SkillTrackingHook.java`
+ - Tracks `load_skill_through_path` calls and exposes used skill names.
+- Modify: `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/session/AgentSession.java`
+ - Store optional `SkillTrackingHook` for a cached ReAct agent.
+- Modify: `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/component/ReActAgentComponent.java`
+ - Add `skills()`, `enableSkills()`, `usedSkills()`, and integrate `SkillBox` into agent build.
+- Modify: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/AbstractReActAgentSpringbootTest.java`
+ - Ensure tests default to skills disabled unless a test enables them.
+- Modify: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/cmp/StubReActAgentCmp.java`
+ - Add skill allow-list and used-skills probes for tests.
+- Create: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/tool/SkillEchoTool.java`
+ - Test skill-bound Java tool.
+- Create: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/ReActAgentSkillFactoryTest.java`
+ - Unit tests for factory behavior.
+- Create: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/ReActAgentSkillIntegrationTest.java`
+ - Integration tests for `ReActAgentComponent` skill integration.
+- Create: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/ReActAgentSkillTrackingHookTest.java`
+ - Hook-level test for skill usage tracking.
+- Create test skill fixtures:
+ - `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills/demo/SKILL.md`
+ - `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills/research/SKILL.md`
+ - `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills/tool-skill/SKILL.md`
+
+---
+
+### Task 1: Add skills configuration model
+
+**Files:**
+- Create: `liteflow-core/src/main/java/com/yomahub/liteflow/property/agent/SkillsConfig.java`
+- Modify: `liteflow-core/src/main/java/com/yomahub/liteflow/property/agent/AgentConfig.java`
+- Test: compile through downstream tests in later tasks
+
+- [ ] **Step 1: Write the failing compile target in the implementation notes**
+
+Run this command before implementation to verify current code has no `SkillsConfig` type:
+
+```bash
+mvn -pl liteflow-react-agent/liteflow-react-agent-core -DskipTests compile
+```
+
+Expected: PASS before this task. After the next test references `AgentConfig#getSkills()`, compilation will fail until this task is implemented.
+
+- [ ] **Step 2: Create `SkillsConfig`**
+
+Create `liteflow-core/src/main/java/com/yomahub/liteflow/property/agent/SkillsConfig.java` with this exact content:
+
+```java
+package com.yomahub.liteflow.property.agent;
+
+/**
+ * Agent skills configuration, mapped from {@code liteflow.agent.skills.*}.
+ *
+ *
Skills are disabled by default so existing ReAct agent users do not need
+ * to create a skills directory after upgrading.
+ */
+public class SkillsConfig {
+
+ /** Whether agent-scope skills integration is enabled. */
+ private boolean enabled = false;
+
+ /** Filesystem root that contains skill directories with SKILL.md files. */
+ private String path = "./skills";
+
+ /** Whether missing skills or invalid tool classes should fail fast. */
+ private boolean strict = true;
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public boolean isStrict() {
+ return strict;
+ }
+
+ public void setStrict(boolean strict) {
+ this.strict = strict;
+ }
+}
+```
+
+- [ ] **Step 3: Add `skills` to `AgentConfig`**
+
+Modify `liteflow-core/src/main/java/com/yomahub/liteflow/property/agent/AgentConfig.java`:
+
+Add this field after `LoggingConfig logging`:
+
+```java
+ /** Skills configuration for agent-scope SkillBox integration. */
+ private SkillsConfig skills = new SkillsConfig();
+```
+
+Add these accessors near the other accessors:
+
+```java
+ public SkillsConfig getSkills() {
+ return skills;
+ }
+
+ public void setSkills(SkillsConfig skills) {
+ this.skills = skills;
+ }
+```
+
+- [ ] **Step 4: Run compile**
+
+```bash
+mvn -pl liteflow-core -DskipTests compile
+```
+
+Expected: PASS.
+
+- [ ] **Step 5: Commit**
+
+```bash
+git add liteflow-core/src/main/java/com/yomahub/liteflow/property/agent/SkillsConfig.java \
+ liteflow-core/src/main/java/com/yomahub/liteflow/property/agent/AgentConfig.java
+git commit -m "feat(agent): add skills configuration"
+```
+
+---
+
+### Task 2: Add skill factory unit tests and fixtures
+
+**Files:**
+- Create: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills/demo/SKILL.md`
+- Create: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills/research/SKILL.md`
+- Create: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills/tool-skill/SKILL.md`
+- Create: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/tool/SkillEchoTool.java`
+- Create: `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/ReActAgentSkillFactoryTest.java`
+
+- [ ] **Step 1: Add test skill fixtures**
+
+Create `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills/demo/SKILL.md`:
+
+```markdown
+---
+name: demo
+description: Demo skill for LiteFlow ReAct agent tests
+---
+
+# Demo Skill
+
+Use this skill when the request is about a simple demonstration.
+```
+
+Create `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills/research/SKILL.md`:
+
+```markdown
+---
+name: research
+description: Research skill for LiteFlow ReAct agent tests
+---
+
+# Research Skill
+
+Use this skill when the request requires research planning.
+```
+
+Create `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills/tool-skill/SKILL.md`:
+
+```markdown
+---
+name: tool-skill
+description: Skill that binds a Java tool for LiteFlow ReAct agent tests
+tools:
+ - com.yomahub.liteflow.test.agent.tool.SkillEchoTool
+---
+
+# Tool Skill
+
+Use this skill when a Java tool should be available after loading the skill.
+```
+
+- [ ] **Step 2: Add skill-bound test tool**
+
+Create `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/tool/SkillEchoTool.java`:
+
+```java
+package com.yomahub.liteflow.test.agent.tool;
+
+import io.agentscope.core.tool.Tool;
+import io.agentscope.core.tool.ToolParam;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class SkillEchoTool {
+
+ public static final AtomicInteger CONSTRUCT_COUNT = new AtomicInteger();
+
+ public SkillEchoTool() {
+ CONSTRUCT_COUNT.incrementAndGet();
+ }
+
+ public static void reset() {
+ CONSTRUCT_COUNT.set(0);
+ }
+
+ @Tool(name = "skill_echo", description = "Echo text from a skill-bound Java tool")
+ public String echo(@ToolParam(name = "text", description = "Text to echo") String text) {
+ return text;
+ }
+}
+```
+
+- [ ] **Step 3: Write failing factory tests**
+
+Create `liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/ReActAgentSkillFactoryTest.java`:
+
+```java
+package com.yomahub.liteflow.test.agent;
+
+import com.yomahub.liteflow.agent.exception.AgentConfigException;
+import com.yomahub.liteflow.agent.skill.SkillBoxFactory;
+import com.yomahub.liteflow.agent.skill.SkillLoadResult;
+import com.yomahub.liteflow.property.agent.AgentConfig;
+import com.yomahub.liteflow.test.agent.tool.SkillEchoTool;
+import io.agentscope.core.skill.AgentSkill;
+import io.agentscope.core.tool.Toolkit;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+public class ReActAgentSkillFactoryTest {
+
+ private AgentConfig cfg;
+
+ @BeforeEach
+ public void setUp() {
+ cfg = new AgentConfig();
+ cfg.getSkills().setEnabled(true);
+ cfg.getSkills().setPath("src/test/resources/agent/skills");
+ cfg.getSkills().setStrict(true);
+ SkillEchoTool.reset();
+ }
+
+ @Test
+ public void testEmptyAllowListLoadsAllSkills() {
+ SkillLoadResult result = SkillBoxFactory.build(new Toolkit(), cfg, List.of());
+
+ Set names = result.skillBox().getAllSkillIds().stream()
+ .map(id -> result.skillBox().getSkill(id))
+ .map(AgentSkill::getName)
+ .collect(Collectors.toSet());
+
+ Assertions.assertTrue(names.contains("demo"));
+ Assertions.assertTrue(names.contains("research"));
+ Assertions.assertTrue(names.contains("tool-skill"));
+ Assertions.assertTrue(result.skillNames().containsAll(List.of("demo", "research", "tool-skill")));
+ }
+
+ @Test
+ public void testAllowListFiltersSkills() {
+ SkillLoadResult result = SkillBoxFactory.build(new Toolkit(), cfg, List.of("demo"));
+
+ List names = result.skillBox().getAllSkillIds().stream()
+ .map(id -> result.skillBox().getSkill(id))
+ .map(AgentSkill::getName)
+ .toList();
+
+ Assertions.assertEquals(List.of("demo"), names);
+ Assertions.assertEquals(List.of("demo"), result.skillNames());
+ }
+
+ @Test
+ public void testMissingAllowListedSkillFailsInStrictMode() {
+ AgentConfigException ex = Assertions.assertThrows(AgentConfigException.class,
+ () -> SkillBoxFactory.build(new Toolkit(), cfg, List.of("missing-skill")));
+
+ Assertions.assertTrue(ex.getMessage().contains("missing-skill"));
+ }
+
+ @Test
+ public void testFrontmatterToolClassIsInstantiated() {
+ SkillLoadResult result = SkillBoxFactory.build(new Toolkit(), cfg, List.of("tool-skill"));
+
+ Assertions.assertEquals(List.of("tool-skill"), result.skillNames());
+ Assertions.assertEquals(1, SkillEchoTool.CONSTRUCT_COUNT.get());
+ }
+
+ @Test
+ public void testMissingSkillsDirectoryFailsInStrictMode() {
+ cfg.getSkills().setPath(Path.of("target", "missing-skills-dir").toString());
+
+ AgentConfigException ex = Assertions.assertThrows(AgentConfigException.class,
+ () -> SkillBoxFactory.build(new Toolkit(), cfg, List.of()));
+
+ Assertions.assertTrue(ex.getMessage().contains("Skills root not found"));
+ }
+}
+```
+
+- [ ] **Step 4: Run tests to verify they fail**
+
+```bash
+mvn -pl liteflow-testcase-el/liteflow-testcase-el-react-agent -Dtest=ReActAgentSkillFactoryTest test
+```
+
+Expected: FAIL with compilation errors for missing `SkillBoxFactory` and `SkillLoadResult`.
+
+- [ ] **Step 5: Commit failing tests**
+
+```bash
+git add liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/resources/agent/skills \
+ liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/tool/SkillEchoTool.java \
+ liteflow-testcase-el/liteflow-testcase-el-react-agent/src/test/java/com/yomahub/liteflow/test/agent/ReActAgentSkillFactoryTest.java
+git commit -m "test(agent): cover skill box factory behavior"
+```
+
+---
+
+### Task 3: Implement skill loading package
+
+**Files:**
+- Create: `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/skill/SkillLoadResult.java`
+- Create: `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/skill/SkillToolManifest.java`
+- Create: `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/skill/SkillBoxFactory.java`
+
+- [ ] **Step 1: Create `SkillLoadResult`**
+
+Create `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/skill/SkillLoadResult.java`:
+
+```java
+package com.yomahub.liteflow.agent.skill;
+
+import io.agentscope.core.skill.SkillBox;
+
+import java.util.List;
+import java.util.Map;
+
+public record SkillLoadResult(
+ SkillBox skillBox,
+ Map skillIdToName,
+ List skillNames) {
+}
+```
+
+- [ ] **Step 2: Create `SkillToolManifest`**
+
+Create `liteflow-react-agent/liteflow-react-agent-core/src/main/java/com/yomahub/liteflow/agent/skill/SkillToolManifest.java`:
+
+```java
+package com.yomahub.liteflow.agent.skill;
+
+import com.yomahub.liteflow.agent.exception.AgentConfigException;
+import com.yomahub.liteflow.property.agent.SkillsConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Stream;
+
+public class SkillToolManifest {
+
+ private static final Logger LOG = LoggerFactory.getLogger(SkillToolManifest.class);
+
+ private final SkillsConfig config;
+ private final Map>> toolClasses = new LinkedHashMap<>();
+
+ public SkillToolManifest(Path skillsRoot, SkillsConfig config) {
+ this.config = config;
+ scan(skillsRoot);
+ }
+
+ public List