@lifeaitools/rdc-skills 0.9.37 → 0.9.38
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 +14 -0
- package/commands/deploy.md +4 -4
- package/commands/design.md +1 -1
- package/commands/overnight.md +2 -2
- package/commands/release.md +29 -139
- package/commands/self-test.md +1 -1
- package/commands/watch.md +1 -1
- package/guides/agent-bootstrap.md +2 -2
- package/hooks/check-cwd.js +3 -3
- package/hooks/no-stop-open-epics.js +9 -7
- package/hooks/require-work-item-on-commit.js +2 -1
- package/package.json +6 -2
- package/scripts/install-rdc-skills.js +6 -2
- package/skills/build/SKILL.md +2 -2
- package/skills/co-develop/SKILL.md +1 -1
- package/skills/deploy/SKILL.md +12 -12
- package/skills/design/SKILL.md +6 -6
- package/skills/fs-mcp/SKILL.md +2 -2
- package/skills/plan/SKILL.md +2 -2
- package/skills/release/SKILL.md +48 -302
- package/skills/self-test/SKILL.md +3 -3
- package/skills/terminal-config/SKILL.md +34 -189
- package/skills/watch/SKILL.md +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v0.9.38 — Clean-box npm install hardening
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **Fresh Claude home install.** The installer now creates `CLAUDE_HOME` and `settings.json` when they do not exist, so a first-time machine is not blocked before Claude has written config files.
|
|
15
|
+
- **Public package portability.** Removed the most brittle user-machine paths from public skill docs and hooks, replacing them with `{PROJECT_ROOT}`, `{RDC_SKILLS_ROOT}`, or environment-derived paths.
|
|
16
|
+
- **Hook path fallback.** Commit hygiene hooks now use the current OS home directory instead of a user-specific fallback path.
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- **npm binaries.** `rdc-skills-install` and `rdc-skills-self-test` are exposed from the npm package for simpler clean-box installs.
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
10
24
|
## v0.9.37 — RDC hook loop guard and behavior tests
|
|
11
25
|
|
|
12
26
|
### Fixed
|
package/commands/deploy.md
CHANGED
|
@@ -55,7 +55,7 @@ rdc:deploy: <slug> → <domain>
|
|
|
55
55
|
```
|
|
56
56
|
rdc:deploy new: <slug>
|
|
57
57
|
[ ] Registry entry loaded (or interactive create)
|
|
58
|
-
[ ] DNS path chosen (A:
|
|
58
|
+
[ ] DNS path chosen (A: staging wildcard B: apex C: other zone)
|
|
59
59
|
[ ] DNS record verified or wildcard confirmed
|
|
60
60
|
[ ] Cloudflare proxy setting correct for DNS path
|
|
61
61
|
[ ] server_uuid, project_uuid, environment_uuid, github_app_uuid resolved
|
|
@@ -103,7 +103,7 @@ rdc:deploy audit: fleet scan
|
|
|
103
103
|
[ ] Env var drift (registry.env_vars_needed vs Coolify env)
|
|
104
104
|
[ ] Branch mismatches (Coolify git_branch ≠ expected)
|
|
105
105
|
[ ] Disk space on 64.237.54.189
|
|
106
|
-
[ ]
|
|
106
|
+
[ ] DNS/proxy misconfigs on configured staging wildcard
|
|
107
107
|
[ ] Duplicate apps (same repo, multiple UUIDs)
|
|
108
108
|
|
|
109
109
|
Findings:
|
|
@@ -127,7 +127,7 @@ There is no Coolify MCP server — do not reference `@masonator/coolify-mcp`.
|
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
129
|
_COOLIFY=$(curl -s http://127.0.0.1:52437/v/coolify-api)
|
|
130
|
-
curl -s -H "Authorization: Bearer $_COOLIFY"
|
|
130
|
+
curl -s -H "Authorization: Bearer $_COOLIFY" "$DEPLOY_API_BASE/api/v1/applications"
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
If clauth daemon is not responding:
|
|
@@ -143,7 +143,7 @@ BLOCKED: clauth daemon not responding. Run scripts\restart-clauth.bat, unlock at
|
|
|
143
143
|
```
|
|
144
144
|
Server UUID: ih386anenvvvn6fy1umtyow0
|
|
145
145
|
Server IP: 64.237.54.189
|
|
146
|
-
Dashboard:
|
|
146
|
+
Dashboard: <deployment-dashboard-url>
|
|
147
147
|
GitHub App UUID: xdmcy60putp5h9j7k4kwg9c3
|
|
148
148
|
```
|
|
149
149
|
|
package/commands/design.md
CHANGED
|
@@ -15,7 +15,7 @@ Use `skills/design/SKILL.md` as the source of truth.
|
|
|
15
15
|
|
|
16
16
|
- Studio, Palette Library, brand-token, theme, component, or live-editor work
|
|
17
17
|
- Any design task that must understand RDC's real token tables and Studio routes
|
|
18
|
-
- UI critique, audit, polish, colorize, type, layout, or craft work in `
|
|
18
|
+
- UI critique, audit, polish, colorize, type, layout, or craft work in `{PROJECT_ROOT}`
|
|
19
19
|
- Agent-side color-system exploration using Rampa CLI
|
|
20
20
|
|
|
21
21
|
## Arguments
|
package/commands/overnight.md
CHANGED
|
@@ -30,13 +30,13 @@ description: >-
|
|
|
30
30
|
**First action — set the overnight sentinel** so the `no-stop-open-epics` Stop hook engages (interactive sessions are not gated by it):
|
|
31
31
|
|
|
32
32
|
```bash
|
|
33
|
-
mkdir -p
|
|
33
|
+
mkdir -p {PROJECT_ROOT}/.rdc && touch {PROJECT_ROOT}/.rdc/overnight.lock
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
**Last action at end of run (success OR failure) — remove the sentinel:**
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
rm -f
|
|
39
|
+
rm -f {PROJECT_ROOT}/.rdc/overnight.lock
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
If the sentinel file does not exist, the Stop hook will NOT block — which means interactive sessions stop freely and only `rdc:overnight` is held to the "drain the queue" contract.
|
package/commands/release.md
CHANGED
|
@@ -1,159 +1,49 @@
|
|
|
1
1
|
---
|
|
2
|
-
name: rdc:release
|
|
3
2
|
description: >-
|
|
4
|
-
Atomic release. Usage `rdc:release <repo> [version]` or `rdc:release <repo> --patch|--minor|--major
|
|
3
|
+
Atomic release. Usage `rdc:release <repo> [version]` or `rdc:release <repo> --patch|--minor|--major|--dry-run` — bump, commit, tag, push, wait CI/publish, install, and verify. Uses repo-local release metadata.
|
|
5
4
|
---
|
|
6
5
|
|
|
6
|
+
# rdc:release — Generic Release
|
|
7
|
+
|
|
7
8
|
> **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
|
|
8
|
-
> Checklist-only output. No
|
|
9
|
+
> Checklist-only output. No raw git/npm/CI dumps.
|
|
9
10
|
> One checklist upfront, updated in place, shown again at end with 1-line verdict.
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
# rdc:release — Atomic LIFEAI Package Release
|
|
14
|
-
|
|
15
|
-
## Purpose
|
|
16
|
-
|
|
17
|
-
Dave has Bash access. Therefore Dave should never be asked to run install
|
|
18
|
-
commands. This skill handles the complete release loop for any LIFEAI-published
|
|
19
|
-
package so the user sees one checklist and one verdict, not a series of "now run
|
|
20
|
-
this" handoffs.
|
|
21
|
-
|
|
22
|
-
## Arguments
|
|
23
|
-
|
|
24
|
-
- `rdc:release <repo>` — patch bump (default), full loop
|
|
25
|
-
- `rdc:release <repo> <version>` — explicit version (e.g. `1.6.0`)
|
|
26
|
-
- `rdc:release <repo> --minor` | `--major` | `--patch` — semver bump
|
|
27
|
-
- `rdc:release <repo> --dry-run` — show checklist and planned version, do nothing
|
|
28
|
-
- `rdc:release` (no args) — list known repos, ask which
|
|
29
|
-
|
|
30
|
-
## Known repos
|
|
31
|
-
|
|
32
|
-
Resolve `<repo>` to source path + install mechanism:
|
|
33
|
-
|
|
34
|
-
| Repo | Source path | Publish | Install | Post-install |
|
|
35
|
-
|------|-------------|---------|---------|--------------|
|
|
36
|
-
| `clauth` | `C:/Dev/clauth` | npm via tag → GitHub Actions | `npm install -g @lifeaitools/clauth@latest` | `curl -s -X POST http://127.0.0.1:52437/restart` |
|
|
37
|
-
| `rdc-skills` | `C:/Dev/rdc-skills` | local (no npm) | `bash C:/Dev/rdc-skills/scripts/install.sh` + cp fallback | none |
|
|
38
|
-
| `regen-media` | `C:/Dev/regen-root/mcp-servers/regen-media` | local | restart MCP server | none |
|
|
39
|
-
| `gws` | `C:/Dev/regen-root/mcp-servers/gws` | local | restart MCP server | none |
|
|
40
|
-
|
|
41
|
-
Add new repos to this table as they emerge. If user specifies an unknown repo,
|
|
42
|
-
ask for the source path and install command.
|
|
43
|
-
|
|
44
|
-
## Checklist (run every mode)
|
|
12
|
+
## Checklist
|
|
45
13
|
|
|
46
14
|
```
|
|
47
|
-
rdc:release: <repo> vX.Y.Z
|
|
15
|
+
rdc:release: <repo> vX.Y.Z -> vA.B.C
|
|
48
16
|
[ ] Source path resolved
|
|
49
|
-
[ ]
|
|
50
|
-
[ ]
|
|
17
|
+
[ ] Release metadata read
|
|
18
|
+
[ ] Working tree clean or user-approved dirty scope identified
|
|
19
|
+
[ ] Current version detected
|
|
51
20
|
[ ] New version computed
|
|
52
|
-
[ ] Dry-run gate
|
|
53
|
-
[ ]
|
|
21
|
+
[ ] Dry-run gate handled
|
|
22
|
+
[ ] Version files updated
|
|
23
|
+
[ ] Tests/self-test passed
|
|
54
24
|
[ ] Commit created
|
|
55
|
-
[ ] Tag
|
|
56
|
-
[ ]
|
|
57
|
-
[ ]
|
|
58
|
-
[ ]
|
|
59
|
-
[ ]
|
|
60
|
-
[ ]
|
|
61
|
-
[ ]
|
|
62
|
-
|
|
63
|
-
[ ] Post-install action (daemon restart, etc., if applicable)
|
|
64
|
-
[ ] Smoke test (ping health endpoint or binary --version)
|
|
65
|
-
✅ rdc:release <repo>: vA.B.C live and installed
|
|
25
|
+
[ ] Tag created
|
|
26
|
+
[ ] Branch and tag pushed
|
|
27
|
+
[ ] CI/publish status verified
|
|
28
|
+
[ ] Registry/package/deploy target shows vA.B.C, if applicable
|
|
29
|
+
[ ] Local install/update executed, if applicable
|
|
30
|
+
[ ] Installed/runtime version verified
|
|
31
|
+
[ ] Smoke test passed
|
|
32
|
+
✅ rdc:release <repo>: vA.B.C live and verified
|
|
66
33
|
```
|
|
67
34
|
|
|
68
|
-
##
|
|
35
|
+
## Rules
|
|
69
36
|
|
|
70
|
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
-
|
|
37
|
+
- Do not release without explicit user authorization.
|
|
38
|
+
- Prefer repo-local release instructions in `.rdc/release.json`, README, package scripts, or CI workflows.
|
|
39
|
+
- Never force push or bypass hooks.
|
|
40
|
+
- Never declare success without verifying the installed or deployed version.
|
|
74
41
|
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
cd <source_path>
|
|
78
|
-
git add package.json
|
|
79
|
-
git commit -m "chore(release): vA.B.C"
|
|
80
|
-
if [ "$RDC_TEST" != "1" ]; then
|
|
81
|
-
git tag vA.B.C
|
|
82
|
-
git push && git push --tags
|
|
83
|
-
else
|
|
84
|
-
echo "[RDC_TEST] skipping git tag + git push --tags"
|
|
85
|
-
fi
|
|
86
|
-
```
|
|
87
|
-
Never `--no-verify`. Never `--force`. If pre-commit hook fails, fix root cause, don't skip.
|
|
42
|
+
## RDC Skills Package
|
|
88
43
|
|
|
89
|
-
|
|
44
|
+
After publishing this package to npm, a clean-box install should use:
|
|
90
45
|
|
|
91
|
-
### 3. CI poll (for repos with GH Actions publish)
|
|
92
46
|
```bash
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
# Poll its status field every 20s until conclusion ∈ {success, failure, cancelled}
|
|
96
|
-
# Max 10 minutes — if timeout, fail with [!] and report run URL
|
|
47
|
+
npm install -g @lifeaitools/rdc-skills@latest
|
|
48
|
+
rdc-skills-install --profile core
|
|
97
49
|
```
|
|
98
|
-
|
|
99
|
-
### 4. npm registry poll (only if published to npm)
|
|
100
|
-
```bash
|
|
101
|
-
npm view @lifeaitools/<repo> version
|
|
102
|
-
# Poll every 15s until matches new version
|
|
103
|
-
# Max 3 minutes — usually lands within 30-60s after CI success
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### 5. Install
|
|
107
|
-
- **clauth:** `npm install -g @lifeaitools/clauth@latest`
|
|
108
|
-
- **rdc-skills:** `bash C:/Dev/rdc-skills/scripts/install.sh` — if output shows only one file copied (known bug), fall back to `cp C:/Dev/rdc-skills/skills/*.md ~/.claude/skills/user/ && cp C:/Dev/rdc-skills/skills/*.md C:/Dev/regen-root/.claude/skills/user/`
|
|
109
|
-
- **MCP servers:** restart the server process (find its PID, kill, respawn — or document how)
|
|
110
|
-
|
|
111
|
-
### 6. Verify install
|
|
112
|
-
- **clauth:** `curl -s http://127.0.0.1:52437/ping | jq -r .app_version` — must equal new version
|
|
113
|
-
- **rdc-skills:** `ls ~/.claude/skills/user/rdc-release.md` (or whichever file is new in this release) — must exist
|
|
114
|
-
- **Global npm:** `npm list -g --depth=0 @lifeaitools/<repo>` — version matches
|
|
115
|
-
|
|
116
|
-
### 7. Post-install
|
|
117
|
-
- **clauth:** `curl -s -X POST http://127.0.0.1:52437/restart` — wait 3s — ping again
|
|
118
|
-
- Others: N/A
|
|
119
|
-
|
|
120
|
-
### 8. Smoke test
|
|
121
|
-
- **clauth:** new tool roundtrip (e.g., `curl -s http://127.0.0.1:52437/get/openai | head -c 10` succeeds without error)
|
|
122
|
-
- **rdc-skills:** load one new skill file and check frontmatter parses
|
|
123
|
-
- **MCP:** server responds to `tools/list`
|
|
124
|
-
|
|
125
|
-
## Failure modes → checklist outcome
|
|
126
|
-
|
|
127
|
-
| Failure | Marker | Next |
|
|
128
|
-
|---------|--------|------|
|
|
129
|
-
| Dirty working tree | `[!]` line 2 | Abort with one-sentence diff summary; ask user to commit or stash |
|
|
130
|
-
| Pre-commit hook fails | `[!]` line 7 | Fix root cause, re-stage, retry (NEVER --no-verify) |
|
|
131
|
-
| CI fails | `[!]` line 11 | Print run URL, tail 20 lines of failing job, ask user |
|
|
132
|
-
| npm doesn't register | `[!]` line 12 | Print npm error, check if CI actually published (not a silent skip) |
|
|
133
|
-
| Install script broken | `[!]` line 13 | Fall back to manual cp; note the installer bug as a task |
|
|
134
|
-
| Version mismatch after install | `[!]` line 14 | Uninstall + clean install; if still wrong, likely cache issue |
|
|
135
|
-
| Post-install restart fails | `[!]` line 15 | Print ping error; instruct user to run `scripts\restart-clauth.bat` manually |
|
|
136
|
-
|
|
137
|
-
Even on failure, show the full checklist with `[!]` markers so user sees exactly
|
|
138
|
-
where it stopped.
|
|
139
|
-
|
|
140
|
-
## Dry-run mode
|
|
141
|
-
|
|
142
|
-
Prints the checklist + resolved version bump + every command that WOULD run, but
|
|
143
|
-
executes nothing beyond reads. Use when user says "what would you do" or before
|
|
144
|
-
risky major bumps.
|
|
145
|
-
|
|
146
|
-
## Never
|
|
147
|
-
|
|
148
|
-
- Never release on behalf of the user without an explicit `rdc:release` invocation
|
|
149
|
-
- Never skip CI verification ("it'll probably work" is how stale installs happen)
|
|
150
|
-
- Never `--force` push, never `--no-verify`, never `--no-gpg-sign`
|
|
151
|
-
- Never touch `main` — release tags go on the default branch the repo uses (`master` for clauth, rdc-skills)
|
|
152
|
-
- Never declare success without verifying the installed version matches
|
|
153
|
-
|
|
154
|
-
## Related
|
|
155
|
-
|
|
156
|
-
- `.claude/rules/clauth.md` — clauth release workflow source of truth
|
|
157
|
-
- `feedback_version_bump_must_tag.md` (memory) — never bump without tagging
|
|
158
|
-
- `feedback_clauth_ci.md` (memory) — CI publish pattern
|
|
159
|
-
- `feedback_just_do_it.md` (memory) — don't hand commands to Dave; run them
|
package/commands/self-test.md
CHANGED
package/commands/watch.md
CHANGED
|
@@ -24,7 +24,7 @@ description: >-
|
|
|
24
24
|
```bash
|
|
25
25
|
node ${CLAUDE_PLUGIN_ROOT}/scripts/watch-init.mjs
|
|
26
26
|
```
|
|
27
|
-
(If `CLAUDE_PLUGIN_ROOT` is not set, resolve the plugin path from your invocation context
|
|
27
|
+
(If `CLAUDE_PLUGIN_ROOT` is not set, resolve the plugin path from your invocation context or the installed plugin cache.)
|
|
28
28
|
|
|
29
29
|
2. **Parse the output.** The script prints `run_id`, `log_path`, `current`, `viewer`, and `open_hint`. Capture `log_path` and `viewer` for the rest of the session.
|
|
30
30
|
|
|
@@ -137,7 +137,7 @@ When `RDC_TEST=1` is set, the skill is running inside the Tier 2 sandbox harness
|
|
|
137
137
|
**Bash pattern:**
|
|
138
138
|
```bash
|
|
139
139
|
if [ "$RDC_TEST" != "1" ]; then
|
|
140
|
-
curl -X POST "
|
|
140
|
+
curl -X POST "$DEPLOY_API_BASE/api/v1/applications/$UUID/deploy" ...
|
|
141
141
|
else
|
|
142
142
|
echo "[RDC_TEST] skipping Coolify deploy"
|
|
143
143
|
fi
|
|
@@ -156,7 +156,7 @@ if (process.env.RDC_TEST !== '1') {
|
|
|
156
156
|
|
|
157
157
|
**New-skill contract:** every new `rdc:*` skill MUST honor `RDC_TEST` before shipping. Tier 2 manifests will fail any skill that writes to external state under the flag.
|
|
158
158
|
|
|
159
|
-
**Known blocker:**
|
|
159
|
+
**Known blocker:** Project-specific cwd hooks must check `process.env.RDC_TEST === '1'` and call `process.exit(0)` early to allow Tier 2 sandbox runs. Without this bypass, headless self-test invocations can fail before the skill loads. File: `~/.claude/hooks/check-cwd.js`.
|
|
160
160
|
|
|
161
161
|
---
|
|
162
162
|
|
package/hooks/check-cwd.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// Hard blocks session if CWD is not the
|
|
2
|
+
// Hard blocks session if CWD is not the expected project directory.
|
|
3
3
|
// Exits with code 1 to fail the hook + outputs a blocking systemMessage.
|
|
4
4
|
|
|
5
5
|
const { execSync } = require('child_process');
|
|
6
6
|
const hookLog = require('./hook-logger');
|
|
7
7
|
const cwd = process.cwd().replace(/\\/g, '/');
|
|
8
8
|
|
|
9
|
-
let expected = 'regen-root';
|
|
9
|
+
let expected = process.env.RDC_PROJECT_SCOPE || 'regen-root';
|
|
10
10
|
try {
|
|
11
11
|
expected = execSync('git rev-parse --show-toplevel', { encoding: 'utf8', stdio: 'pipe' })
|
|
12
12
|
.trim().replace(/\\/g, '/');
|
|
13
13
|
} catch (_) {}
|
|
14
14
|
|
|
15
|
-
if (!cwd.endsWith(
|
|
15
|
+
if (!cwd.endsWith(expected)) {
|
|
16
16
|
hookLog('check-cwd', 'SessionStart', 'block', { cwd, expected });
|
|
17
17
|
process.stdout.write(JSON.stringify({
|
|
18
18
|
systemMessage:
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Fires on every Stop event where Claude decided to end_turn.
|
|
6
6
|
* Queries get_open_epics() via Supabase REST.
|
|
7
7
|
* Only blocks if epics with status=todo exist — in_progress means another session owns them.
|
|
8
|
-
* Only fires in the
|
|
8
|
+
* Only fires in the configured project scope (scope guard on event.cwd).
|
|
9
9
|
*
|
|
10
10
|
* Exit codes:
|
|
11
11
|
* 0 = allow stop
|
|
@@ -15,8 +15,9 @@
|
|
|
15
15
|
* NEXT_PUBLIC_SUPABASE_URL=https://<ref>.supabase.co
|
|
16
16
|
* NEXT_PUBLIC_SUPABASE_ANON_KEY=<key>
|
|
17
17
|
*
|
|
18
|
-
* PROJECT SCOPE
|
|
19
|
-
*
|
|
18
|
+
* PROJECT SCOPE:
|
|
19
|
+
* RDC_PROJECT_SCOPE=<folder-name> folder name that must appear in event.cwd
|
|
20
|
+
* RDC_PROJECT_ROOT=<path> root used to find .rdc/overnight.lock and .env.local
|
|
20
21
|
*/
|
|
21
22
|
|
|
22
23
|
const fs = require('fs');
|
|
@@ -24,11 +25,12 @@ const path = require('path');
|
|
|
24
25
|
|
|
25
26
|
// ── Config — override these per project ──────────────────────────────────────
|
|
26
27
|
|
|
27
|
-
const PROJECT_SCOPE = 'regen-root'; //
|
|
28
|
-
const
|
|
28
|
+
const PROJECT_SCOPE = process.env.RDC_PROJECT_SCOPE || 'regen-root'; // LIFEAI default; override per project
|
|
29
|
+
const PROJECT_ROOT = process.env.RDC_PROJECT_ROOT || process.cwd();
|
|
30
|
+
const OVERNIGHT_SENTINEL = process.env.RDC_OVERNIGHT_LOCK || path.join(PROJECT_ROOT, '.rdc', 'overnight.lock');
|
|
29
31
|
const ENV_PATHS = [
|
|
30
|
-
|
|
31
|
-
'
|
|
32
|
+
...(process.env.RDC_ENV_PATHS ? process.env.RDC_ENV_PATHS.split(path.delimiter) : []),
|
|
33
|
+
path.join(PROJECT_ROOT, '.env.local'),
|
|
32
34
|
];
|
|
33
35
|
const SUPABASE_URL = process.env.SUPABASE_URL || readEnvVar('NEXT_PUBLIC_SUPABASE_URL');
|
|
34
36
|
|
|
@@ -18,10 +18,11 @@
|
|
|
18
18
|
|
|
19
19
|
const fs = require('fs');
|
|
20
20
|
const path = require('path');
|
|
21
|
+
const os = require('os');
|
|
21
22
|
const hookLog = require('./hook-logger');
|
|
22
23
|
|
|
23
24
|
const MARKER_FILE = path.join(
|
|
24
|
-
process.env.USERPROFILE || process.env.HOME ||
|
|
25
|
+
process.env.USERPROFILE || process.env.HOME || os.homedir(),
|
|
25
26
|
'.claude',
|
|
26
27
|
'fixit.marker'
|
|
27
28
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lifeaitools/rdc-skills",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.38",
|
|
4
4
|
"description": "RDC typed-agent dispatch skill suite for Claude Code - plan, build, review, overnight builds",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude-code",
|
|
@@ -19,9 +19,13 @@
|
|
|
19
19
|
"type": "plugin",
|
|
20
20
|
"skills": "skills/",
|
|
21
21
|
"guides": "guides/",
|
|
22
|
-
"version": "0.9.
|
|
22
|
+
"version": "0.9.38",
|
|
23
23
|
"commands": "commands/"
|
|
24
24
|
},
|
|
25
|
+
"bin": {
|
|
26
|
+
"rdc-skills-install": "scripts/install-rdc-skills.js",
|
|
27
|
+
"rdc-skills-self-test": "scripts/self-test.mjs"
|
|
28
|
+
},
|
|
25
29
|
"scripts": {
|
|
26
30
|
"install-rdc-skills": "node scripts/install-rdc-skills.js",
|
|
27
31
|
"uninstall:win": "powershell -ExecutionPolicy Bypass -File scripts/uninstall.ps1",
|
|
@@ -766,8 +766,12 @@ async function main() {
|
|
|
766
766
|
console.log('');
|
|
767
767
|
|
|
768
768
|
if (!fs.existsSync(claudeHome)) {
|
|
769
|
-
|
|
770
|
-
|
|
769
|
+
fs.mkdirSync(claudeHome, { recursive: true });
|
|
770
|
+
warn(`CLAUDE_HOME did not exist — created ${claudeHome}`);
|
|
771
|
+
}
|
|
772
|
+
if (!fs.existsSync(settingsPath)) {
|
|
773
|
+
writeJson(settingsPath, {});
|
|
774
|
+
info(` created settings.json`);
|
|
771
775
|
}
|
|
772
776
|
|
|
773
777
|
// Read version + git SHA once
|
package/skills/build/SKILL.md
CHANGED
|
@@ -301,8 +301,8 @@ Read the task title and description, then:
|
|
|
301
301
|
⚠️ The validator does NOT use `isolation: "worktree"` — it must read the fully merged develop branch. Omit the isolation parameter for this dispatch only.
|
|
302
302
|
|
|
303
303
|
```
|
|
304
|
-
"Read
|
|
305
|
-
Read
|
|
304
|
+
"Read {PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md then {PROJECT_ROOT}/.rdc/guides/verify.md.
|
|
305
|
+
Read {PROJECT_ROOT}/.rdc/guides/engineering-behavior.md before validating scope, deviations, and evidence.
|
|
306
306
|
Validate these work items: [list of IDs and titles].
|
|
307
307
|
Apps touched: [list].
|
|
308
308
|
Git diff since build start: [attach or reference].
|
|
@@ -110,7 +110,7 @@ the source of truth.
|
|
|
110
110
|
"skill": "rdc:review",
|
|
111
111
|
"task": "Audit the current diff for regressions before merge.",
|
|
112
112
|
"context": {
|
|
113
|
-
"repo": "
|
|
113
|
+
"repo": "{PROJECT_ROOT}",
|
|
114
114
|
"work_item_id": "<optional-uuid>",
|
|
115
115
|
"branch": "develop",
|
|
116
116
|
"owned_files": []
|
package/skills/deploy/SKILL.md
CHANGED
|
@@ -66,10 +66,10 @@ Template selection:
|
|
|
66
66
|
|
|
67
67
|
```
|
|
68
68
|
rdc:deploy new: <slug>
|
|
69
|
-
[ ] .dockerignore present at
|
|
69
|
+
[ ] .dockerignore present at project root (`ls {PROJECT_ROOT}/.dockerignore` — STOP if missing)
|
|
70
70
|
[ ] Template loaded from docs/runbooks/coolify-app-templates.json (pick nextjs-app / static-site / mcp-server)
|
|
71
71
|
[ ] Required vars substituted: NAME, APP_PATH, DOMAIN, BRANCH, PROJECT_UUID, ENVIRONMENT_UUID [+ TURBO_FILTER / PORT]
|
|
72
|
-
[ ] DNS path chosen (A:
|
|
72
|
+
[ ] DNS path chosen (A: staging wildcard B: apex C: other zone)
|
|
73
73
|
[ ] DNS record verified or wildcard confirmed
|
|
74
74
|
[ ] Cloudflare proxy setting correct for DNS path
|
|
75
75
|
[ ] Application created via POST /applications/private-github-app (template payload)
|
|
@@ -117,7 +117,7 @@ rdc:deploy audit: fleet scan
|
|
|
117
117
|
[ ] Env var drift (registry.env_vars_needed vs Coolify env)
|
|
118
118
|
[ ] Branch mismatches (Coolify git_branch ≠ expected)
|
|
119
119
|
[ ] Disk space on 64.237.54.189
|
|
120
|
-
[ ]
|
|
120
|
+
[ ] DNS/proxy misconfigs on configured staging wildcard
|
|
121
121
|
[ ] Duplicate apps (same repo, multiple UUIDs)
|
|
122
122
|
|
|
123
123
|
Findings:
|
|
@@ -145,39 +145,39 @@ _COOLIFY=$(curl -s http://127.0.0.1:52437/v/coolify-api)
|
|
|
145
145
|
|
|
146
146
|
# List applications
|
|
147
147
|
curl -s -H "Authorization: Bearer $_COOLIFY" \
|
|
148
|
-
|
|
148
|
+
"$DEPLOY_API_BASE/api/v1/applications"
|
|
149
149
|
|
|
150
150
|
# Get application details
|
|
151
151
|
curl -s -H "Authorization: Bearer $_COOLIFY" \
|
|
152
|
-
|
|
152
|
+
"$DEPLOY_API_BASE/api/v1/applications/<uuid>"
|
|
153
153
|
|
|
154
154
|
# Deploy (trigger)
|
|
155
155
|
curl -s -X POST -H "Authorization: Bearer $_COOLIFY" \
|
|
156
|
-
|
|
156
|
+
"$DEPLOY_API_BASE/api/v1/applications/<uuid>/deploy"
|
|
157
157
|
|
|
158
158
|
# Get deployment logs
|
|
159
159
|
curl -s -H "Authorization: Bearer $_COOLIFY" \
|
|
160
|
-
|
|
160
|
+
"$DEPLOY_API_BASE/api/v1/deployments/<deployment-id>"
|
|
161
161
|
|
|
162
162
|
# Set env var
|
|
163
163
|
curl -s -X POST -H "Authorization: Bearer $_COOLIFY" \
|
|
164
164
|
-H "Content-Type: application/json" \
|
|
165
165
|
-d '{"key":"<KEY>","value":"<VALUE>"}' \
|
|
166
|
-
|
|
166
|
+
"$DEPLOY_API_BASE/api/v1/applications/<uuid>/envs"
|
|
167
167
|
|
|
168
168
|
# Set watch_paths
|
|
169
169
|
curl -s -X PATCH -H "Authorization: Bearer $_COOLIFY" \
|
|
170
170
|
-H "Content-Type: application/json" \
|
|
171
171
|
-d '{"watch_paths":"apps/<name>/**\npackages/**"}' \
|
|
172
|
-
|
|
172
|
+
"$DEPLOY_API_BASE/api/v1/applications/<uuid>"
|
|
173
173
|
```
|
|
174
174
|
|
|
175
175
|
**Never print `$_COOLIFY` to stdout.** Inline from clauth only — do not assign raw strings.
|
|
176
176
|
|
|
177
177
|
If clauth daemon is not responding (`curl -s http://127.0.0.1:52437/ping` fails):
|
|
178
178
|
```
|
|
179
|
-
BLOCKED:
|
|
180
|
-
Fix:
|
|
179
|
+
BLOCKED: credential provider is not responding.
|
|
180
|
+
Fix: start the project's credential provider or configure deployment credentials through env vars, then retry.
|
|
181
181
|
I cannot proceed until this is resolved.
|
|
182
182
|
```
|
|
183
183
|
|
|
@@ -189,7 +189,7 @@ I cannot proceed until this is resolved.
|
|
|
189
189
|
```
|
|
190
190
|
Server UUID: ih386anenvvvn6fy1umtyow0
|
|
191
191
|
Server IP: 64.237.54.189
|
|
192
|
-
Dashboard:
|
|
192
|
+
Dashboard: <deployment-dashboard-url>
|
|
193
193
|
GitHub App UUID: xdmcy60putp5h9j7k4kwg9c3
|
|
194
194
|
```
|
|
195
195
|
|
package/skills/design/SKILL.md
CHANGED
|
@@ -19,7 +19,7 @@ RDC-owned design execution for Studio and LIFEAI interfaces. This skill is the S
|
|
|
19
19
|
|
|
20
20
|
- Studio, Palette Library, brand-token, theme, component, or live-editor work
|
|
21
21
|
- Any design task that must understand RDC's real token tables and Studio routes
|
|
22
|
-
- UI critique, audit, polish, colorize, type, layout, or craft work in `
|
|
22
|
+
- UI critique, audit, polish, colorize, type, layout, or craft work in `{PROJECT_ROOT}`
|
|
23
23
|
- Agent-side color-system exploration using Rampa CLI
|
|
24
24
|
- Preparing token-aware implementation instructions for frontend/backend/data agents
|
|
25
25
|
|
|
@@ -166,7 +166,7 @@ Project docs to read for Studio work:
|
|
|
166
166
|
8. **Verify.**
|
|
167
167
|
- Run scoped tests only.
|
|
168
168
|
- For Studio: prefer route smoke checks, token API checks, and browser screenshots when UI changed.
|
|
169
|
-
- For CLI prompt work: run `node
|
|
169
|
+
- For CLI prompt work: run `node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs <command> <brief>` and inspect the generated report under `.rdc/reports/rdc-design-cli/`.
|
|
170
170
|
|
|
171
171
|
## Command Menu
|
|
172
172
|
|
|
@@ -188,15 +188,15 @@ Project docs to read for Studio work:
|
|
|
188
188
|
Use the local helper to see exactly how much instruction text the skill is generating before sending it through an agent:
|
|
189
189
|
|
|
190
190
|
```powershell
|
|
191
|
-
node
|
|
192
|
-
node
|
|
193
|
-
node
|
|
191
|
+
node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs studio "audit the Studio palette page"
|
|
192
|
+
node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs palette "generate a PRT palette workflow"
|
|
193
|
+
node {RDC_SKILLS_ROOT}/scripts/rdc-design-cli.mjs --json theme "RDC earth-forward light theme"
|
|
194
194
|
```
|
|
195
195
|
|
|
196
196
|
The helper writes logs to:
|
|
197
197
|
|
|
198
198
|
```text
|
|
199
|
-
|
|
199
|
+
{RDC_SKILLS_ROOT}/.rdc/reports/rdc-design-cli/
|
|
200
200
|
```
|
|
201
201
|
|
|
202
202
|
Each run includes character count, word count, approximate token count, references loaded, and the final prompt text.
|
package/skills/fs-mcp/SKILL.md
CHANGED
|
@@ -11,7 +11,7 @@ description: "Usage `rdc:fs-mcp <task>` — Use the File System MCP bridge for l
|
|
|
11
11
|
# rdc:fs-mcp — File System MCP Bridge
|
|
12
12
|
|
|
13
13
|
## When to Use
|
|
14
|
-
- Claude.ai, Cowork, or another remote surface needs live access to `
|
|
14
|
+
- Claude.ai, Cowork, or another remote surface needs live access to `{PROJECT_ROOT}` through the File System MCP.
|
|
15
15
|
- You need to read, search, or list current local repo files without relying on GitHub freshness.
|
|
16
16
|
- You need to write a small/scratch file through FS MCP.
|
|
17
17
|
- You need to move a larger cloud file into the local repo.
|
|
@@ -88,7 +88,7 @@ Required Claude.ai handoff shape:
|
|
|
88
88
|
|
|
89
89
|
```json
|
|
90
90
|
{
|
|
91
|
-
"repo": "
|
|
91
|
+
"repo": "<owner>/<repo>",
|
|
92
92
|
"remote": "origin",
|
|
93
93
|
"ref": "claude-ai/docs-upload-123",
|
|
94
94
|
"paths": ["docs/plans/foo.md"],
|
package/skills/plan/SKILL.md
CHANGED
|
@@ -227,7 +227,7 @@ Q1. Which Coolify project does this app belong to?
|
|
|
227
227
|
→ Record: project_uuid + environment_uuid (staging or production)
|
|
228
228
|
|
|
229
229
|
Q2. What is the domain?
|
|
230
|
-
→
|
|
230
|
+
→ staging wildcard subdomain? (staging / internal tools)
|
|
231
231
|
→ Custom subdomain on an existing zone? (e.g. app.regendevcorp.com)
|
|
232
232
|
→ Apex domain? (e.g. place.fund itself)
|
|
233
233
|
→ Domain on a different zone entirely? (e.g. skymesasouth.com)
|
|
@@ -238,7 +238,7 @@ Q3. Is this domain already in our Cloudflare account?
|
|
|
238
238
|
→ If NS not delegated to Cloudflare: A record in Cloudflare does nothing — must go to registrar
|
|
239
239
|
|
|
240
240
|
Q4. Does this app need Cloudflare proxy (orange cloud)?
|
|
241
|
-
→
|
|
241
|
+
→ Traefik/Let's Encrypt HTTP-01 staging wildcards are often safest unproxied; verify your platform's DNS requirements.
|
|
242
242
|
→ Custom domain needing DDoS/CDN: proxy OK only if SSL mode = Full (strict) + origin cert provisioned
|
|
243
243
|
→ Any doubt: start unproxied, add proxy after confirming SSL works
|
|
244
244
|
|