skill-flow 1.0.7 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/README.md +208 -131
  2. package/README.zh.md +169 -131
  3. package/dist/bridge-command.d.ts +9 -0
  4. package/dist/bridge-command.js +385 -0
  5. package/dist/bridge-command.js.map +1 -0
  6. package/dist/cli.js +70 -10
  7. package/dist/cli.js.map +1 -1
  8. package/package.json +11 -2
  9. package/dist/adapters/channel-adapters.d.ts +0 -8
  10. package/dist/adapters/channel-adapters.js +0 -64
  11. package/dist/adapters/channel-adapters.js.map +0 -1
  12. package/dist/domain/types.d.ts +0 -231
  13. package/dist/domain/types.js +0 -2
  14. package/dist/domain/types.js.map +0 -1
  15. package/dist/services/config-coordinator.d.ts +0 -38
  16. package/dist/services/config-coordinator.js +0 -83
  17. package/dist/services/config-coordinator.js.map +0 -1
  18. package/dist/services/deployment-applier.d.ts +0 -6
  19. package/dist/services/deployment-applier.js +0 -60
  20. package/dist/services/deployment-applier.js.map +0 -1
  21. package/dist/services/deployment-planner.d.ts +0 -16
  22. package/dist/services/deployment-planner.js +0 -353
  23. package/dist/services/deployment-planner.js.map +0 -1
  24. package/dist/services/doctor-service.d.ts +0 -7
  25. package/dist/services/doctor-service.js +0 -204
  26. package/dist/services/doctor-service.js.map +0 -1
  27. package/dist/services/inventory-service.d.ts +0 -17
  28. package/dist/services/inventory-service.js +0 -216
  29. package/dist/services/inventory-service.js.map +0 -1
  30. package/dist/services/skill-flow.d.ts +0 -133
  31. package/dist/services/skill-flow.js +0 -1180
  32. package/dist/services/skill-flow.js.map +0 -1
  33. package/dist/services/source-service.d.ts +0 -57
  34. package/dist/services/source-service.js +0 -778
  35. package/dist/services/source-service.js.map +0 -1
  36. package/dist/services/workflow-service.d.ts +0 -5
  37. package/dist/services/workflow-service.js +0 -45
  38. package/dist/services/workflow-service.js.map +0 -1
  39. package/dist/services/workspace-bootstrap-service.d.ts +0 -25
  40. package/dist/services/workspace-bootstrap-service.js +0 -140
  41. package/dist/services/workspace-bootstrap-service.js.map +0 -1
  42. package/dist/state/store.d.ts +0 -35
  43. package/dist/state/store.js +0 -151
  44. package/dist/state/store.js.map +0 -1
  45. package/dist/tests/add-flow-model.test.d.ts +0 -1
  46. package/dist/tests/add-flow-model.test.js +0 -108
  47. package/dist/tests/add-flow-model.test.js.map +0 -1
  48. package/dist/tests/add-flow-ui.test.d.ts +0 -1
  49. package/dist/tests/add-flow-ui.test.js +0 -16
  50. package/dist/tests/add-flow-ui.test.js.map +0 -1
  51. package/dist/tests/add-prepare-flow.test.d.ts +0 -1
  52. package/dist/tests/add-prepare-flow.test.js +0 -166
  53. package/dist/tests/add-prepare-flow.test.js.map +0 -1
  54. package/dist/tests/add-selection-and-find-command.test.d.ts +0 -1
  55. package/dist/tests/add-selection-and-find-command.test.js +0 -89
  56. package/dist/tests/add-selection-and-find-command.test.js.map +0 -1
  57. package/dist/tests/clawhub.test.d.ts +0 -1
  58. package/dist/tests/clawhub.test.js +0 -63
  59. package/dist/tests/clawhub.test.js.map +0 -1
  60. package/dist/tests/cli-utils.test.d.ts +0 -1
  61. package/dist/tests/cli-utils.test.js +0 -15
  62. package/dist/tests/cli-utils.test.js.map +0 -1
  63. package/dist/tests/config-coordinator.test.d.ts +0 -1
  64. package/dist/tests/config-coordinator.test.js +0 -219
  65. package/dist/tests/config-coordinator.test.js.map +0 -1
  66. package/dist/tests/config-integration.test.d.ts +0 -1
  67. package/dist/tests/config-integration.test.js +0 -240
  68. package/dist/tests/config-integration.test.js.map +0 -1
  69. package/dist/tests/config-ui-utils.test.d.ts +0 -1
  70. package/dist/tests/config-ui-utils.test.js +0 -523
  71. package/dist/tests/config-ui-utils.test.js.map +0 -1
  72. package/dist/tests/find-and-naming-utils.test.d.ts +0 -1
  73. package/dist/tests/find-and-naming-utils.test.js +0 -127
  74. package/dist/tests/find-and-naming-utils.test.js.map +0 -1
  75. package/dist/tests/inventory-service-precedence.test.d.ts +0 -1
  76. package/dist/tests/inventory-service-precedence.test.js +0 -42
  77. package/dist/tests/inventory-service-precedence.test.js.map +0 -1
  78. package/dist/tests/skill-flow.test.d.ts +0 -1
  79. package/dist/tests/skill-flow.test.js +0 -880
  80. package/dist/tests/skill-flow.test.js.map +0 -1
  81. package/dist/tests/source-lifecycle.test.d.ts +0 -1
  82. package/dist/tests/source-lifecycle.test.js +0 -605
  83. package/dist/tests/source-lifecycle.test.js.map +0 -1
  84. package/dist/tests/source-parsing-compatibility.test.d.ts +0 -1
  85. package/dist/tests/source-parsing-compatibility.test.js +0 -71
  86. package/dist/tests/source-parsing-compatibility.test.js.map +0 -1
  87. package/dist/tests/target-definitions.test.d.ts +0 -1
  88. package/dist/tests/target-definitions.test.js +0 -51
  89. package/dist/tests/target-definitions.test.js.map +0 -1
  90. package/dist/tests/test-helpers.d.ts +0 -18
  91. package/dist/tests/test-helpers.js +0 -123
  92. package/dist/tests/test-helpers.js.map +0 -1
  93. package/dist/tui/add-flow-model.d.ts +0 -62
  94. package/dist/tui/add-flow-model.js +0 -206
  95. package/dist/tui/add-flow-model.js.map +0 -1
  96. package/dist/tui/add-flow.d.ts +0 -25
  97. package/dist/tui/add-flow.js +0 -533
  98. package/dist/tui/add-flow.js.map +0 -1
  99. package/dist/tui/config-app.d.ts +0 -178
  100. package/dist/tui/config-app.js +0 -1551
  101. package/dist/tui/config-app.js.map +0 -1
  102. package/dist/tui/find-app.d.ts +0 -9
  103. package/dist/tui/find-app.js +0 -150
  104. package/dist/tui/find-app.js.map +0 -1
  105. package/dist/tui/selection-state.d.ts +0 -8
  106. package/dist/tui/selection-state.js +0 -32
  107. package/dist/tui/selection-state.js.map +0 -1
  108. package/dist/utils/builtin-git-sources.d.ts +0 -5
  109. package/dist/utils/builtin-git-sources.js +0 -23
  110. package/dist/utils/builtin-git-sources.js.map +0 -1
  111. package/dist/utils/clawhub.d.ts +0 -41
  112. package/dist/utils/clawhub.js +0 -94
  113. package/dist/utils/clawhub.js.map +0 -1
  114. package/dist/utils/cli.d.ts +0 -1
  115. package/dist/utils/cli.js +0 -15
  116. package/dist/utils/cli.js.map +0 -1
  117. package/dist/utils/constants.d.ts +0 -23
  118. package/dist/utils/constants.js +0 -195
  119. package/dist/utils/constants.js.map +0 -1
  120. package/dist/utils/find-command.d.ts +0 -2
  121. package/dist/utils/find-command.js +0 -29
  122. package/dist/utils/find-command.js.map +0 -1
  123. package/dist/utils/format.d.ts +0 -7
  124. package/dist/utils/format.js +0 -68
  125. package/dist/utils/format.js.map +0 -1
  126. package/dist/utils/fs.d.ts +0 -15
  127. package/dist/utils/fs.js +0 -140
  128. package/dist/utils/fs.js.map +0 -1
  129. package/dist/utils/git.d.ts +0 -3
  130. package/dist/utils/git.js +0 -12
  131. package/dist/utils/git.js.map +0 -1
  132. package/dist/utils/github-catalog.d.ts +0 -1
  133. package/dist/utils/github-catalog.js +0 -25
  134. package/dist/utils/github-catalog.js.map +0 -1
  135. package/dist/utils/naming.d.ts +0 -29
  136. package/dist/utils/naming.js +0 -115
  137. package/dist/utils/naming.js.map +0 -1
  138. package/dist/utils/result.d.ts +0 -4
  139. package/dist/utils/result.js +0 -15
  140. package/dist/utils/result.js.map +0 -1
  141. package/dist/utils/source-id.d.ts +0 -2
  142. package/dist/utils/source-id.js +0 -49
  143. package/dist/utils/source-id.js.map +0 -1
