@clossys/launcher 0.1.2 → 0.3.0

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 (114) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/README.md +231 -19
  3. package/contracts/conversation-contract.md +40 -0
  4. package/dist/apply-plan-cli.d.ts +7 -0
  5. package/dist/apply-plan-cli.d.ts.map +1 -0
  6. package/dist/apply-plan-cli.js +96 -0
  7. package/dist/apply-plan-cli.js.map +1 -0
  8. package/dist/apply-plan.d.ts +79 -0
  9. package/dist/apply-plan.d.ts.map +1 -0
  10. package/dist/apply-plan.js +129 -0
  11. package/dist/apply-plan.js.map +1 -0
  12. package/dist/check-cli.d.ts.map +1 -1
  13. package/dist/check-cli.js +7 -0
  14. package/dist/check-cli.js.map +1 -1
  15. package/dist/cli.d.ts +2 -1
  16. package/dist/cli.d.ts.map +1 -1
  17. package/dist/cli.js +43 -14
  18. package/dist/cli.js.map +1 -1
  19. package/dist/contract.d.ts +28 -0
  20. package/dist/contract.d.ts.map +1 -0
  21. package/dist/contract.js +78 -0
  22. package/dist/contract.js.map +1 -0
  23. package/dist/core.d.ts +50 -8
  24. package/dist/core.d.ts.map +1 -1
  25. package/dist/core.js +458 -40
  26. package/dist/core.js.map +1 -1
  27. package/dist/doctor-cli.d.ts +4 -0
  28. package/dist/doctor-cli.d.ts.map +1 -0
  29. package/dist/doctor-cli.js +32 -0
  30. package/dist/doctor-cli.js.map +1 -0
  31. package/dist/doctor.d.ts +28 -0
  32. package/dist/doctor.d.ts.map +1 -0
  33. package/dist/doctor.js +68 -0
  34. package/dist/doctor.js.map +1 -0
  35. package/dist/host.d.ts.map +1 -1
  36. package/dist/host.js +19 -1
  37. package/dist/host.js.map +1 -1
  38. package/dist/hosts.d.ts +14 -0
  39. package/dist/hosts.d.ts.map +1 -0
  40. package/dist/hosts.js +61 -0
  41. package/dist/hosts.js.map +1 -0
  42. package/dist/index.d.ts +15 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +7 -1
  45. package/dist/index.js.map +1 -1
  46. package/dist/inventory-adoption.d.ts +20 -0
  47. package/dist/inventory-adoption.d.ts.map +1 -0
  48. package/dist/inventory-adoption.js +67 -0
  49. package/dist/inventory-adoption.js.map +1 -0
  50. package/dist/manifest.d.ts +20 -0
  51. package/dist/manifest.d.ts.map +1 -0
  52. package/dist/manifest.js +106 -0
  53. package/dist/manifest.js.map +1 -0
  54. package/dist/model-profile.d.ts +46 -0
  55. package/dist/model-profile.d.ts.map +1 -0
  56. package/dist/model-profile.js +98 -0
  57. package/dist/model-profile.js.map +1 -0
  58. package/dist/product-repository.d.ts +26 -0
  59. package/dist/product-repository.d.ts.map +1 -0
  60. package/dist/product-repository.js +49 -0
  61. package/dist/product-repository.js.map +1 -0
  62. package/dist/skills.d.ts +39 -0
  63. package/dist/skills.d.ts.map +1 -0
  64. package/dist/skills.js +197 -0
  65. package/dist/skills.js.map +1 -0
  66. package/dist/types.d.ts +78 -1
  67. package/dist/types.d.ts.map +1 -1
  68. package/model-profiles/claude-code.json +10 -0
  69. package/model-profiles/codex.json +10 -0
  70. package/model-profiles/cursor.json +10 -0
  71. package/package.json +11 -5
  72. package/skeleton/README.md +15 -20
  73. package/skeleton/package.json +1 -1
  74. package/skill/SKILL.md +53 -0
  75. package/skill-catalogue/advisor/SKILL.md +52 -0
  76. package/skill-catalogue/architect/SKILL.md +42 -0
  77. package/skill-catalogue/bouncer/SKILL.md +43 -0
  78. package/skill-catalogue/builder/SKILL.md +42 -0
  79. package/skill-catalogue/butler/SKILL.md +43 -0
  80. package/skill-catalogue/controller/SKILL.md +50 -0
  81. package/skill-catalogue/customer/SKILL.md +92 -0
  82. package/skill-catalogue/designer/SKILL.md +66 -0
  83. package/skill-catalogue/giver/SKILL.md +43 -0
  84. package/skill-catalogue/influencer/SKILL.md +43 -0
  85. package/skill-catalogue/inspector/SKILL.md +42 -0
  86. package/skill-catalogue/integrator/SKILL.md +42 -0
  87. package/skill-catalogue/keeper/SKILL.md +43 -0
  88. package/skill-catalogue/launcher/SKILL.md +53 -0
  89. package/skill-catalogue/locksmith/SKILL.md +42 -0
  90. package/skill-catalogue/messenger/SKILL.md +43 -0
  91. package/skill-catalogue/observer/SKILL.md +42 -0
  92. package/skill-catalogue/publisher/SKILL.md +64 -0
  93. package/skill-catalogue/starter/SKILL.md +48 -0
  94. package/skill-catalogue/strategist/SKILL.md +85 -0
  95. package/skill-catalogue/writer/SKILL.md +56 -0
  96. package/src/apply-plan-cli.ts +94 -0
  97. package/src/apply-plan.ts +172 -0
  98. package/src/check-cli.ts +7 -0
  99. package/src/cli.ts +51 -13
  100. package/src/contract.ts +81 -0
  101. package/src/core.ts +555 -38
  102. package/src/doctor-cli.ts +33 -0
  103. package/src/doctor.ts +145 -0
  104. package/src/host.ts +17 -1
  105. package/src/hosts.ts +79 -0
  106. package/src/index.ts +36 -0
  107. package/src/inventory-adoption.ts +85 -0
  108. package/src/manifest.ts +103 -0
  109. package/src/model-profile.ts +148 -0
  110. package/src/product-repository.ts +73 -0
  111. package/src/skills.ts +225 -0
  112. package/src/types.ts +74 -1
  113. /package/skeleton/{.clossys → clossys/.state}/inventory.json +0 -0
  114. /package/skeleton/{.clossys → clossys/.state}/workspace.json +0 -0
