@lifeaitools/rdc-skills 0.8.7
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/settings.json +15 -0
- package/.claude-plugin/marketplace.json +21 -0
- package/.claude-plugin/plugin.json +11 -0
- package/.github/workflows/publish.yml +25 -0
- package/.github/workflows/self-test.yml +53 -0
- package/CHANGELOG.md +246 -0
- package/LICENSE +21 -0
- package/MANIFEST.md +190 -0
- package/README.md +188 -0
- package/README.sandbox.md +3 -0
- package/assets/watcher/viewer.html +164 -0
- package/commands/build.md +183 -0
- package/commands/collab.md +180 -0
- package/commands/deploy.md +138 -0
- package/commands/fixit.md +112 -0
- package/commands/handoff.md +173 -0
- package/commands/help.md +88 -0
- package/commands/overnight.md +220 -0
- package/commands/plan.md +158 -0
- package/commands/preplan.md +131 -0
- package/commands/prototype.md +145 -0
- package/commands/release.md +159 -0
- package/commands/report.md +99 -0
- package/commands/review.md +120 -0
- package/commands/self-test.md +107 -0
- package/commands/status.md +86 -0
- package/commands/watch.md +92 -0
- package/commands/workitems.md +132 -0
- package/guides/.gitkeep +0 -0
- package/guides/agent-bootstrap.md +191 -0
- package/guides/agents/backend.md +104 -0
- package/guides/agents/content.md +94 -0
- package/guides/agents/cs2.md +56 -0
- package/guides/agents/data.md +87 -0
- package/guides/agents/design.md +77 -0
- package/guides/agents/frontend.md +92 -0
- package/guides/agents/infrastructure.md +81 -0
- package/guides/agents/setup.md +279 -0
- package/guides/agents/verify.md +132 -0
- package/guides/agents/viz.md +106 -0
- package/guides/backend.md +146 -0
- package/guides/content.md +147 -0
- package/guides/cs2.md +190 -0
- package/guides/data.md +123 -0
- package/guides/design.md +116 -0
- package/guides/frontend.md +151 -0
- package/guides/infrastructure.md +179 -0
- package/guides/output-contract.md +98 -0
- package/hooks/no-stop-open-epics.js +125 -0
- package/package.json +31 -0
- package/rules/work-items-rpc.md +399 -0
- package/scripts/install-rdc-skills.js +559 -0
- package/scripts/install.ps1 +165 -0
- package/scripts/install.sh +132 -0
- package/scripts/lib/assertions.mjs +264 -0
- package/scripts/lib/manifest-schema.mjs +607 -0
- package/scripts/lib/runner.mjs +429 -0
- package/scripts/lib/sandbox.mjs +435 -0
- package/scripts/self-test.mjs +1108 -0
- package/scripts/uninstall.ps1 +77 -0
- package/scripts/uninstall.sh +69 -0
- package/scripts/update.ps1 +43 -0
- package/scripts/update.sh +43 -0
- package/scripts/watch-init.mjs +100 -0
- package/skills/.gitkeep +0 -0
- package/skills/build/SKILL.md +238 -0
- package/skills/collab/SKILL.md +218 -0
- package/skills/deploy/SKILL.md +144 -0
- package/skills/fixit/SKILL.md +112 -0
- package/skills/handoff/SKILL.md +175 -0
- package/skills/help/SKILL.md +101 -0
- package/skills/overnight/SKILL.md +220 -0
- package/skills/plan/SKILL.md +96 -0
- package/skills/preplan/SKILL.md +87 -0
- package/skills/prototype/SKILL.md +151 -0
- package/skills/release/SKILL.md +221 -0
- package/skills/report/SKILL.md +101 -0
- package/skills/review/SKILL.md +120 -0
- package/skills/self-test/SKILL.md +127 -0
- package/skills/status/SKILL.md +86 -0
- package/skills/tests/README.md +29 -0
- package/skills/tests/rdc-build.test.json +22 -0
- package/skills/tests/rdc-deploy.test.json +15 -0
- package/skills/tests/rdc-fixit.test.json +21 -0
- package/skills/tests/rdc-handoff.test.json +14 -0
- package/skills/tests/rdc-overnight.test.json +21 -0
- package/skills/tests/rdc-plan.test.json +14 -0
- package/skills/tests/rdc-preplan.test.json +15 -0
- package/skills/tests/rdc-prototype.test.json +14 -0
- package/skills/tests/rdc-release.test.json +15 -0
- package/skills/tests/rdc-report.test.json +14 -0
- package/skills/tests/rdc-review.test.json +14 -0
- package/skills/tests/rdc-status.test.json +16 -0
- package/skills/tests/rdc-workitems.test.json +15 -0
- package/skills/watch/SKILL.md +92 -0
- package/skills/workitems/SKILL.md +147 -0
- package/tests/validate-skills.js +183 -0
package/guides/design.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Design Agent Guide — Base
|
|
2
|
+
> Role-based context for design system, branding, and visual agents. Generic patterns across projects.
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Design Principles
|
|
7
|
+
|
|
8
|
+
Projects typically define core design principles. Check the overlay for:
|
|
9
|
+
- Philosophy guiding all visual decisions
|
|
10
|
+
- Accessibility standards
|
|
11
|
+
- Motion/animation philosophy
|
|
12
|
+
- Dark/light mode strategy
|
|
13
|
+
- Tone and voice guidelines
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Brand Palettes
|
|
18
|
+
|
|
19
|
+
The project specifies:
|
|
20
|
+
- Primary colors per brand
|
|
21
|
+
- Accent/secondary colors
|
|
22
|
+
- Neutrals and grays
|
|
23
|
+
- Dark mode vs light mode variations
|
|
24
|
+
- Color semantics (error, success, warning, etc.)
|
|
25
|
+
|
|
26
|
+
Check the overlay for exact hex values and CSS variable names.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Token Inheritance / Design Tokens
|
|
31
|
+
|
|
32
|
+
Some projects use design token systems. The overlay specifies:
|
|
33
|
+
- Whether tokens are centralized or distributed
|
|
34
|
+
- How tokens are versioned
|
|
35
|
+
- Export formats (JSON, CSS, Figma, etc.)
|
|
36
|
+
- Token hierarchy and relationships
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Typography
|
|
41
|
+
|
|
42
|
+
The project specifies:
|
|
43
|
+
- Primary UI font(s)
|
|
44
|
+
- Display/heading font
|
|
45
|
+
- Mono font for code
|
|
46
|
+
- Type scale (sizes and weights)
|
|
47
|
+
- Line heights and letter spacing
|
|
48
|
+
|
|
49
|
+
Never hardcode `font-family` — always use tokens or CSS variables.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Component Variant Axes
|
|
54
|
+
|
|
55
|
+
Most design systems define variant axes. Check overlay for which axes apply:
|
|
56
|
+
- Brand / product line
|
|
57
|
+
- Visual style (default, minimal, heritage, etc.)
|
|
58
|
+
- Size and density
|
|
59
|
+
- Shape (rounded, sharp, pill, etc.)
|
|
60
|
+
- Motion (static, subtle, rich)
|
|
61
|
+
- State (default, hover, disabled, etc.)
|
|
62
|
+
|
|
63
|
+
Every component should support relevant axes on day one.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## OG Images / Social Cards
|
|
68
|
+
|
|
69
|
+
The project specifies:
|
|
70
|
+
- Dimensions (1200×630 is standard)
|
|
71
|
+
- Format (PNG, JPG)
|
|
72
|
+
- Design spec (fonts, colors, layout)
|
|
73
|
+
- Generation process (Python/Pillow, Node, etc.)
|
|
74
|
+
- File location and naming convention
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Asset Organization
|
|
79
|
+
|
|
80
|
+
The project specifies:
|
|
81
|
+
- Where to store images (folder structure)
|
|
82
|
+
- Naming convention (kebab-case patterns)
|
|
83
|
+
- File formats (WebP for photos, SVG for icons, etc.)
|
|
84
|
+
- Optimization requirements
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Animation and Motion
|
|
89
|
+
|
|
90
|
+
The project specifies:
|
|
91
|
+
- Whether animations are used (CRUD vs public pages)
|
|
92
|
+
- Motion library (Framer, Aceternity, custom, etc.)
|
|
93
|
+
- Easing and duration tokens
|
|
94
|
+
- `prefers-reduced-motion` compliance
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Accessibility
|
|
99
|
+
|
|
100
|
+
The project specifies:
|
|
101
|
+
- WCAG compliance level (A, AA, AAA)
|
|
102
|
+
- Color contrast requirements
|
|
103
|
+
- Focus indicators
|
|
104
|
+
- Keyboard navigation patterns
|
|
105
|
+
- Screen reader expectations
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Specialist Context — Read Project Overlay
|
|
110
|
+
|
|
111
|
+
Your task may require reading additional project-specific guides for:
|
|
112
|
+
- Brand system architecture (token inheritance, export)
|
|
113
|
+
- OG image generation scripts
|
|
114
|
+
- Design token tools and workflows
|
|
115
|
+
- Specific app brand palettes
|
|
116
|
+
- Component inventory and patterns
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Frontend Agent Guide — Base
|
|
2
|
+
> Role-based context for frontend/UI agents. Generic patterns across projects.
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Core Import Rule
|
|
7
|
+
|
|
8
|
+
**ALWAYS import from the project's component library.** NEVER import directly from headless UI libraries, animation libs, or icon libraries.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
// Correct (project import)
|
|
12
|
+
import { Button, DataTable, Card } from "@project/ui";
|
|
13
|
+
|
|
14
|
+
// Wrong - never do this
|
|
15
|
+
import { Button } from "@/components/ui/button";
|
|
16
|
+
import { motion } from "framer-motion";
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
The project overlay will specify the exact import path.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Component Tier Architecture
|
|
24
|
+
|
|
25
|
+
Most projects organize components into tiers. Check the project overlay for:
|
|
26
|
+
- **Tier 1** — Headless/primitive components (forms, layout, data)
|
|
27
|
+
- **Tier 2** — Domain-specific components (app-specific business logic UI)
|
|
28
|
+
- **Tier 3** — Animated effects (hero sections, public pages)
|
|
29
|
+
- **Tier 4** — Brand/personality components (marketing, accent effects)
|
|
30
|
+
|
|
31
|
+
Use the right tier for the context:
|
|
32
|
+
- CRUD/admin UI → Tiers 1-2
|
|
33
|
+
- Public/marketing pages → Tiers 3-4
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Component Creation Contract
|
|
38
|
+
|
|
39
|
+
All new components must follow the standard contract:
|
|
40
|
+
|
|
41
|
+
```tsx
|
|
42
|
+
"use client"; // only if uses hooks/browser APIs
|
|
43
|
+
import * as React from "react";
|
|
44
|
+
import { cn } from "../lib/utils"; // from project's UI lib
|
|
45
|
+
|
|
46
|
+
interface MyComponentProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
47
|
+
variant?: "default" | "outline";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const MyComponent = React.forwardRef<HTMLDivElement, MyComponentProps>(
|
|
51
|
+
({ className, variant = "default", ...props }, ref) => (
|
|
52
|
+
<div ref={ref} className={cn("base-classes", className)} {...props} />
|
|
53
|
+
)
|
|
54
|
+
);
|
|
55
|
+
MyComponent.displayName = "MyComponent";
|
|
56
|
+
export { MyComponent };
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Then re-export from the project's index. Placement:
|
|
60
|
+
- Generic UI: `packages/ui/src/components/`
|
|
61
|
+
- Animated effects: `packages/ui/src/components/effects/` or similar subdirectory
|
|
62
|
+
- Brand accents: `packages/ui/src/components/brand/` or similar
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Variant Axes — Every Component
|
|
67
|
+
|
|
68
|
+
Every component must support variant axes. Use CVA (class-variance-authority) or equivalent.
|
|
69
|
+
|
|
70
|
+
| Axis | Examples | When it matters |
|
|
71
|
+
|------|----------|----------------|
|
|
72
|
+
| Brand | app-specific brands | Every component |
|
|
73
|
+
| Visual style | default / heritage / minimal / quiet | Different expression per context |
|
|
74
|
+
| Size | xs / sm / md / lg / xl / 2xl | Hero ≠ sidebar |
|
|
75
|
+
| Shape | sharp / soft / pill / circle | Cards, buttons, badges |
|
|
76
|
+
| Density | compact / comfortable / spacious | Data-heavy vs editorial |
|
|
77
|
+
| State | default / hover / active / disabled / loading | Interactive components |
|
|
78
|
+
|
|
79
|
+
Every custom component ships with its variant matrix on day one.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Styling Rules
|
|
84
|
+
|
|
85
|
+
- **Tailwind utility classes only** — never inline styles
|
|
86
|
+
- **Never hardcode colors** — always use CSS variables from the project
|
|
87
|
+
- **Class merging** via `cn()` from project's UI library
|
|
88
|
+
- **No Tailwind conflicts** — use design tokens for everything
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## Typography
|
|
93
|
+
|
|
94
|
+
Never hardcode `font-family` — use CSS variables or Tailwind classes.
|
|
95
|
+
|
|
96
|
+
The project overlay specifies:
|
|
97
|
+
- Primary UI font
|
|
98
|
+
- Display/heading font
|
|
99
|
+
- Mono font for code
|
|
100
|
+
- Type scale (text-xs through text-4xl)
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Tailwind Rules
|
|
105
|
+
|
|
106
|
+
- **Content paths** -- every `tailwind.config.ts` must include the project's UI package
|
|
107
|
+
- **Class merging** -- always use `cn()` from project's UI library
|
|
108
|
+
- **Colors** -- CSS variables only, never hardcode hex
|
|
109
|
+
- **Spacing** -- 4px scale (or project-specific)
|
|
110
|
+
- **Border radius** -- use project's radius token
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Asset Handling
|
|
115
|
+
|
|
116
|
+
The project specifies folder structure, naming convention, and usage patterns.
|
|
117
|
+
|
|
118
|
+
General pattern:
|
|
119
|
+
- Store in `apps/[app]/public/images/[category]/`
|
|
120
|
+
- Naming: `[type]-[name]-[variant].[ext]` (lowercase kebab-case)
|
|
121
|
+
- Always use framework Image component with `width`, `height`, `alt`
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## Next.js / React-Specific Patterns
|
|
126
|
+
|
|
127
|
+
Check project overlay for:
|
|
128
|
+
- Framework version (Next.js 13/14, React 18/19, etc.)
|
|
129
|
+
- App Router vs Pages Router
|
|
130
|
+
- Dynamic import patterns for browser-only libs
|
|
131
|
+
- transpilePackages config for monorepo
|
|
132
|
+
- Middleware patterns
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## Dependencies Managed by Project UI Library
|
|
137
|
+
|
|
138
|
+
Most dependencies (Radix, TanStack, recharts, framer-motion, CodeMirror, etc.) are managed by the project's UI package. Apps don't install them separately.
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Specialist Context — Read Project Overlay
|
|
143
|
+
|
|
144
|
+
Your task may require reading additional project-specific rule files.
|
|
145
|
+
|
|
146
|
+
The project overlay will indicate what specialized guides are needed for:
|
|
147
|
+
- Brand system work
|
|
148
|
+
- Design token inheritance
|
|
149
|
+
- Specific app pages or routes
|
|
150
|
+
- Image/asset handling
|
|
151
|
+
- OG image generation
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Infrastructure Agent Guide — Base
|
|
2
|
+
> Role-based context for infra/deployment/DevOps agents. Generic patterns across projects.
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Rule 1: NEVER Work Around Broken Infrastructure
|
|
7
|
+
|
|
8
|
+
When a service is unavailable, STOP and report BLOCKED. Do not:
|
|
9
|
+
- Use curl when service APIs are down
|
|
10
|
+
- Use workarounds or alternative approaches
|
|
11
|
+
- Skip verification steps
|
|
12
|
+
- Assume service will return to normal
|
|
13
|
+
|
|
14
|
+
**Report immediately:**
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
BLOCKED: [service name] is not responding.
|
|
18
|
+
|
|
19
|
+
Fix: [specific action for your project's infrastructure stack]
|
|
20
|
+
|
|
21
|
+
I cannot proceed until this is resolved.
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Deployment Tools
|
|
27
|
+
|
|
28
|
+
Check project overlay for:
|
|
29
|
+
- Primary deployment platform (Coolify, Vercel, AWS, GCP, etc.)
|
|
30
|
+
- MCP connectors or REST API access
|
|
31
|
+
- Authentication method (API token, OAuth, etc.)
|
|
32
|
+
- Credential location (clauth daemon, env vars, etc.)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Server Infrastructure
|
|
37
|
+
|
|
38
|
+
The project specifies:
|
|
39
|
+
- Server IP/hostname
|
|
40
|
+
- Dashboard URL
|
|
41
|
+
- Default region/availability zones
|
|
42
|
+
- Server/environment IDs (UUIDs or identifiers)
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## DNS Rules
|
|
47
|
+
|
|
48
|
+
The project specifies:
|
|
49
|
+
- Wildcard DNS patterns vs individual records
|
|
50
|
+
- Cloudflare or other DNS provider
|
|
51
|
+
- Proxy rules (orange cloud, DNS-only, etc.)
|
|
52
|
+
- SSL/TLS provisioning method
|
|
53
|
+
|
|
54
|
+
Check overlay for **critical rules** — DNS misconfigurations break deployments.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Deployment Registry
|
|
59
|
+
|
|
60
|
+
The project likely has a registry/database table tracking all deployments. Before ANY deploy, verify:
|
|
61
|
+
```
|
|
62
|
+
Lookup: <slug> or <domain>
|
|
63
|
+
Returns: UUID, repo location, build command, build type, domain, status
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
**NEVER guess** UUIDs, domains, or build commands. Always look them up.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Watch Paths
|
|
71
|
+
|
|
72
|
+
For monorepo deploys, the project specifies:
|
|
73
|
+
- Watch path patterns per app type
|
|
74
|
+
- Why watch paths matter (prevents unnecessary rebuilds)
|
|
75
|
+
- How to set watch paths (usually via API or config)
|
|
76
|
+
|
|
77
|
+
Without correct watch paths, every push triggers ALL apps to rebuild.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Build Types
|
|
82
|
+
|
|
83
|
+
The project specifies supported build types:
|
|
84
|
+
- Next.js monorepo
|
|
85
|
+
- Vite / Node
|
|
86
|
+
- Static HTML
|
|
87
|
+
- Docker
|
|
88
|
+
- etc.
|
|
89
|
+
|
|
90
|
+
Check overlay for:
|
|
91
|
+
- Build pack (nixpacks, docker, static, etc.)
|
|
92
|
+
- Required environment variables
|
|
93
|
+
- Node version constraints
|
|
94
|
+
- Build command and install command
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Environment Tiers
|
|
99
|
+
|
|
100
|
+
The project specifies deployment environments:
|
|
101
|
+
- **development** -- free to experiment
|
|
102
|
+
- **staging** -- test before production
|
|
103
|
+
- **production** -- live traffic, needs confirmation
|
|
104
|
+
|
|
105
|
+
Check overlay for which tier each app is in and confirmation requirements.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Deploy Checklist
|
|
110
|
+
|
|
111
|
+
Standard pattern:
|
|
112
|
+
1. Check git status (divergence, unpushed commits)
|
|
113
|
+
2. Confirm with user (especially for production)
|
|
114
|
+
3. Push to trigger auto-deploy (if webhook configured)
|
|
115
|
+
4. Verify deployment success (health check, status endpoint)
|
|
116
|
+
5. Check cache headers (if behind CDN)
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## New App Deployment
|
|
121
|
+
|
|
122
|
+
The project specifies:
|
|
123
|
+
- DNS pattern (wildcard subdomains vs custom domains)
|
|
124
|
+
- Coolify/deployment platform setup
|
|
125
|
+
- GitHub repo connection
|
|
126
|
+
- Watch paths configuration
|
|
127
|
+
- Registry update requirement
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Credential Safety
|
|
132
|
+
|
|
133
|
+
- MCP connectors first (if available)
|
|
134
|
+
- clauth daemon second (localhost:52437)
|
|
135
|
+
- Never print keys to stdout
|
|
136
|
+
- Never hardcode credentials
|
|
137
|
+
- Never ask user for keys
|
|
138
|
+
- If daemon is down: report BLOCKED
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Git Workflow
|
|
143
|
+
|
|
144
|
+
The project specifies:
|
|
145
|
+
- Primary branch for features (develop, main, etc.)
|
|
146
|
+
- Force-push rules (usually: NEVER force-push main)
|
|
147
|
+
- Commit message format
|
|
148
|
+
- Auto-commit patterns
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Service Health Checks
|
|
153
|
+
|
|
154
|
+
The project specifies how to health-check each service:
|
|
155
|
+
- Ping endpoint
|
|
156
|
+
- Status endpoint
|
|
157
|
+
- Log location
|
|
158
|
+
- Fallback if primary method fails
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## Troubleshooting Patterns
|
|
163
|
+
|
|
164
|
+
The project specifies common issues and fixes:
|
|
165
|
+
- 502/503 errors (check container logs, port mismatch)
|
|
166
|
+
- Disk full (clean Docker cache)
|
|
167
|
+
- SSL provisioning failures (check DNS config)
|
|
168
|
+
- Build failures (check environment variables, Node version)
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Specialist Context — Read Project Overlay
|
|
173
|
+
|
|
174
|
+
Your task may require reading additional project-specific guides for:
|
|
175
|
+
- Full deployment registry schema
|
|
176
|
+
- Complete DNS rules (critical for subdomains)
|
|
177
|
+
- Build type details
|
|
178
|
+
- CI/CD pipeline configuration
|
|
179
|
+
- Scaling and performance tuning
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# RDC Skill Output Contract
|
|
2
|
+
> Every `rdc:*` skill MUST follow this contract. Non-negotiable.
|
|
3
|
+
|
|
4
|
+
## Why
|
|
5
|
+
|
|
6
|
+
The user has zero visibility when skills narrate tool calls and dump raw output.
|
|
7
|
+
A wall of JSON, MCP responses, and "let me check X..." chatter buries the one
|
|
8
|
+
thing they need: **is this working or not, and what step are we on?**
|
|
9
|
+
|
|
10
|
+
## The contract
|
|
11
|
+
|
|
12
|
+
1. **One checklist per invocation.** Show it upfront, update it in place as items
|
|
13
|
+
progress, print it again at the end with a 1-line verdict.
|
|
14
|
+
|
|
15
|
+
2. **Checklist markers:**
|
|
16
|
+
- `[ ]` pending
|
|
17
|
+
- `[~]` in progress (currently executing)
|
|
18
|
+
- `[x]` done
|
|
19
|
+
- `[!]` failed
|
|
20
|
+
- `[-]` skipped (with one-word reason in parens)
|
|
21
|
+
|
|
22
|
+
3. **NO narration of tool calls.** Forbidden phrases: "Let me...", "I'll check...",
|
|
23
|
+
"Now reading...", "Let me fetch...", "Let me verify...". Tool calls happen
|
|
24
|
+
silently. The checklist is the communication channel.
|
|
25
|
+
|
|
26
|
+
4. **NO raw tool output in chat.** No MCP JSON, no log dumps, no UUIDs, no
|
|
27
|
+
SQL result tables, no curl bodies — unless a checklist item explicitly asks
|
|
28
|
+
for one (e.g., "show HTTP status"). Everything else is consumed silently and
|
|
29
|
+
folded into checklist state.
|
|
30
|
+
|
|
31
|
+
5. **Failures are one sentence.** When `[!]` fires, print ONE sentence on what
|
|
32
|
+
failed and what you're doing about it. Stack traces, full error messages,
|
|
33
|
+
and debug dumps go in memory, not in chat.
|
|
34
|
+
|
|
35
|
+
6. **Verdict line.** End every invocation with one line:
|
|
36
|
+
- `✅ <skill>: <outcome> in Nm Ns`
|
|
37
|
+
- `⚠️ <skill>: <N findings> — <next action>`
|
|
38
|
+
- `❌ <skill>: <one-sentence reason>`
|
|
39
|
+
|
|
40
|
+
7. **Interactive checklists only when human input is required.** If the skill
|
|
41
|
+
needs a decision (pick an epic, confirm a destructive op), ask ONE question,
|
|
42
|
+
then resume.
|
|
43
|
+
|
|
44
|
+
8. **TaskCreate is internal.** If you use TaskCreate/TodoWrite for internal
|
|
45
|
+
tracking, that's fine — but the checklist shown to the user is the one
|
|
46
|
+
defined in the skill's markdown, not the raw task list.
|
|
47
|
+
|
|
48
|
+
## Template
|
|
49
|
+
|
|
50
|
+
Every skill invocation prints, in order:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
<Skill Name>: <one-line subject>
|
|
54
|
+
[ ] Step 1
|
|
55
|
+
[ ] Step 2
|
|
56
|
+
[ ] Step 3
|
|
57
|
+
...
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Then executes silently, re-rendering the checklist when state changes (tools
|
|
61
|
+
like CLI agents that stream output should refresh in place). At the end:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
<Skill Name>: <one-line subject>
|
|
65
|
+
[x] Step 1
|
|
66
|
+
[x] Step 2
|
|
67
|
+
[x] Step 3
|
|
68
|
+
✅ <verdict>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## What the skill may additionally emit
|
|
72
|
+
|
|
73
|
+
- **One question at a time** when input is required
|
|
74
|
+
- **One-sentence status updates** at major state transitions (optional)
|
|
75
|
+
- **Final artifacts** if the skill's output is itself a file/report/diff — link,
|
|
76
|
+
don't inline the full content
|
|
77
|
+
|
|
78
|
+
## What the skill MUST NOT emit
|
|
79
|
+
|
|
80
|
+
- Tool call narration
|
|
81
|
+
- Raw MCP responses
|
|
82
|
+
- JSON dumps
|
|
83
|
+
- Log tails
|
|
84
|
+
- SQL result grids
|
|
85
|
+
- UUIDs unless asked
|
|
86
|
+
- "I'm going to..." preambles
|
|
87
|
+
- "Let me now..." transitions
|
|
88
|
+
- Summaries of what just happened (the checklist shows it)
|
|
89
|
+
- Apologies for verbosity
|
|
90
|
+
|
|
91
|
+
## Enforcement
|
|
92
|
+
|
|
93
|
+
If a skill violates this contract, the user will say "squelch" — at which point
|
|
94
|
+
any in-flight narration stops, only the checklist + verdict is shown for the
|
|
95
|
+
remainder of the session.
|
|
96
|
+
|
|
97
|
+
Skills SHOULD self-enforce by treating every tool call as silent and every
|
|
98
|
+
user-facing emission as a deliberate checklist update.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Stop hook — block Claude from stopping when open epics exist.
|
|
4
|
+
*
|
|
5
|
+
* Fires on every Stop event where Claude decided to end_turn.
|
|
6
|
+
* Queries get_open_epics() via Supabase REST.
|
|
7
|
+
* Only blocks if epics with status=todo exist — in_progress means another session owns them.
|
|
8
|
+
* Only fires in the regen-root project (scope guard on event.cwd).
|
|
9
|
+
*
|
|
10
|
+
* Exit codes:
|
|
11
|
+
* 0 = allow stop
|
|
12
|
+
* 2 = block stop (todo epics remain)
|
|
13
|
+
*
|
|
14
|
+
* PROJECT CONFIG REQUIRED in .env.local:
|
|
15
|
+
* NEXT_PUBLIC_SUPABASE_URL=https://<ref>.supabase.co
|
|
16
|
+
* NEXT_PUBLIC_SUPABASE_ANON_KEY=<key>
|
|
17
|
+
*
|
|
18
|
+
* PROJECT SCOPE in package.json or plugin config:
|
|
19
|
+
* "hookScope": "regen-root" ← folder name that must appear in event.cwd
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
const fs = require('fs');
|
|
23
|
+
const path = require('path');
|
|
24
|
+
|
|
25
|
+
// ── Config — override these per project ──────────────────────────────────────
|
|
26
|
+
|
|
27
|
+
const PROJECT_SCOPE = 'regen-root'; // only block in sessions inside this folder name
|
|
28
|
+
const OVERNIGHT_SENTINEL = 'C:/Dev/regen-root/.rdc/overnight.lock'; // only fire when this exists
|
|
29
|
+
const ENV_PATHS = [
|
|
30
|
+
'C:/Dev/regen-root/apps/rdc-marketing-engine/.env.local',
|
|
31
|
+
'C:/Dev/regen-root/.env.local',
|
|
32
|
+
];
|
|
33
|
+
const SUPABASE_URL = process.env.SUPABASE_URL || readEnvVar('NEXT_PUBLIC_SUPABASE_URL');
|
|
34
|
+
|
|
35
|
+
function readEnvVar(key) {
|
|
36
|
+
for (const p of ENV_PATHS) {
|
|
37
|
+
try {
|
|
38
|
+
const contents = fs.readFileSync(p, 'utf8');
|
|
39
|
+
const match = contents.match(new RegExp(`^${key}=(.+)$`, 'm'));
|
|
40
|
+
if (match) return match[1].trim();
|
|
41
|
+
} catch {}
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function getOpenEpics(anonKey, supabaseUrl) {
|
|
47
|
+
const url = `${supabaseUrl}/rest/v1/rpc/get_open_epics`;
|
|
48
|
+
const res = await fetch(url, {
|
|
49
|
+
method: 'POST',
|
|
50
|
+
headers: {
|
|
51
|
+
'Content-Type': 'application/json',
|
|
52
|
+
'apikey': anonKey,
|
|
53
|
+
'Authorization': `Bearer ${anonKey}`,
|
|
54
|
+
},
|
|
55
|
+
body: JSON.stringify({}),
|
|
56
|
+
});
|
|
57
|
+
if (!res.ok) return [];
|
|
58
|
+
const data = await res.json();
|
|
59
|
+
if (Array.isArray(data) && data.length > 0 && data[0].get_open_epics) {
|
|
60
|
+
return data[0].get_open_epics;
|
|
61
|
+
}
|
|
62
|
+
if (Array.isArray(data)) return data;
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
async function main() {
|
|
67
|
+
let event = {};
|
|
68
|
+
try {
|
|
69
|
+
const raw = fs.readFileSync('/dev/stdin', 'utf8');
|
|
70
|
+
event = JSON.parse(raw);
|
|
71
|
+
} catch {}
|
|
72
|
+
|
|
73
|
+
// Scope guard — only apply to sessions inside PROJECT_SCOPE folder
|
|
74
|
+
const cwd = event.cwd || process.cwd();
|
|
75
|
+
const normalised = cwd.replace(/\\/g, '/').toLowerCase();
|
|
76
|
+
if (!normalised.includes(PROJECT_SCOPE.toLowerCase())) {
|
|
77
|
+
process.exit(0);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Overnight gate — only block when rdc:overnight is actively running.
|
|
81
|
+
// The overnight skill creates this sentinel at start and removes it on exit.
|
|
82
|
+
// Interactive sessions never see this file, so they stop freely.
|
|
83
|
+
if (!fs.existsSync(OVERNIGHT_SENTINEL)) {
|
|
84
|
+
process.exit(0);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Only block Claude's own end_turn — never block user-forced stops
|
|
88
|
+
const stopReason = event.stop_reason || event.reason || '';
|
|
89
|
+
if (stopReason && stopReason !== 'end_turn') {
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const anonKey = readEnvVar('NEXT_PUBLIC_SUPABASE_ANON_KEY');
|
|
94
|
+
const supabaseUrl = SUPABASE_URL || readEnvVar('NEXT_PUBLIC_SUPABASE_URL');
|
|
95
|
+
if (!anonKey || !supabaseUrl) {
|
|
96
|
+
process.exit(0); // Can't verify — silent pass
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
let epics = [];
|
|
100
|
+
try {
|
|
101
|
+
epics = await getOpenEpics(anonKey, supabaseUrl);
|
|
102
|
+
} catch {
|
|
103
|
+
process.exit(0);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Only block on todo — in_progress means another session already owns it
|
|
107
|
+
const actionable = epics.filter(e => (e.status || '').toLowerCase() === 'todo');
|
|
108
|
+
|
|
109
|
+
if (actionable.length === 0) {
|
|
110
|
+
process.exit(0);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const titles = actionable.slice(0, 3).map(e => ` • [${e.priority}] ${e.title}`).join('\n');
|
|
114
|
+
const more = actionable.length > 3 ? `\n … and ${actionable.length - 3} more` : '';
|
|
115
|
+
|
|
116
|
+
process.stderr.write(
|
|
117
|
+
`\n🚫 STOP BLOCKED — ${actionable.length} open epic(s) remain in queue:\n${titles}${more}\n\n` +
|
|
118
|
+
`Continue working. Pick the highest-priority epic and proceed.\n` +
|
|
119
|
+
`Only stop when get_open_epics() returns empty.\n\n`
|
|
120
|
+
);
|
|
121
|
+
|
|
122
|
+
process.exit(2);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
main().catch(() => process.exit(0));
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lifeaitools/rdc-skills",
|
|
3
|
+
"version": "0.8.7",
|
|
4
|
+
"description": "RDC typed-agent dispatch skill suite for Claude Code — plan, build, review, overnight builds",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"claude-code",
|
|
7
|
+
"claude-code-plugin",
|
|
8
|
+
"rdc",
|
|
9
|
+
"skills",
|
|
10
|
+
"ai-agents"
|
|
11
|
+
],
|
|
12
|
+
"author": "LIFEAI",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/LIFEAI/rdc-skills.git"
|
|
17
|
+
},
|
|
18
|
+
"claude": {
|
|
19
|
+
"type": "plugin",
|
|
20
|
+
"skills": "skills/",
|
|
21
|
+
"guides": "guides/",
|
|
22
|
+
"version": "0.8.7",
|
|
23
|
+
"commands": "commands/"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"install-rdc-skills": "node scripts/install-rdc-skills.js",
|
|
27
|
+
"uninstall:win": "powershell -ExecutionPolicy Bypass -File scripts/uninstall.ps1",
|
|
28
|
+
"uninstall:unix": "bash scripts/uninstall.sh",
|
|
29
|
+
"validate": "node tests/validate-skills.js"
|
|
30
|
+
}
|
|
31
|
+
}
|