package/README.md CHANGED
@@ -1,200 +1,277 @@
1
1
  # Skill Flow
2
2
 
3
- > **Workflow-first management for AI agent skills.**
4
- > Skill grouping · Deploy everywhere · Clear config · Quick diagnosis
3
+ <div align="center">
5
4
 
6
- ![img](img/img-1.jpg)
5
+ Turn scattered AI agent skills into organized workflows.
7
6
 
8
- [中文文档](./README.zh.md)
7
+ [中文](./README.zh.md) · [日本語](./README.ja.md)
9
8
 
10
- [![Node.js Version](https://img.shields.io/node/v/skill-flow?style=flat-square)](https://nodejs.org)
9
+ [![Node.js Version](https://img.shields.io/badge/node-%3E%3D20-43853d?style=flat-square)](https://nodejs.org)
10
+ [![npm Version](https://img.shields.io/npm/v/skill-flow?style=flat-square)](https://www.npmjs.com/package/skill-flow)
11
11
  [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=flat-square)](./LICENSE)
12
12
 
13
- As your AI agent skills grow, management gets messy: one Git repo has a bunch of related skills, they end up scattered across different agents, and updates become a headache.
13
+ <img src="./img/img-icon.png" alt="Skill Flow icon" width="120" />
14
14
 
15
- `skill-flow` fixes this by organizing skills around groups: add skill groups from Git repos, pick where to deploy, update all at once, spot problems fast. Keep your skill setup clean, organized, and stress-free.
15
+ </div>
16
16
 
17
- ## Key Features
17
+ Install, manage, and share skills across every major coding agent — Claude Code, Cursor, Copilot, and more.
18
18
 
19
- ![Skill groups diagram](./img/img-2.png)
19
+ Search and import skills from skills.sh, GitHub, or local sources. Deploy to multiple agents at once. Keep everything organized and up to date.
20
20
 
21
- **Skill-Based Grouping**
22
- One Git repo = one skills group. Related skills stay together, updates and maintenance happen at the group level.
21
+ ![Skill Flow desktop overview](./img/img-home.png)
23
22
 
24
- **Deploy Everywhere**
25
- Set it up once, deploy to multiple agents (Claude Code, Cursor, Windsurf, and 13+ targets).
23
+ ## Why This Exists
26
24
 
27
- **Interactive Terminal UI**
28
- Intuitive TUI: view groups → select skills → choose targets → save configuration.
25
+ Installing skills one by one breaks down at scale:
29
26
 
30
- **Bootstrap On Config Open**
31
- `config` renders immediately, shows boot progress, adopts unmanaged skills already found in agent roots, then audits current projections before entering the main UI.
27
+ - Repos contain multiple related skills, but you install them separately
28
+ - Different agents expect different locations
29
+ - Updates drift silently
30
+ - Unmanaged folders accumulate
31
+ - Nobody tracks what's actually deployed
32
32
 
33
- **Explicit State Tracking**
34
- `manifest.json` = what you want, `lock.json` = what's actually installed. Both are readable and queryable.
33
+ `skill-flow` preserves the workflow group. One source remains one cohesive unit—inspect it, select skills, deploy to multiple targets, update cleanly, and always know your state.
35
34
 
36
- **Health Diagnosis**
37
- `doctor` catches broken links, mismatches, and conflicts — tells you exactly what's wrong.
35
+ ## What You Get
38
36
 
39
- ## Installation
37
+ - **Grouped source management**: local, Git, and skills.sh sources all flow through the same import model.
38
+ - **Multi-agent deployment**: deploy one selected skill set to Claude Code, Codex, Cursor, Gemini CLI, OpenCode, OpenClaw, Windsurf, and more.
39
+ - **Interactive config flow**: Ink-based TUI for add/config flows, selection state, review, and repair.
40
+ - **Desktop app on macOS 15+**: SwiftUI main window, import view, detail panel, settings, and menu bar quick config.
41
+ - **Explicit state**: `manifest.json` stores intent, `lock.json` stores resolved inventory and deployments.
42
+ - **Bridge protocol**: machine-readable desktop/helper entrypoint via `skill-flow bridge --json`.
43
+ - **Repair and diagnosis**: `doctor`, `repair-source`, `repair-state`, and `repair-targets` cover the parts that usually rot first.
40
44
 
41
- Requires Node.js >= 20, currently optimized for macOS.
45
+ ## Interface Preview
42
46
 
43
- Install from npm:
47
+ | Menu Bar | Import |
48
+ | --- | --- |
49
+ | ![Menu bar quick config](./img/img-menu.png) | ![Import screen](./img/img-import.png) |
50
+
51
+ | Detail | Settings |
52
+ | --- | --- |
53
+ | ![Detail screen](./img/img-detail.png) | ![Settings screen](./img/img-setting.png) |
54
+
55
+ ## Quick Start
56
+
57
+ ### Install
44
58
 
45
59
  ```bash
46
60
  npm install -g skill-flow
47
61
  skill-flow --help
48
62
  ```
49
63
 
50
- Run without a global install:
64
+ Or run without a global install:
51
65
 
52
66
  ```bash
53
67
  npx skill-flow --help
54
68
  ```
55
69
 
56
- Install from source for local development:
70
+ ### Desktop prerequisites
57
71
 
58
- ```bash
59
- git clone https://github.com/VintLin/skill-flow.git
60
- cd skill-flow
61
- npm install
62
- npm run build
63
- npm link
64
- ```
72
+ Skill Flow Desktop currently relies on a few external command-line tools on the target Mac:
65
73
 
66
- ## Quick Start
74
+ - `node` 20 or newer is required to launch the bundled desktop helper
75
+ - `git` is required for non-GitHub Git sources
76
+ - `npx` is required for skills.sh imports
77
+
78
+ If the desktop app detects a missing dependency, it will surface an actionable error and point back to this section.
79
+
80
+ ### Typical flow
67
81
 
68
82
  ```bash
69
- # Add a skill source
70
- skill-flow add /path/to/skills-repo
83
+ # Add a source
84
+ skill-flow add garrytan/gstack
71
85
 
72
- # View skills groups
86
+ # Review installed workflow groups
73
87
  skill-flow list
74
88
 
75
- # Interactive configuration (select skills and targets)
89
+ # Open the interactive config UI
76
90
  skill-flow config
77
91
 
78
- # Update all sources
92
+ # Search installed skills, built-in catalogs, and skills.sh
93
+ skill-flow find browser
94
+
95
+ # Update one source or all sources
96
+ skill-flow update garrytan-gstack
79
97
  skill-flow update --all
80
98
 
81
- # Health check
99
+ # Diagnose drift or broken projections
82
100
  skill-flow doctor
101
+ ```
83
102
 
84
- # Remove a skills group
85
- skill-flow uninstall my-source-id
103
+ ### Machine bridge
104
+
105
+ The desktop app and helper tooling talk to the CLI through a versioned JSON protocol:
106
+
107
+ ```bash
108
+ printf '%s' '{"protocolVersion":"1.0","command":"list"}' | skill-flow bridge --json
86
109
  ```
87
110
 
88
- `add <source>` supports local paths, `owner/repo`, full https/ssh Git URLs, GitHub tree URLs, and `clawhub:<slug>[@version]`.
111
+ ## Supported Sources
112
+
113
+ `skill-flow add <source>` supports:
89
114
 
90
- By default, `add` preselects all discovered skills and all detected agent targets. When `--path <repoSubpath>` is provided, the full repo is still imported, but only skills under that path are preselected. `--path` values are normalized, so `./skills/` and `skills/` behave the same, and the CLI prints a preselection warning when the import only scopes the default selection.
115
+ - local folders
116
+ - `owner/repo` GitHub shorthand
117
+ - full HTTPS Git URLs
118
+ - SSH Git URLs
119
+ - GitHub tree URLs
120
+ - `clawhub:<slug>[@version]`
91
121
 
92
122
  Examples:
93
123
 
94
124
  ```bash
95
- # Local repo
96
125
  skill-flow add ~/code/my-skills
97
-
98
- # GitHub shorthand
99
126
  skill-flow add garrytan/gstack
100
-
101
- # Full Git URL
102
127
  skill-flow add https://github.com/garrytan/gstack.git
103
128
  skill-flow add git@github.com:garrytan/gstack.git
104
-
105
- # GitHub tree URL
106
129
  skill-flow add https://github.com/garrytan/gstack/tree/main/skills
107
-
108
- # Import the repo, but only preselect skills under a subpath
109
- skill-flow add garrytan/gstack --path skills
110
-
111
- # ClawHub package
112
130
  skill-flow add clawhub:example/skill-pack
113
131
  skill-flow add clawhub:example/skill-pack@1.2.3
114
132
  ```
115
133
 
116
- ## Command Reference
117
-
118
- | Command | Description |
119
- |---|---|
120
- | `add <source>` | Add a skill source (local path, Git repo, or ClawHub) |
121
- | `find <query>` | Search installed skills, built-in Git catalogs, and ClawHub |
122
- | `search <query>` | Alias of `find` |
123
- | `list` | Show skills groups |
124
- | `config` | Open interactive configuration UI |
125
- | `update [sourceId] --all` | Update all skills and re-deploy |
126
- | `doctor` | Check for problems |
127
- | `uninstall <sourceIds...>` | Remove skills groups and their deployments |
128
-
129
- When selected skills collide by name, `skill-flow` keeps identical duplicates as warnings and renames different-content collisions with repo/author-prefixed link names such as `gstack-browse`, `gstack(garrytan)-browse`, or `garrytan-skill-creator`.
130
-
131
- ## How It Works
132
-
133
- **State Management**
134
- - `~/.skillflow/manifest.json` - Your configuration (what you want)
135
- - `~/.skillflow/lock.json` - Actual state (what's installed)
136
- - `~/.skillflow/source/local/<source-id>/` - Imported local sources and adopted unmanaged external skills
137
- - `~/.skillflow/source/git/<source-id>/` - Git repo cache
138
- - `~/.skillflow/source/clawhub/<source-id>/` - ClawHub cache
139
- - `~/.skillflow/catalog/git/<source-id>/` - Built-in Git catalog cache
140
-
141
- **Deployment Strategy**
142
- Uses symlinks when possible, file copies when needed. Target directories are just deploy points — real state lives in lock.json.
143
-
144
- **Config Bootstrap**
145
- - detect available agent targets
146
- - scan known agent `skills/` roots for unmanaged skills
147
- - import unmanaged external skills into `~/.skillflow/source/local/`
148
- - refresh inventory, normalize bindings, and audit projections
149
- - enter the interactive config UI
150
-
151
- Already-managed projections are not imported again. For example, if an agent root contains symlinks that already point into `~/.skillflow/source/*`, bootstrap treats them as managed state and skips them.
152
-
153
- ## Supported Agents
154
-
155
- Claude Code · Codex · Cursor · GitHub Copilot · Gemini CLI · OpenCode · OpenClaw · Pi · Windsurf · Roo Code · Cline · Amp · Kiro
156
-
157
- Customize target paths via environment variables (e.g., `SKILL_FLOW_TARGET_CLAUDE_CODE`).
158
-
159
- Broader ecosystem path references, including project-level rules and instructions paths (docs TBD).
160
-
161
- ## Built-in Discovery Catalogs
162
-
163
- `find/search` searches built-in Git catalogs in addition to local installed skills and ClawHub.
164
-
165
- For more reliable built-in Git catalog search, set `GITHUB_TOKEN` to avoid low unauthenticated GitHub API rate limits.
166
-
167
- | Repository | Description | Stars | Skills |
168
- | --- | --- | ---: | ---: |
169
- | [anthropic-skills](https://github.com/anthropics/skills) | Official Agent Skills from Anthropic | 95,957 | 18 |
170
- | [superpowers](https://github.com/obra/superpowers) | Agentic skills framework & development methodology | 89,816 | 14 |
171
- | [everything-claude-code](https://github.com/affaan-m/everything-claude-code) | Performance optimization system for Claude Code, Codex, and beyond | 81,392 | 147 |
172
- | [agency-agents](https://github.com/msitarzewski/agency-agents) | Specialized expert agents with personality and proven deliverables | 50,749 | — |
173
- | [ui-ux-pro-max-skill](https://github.com/nextlevelbuilder/ui-ux-pro-max-skill) | Design intelligence for building professional UI/UX | 43,112 | 7 |
174
- | [antigravity-awesome-skills](https://github.com/sickn33/antigravity-awesome-skills) | 1,000+ battle-tested skills for Claude Code, Cursor, and more | 25,047 | 1,258 |
175
- | [marketingskills](https://github.com/coreyhaines31/marketingskills) | Marketing skills CRO, copywriting, SEO, analytics, growth | 14,099 | 33 |
176
- | [agentskills](https://github.com/agentskills/agentskills) | Specification and documentation for Agent Skills | 13,342 | — |
177
- | [taste-skill](https://github.com/Leonxlnx/taste-skill) | Gives your AI good taste — stops generic, boring output | 3,389 | 5 |
178
- | [affiliate-skills](https://github.com/Affitor/affiliate-skills) | Full affiliate marketing funnel: research to deploy | 99 | 47 |
179
- | [skills](https://github.com/luongnv89/skills) | Reusable skills to supercharge your AI agents | 1 | 29 |
180
- | [awesome-claude-skills](https://github.com/ComposioHQ/awesome-claude-skills) | Community Claude skills collection | — | — |
181
- | [myclaude](https://github.com/cexll/myclaude) | Personal Claude skills collection | — | — |
182
- | [baoyu-skills](https://github.com/JimLiu/baoyu-skills) | Community skills collection | — | — |
183
- | [dbskill](https://github.com/dontbesilent2025/dbskill) | Database-focused skills collection | — | — |
184
- | [gstack](https://github.com/garrytan/gstack) | Gstack skills and workflows | — | — |
185
- | [impeccable](https://github.com/pbakaus/impeccable) | Design and taste skills collection | — | — |
186
- | [frontend-slides](https://github.com/zarazhangrui/frontend-slides) | Frontend presentation skills collection | — | — |
134
+ Use `--path <repoSubpath>` when the repo is large but your default selection should start from one subtree.
135
+
136
+ ## Supported Targets
137
+
138
+ Current built-in targets:
139
+
140
+ - Claude Code
141
+ - Codex
142
+ - Cursor
143
+ - GitHub Copilot
144
+ - Gemini CLI
145
+ - OpenCode
146
+ - OpenClaw
147
+ - Pi
148
+ - Windsurf
149
+ - Roo Code
150
+ - Cline
151
+ - Amp
152
+ - Kiro
153
+
154
+ Target paths can be overridden with `SKILL_FLOW_TARGET_*` environment variables.
155
+
156
+ ## Command Map
157
+
158
+ | Command | What it does |
159
+ | --- | --- |
160
+ | `add <source>` | Import a source and choose skills/targets |
161
+ | `list` | Show workflow groups and current health |
162
+ | `find <query>` / `search <query>` | Search installed skills, built-in Git catalogs, and skills.sh |
163
+ | `config` | Open the interactive configuration UI |
164
+ | `update [sourceId] --all` | Refresh one source or all registered sources |
165
+ | `doctor` | Diagnose drift, missing paths, and projection problems |
166
+ | `repair-source [sourceId] --all` | Rebuild source checkout metadata |
167
+ | `repair-state [sourceId] --all` | Rebuild source-side state |
168
+ | `repair-targets [sourceId] --all` | Repair projected target contents |
169
+ | `uninstall <sourceIds...>` | Remove groups and their deployments |
170
+ | `bridge --json` | Execute machine protocol requests |
171
+
172
+ ## How State Works
173
+
174
+ `skill-flow` keeps one state root, defaulting to `~/.skillflow/`.
175
+
176
+ - `manifest.json`: what you want
177
+ - `lock.json`: what is actually installed
178
+ - `source/local/*`: imported local or adopted unmanaged sources
179
+ - `source/git/*`: Git source cache
180
+ - `source/clawhub/*`: skills.sh source cache
181
+ - `catalog/git/*`: built-in Git catalog cache
182
+
183
+ Target directories are deployment outputs, not the source of truth.
184
+
185
+ ## FAQ
186
+
187
+ ### Where does `skill-flow` store data?
188
+
189
+ By default, state lives under `~/.skillflow/`. `manifest.json` records the workflow you want, `lock.json` records the resolved inventory and deployments, and the `source/*` directories cache imported sources.
190
+
191
+ ### Does deployment overwrite files in target agent folders?
192
+
193
+ `skill-flow` treats target directories as deployment outputs. The selected skills for a workflow group are projected there from state, so you should treat those files as generated results rather than edit them as the source of truth.
194
+
195
+ ### When should I use `doctor` vs `repair-*`?
196
+
197
+ Start with `skill-flow doctor` when something looks wrong and you want a diagnosis first. Use `repair-source` when source checkout metadata is broken, `repair-state` when source-side state needs rebuilding, and `repair-targets` when deployed target contents have drifted from the current state.
198
+
199
+ ## Monorepo Layout
200
+
201
+ ```text
202
+ .
203
+ ├── apps
204
+ │ ├── cli/ # published npm package and CLI entrypoint
205
+ │ └── desktop-mac/ # SwiftUI desktop app for macOS 15+
206
+ ├── packages
207
+ │ ├── core-engine/ # inventory, deployment, doctor, bootstrap services
208
+ │ ├── domain/ # domain models and core types
209
+ │ ├── integration/ # Git, GitHub, skills.sh, path, naming integrations
210
+ │ ├── query/ # shared runtime and bridge-facing orchestration
211
+ │ ├── shared-types/ # bridge protocol types
212
+ │ ├── storage/ # manifest, lock, preferences, cache persistence
213
+ │ └── tui/ # Ink add/find/config UI
214
+ ├── docs/ # architecture, contributor docs, references, plans
215
+ └── releases/ # release notes
216
+ ```
187
217
 
188
218
  ## Development
189
219
 
190
220
  ```bash
191
221
  npm install
192
- npm run dev # Development mode
193
- npm run build # Build
194
- npm test # Run tests
222
+ npm run build
223
+ npm test
224
+ ```
225
+
226
+ CLI dev loop:
227
+
228
+ ```bash
229
+ npm run -w skill-flow dev -- --help
195
230
  ```
196
231
 
197
- Tech stack: TypeScript + Vitest + Ink TUI
232
+ Desktop dev loop:
233
+
234
+ ```bash
235
+ npm run build
236
+ cd apps/desktop-mac
237
+ swift build
238
+ swift test
239
+ ```
240
+
241
+ Debugging the desktop shell against a local CLI build:
242
+
243
+ ```bash
244
+ export SKILL_FLOW_DESKTOP_HELPER_OVERRIDE=/absolute/path/to/apps/cli/dist/cli.js
245
+ ```
246
+
247
+ Unsigned desktop packaging:
248
+
249
+ ```bash
250
+ scripts/release/package-desktop-mac.sh --arch arm64
251
+ scripts/release/package-desktop-mac.sh --arch x86_64
252
+ scripts/release/package-desktop-mac.sh --arch universal
253
+ ```
254
+
255
+ Open-source macOS release flow:
256
+
257
+ ```bash
258
+ scripts/release/release-github.sh all
259
+ ```
260
+
261
+ Unsigned macOS install notes:
262
+
263
+ - Apple Silicon Macs can use `Skill-Flow-arm64.dmg` or `Skill-Flow-universal.dmg`.
264
+ - Intel Macs can use `Skill-Flow-x86_64.dmg` or `Skill-Flow-universal.dmg`.
265
+ - Copy `Skill Flow.app` to `Applications`, then open it once with Finder's `Open` action if Gatekeeper blocks it.
266
+ - If macOS still marks the app as quarantined, run:
267
+
268
+ ```bash
269
+ xattr -dr com.apple.quarantine "/Applications/Skill Flow.app"
270
+ ```
271
+
272
+ ## Star History
273
+
274
+ [![Star History Chart](https://api.star-history.com/svg?repos=VintLin/skill-flow&type=Date)](https://www.star-history.com/#VintLin/skill-flow&Date)
198
275
 
199
276
  ## License
200
277