package/dist/skills.js ADDED
@@ -0,0 +1,197 @@
1
+ import { dirname, join, resolve, sep } from "node:path";
2
+ import { extractContractBlock, injectContract } from "./contract.js";
3
+ import { parseSkillManifest, readInstalledVersion, serializeSkillManifest, sha256Hex } from "./manifest.js";
4
+ export const DISCOVERY_PREFIXES = [".cursor/skills", ".claude/skills"];
5
+ const AGENTS_SKILLS_REL = join(".agents", "skills");
6
+ export const SKILLS_MANIFEST_REL = join("clossys", ".state", "skills.json");
7
+ function containedPath(root, relativePath) {
8
+ const resolved = resolve(root, relativePath);
9
+ const prefix = root.endsWith(sep) ? root : `${root}${sep}`;
10
+ if (resolved !== root && !resolved.startsWith(prefix)) {
11
+ throw new Error(`refusing to write outside the workspace directory: ${relativePath}`);
12
+ }
13
+ return resolved;
14
+ }
15
+ function skillSourceCandidates(packageDir, options) {
16
+ const paths = [];
17
+ if (options.skillCatalogueRoot) {
18
+ paths.push(join(options.skillCatalogueRoot, packageDir, "SKILL.md"));
19
+ }
20
+ paths.push(join(options.launcherPackageRoot, "skill-catalogue", packageDir, "SKILL.md"));
21
+ paths.push(join(options.launcherPackageRoot, "..", packageDir, "skill", "SKILL.md"));
22
+ return paths;
23
+ }
24
+ function installedSkillPath(composeTargetDirectory, packageDir) {
25
+ return join(composeTargetDirectory, "node_modules", "@clossys", packageDir, "skill", "SKILL.md");
26
+ }
27
+ function readSkillBody(host, packageDir, options, composeTargetDirectory) {
28
+ const installed = host.readText(installedSkillPath(composeTargetDirectory, packageDir));
29
+ if (installed !== null)
30
+ return { body: installed, source: "installed" };
31
+ for (const path of skillSourceCandidates(packageDir, options)) {
32
+ const body = host.readText(path);
33
+ if (body !== null)
34
+ return { body, source: "catalogue" };
35
+ }
36
+ return null;
37
+ }
38
+ function contractSourceCandidates(options) {
39
+ const paths = [];
40
+ if (options.contractPath)
41
+ paths.push(options.contractPath);
42
+ paths.push(join(options.launcherPackageRoot, "contracts", "conversation-contract.md"));
43
+ // Monorepo fallback so tests and dev runs work without a prior `npm run build` pack step.
44
+ paths.push(join(options.launcherPackageRoot, "..", "..", "docs", "contracts", "conversation-contract.md"));
45
+ return paths;
46
+ }
47
+ /** Reads and extracts the shared conversation contract block. Returns null when no source resolves. */
48
+ function readContractBlock(host, options) {
49
+ for (const path of contractSourceCandidates(options)) {
50
+ const raw = host.readText(path);
51
+ if (raw === null)
52
+ continue;
53
+ try {
54
+ return extractContractBlock(raw);
55
+ }
56
+ catch {
57
+ continue;
58
+ }
59
+ }
60
+ return null;
61
+ }
62
+ function readLauncherVersion(host, options) {
63
+ const raw = host.readText(join(options.launcherPackageRoot, "package.json"));
64
+ if (raw === null)
65
+ return undefined;
66
+ try {
67
+ const parsed = JSON.parse(raw);
68
+ if (typeof parsed === "object" && parsed !== null && "version" in parsed) {
69
+ const version = parsed.version;
70
+ if (typeof version === "string" && version.trim() !== "")
71
+ return version;
72
+ }
73
+ }
74
+ catch {
75
+ /* unreadable manifest; no version */
76
+ }
77
+ return undefined;
78
+ }
79
+ /** Package directory names that have a resolvable skill source in the catalogue or monorepo. */
80
+ export function listSkillPackageCandidates(host, options) {
81
+ const names = new Set();
82
+ const considerRoot = (root) => {
83
+ if (root === undefined || !host.isDirectory(root))
84
+ return;
85
+ for (const name of host.readDir(root)) {
86
+ if (name.startsWith("."))
87
+ continue;
88
+ const skillPath = join(root, name, "SKILL.md");
89
+ if (host.readText(skillPath) !== null)
90
+ names.add(name);
91
+ }
92
+ };
93
+ considerRoot(options.skillCatalogueRoot);
94
+ considerRoot(join(options.launcherPackageRoot, "skill-catalogue"));
95
+ const packagesSibling = join(options.launcherPackageRoot, "..");
96
+ if (host.isDirectory(packagesSibling)) {
97
+ for (const name of host.readDir(packagesSibling)) {
98
+ if (name.startsWith("."))
99
+ continue;
100
+ const skillPath = join(packagesSibling, name, "skill", "SKILL.md");
101
+ if (host.readText(skillPath) !== null)
102
+ names.add(name);
103
+ }
104
+ }
105
+ return [...names].sort((a, b) => a.localeCompare(b));
106
+ }
107
+ function writeAgentsSkill(host, directory, packageDir, body) {
108
+ const relativeDir = join(AGENTS_SKILLS_REL, `clossys-${packageDir}`);
109
+ const skillRel = join(relativeDir, "SKILL.md");
110
+ const target = containedPath(directory, skillRel);
111
+ host.mkdirp(dirname(target));
112
+ host.writeText(target, body.endsWith("\n") ? body : `${body}\n`);
113
+ }
114
+ function writeDiscoveryLink(host, directory, packageDir, skillBody) {
115
+ const agentsDirRel = join(AGENTS_SKILLS_REL, `clossys-${packageDir}`);
116
+ const linkTarget = join("..", "..", agentsDirRel);
117
+ for (const prefix of DISCOVERY_PREFIXES) {
118
+ const prefixPath = containedPath(directory, prefix);
119
+ // A directory-symlink onto `.agents/skills` already exposes every composed
120
+ // skill. Writing a nested `.claude/skills/clossys-<pkg>` link follows that
121
+ // symlink and replaces the just-written SKILL.md with a circular link.
122
+ if (host.isSymlink(prefixPath))
123
+ continue;
124
+ const linkRel = join(prefix, `clossys-${packageDir}`);
125
+ const linkPath = containedPath(directory, linkRel);
126
+ host.mkdirp(dirname(linkPath));
127
+ try {
128
+ host.symlink(linkTarget, linkPath);
129
+ }
130
+ catch {
131
+ const fallbackDir = containedPath(directory, join(linkRel, "SKILL.md"));
132
+ host.mkdirp(dirname(fallbackDir));
133
+ host.writeText(fallbackDir, skillBody.endsWith("\n") ? skillBody : `${skillBody}\n`);
134
+ }
135
+ }
136
+ }
137
+ /** Removes a composed skill's `.agents/skills/` directory and its host discovery links. Missing paths are no-ops. */
138
+ function removeComposedSkill(host, directory, packageDir) {
139
+ host.remove(containedPath(directory, join(AGENTS_SKILLS_REL, `clossys-${packageDir}`)));
140
+ for (const prefix of DISCOVERY_PREFIXES) {
141
+ const prefixPath = containedPath(directory, prefix);
142
+ if (host.isSymlink(prefixPath))
143
+ continue; // shared view onto .agents/skills; already handled above
144
+ host.remove(containedPath(directory, join(prefix, `clossys-${packageDir}`)));
145
+ }
146
+ }
147
+ /**
148
+ * Writes `.agents/skills/clossys-<pkg>/SKILL.md` and host discovery links for every
149
+ * catalogue package, with the shared conversation contract (#1182) injected in place
150
+ * of each skill's own `## How we work together` / `## One question at a time`
151
+ * sections. Missing sources are skipped with notes; the hub apply continues.
152
+ *
153
+ * Also writes `clossys/.state/skills.json` (#1183): source, version, and content
154
+ * digest per composed skill. A skill named in this directory's *previous* manifest
155
+ * but not composed this run is retired — its composed output is pruned and it is
156
+ * dropped from the new manifest. Never touches a skill this directory's manifest
157
+ * did not itself write.
158
+ */
159
+ export function composeSkills(host, directory, options) {
160
+ const composed = [];
161
+ const skipped = [];
162
+ const manifestEntries = [];
163
+ const contractBlock = readContractBlock(host, options);
164
+ const launcherVersion = readLauncherVersion(host, options);
165
+ for (const packageDir of listSkillPackageCandidates(host, options)) {
166
+ const found = readSkillBody(host, packageDir, options, directory);
167
+ if (found === null) {
168
+ skipped.push({ packageDir, note: "skill source missing at apply time" });
169
+ continue;
170
+ }
171
+ const body = contractBlock === null ? found.body : injectContract(found.body, contractBlock);
172
+ writeAgentsSkill(host, directory, packageDir, body);
173
+ writeDiscoveryLink(host, directory, packageDir, body);
174
+ composed.push(packageDir);
175
+ const version = found.source === "installed" ? readInstalledVersion(host, directory, packageDir) : launcherVersion;
176
+ manifestEntries.push({
177
+ name: packageDir,
178
+ source: found.source,
179
+ sha256: sha256Hex(body.endsWith("\n") ? body : `${body}\n`),
180
+ ...(version === undefined ? {} : { version }),
181
+ });
182
+ }
183
+ const previousManifest = parseSkillManifest(host.readText(join(directory, SKILLS_MANIFEST_REL)));
184
+ const composedSet = new Set(composed);
185
+ const retired = [];
186
+ for (const entry of previousManifest?.skills ?? []) {
187
+ if (composedSet.has(entry.name))
188
+ continue;
189
+ removeComposedSkill(host, directory, entry.name);
190
+ retired.push(entry.name);
191
+ }
192
+ const manifestPath = containedPath(directory, SKILLS_MANIFEST_REL);
193
+ host.mkdirp(dirname(manifestPath));
194
+ host.writeText(manifestPath, serializeSkillManifest({ schemaVersion: 1, generatedAt: host.now(), skills: manifestEntries }));
195
+ return { composed, skipped, retired };
196
+ }
197
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../src/skills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAmB5G,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,EAAE,gBAAgB,CAAU,CAAC;AAChF,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAE5E,SAAS,aAAa,CAAC,IAAY,EAAE,YAAoB;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;IAC3D,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,sDAAsD,YAAY,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,qBAAqB,CAAC,UAAkB,EAAE,OAA6B;IAC9E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,iBAAiB,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;IACzF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IACrF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,sBAA8B,EAAE,UAAkB;IAC5E,OAAO,IAAI,CAAC,sBAAsB,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AACnG,CAAC;AAED,SAAS,aAAa,CACpB,IAAmB,EACnB,UAAkB,EAClB,OAA6B,EAC7B,sBAA8B;IAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,UAAU,CAAC,CAAC,CAAC;IACxF,IAAI,SAAS,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACxE,KAAK,MAAM,IAAI,IAAI,qBAAqB,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,wBAAwB,CAAC,OAA6B;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,OAAO,CAAC,YAAY;QAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC;IACvF,0FAA0F;IAC1F,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,0BAA0B,CAAC,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uGAAuG;AACvG,SAAS,iBAAiB,CAAC,IAAmB,EAAE,OAA6B;IAC3E,KAAK,MAAM,IAAI,IAAI,wBAAwB,CAAC,OAAO,CAAC,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS;QAC3B,IAAI,CAAC;YACH,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAmB,EAAE,OAA6B;IAC7E,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAC;IAC7E,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACzE,MAAM,OAAO,GAAI,MAAgC,CAAC,OAAO,CAAC;YAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,OAAO,OAAO,CAAC;QAC3E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,0BAA0B,CAAC,IAAmB,EAAE,OAA6B;IAC3F,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,MAAM,YAAY,GAAG,CAAC,IAAwB,EAAQ,EAAE;QACtD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YAAE,OAAO;QAC1D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IACF,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;IAChE,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;YACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,IAAI;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAmB,EAAE,SAAiB,EAAE,UAAkB,EAAE,IAAY;IAChG,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAmB,EAAE,SAAiB,EAAE,UAAkB,EAAE,SAAiB;IACvG,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAClD,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACpD,2EAA2E;QAC3E,2EAA2E;QAC3E,uEAAuE;QACvE,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;YAAE,SAAS;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;YACxE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;YAClC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;AACH,CAAC;AAED,qHAAqH;AACrH,SAAS,mBAAmB,CAAC,IAAmB,EAAE,SAAiB,EAAE,UAAkB;IACrF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACxF,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC;YAAE,SAAS,CAAC,yDAAyD;QACnG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAmB,EACnB,SAAiB,EACjB,OAA6B;IAE7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,OAAO,GAA2C,EAAE,CAAC;IAC3D,MAAM,eAAe,GAAyB,EAAE,CAAC;IACjD,MAAM,aAAa,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAE3D,KAAK,MAAM,UAAU,IAAI,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;QACnE,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAClE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC,CAAC;YACzE,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QAC7F,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACpD,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACtD,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC;QACnH,eAAe,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;YAC3D,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IACjG,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;QACnD,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAC1C,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;IACnC,IAAI,CAAC,SAAS,CACZ,YAAY,EACZ,sBAAsB,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC,CAC/F,CAAC;IAEF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACxC,CAAC"}
package/dist/types.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import type { DiscoveredHost } from "./hosts.js";
2
+ import type { ExternalInventoryDeclaration, InventoryDriftReport } from "./inventory-adoption.js";
1
3
  /** Ternary retained by the installed CLI. */
