@wipcomputer/wip-ldm-os 0.4.48 → 0.4.50

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.
package/SKILL.md CHANGED
@@ -9,7 +9,7 @@ license: MIT
9
9
  compatibility: Requires git, npm, node. Node.js 18+.
10
10
  metadata:
11
11
  display-name: "LDM OS"
12
- version: "0.4.48"
12
+ version: "0.4.50"
13
13
  homepage: "https://github.com/wipcomputer/wip-ldm-os"
14
14
  author: "Parker Todd Brooks"
15
15
  category: infrastructure
@@ -15,7 +15,7 @@ The chiclets at the top of this README tell you what interfaces this repo ships.
15
15
  | **npm** | Published to npm. Installable via `npm install`. Versioned, dependency-managed, standard distribution. |
16
16
  | **CLI / TUI** | Ships a command-line interface. Humans run it in a terminal. Agents call it from shell. The most portable interface there is. |
17
17
  | **OpenClaw Skill** | Registered as a skill on [ClawHub](https://clawhub.ai). OpenClaw agents can discover and use it natively through the gateway. |
18
- | **Claude Code Skill** | Has a `SKILL.md` that teaches Claude Code (and any agent that reads markdown) when to use this tool, what it does, and how to call it. The agent reads the file and learns the capability. |
18
+ | **Claude Code Skill** | Has a `SKILL.md` that teaches Claude Code (and any agent that reads markdown) when to use this tool, what it does, and how to call it. Follows the [Agent Skills Spec](https://agentskills.io/specification). Process in SKILL.md, context in `references/`. |
19
19
  | **Universal Interface Spec** | Follows the [TECHNICAL.md](TECHNICAL.md) convention. The repo's architecture is documented, the interfaces are declared, and any agent or human can understand the full surface area by reading one file. |
20
20
 
21
21
  When you see these badges on a WIP repo, you know exactly how to consume it. Human or agent, CLI or plugin, local or remote. That's the point.
@@ -76,19 +76,35 @@ A plugin for OpenClaw agents. Lifecycle hooks, tool registration, settings.
76
76
 
77
77
  ### 5. Skill (SKILL.md)
78
78
 
79
- A markdown file that teaches agents when and how to use the tool. The instruction interface.
79
+ A markdown file that teaches agents when and how to use the tool. The instruction interface. Follows the [Agent Skills Spec](https://agentskills.io/specification).
80
80
 
81
- **Convention:** `SKILL.md` at the repo root. YAML frontmatter with name, version, description, metadata.
81
+ **Convention:** `SKILL.md` at the repo root. YAML frontmatter with name, description. Optional `references/` directory for context files.
82
82
 
83
83
  **Detection:** `SKILL.md` exists.
84
84
 
85
- **Install:** Referenced by path. Agents read it when they need the tool.
85
+ **Install:** `SKILL.md` deployed to `~/.openclaw/skills/<name>/`. If `references/` exists, deployed alongside SKILL.md and to `settings/docs/skills/<name>/` in the workspace.
86
+
87
+ **Structure:**
88
+ ```
89
+ repo/
90
+ ├── SKILL.md # < 150 lines. Process only. Imperative instructions.
91
+ └── references/ # Optional. Context files loaded on demand.
92
+ ├── PRODUCT.md # What the product is
93
+ ├── TOOLS.md # MCP tools, CLI commands
94
+ └── ...
95
+ ```
96
+
97
+ **Key rules (from Agent Skills Spec):**
98
+ - SKILL.md body < 5000 tokens. Process goes in SKILL.md, context goes in references/.
99
+ - Imperative language: "Run this command" not "This product enables..."
100
+ - Progressive disclosure: metadata loaded at startup, body on activation, references on demand.
86
101
 
87
102
  ```yaml
88
103
  ---
89
104
  name: wip-grok
90
- version: 1.0.0
91
- description: xAI Grok API. Search the web, search X, generate images.
105
+ description: >
106
+ xAI Grok API. Search the web, search X, generate images.
107
+ Use when asked to search, browse, or generate images.
92
108
  metadata:
93
109
  category: search,media
94
110
  capabilities:
@@ -106,19 +106,24 @@ A plugin for OpenClaw agents. Lifecycle hooks, tool registration, settings.
106
106
 
107
107
  ### 5. Skill (SKILL.md)
108
108
 
109
- A markdown file that teaches agents when and how to use the tool. The instruction interface.
109
+ A markdown file that teaches agents when and how to use the tool. The instruction interface. Follows the [Agent Skills Spec](https://agentskills.io/specification).
110
110
 
111
- **Convention:** `SKILL.md` at the repo root. YAML frontmatter with name, version, description, metadata.
111
+ **Convention:** `SKILL.md` at the repo root. Optional `references/` directory for context files.
112
112
 
113
113
  **Detection:** `SKILL.md` exists.
114
114
 
115
- **Install:** Referenced by path. Agents read it when they need the tool.
115
+ **Install:** `ldm install` deploys `SKILL.md` to `~/.openclaw/skills/<name>/`. If `references/` exists, it is deployed alongside and also to `settings/docs/skills/<name>/` in the workspace (so all agents can read them).
116
+
117
+ **Key rules:**
118
+ - SKILL.md body < 5000 tokens. Process in SKILL.md, context in references/.
119
+ - references/ files are loaded on demand, not on every activation.
116
120
 
117
121
  ```yaml
118
122
  ---
119
123
  name: wip-grok
120
- version: 1.0.0
121
- description: xAI Grok API. Search the web, search X, generate images.
124
+ description: >
125
+ xAI Grok API. Search the web, search X, generate images.
126
+ Use when asked to search, browse, or generate images.
122
127
  metadata:
123
128
  category: search,media
124
129
  capabilities:
package/lib/deploy.mjs CHANGED
@@ -671,9 +671,45 @@ function installSkill(repoPath, toolName) {
671
671
  }
672
672
 
673
673
  try {
674
+ // Deploy to OpenClaw (~/.openclaw/skills/)
674
675
  mkdirSync(ocSkillDir, { recursive: true });
675
676
  cpSync(skillSrc, ocSkillDest);
676
- ok(`Skill: deployed to ${ocSkillDir}`);
677
+
678
+ // Deploy to Claude Code (~/.claude/skills/) - standard discovery path
679
+ const ccSkillDir = join(HOME, '.claude', 'skills', toolName);
680
+ if (existsSync(join(HOME, '.claude'))) {
681
+ mkdirSync(ccSkillDir, { recursive: true });
682
+ cpSync(skillSrc, join(ccSkillDir, 'SKILL.md'));
683
+ }
684
+
685
+ ok(`Skill: deployed to ~/.openclaw/skills/ and ~/.claude/skills/`);
686
+
687
+ // Deploy references/ if it exists (Agent Skills Spec pattern)
688
+ const refsSrc = join(repoPath, 'references');
689
+ if (existsSync(refsSrc)) {
690
+ // To OpenClaw skill dir
691
+ cpSync(refsSrc, join(ocSkillDir, 'references'), { recursive: true });
692
+ // To Claude Code skill dir
693
+ if (existsSync(ccSkillDir)) {
694
+ cpSync(refsSrc, join(ccSkillDir, 'references'), { recursive: true });
695
+ }
696
+
697
+ // Also deploy to home (settings/docs/skills/) so all agents can read them
698
+ try {
699
+ const ldmConfigPath = join(LDM_ROOT, 'config.json');
700
+ if (existsSync(ldmConfigPath)) {
701
+ const ldmConfig = JSON.parse(readFileSync(ldmConfigPath, 'utf8'));
702
+ const workspace = (ldmConfig.workspace || '').replace('~', HOME);
703
+ if (workspace && existsSync(workspace)) {
704
+ const homeRefsDest = join(workspace, 'settings', 'docs', 'skills', toolName);
705
+ mkdirSync(homeRefsDest, { recursive: true });
706
+ cpSync(refsSrc, homeRefsDest, { recursive: true });
707
+ ok(`Skill: references/ deployed to ${homeRefsDest.replace(HOME, '~')}`);
708
+ }
709
+ }
710
+ } catch {}
711
+ }
712
+
677
713
  return true;
678
714
  } catch (e) {
679
715
  fail(`Skill: deploy failed. ${e.message}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wipcomputer/wip-ldm-os",
3
- "version": "0.4.48",
3
+ "version": "0.4.50",
4
4
  "type": "module",
5
5
  "description": "LDM OS: identity, memory, and sovereignty infrastructure for AI agents",
6
6
  "engines": {