website-build-skill 0.1.4 → 0.1.6
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/.claude-plugin/plugin.json +1 -1
- package/CHANGELOG.md +25 -0
- package/CLAUDE.md +2 -1
- package/CONTRIBUTING.md +7 -3
- package/README.md +6 -6
- package/adapters/agents-md.md +2 -0
- package/adapters/antigravity.md +13 -29
- package/adapters/chatgpt-project.md +3 -1
- package/adapters/claude-code.md +4 -3
- package/adapters/claude-desktop.md +2 -0
- package/adapters/codex.md +4 -3
- package/adapters/custom-gpt.md +3 -1
- package/adapters/grok.md +12 -8
- package/adapters/hermes.md +12 -14
- package/adapters/team.yaml +2 -0
- package/docs/COMPATIBILITY.md +13 -2
- package/docs/INSTALLER.md +9 -6
- package/docs/METHOD.md +2 -1
- package/docs/README.md +1 -0
- package/docs/bundles/method.md +3 -2
- package/docs/bundles/prompts.md +19 -18
- package/docs/bundles/team.md +25 -21
- package/docs/evaluation/host-gate.md +129 -0
- package/docs/evaluation/host-trial.md +4 -1
- package/docs/evidence/content-review.json +117 -55
- package/docs/evidence/host-trial-claude-code-2026-09-24.json +57 -0
- package/docs/evidence/host-trial-codex-2026-09-24.json +58 -0
- package/docs/evidence/host-trial-grok-build-2026-09-24.json +74 -0
- package/llms.txt +2 -0
- package/package.json +1 -1
- package/skills/website-build-skill/SKILL.md +3 -2
- package/skills/website-build-skill/manifest.json +4 -4
- package/skills/website-build-skill/prompts/00-start.md +3 -2
- package/skills/website-build-skill/prompts/12-web-design-team.md +16 -16
- package/src/bundle.mjs +1 -0
- package/src/install.mjs +21 -4
|
@@ -40,7 +40,8 @@ true as of the date of your ask, not from what its model happens to remember.
|
|
|
40
40
|
This question is for the human at install, displayed by the README or installer.
|
|
41
41
|
Follow the recorded --solo / --team choice or the option named in the user's setup prompt.
|
|
42
42
|
Do not repeat it during the method. If no choice exists, return to the install entrypoint.
|
|
43
|
-
|
|
43
|
+
TEAM: one command installs the seven workers' files; you open each session yourself and carry the handoffs between them. Researcher goes first.
|
|
44
|
+
Option 2 uses Claude Code, Codex, Hermes, Antigravity, or Grok Bot; the human checks each session.
|
|
44
45
|
Both options use the same gates. Solo review is INTERNAL until a different family reviews.
|
|
45
46
|
|
|
46
47
|
Read prompts/00-start.md to give Researcher the request and available tools.
|
|
@@ -92,7 +93,7 @@ The graphics original is inactive provenance, excluded from every active stage r
|
|
|
92
93
|
| Protect | Builder | 09-security-headers | security.md |
|
|
93
94
|
| Challenge | Different-family Reviewer | 10-adversarial-pre-ship | research.md AD09; [code-quality.md](checklists/code-quality.md); ship.md SH01-SH03 |
|
|
94
95
|
| Ship | Coordinator acceptance, Builder release | 11-ship-and-verify | ship.md, pre-promotion then live checks |
|
|
95
|
-
| Team setup | Human
|
|
96
|
+
| Team setup | Human opens sessions and carries handoffs | 12-web-design-team | Seven route acknowledgements; no downstream work yet |
|
|
96
97
|
|
|
97
98
|
Use full filenames and asset order from manifest.json; the table abbreviates prompt suffixes.
|
|
98
99
|
For limited audits, load the relevant current research and checks without inventing redesign work.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"packageVersion": "0.1.
|
|
3
|
+
"packageVersion": "0.1.6",
|
|
4
4
|
"skillName": "website-build-skill",
|
|
5
5
|
"pathBase": "All asset paths resolve from this manifest directory; runtime paths resolve in the authorized user project.",
|
|
6
6
|
"assets": [
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"skill-zip",
|
|
18
18
|
"native-skill"
|
|
19
19
|
],
|
|
20
|
-
"sha256": "
|
|
20
|
+
"sha256": "71cb5b229d68ae1b91a11d4168c6093a88d0c0f7da2dbcab0c933cb6a333c81b"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
23
|
"path": "manifest.json",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"skill-zip",
|
|
46
46
|
"native-skill"
|
|
47
47
|
],
|
|
48
|
-
"sha256": "
|
|
48
|
+
"sha256": "9de537723108ad71b608c467d78c7ba6edb54880d0429f5321d490cba9c900cb"
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
"path": "prompts/01-website-deep-research.md",
|
|
@@ -225,7 +225,7 @@
|
|
|
225
225
|
"skill-zip",
|
|
226
226
|
"native-skill"
|
|
227
227
|
],
|
|
228
|
-
"sha256": "
|
|
228
|
+
"sha256": "a1b1460deea3520d25245d805521019f758b905b97e73ac97e7020cead861837"
|
|
229
229
|
},
|
|
230
230
|
{
|
|
231
231
|
"path": "prompts/13-coding-research.md",
|
|
@@ -15,10 +15,11 @@ Do not repeat the install question mid-method. If no choice is recorded, return
|
|
|
15
15
|
its install entrypoint to the human before starting work.
|
|
16
16
|
|
|
17
17
|
TEAM SETUP
|
|
18
|
+
TEAM: one command installs the seven workers' files; you open each session yourself and carry the handoffs between them. Researcher goes first.
|
|
18
19
|
- Read roles/researcher.md, roles/coordinator.md, roles/designer.md, roles/graphics.md, roles/builder.md,
|
|
19
20
|
roles/optimizer.md, and roles/reviewer.md.
|
|
20
|
-
-
|
|
21
|
-
-
|
|
21
|
+
- Follow prompts/12-web-design-team.md while the human opens the sessions and carries handoffs.
|
|
22
|
+
- The human checks session references during setup and opens Researcher first. Coordinator
|
|
22
23
|
records families and working readiness after the research gate passes.
|
|
23
24
|
- Role labels within one conversation are option 1; if separate workers are unavailable,
|
|
24
25
|
say so, record SOLO, and continue below. Missing independent review alone blocks
|
|
@@ -4,6 +4,7 @@ Never ask the user for the date or infer it from model knowledge. Apply the
|
|
|
4
4
|
same source, two-date, freshness, reuse, and blocked-gate rules to this stage.
|
|
5
5
|
|
|
6
6
|
Run option 2, Give me the team, using the human's recorded install choice.
|
|
7
|
+
TEAM: one command installs the seven workers' files; you open each session yourself and carry the handoffs between them. Researcher goes first.
|
|
7
8
|
Needs Claude Code, Codex, Hermes, Antigravity, or Grok Bot. Follow the setup line for that host.
|
|
8
9
|
|
|
9
10
|
Every agent runs its own research pass before it touches your site, so it works from what is
|
|
@@ -16,22 +17,21 @@ SET UP
|
|
|
16
17
|
- Read roles/researcher.md first, then roles/coordinator.md, roles/designer.md,
|
|
17
18
|
roles/graphics.md, roles/builder.md, roles/optimizer.md, roles/reviewer.md,
|
|
18
19
|
and templates/handoff.yaml. Use each complete body, not these short summaries.
|
|
19
|
-
-
|
|
20
|
+
- The human opens Website Researcher first, then Website Coordinator,
|
|
20
21
|
Website Designer, Website Graphics, Website Builder, Website Optimizer, and
|
|
21
|
-
Website Reviewer as separate sessions, Bots, or terminals.
|
|
22
|
-
only after the research gate. Use
|
|
23
|
-
-
|
|
22
|
+
Website Reviewer as separate sessions, Bots, or terminals. Coordinator works
|
|
23
|
+
only after the research gate. Use available session controls and complete role files.
|
|
24
|
+
- The human checks each session reference and obtains seven setup acknowledgements.
|
|
24
25
|
These confirm receipt of instructions, not permission to start downstream work.
|
|
25
26
|
- A role label in one conversation is option 1. Record SOLO and use prompts/00-start.md
|
|
26
27
|
if separate workers cannot be reached. A same-family team remains a team but
|
|
27
28
|
cannot pass independent review. Respect host concurrency limits.
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
or independent review checks cannot be reported as a ready team.
|
|
29
|
+
- Read the host adapter and receipt. The installer supplies role files and bundles;
|
|
30
|
+
the human opens sessions, checks trust and tools, and supplies each worker's files.
|
|
31
|
+
Pending discovery, trust, tools or independent review checks remain explicit limits.
|
|
32
32
|
- Supply the request, authorized workspace, source assets, and tools to Researcher.
|
|
33
|
-
All other roles wait.
|
|
34
|
-
|
|
33
|
+
All other roles wait. Carry the complete packets using the manual setup below;
|
|
34
|
+
actual host loading remains UNVERIFIED until tested.
|
|
35
35
|
|
|
36
36
|
RESEARCHER
|
|
37
37
|
- Own site-work/research/library/ and handoffs/researcher/; own both research resources.
|
|
@@ -114,9 +114,9 @@ Never report a measured, saved, installed, or deployed result without evidence.
|
|
|
114
114
|
Apply checklists/research.md before downstream dispatch and checklists/ship.md before release.
|
|
115
115
|
|
|
116
116
|
PORTABLE MANUAL SETUP
|
|
117
|
-
Use this
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
Use this setup for TEAM on every host. You open each session and carry every handoff.
|
|
118
|
+
Host loading, file access, tool enforcement and different-family availability remain
|
|
119
|
+
UNVERIFIED until the actual host/session checks succeed.
|
|
120
120
|
A missing host adapter does not authorize inventing a native file format or import API.
|
|
121
121
|
|
|
122
122
|
1. Open the host's verified worker/session creation surface, if available.
|
|
@@ -128,8 +128,8 @@ A missing host adapter does not authorize inventing a native file format or impo
|
|
|
128
128
|
with evidence, tools, inaccessible files, and owned paths. Keep downstream work pending.
|
|
129
129
|
5. Give Reviewer a read-only candidate packet or verified read-only session. Broad
|
|
130
130
|
inherited tools do not become restricted because role prose says read-only.
|
|
131
|
-
6.
|
|
132
|
-
|
|
131
|
+
6. Deliver a bounded setup message to each session yourself. Relay addressed packets
|
|
132
|
+
and attachments, and verify each receiving worker can open them.
|
|
133
133
|
7. Give the user's actual request, authorized workspace, assets and constraints to
|
|
134
134
|
Researcher alone. It establishes ASK DATE and completes the library and gate first.
|
|
135
135
|
8. Relay its complete passing receipt and readable library to Coordinator. Coordinator
|
|
@@ -138,7 +138,7 @@ A missing host adapter does not authorize inventing a native file format or impo
|
|
|
138
138
|
Preserve seven acknowledgements separately from research and work-readiness receipts.
|
|
139
139
|
A text-only group requires direct image attachments to each receiving visual reviewer.
|
|
140
140
|
Inaccessible files or routes keep the relevant handoff BLOCKED.
|
|
141
|
-
|
|
141
|
+
Completed file installation means the files are available; session setup is the human's next step.
|
|
142
142
|
No separate workers means SOLO; no independent family means independent review BLOCKED.
|
|
143
143
|
Never invent a platform capability to fill a setup gap.
|
|
144
144
|
|
package/src/bundle.mjs
CHANGED
|
@@ -140,6 +140,7 @@ export function generated(root) {
|
|
|
140
140
|
index += '- [Installer](docs/INSTALLER.md): headless setup, destinations, receipts, exit codes and uninstall\n';
|
|
141
141
|
index += '- [Compatibility](docs/COMPATIBILITY.md): host setup routes and the evidence for each\n';
|
|
142
142
|
index += '- [Documentation](docs/README.md): method, tips, provenance and evaluation\n\n';
|
|
143
|
+
index += "TEAM: one command installs the seven workers' files; you open each session yourself and carry the handoffs between them. Researcher goes first.\n\n";
|
|
143
144
|
index += '## Active sources\n\n';
|
|
144
145
|
for (const asset of m.assets.filter(a => a.active)) index += `- [${asset.path}](${CORE}/${asset.path}): ${describe(root, asset)}\n`;
|
|
145
146
|
index += '\n## Bundles\n\n';
|
package/src/install.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
|
-
import { resolve, relative, dirname, basename, sep } from 'node:path';
|
|
2
|
+
import { resolve, relative, dirname, basename, join, sep } from 'node:path';
|
|
3
3
|
import { fileURLToPath } from 'node:url';
|
|
4
4
|
import { randomUUID } from 'node:crypto';
|
|
5
5
|
import { CORE, files, owned, digest } from './bundle.mjs';
|
|
@@ -59,6 +59,22 @@ export function safePath(root, name) {
|
|
|
59
59
|
const receiptName = '.website-build-skill-receipt.json';
|
|
60
60
|
const result = (code, message) => ({ code, message });
|
|
61
61
|
|
|
62
|
+
function canonicalReceipt(path, root, destination, outputRoot) {
|
|
63
|
+
const boundaries = [destination, outputRoot].filter(Boolean);
|
|
64
|
+
// Resolve the user's root spelling, but inspect its suffix before using the canonical
|
|
65
|
+
// receipt parent: otherwise a planted link below an output or destination root disappears.
|
|
66
|
+
// An ancestor that resolves anywhere INSIDE a root (an alias to a subdirectory, not only
|
|
67
|
+
// to the root itself) is walked from that root, so no link below it is skipped.
|
|
68
|
+
for (let parent = dirname(path); ; parent = dirname(parent)) {
|
|
69
|
+
const base = canonical(parent);
|
|
70
|
+
for (const boundary of boundaries) {
|
|
71
|
+
if (inside(boundary, base)) safePath(boundary, join(relative(boundary, base), relative(parent, path)));
|
|
72
|
+
}
|
|
73
|
+
if (dirname(parent) === parent) break;
|
|
74
|
+
}
|
|
75
|
+
return safePath(root, resolve(root, basename(path)));
|
|
76
|
+
}
|
|
77
|
+
|
|
62
78
|
function validate(request) {
|
|
63
79
|
if (!Object.hasOwn(targets, request.target)) throw Error('Unknown or missing target');
|
|
64
80
|
if (!['solo', 'team'].includes(request.mode)) throw Error('Mode must be solo or team');
|
|
@@ -240,11 +256,12 @@ export function install(request = {}) {
|
|
|
240
256
|
destination = resolve(project, targets[request.target]);
|
|
241
257
|
receiptPath = resolve(request.receipt ?? resolve(destination, receiptName));
|
|
242
258
|
receiptRoot = request.receipt ? canonical(dirname(receiptPath)) : destination;
|
|
243
|
-
outputRoot = request.outputDir === undefined ? null : canonical(request.outputDir);
|
|
244
259
|
}
|
|
260
|
+
outputRoot = request.outputDir === undefined ? null : canonical(request.outputDir);
|
|
245
261
|
} catch (error) { return result(2, error.message); }
|
|
246
|
-
if (request.uninstall) return uninstall(request, destination, receiptPath, receiptRoot);
|
|
247
262
|
try {
|
|
263
|
+
if (request.receipt) receiptPath = canonicalReceipt(receiptPath, receiptRoot, destination, outputRoot);
|
|
264
|
+
if (request.uninstall) return uninstall(request, destination, receiptPath, receiptRoot);
|
|
248
265
|
safePath(project, targets[request.target]);
|
|
249
266
|
if (request.receipt) safePath(receiptRoot, receiptPath);
|
|
250
267
|
if (inside(destination, receiptPath) && receiptPath === destination) throw Error('Receipt collides with destination');
|
|
@@ -274,7 +291,7 @@ export function install(request = {}) {
|
|
|
274
291
|
if (info && entry.wrote) conflicts.push(entry.path);
|
|
275
292
|
}
|
|
276
293
|
if (conflicts.length) return result(3, `Preflight conflicts; nothing written:\n${conflicts.join('\n')}`);
|
|
277
|
-
} catch (error) { return result(3, `Preflight refused; nothing written: ${error.message}`); }
|
|
294
|
+
} catch (error) { return request.uninstall ? result(2, error.message) : result(3, `Preflight refused; nothing written: ${error.message}`); }
|
|
278
295
|
const receipt = {
|
|
279
296
|
schemaVersion: 1, package: packageInfo, date: new Date().toISOString(), mode: request.mode,
|
|
280
297
|
target: request.target, scope: request.scope ?? 'project', destination, outputRoot,
|