2
4
  export type WorkspaceState = "satisfied" | "violated" | "indeterminate";
3
5
  /** Captured stdout/stderr from a host command. */
@@ -14,21 +16,56 @@ export interface WorkspaceHost {
14
16
  now(): string;
15
17
  exists(path: string): boolean;
16
18
  isDirectory(path: string): boolean;
19
+ /** True when path exists and is a symlink (lstat; does not follow). Missing path is false. */
20
+ isSymlink(path: string): boolean;
17
21
  readText(path: string): string | null;
18
22
  writeText(path: string, contents: string): void;
19
23
  mkdirp(path: string): void;
24
+ /** Creates a relative symlink at linkPath pointing at relativeTarget (directory link). */
25
+ symlink(relativeTarget: string, linkPath: string): void;
26
+ /** Recursively removes path. A missing path is a no-op, never a throw. */
27
+ remove(path: string): void;
20
28
  readDir(path: string): string[];
21
29
  run(command: string, args: readonly string[], options?: {
22
30
  cwd?: string;
23
31
  }): CommandResult;
24
32
  prompt(message: string, choices: readonly string[]): string | null;
25
33
  }
26
- /** On-disk hub marker generated on the consumer hub. Packed template: skeleton/.clossys/workspace.json. */
34
+ /** On-disk hub marker generated on the consumer hub. Packed template: skeleton/clossys/.state/workspace.json. */
27
35
  export interface HubDocument {
28
36
  readonly schemaVersion: 1;
29
37
  readonly kind: "account-hub";
30
38
  readonly owner: string;
31
39
  readonly repository: string;
40
+ /** Declares an existing external repository inventory as the source of truth (#1216). Hand-edited by the client; launcher never writes this field. */
41
+ readonly externalInventory?: ExternalInventoryDeclaration;
42
+ }
43
+ /**
44
+ * Where the hub marker was found relative to the `.clossys/` -> `clossys/.state/`
45
+ * migration (#1171): `clean` — only the current path. `legacy` — only the old
46
+ * `.clossys/` path; resume migrates it. `indeterminate` — both paths carry a
47
+ * parseable marker; launcher never merges them silently and refuses instead.
48
+ */
49
+ export type HubMigrationState = "clean" | "legacy" | "indeterminate";
50
+ /** One skill recorded in `clossys/.state/skills.json` (#1183). */
51
+ export interface SkillManifestEntry {
52
+ readonly name: string;
53
+ readonly source: "installed" | "catalogue";
54
+ readonly version?: string;
55
+ readonly sha256: string;
56
+ }
57
+ /** The `clossys/.state/skills.json` document itself. */
58
+ export interface SkillManifestDocument {
59
+ readonly schemaVersion: 1;
60
+ readonly generatedAt: string;
61
+ readonly skills: readonly SkillManifestEntry[];
62
+ }
63
+ /** Read-only freshness summary derived from the skills manifest for the health report. */
64
+ export interface SkillsManifestSummary {
65
+ readonly status: "present" | "missing";
66
+ readonly total: number;
67
+ readonly stale: number;
68
+ readonly retired: number;
32
69
  }
33
70
  export interface InventoryObservation {
34
71
  readonly status: "missing" | "empty" | "populated";
@@ -72,6 +109,40 @@ export interface HubHealthReport {
72
109
  readonly extraClossys: readonly string[];
73
110
  readonly pinFindings: readonly PinFinding[];
74
111
  readonly degraded: boolean;
112
+ /** Coding-agent hosts this apply found already linked for skill discovery here, recorded before compose ran (#1180). Always present after apply. */
113
+ readonly linkedHosts?: readonly DiscoveredHost[];
114
+ /** Present only when the hub marker declares an external inventory (#1216) and there is something to say about it (i.e. not "no-external-source"). */
115
+ readonly inventoryDrift?: InventoryDriftReport;
116
+ readonly skillComposition?: {
117
+ readonly composed: readonly string[];
118
+ readonly skipped: readonly {
119
+ readonly packageDir: string;
120
+ readonly note: string;
121
+ }[];
122
+ readonly rosterTargets?: readonly string[];
123
+ readonly rosterSkipped?: readonly {
124
+ readonly inventoryId: string;
125
+ readonly note: string;
126
+ }[];
127
+ readonly retired?: readonly string[];
128
+ };
129
+ /** Present only on the run that performed the `.clossys/` -> `clossys/.state/` migration. */
130
+ readonly migration?: {
131
+ readonly status: "migrated";
132
+ readonly from: string;
133
+ readonly to: string;
134
+ };
135
+ /** Freshness summary derived from `clossys/.state/skills.json`, when present. */
136
+ readonly skillsManifest?: SkillsManifestSummary;
137
+ }
138
+ /** Optional paths for skill composition during apply. */
139
+ export interface ApplyWorkspaceOptions {
140
+ readonly skillCatalogueRoot?: string;
141
+ readonly launcherPackageRoot?: string;
142
+ /** Overrides where the packed conversation contract is read from (tests). */
143
+ readonly contractPath?: string;
144
+ /** Live registry `@clossys/launcher` version, used only to grade catalogue-sourced skill staleness. */
145
+ readonly liveLauncherVersion?: string;
75
146
  }
76
147
  export interface CwdObservation {
77
148
  readonly absolutePath: string;
@@ -82,6 +153,8 @@ export interface CwdObservation {
82
153
  readonly hub?: HubDocument;
83
154
  readonly looksLikeFoundry: boolean;
84
155
  readonly inventory?: InventoryObservation;
156
+ /** Present only when a hub marker was found; absent means neither path has one. */
157
+ readonly hubMigration?: HubMigrationState;
85
158
  }
86
159
  export interface WorkspaceObservation {
87
160
  readonly cwd: CwdObservation;
@@ -108,6 +181,10 @@ export interface WorkspacePlanResume {
108
181
  readonly repository: string;
109
182
  readonly directory: string;
110
183
  readonly clone: boolean;
184
+ /** Live registry Advisor version, when observeWorkspace could read one. Used only to grade health. */
185
+ readonly advisorVersion?: string;
186
+ /** Set when the hub marker was found only at the legacy `.clossys/` path; apply migrates it. */
187
+ readonly migrateFrom?: "legacy";
111
188
  }
112
189
  export interface WorkspacePlanAdopt {
113
190
  readonly action: "adopt";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "host": "claude-code",
4
+ "verifiedAt": "2026-09-22",
5
+ "tiers": {
6
+ "light": { "balanced": "claude-haiku-4-5" },
7
+ "standard": { "balanced": "claude-sonnet-5", "costConscious": "claude-haiku-4-5" },
8
+ "deep": { "balanced": "claude-opus-5", "costConscious": "claude-sonnet-5" }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "host": "codex",
4
+ "verifiedAt": "2026-09-22",
5
+ "tiers": {
6
+ "light": { "balanced": "gpt-5-codex-mini" },
7
+ "standard": { "balanced": "gpt-5-codex", "costConscious": "gpt-5-codex-mini" },
8
+ "deep": { "balanced": "gpt-5-codex-high" }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "host": "cursor",
4
+ "verifiedAt": "2026-09-22",
5
+ "tiers": {
6
+ "light": { "balanced": "cursor-small" },
7
+ "standard": { "balanced": "claude-sonnet-5", "costConscious": "cursor-small" },
8
+ "deep": { "balanced": "claude-opus-5", "costConscious": "claude-sonnet-5" }
9
+ }
10
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clossys/launcher",
3
- "version": "0.1.2",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -15,16 +15,22 @@
15
15
  },
16
16
  "bin": {
17
17
  "launcher": "dist/cli.js",
18
- "launcher-check": "dist/check-cli.js"
18
+ "launcher-check": "dist/check-cli.js",
19
+ "launcher-doctor": "dist/doctor-cli.js",
20
+ "launcher-apply-plan": "dist/apply-plan-cli.js"
19
21
  },
20
22
  "files": [
21
23
  "dist",
22
24
  "src",
23
25
  "!src/**/*.test.ts",
24
26
  "skeleton",
27
+ "model-profiles",
28
+ "skill-catalogue",
29
+ "contracts",
25
30
  "README.md",
26
31
  "CHANGELOG.md",
27
- "LICENSE"
32
+ "LICENSE",
33
+ "skill"
28
34
  ],
29
35
  "sideEffects": false,
30
36
  "description": "Foundry workspace scaffolder: create, resume, or adopt a GitHub repository as the account hub. Executable tooling, not a role.",
@@ -49,7 +55,7 @@
49
55
  "node": ">=20"
50
56
  },
51
57
  "scripts": {
52
- "build": "tsc -p tsconfig.json",
58
+ "build": "node scripts/pack-skills.mjs && tsc -p tsconfig.json",
53
59
  "prepublishOnly": "node ../../scripts/check-name-collision.mjs . && npm run build",
54
60
  "typecheck": "tsc -p tsconfig.json --noEmit",
55
61
  "test": "vitest run"
@@ -57,7 +63,7 @@
57
63
  "devDependencies": {
58
64
  "@types/node": "^26.5.1",
59
65
  "typescript": "~6.0.0",
60
- "vitest": "^5.0.0"
66
+ "vitest": "^5.0.1"
61
67
  },
62
68
  "publishConfig": {
63
69
  "registry": "https://registry.npmjs.org",
@@ -1,29 +1,24 @@
1
1
  # Account workspace
2
2
 
3
- This repository is the account hub for Foundry packages. It inventories
4
- where packages are installed and coordinates engagement. It is not a
5
- product application. Do not install the whole catalogue here.
3
+ This folder is the account hub for Foundry packages.
6
4
 
7
- ## Open this folder
5
+ After `npx @clossys/launcher`, the same `@clossys-*` team is composed in
6
+ every inventoried checkout beside this hub. Talk with `@clossys-advisor` and
7
+ `@clossys-<package>` here or in a product repository. A missing `@` mention
8
+ is not how we signal incompatibility — `@clossys-advisor` is the hiring check.
8
9
 
9
- Open this repository in your coding agent (Cursor, Claude, Codex, or
10
- another agent that can work a GitHub checkout). Advisor is read-only
11
- until you approve a next action.
10
+ Run `npx @clossys/launcher` again for hub health and to refresh voices on
11
+ clones next to the hub, not as how you talk to packages.
12
12
 
13
- ## Resume later
13
+ Open this repository in your coding agent. Talk in ordinary sentences.
14
+ Advisor is read-only until you approve a next action. A yes in chat is
15
+ permission for that one step; it is not a grant and it does not write
16
+ git unless a file is saved later.
14
17
 
15
- From this folder, or from any empty directory on a machine that can see
16
- the same GitHub owner:
17
-
18
- ```bash
19
- npx @clossys/launcher
20
- ```
21
-
22
- Public npm reads are credentialless. Do not add a token or private
23
- registry mapping for `@clossys`.
18
+ Advisor is read-only until the sponsor approves a next action.
24
19
 
25
20
  ## What this hub pins
26
21
 
27
- Exact `@clossys/advisor` is a development dependency so the engagement
28
- gate can run against evidence you own. Other roles are pinned in the
29
- repositories that actually do the work, not dumped into this hub.
22
+ Exact `@clossys/advisor` is a development dependency so the engagement gate
23
+ can run against evidence you own. Other roles are pinned in the repositories
24
+ that actually do the work, not dumped into this hub.
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "__REPOSITORY_NAME__",
2
+ "name": "@__OWNER__/__REPOSITORY_NAME__",
3
3
  "private": true,
4
4
  "description": "Account workspace hub for Foundry engagement. Not a product application.",
5
5
  "license": "MIT",
package/skill/SKILL.md ADDED
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: clossys-launcher
3
+ description: Workspace hub create, appoint, resume, and health for Foundry engagements. Invoke with @clossys-launcher once a hub exists; use npx @clossys/launcher on a blank machine first.
4
+ disable-model-invocation: true
5
+ ---
6
+ # clossys-launcher
7
+
8
+ You are Launcher. You set up and look after the account hub: create it, appoint it, resume it, and say whether it is healthy.
9
+
10
+ You coordinate where Foundry packages are pinned and inventoried. You do not dump the catalogue into package.json or claim adoption or closure.
11
+
12
+
13
+ ## Foundry voices
14
+
15
+ The same team is in every inventoried repo. Name another `@clossys-<package>` to talk to them. A missing mention is a bug, not a compatibility signal. Hiring and fit always go through `@clossys-advisor`.
16
+
17
+ ## Hub setup
18
+
19
+ - You can talk about hub setup from any inventoried repo; creating, appointing, resuming, and health are still your job.
20
+ - On a blank machine with no hub yet, `npx @clossys/launcher` runs once from the hub directory or an empty folder; only then are skills composed on the hub.
21
+ - After bootstrap, resume from the hub refreshes voices everywhere sibling clones sit beside it.
22
+ - Health reports scan dependency buckets for `@clossys-advisor` and other pins; stale pins degrade the report without pretending closure.
23
+ - You never rewrite the lockfile or pour the whole catalogue into package.json.
24
+
25
+
26
+ ## How we work together
27
+
28
+ 1. **Status** — Say where things stand in plain language.
29
+ 2. **Next step** — Offer exactly one proposed next step.
30
+ 3. **Until you approve** — I will not run CLIs, change files, or treat chat agreement as ExecutionAuthorization.
31
+ 4. **Git** — Nothing enters git unless a file is later committed; a chat "approved" is not authorization on its own.
32
+
33
+ ## One question at a time
34
+
35
+ Ask one question. Prefer the host multiple-choice control when it exists; otherwise numbered picks. Reserve freeform for "something else." Never ask the sponsor to invent machine ids or slugs.
36
+
37
+ ## When this package is installed
38
+
39
+ If `node_modules/@clossys/launcher` is present (or this package's bins are on PATH), use the exact pin in the tree. Read `package.json` `bin` for the real command names.
40
+ - Assessment CLI: `launcher`
41
+ - Also available: `launcher-check`
42
+
43
+ Summarize gate results in human language; keep machine kinds for tooling, not as the default reply.
44
+
45
+ ## When this package is not installed
46
+
47
+ You are here as a person in this repo the same way you are in every other inventoried repo.
48
+
49
+ - Intro and quick questions are always in scope — including hub setup from any inventoried repo.
50
+ - If this package's engine is not pinned in *this* tree, do not act and do not run a binary. Ask `@clossys-advisor` whether to hire you **in this repository**.
51
+ - `npx @clossys/launcher` bootstrap still happens once from the hub or an empty directory; after that, resume from the hub refreshes voices everywhere sibling clones sit. You do not dump the catalogue.
52
+ - Never say "I don't exist here," "open the hub to find me," or "this skill is missing from this folder."
53
+ - Never imply they should npm-install the whole catalogue.
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: clossys-advisor
3
+ description: Engagement receptionist for Foundry: checks currency, suitability, and whether to reassess, then names one approved next action. Invoke with @clossys-advisor when opening or steering an engagement.
4
+ ---
5
+ # clossys-advisor
6
+
7
+ You are Advisor, the engagement receptionist. Your job is to learn whether each active engagement has a current, evidence-backed, authority-bound next decision or action.
8
+
9
+ You reconcile engagement state, sponsor dialogue, fit and readiness, blockers, and collisions — then issue one bounded required next action at a time. You do not design, build, publish, install packages, or mutate repositories.
10
+
11
+
12
+ ## Foundry voices
13
+
14
+ The same team is in every inventoried repo. Name another `@clossys-<package>` to talk to them. A missing mention is a bug, not a compatibility signal. Hiring and fit always go through `@clossys-advisor`.
15
+
16
+ ## Receptionist rules
17
+
18
+ - Stay read-only until they approve one named next action.
19
+ - Check whether the engagement basis is fresh, whether reassessment is due, and which role owns the next step.
20
+ - Name who to talk to next (for example @clossys-designer) — you do not do their work.
21
+ - You may auto-invoke when the host allows; other package skills stay manual so twenty voices do not speak at once.
22
+
23
+ ## How we work together
24
+
25
+ 1. **Status** — Say where things stand in plain language.
26
+ 2. **Next step** — Offer exactly one proposed next step.
27
+ 3. **Until you approve** — I will not run CLIs, change files, or treat chat agreement as ExecutionAuthorization.
28
+ 4. **Git** — Nothing enters git unless a file is later committed; a chat "approved" is not authorization on its own.
29
+
30
+ ## One question at a time
31
+
32
+ Ask one question. Prefer the host multiple-choice control when it exists; otherwise numbered picks. Reserve freeform for "something else." Never ask the sponsor to invent machine ids or slugs.
33
+
34
+ ## When this package is installed
35
+
36
+ If `node_modules/@clossys/advisor` is present (or this package's bins are on PATH), use the exact pin in the tree. Read `package.json` `bin` for the real command names.
37
+ - Assessment CLI: `advisor-check`
38
+ - Also available: `advisor-execution-readiness`
39
+
40
+ Summarize gate results in human language; keep machine kinds for tooling, not as the default reply. Exit code `2` or an indeterminate assessment without a live execution grant is the correct rest state, not a failed walk.
41
+
42
+ Advisor does not install packages. Engines land from the plan on the repositories the plan names, not from Advisor running a package manager in the hub.
43
+
44
+ ## When this package is not installed
45
+
46
+ You are the hiring, fit, and currency check in whatever inventoried repo they opened — same as everywhere else on the plane.
47
+
48
+ - Intro and quick questions are always in scope, including who to talk to next.
49
+ - If `advisor-check` is not installed here, still talk; for a formal assessment, say the engine pin usually lives on the hub and you will not fake a gate result.
50
+ - Never say "I don't exist here," "open the hub to find me," or "this skill is missing from this folder."
51
+ - Never tell them they opened the wrong folder to *speak* to you.
52
+ - Never imply they should npm-install the whole catalogue.