mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-03-30 13:43:26 +08:00
Compare commits
34 Commits
7713ceeec0
...
v1.8.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1797e79129 | ||
|
|
1f8b3eaba7 | ||
|
|
d1f44e89e2 | ||
|
|
5fe40f4a63 | ||
|
|
c4a5a69dbd | ||
|
|
5e1472263d | ||
|
|
61485f91ad | ||
|
|
57eb9361db | ||
|
|
98643ef6e6 | ||
|
|
f94707d429 | ||
|
|
48b883d741 | ||
|
|
32e9c293f0 | ||
|
|
cd129edef0 | ||
|
|
9dc76fd27b | ||
|
|
3260c7449e | ||
|
|
66143eaf74 | ||
|
|
ada4cd75a3 | ||
|
|
adc0f67008 | ||
|
|
3bfd29bb46 | ||
|
|
1df0a53f22 | ||
|
|
912df24f4a | ||
|
|
e000bbe5e4 | ||
|
|
bc64712b5d | ||
|
|
5818e8adc7 | ||
|
|
2d3be88bb5 | ||
|
|
87a2ed51dc | ||
|
|
b68558d749 | ||
|
|
1fa22efd90 | ||
|
|
dc8455dd10 | ||
|
|
b3d3eac532 | ||
|
|
706ee80069 | ||
|
|
87fc2d5089 | ||
|
|
2d9cc5c336 | ||
|
|
b21596de20 |
85
.agents/skills/article-writing/SKILL.md
Normal file
85
.agents/skills/article-writing/SKILL.md
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
name: article-writing
|
||||
description: Write articles, guides, blog posts, tutorials, newsletter issues, and other long-form content in a distinctive voice derived from supplied examples or brand guidance. Use when the user wants polished written content longer than a paragraph, especially when voice consistency, structure, and credibility matter.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Article Writing
|
||||
|
||||
Write long-form content that sounds like a real person or brand, not generic AI output.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- drafting blog posts, essays, launch posts, guides, tutorials, or newsletter issues
|
||||
- turning notes, transcripts, or research into polished articles
|
||||
- matching an existing founder, operator, or brand voice from examples
|
||||
- tightening structure, pacing, and evidence in already-written long-form copy
|
||||
|
||||
## Core Rules
|
||||
|
||||
1. Lead with the concrete thing: example, output, anecdote, number, screenshot description, or code block.
|
||||
2. Explain after the example, not before.
|
||||
3. Prefer short, direct sentences over padded ones.
|
||||
4. Use specific numbers when available and sourced.
|
||||
5. Never invent biographical facts, company metrics, or customer evidence.
|
||||
|
||||
## Voice Capture Workflow
|
||||
|
||||
If the user wants a specific voice, collect one or more of:
|
||||
- published articles
|
||||
- newsletters
|
||||
- X / LinkedIn posts
|
||||
- docs or memos
|
||||
- a short style guide
|
||||
|
||||
Then extract:
|
||||
- sentence length and rhythm
|
||||
- whether the voice is formal, conversational, or sharp
|
||||
- favored rhetorical devices such as parentheses, lists, fragments, or questions
|
||||
- tolerance for humor, opinion, and contrarian framing
|
||||
- formatting habits such as headers, bullets, code blocks, and pull quotes
|
||||
|
||||
If no voice references are given, default to a direct, operator-style voice: concrete, practical, and low on hype.
|
||||
|
||||
## Banned Patterns
|
||||
|
||||
Delete and rewrite any of these:
|
||||
- generic openings like "In today's rapidly evolving landscape"
|
||||
- filler transitions such as "Moreover" and "Furthermore"
|
||||
- hype phrases like "game-changer", "cutting-edge", or "revolutionary"
|
||||
- vague claims without evidence
|
||||
- biography or credibility claims not backed by provided context
|
||||
|
||||
## Writing Process
|
||||
|
||||
1. Clarify the audience and purpose.
|
||||
2. Build a skeletal outline with one purpose per section.
|
||||
3. Start each section with evidence, example, or scene.
|
||||
4. Expand only where the next sentence earns its place.
|
||||
5. Remove anything that sounds templated or self-congratulatory.
|
||||
|
||||
## Structure Guidance
|
||||
|
||||
### Technical Guides
|
||||
- open with what the reader gets
|
||||
- use code or terminal examples in every major section
|
||||
- end with concrete takeaways, not a soft summary
|
||||
|
||||
### Essays / Opinion Pieces
|
||||
- start with tension, contradiction, or a sharp observation
|
||||
- keep one argument thread per section
|
||||
- use examples that earn the opinion
|
||||
|
||||
### Newsletters
|
||||
- keep the first screen strong
|
||||
- mix insight with updates, not diary filler
|
||||
- use clear section labels and easy skim structure
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- verify factual claims against provided sources
|
||||
- remove filler and corporate language
|
||||
- confirm the voice matches the supplied examples
|
||||
- ensure every section adds new information
|
||||
- check formatting for the intended platform
|
||||
7
.agents/skills/article-writing/agents/openai.yaml
Normal file
7
.agents/skills/article-writing/agents/openai.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
interface:
|
||||
display_name: "Article Writing"
|
||||
short_description: "Write long-form content in a supplied voice without sounding templated"
|
||||
brand_color: "#B45309"
|
||||
default_prompt: "Draft a sharp long-form article from these notes and examples"
|
||||
policy:
|
||||
allow_implicit_invocation: true
|
||||
88
.agents/skills/content-engine/SKILL.md
Normal file
88
.agents/skills/content-engine/SKILL.md
Normal file
@@ -0,0 +1,88 @@
|
||||
---
|
||||
name: content-engine
|
||||
description: Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Content Engine
|
||||
|
||||
Turn one idea into strong, platform-native content instead of posting the same thing everywhere.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- writing X posts or threads
|
||||
- drafting LinkedIn posts or launch updates
|
||||
- scripting short-form video or YouTube explainers
|
||||
- repurposing articles, podcasts, demos, or docs into social content
|
||||
- building a lightweight content plan around a launch, milestone, or theme
|
||||
|
||||
## First Questions
|
||||
|
||||
Clarify:
|
||||
- source asset: what are we adapting from
|
||||
- audience: builders, investors, customers, operators, or general audience
|
||||
- platform: X, LinkedIn, TikTok, YouTube, newsletter, or multi-platform
|
||||
- goal: awareness, conversion, recruiting, authority, launch support, or engagement
|
||||
|
||||
## Core Rules
|
||||
|
||||
1. Adapt for the platform. Do not cross-post the same copy.
|
||||
2. Hooks matter more than summaries.
|
||||
3. Every post should carry one clear idea.
|
||||
4. Use specifics over slogans.
|
||||
5. Keep the ask small and clear.
|
||||
|
||||
## Platform Guidance
|
||||
|
||||
### X
|
||||
- open fast
|
||||
- one idea per post or per tweet in a thread
|
||||
- keep links out of the main body unless necessary
|
||||
- avoid hashtag spam
|
||||
|
||||
### LinkedIn
|
||||
- strong first line
|
||||
- short paragraphs
|
||||
- more explicit framing around lessons, results, and takeaways
|
||||
|
||||
### TikTok / Short Video
|
||||
- first 3 seconds must interrupt attention
|
||||
- script around visuals, not just narration
|
||||
- one demo, one claim, one CTA
|
||||
|
||||
### YouTube
|
||||
- show the result early
|
||||
- structure by chapter
|
||||
- refresh the visual every 20-30 seconds
|
||||
|
||||
### Newsletter
|
||||
- deliver one clear lens, not a bundle of unrelated items
|
||||
- make section titles skimmable
|
||||
- keep the opening paragraph doing real work
|
||||
|
||||
## Repurposing Flow
|
||||
|
||||
Default cascade:
|
||||
1. anchor asset: article, video, demo, memo, or launch doc
|
||||
2. extract 3-7 atomic ideas
|
||||
3. write platform-native variants
|
||||
4. trim repetition across outputs
|
||||
5. align CTAs with platform intent
|
||||
|
||||
## Deliverables
|
||||
|
||||
When asked for a campaign, return:
|
||||
- the core angle
|
||||
- platform-specific drafts
|
||||
- optional posting order
|
||||
- optional CTA variants
|
||||
- any missing inputs needed before publishing
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- each draft reads natively for its platform
|
||||
- hooks are strong and specific
|
||||
- no generic hype language
|
||||
- no duplicated copy across platforms unless requested
|
||||
- the CTA matches the content and audience
|
||||
7
.agents/skills/content-engine/agents/openai.yaml
Normal file
7
.agents/skills/content-engine/agents/openai.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
interface:
|
||||
display_name: "Content Engine"
|
||||
short_description: "Turn one idea into platform-native social and content outputs"
|
||||
brand_color: "#DC2626"
|
||||
default_prompt: "Turn this source asset into strong multi-platform content"
|
||||
policy:
|
||||
allow_implicit_invocation: true
|
||||
184
.agents/skills/frontend-slides/SKILL.md
Normal file
184
.agents/skills/frontend-slides/SKILL.md
Normal file
@@ -0,0 +1,184 @@
|
||||
---
|
||||
name: frontend-slides
|
||||
description: Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a PPT/PPTX to web, or create slides for a talk/pitch. Helps non-designers discover their aesthetic through visual exploration rather than abstract choices.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Frontend Slides
|
||||
|
||||
Create zero-dependency, animation-rich HTML presentations that run entirely in the browser.
|
||||
|
||||
Inspired by the visual exploration approach showcased in work by [zarazhangrui](https://github.com/zarazhangrui).
|
||||
|
||||
## When to Activate
|
||||
|
||||
- Creating a talk deck, pitch deck, workshop deck, or internal presentation
|
||||
- Converting `.ppt` or `.pptx` slides into an HTML presentation
|
||||
- Improving an existing HTML presentation's layout, motion, or typography
|
||||
- Exploring presentation styles with a user who does not know their design preference yet
|
||||
|
||||
## Non-Negotiables
|
||||
|
||||
1. **Zero dependencies**: default to one self-contained HTML file with inline CSS and JS.
|
||||
2. **Viewport fit is mandatory**: every slide must fit inside one viewport with no internal scrolling.
|
||||
3. **Show, don't tell**: use visual previews instead of abstract style questionnaires.
|
||||
4. **Distinctive design**: avoid generic purple-gradient, Inter-on-white, template-looking decks.
|
||||
5. **Production quality**: keep code commented, accessible, responsive, and performant.
|
||||
|
||||
Before generating, read `STYLE_PRESETS.md` for the viewport-safe CSS base, density limits, preset catalog, and CSS gotchas.
|
||||
|
||||
## Workflow
|
||||
|
||||
### 1. Detect Mode
|
||||
|
||||
Choose one path:
|
||||
- **New presentation**: user has a topic, notes, or full draft
|
||||
- **PPT conversion**: user has `.ppt` or `.pptx`
|
||||
- **Enhancement**: user already has HTML slides and wants improvements
|
||||
|
||||
### 2. Discover Content
|
||||
|
||||
Ask only the minimum needed:
|
||||
- purpose: pitch, teaching, conference talk, internal update
|
||||
- length: short (5-10), medium (10-20), long (20+)
|
||||
- content state: finished copy, rough notes, topic only
|
||||
|
||||
If the user has content, ask them to paste it before styling.
|
||||
|
||||
### 3. Discover Style
|
||||
|
||||
Default to visual exploration.
|
||||
|
||||
If the user already knows the desired preset, skip previews and use it directly.
|
||||
|
||||
Otherwise:
|
||||
1. Ask what feeling the deck should create: impressed, energized, focused, inspired.
|
||||
2. Generate **3 single-slide preview files** in `.ecc-design/slide-previews/`.
|
||||
3. Each preview must be self-contained, show typography/color/motion clearly, and stay under roughly 100 lines of slide content.
|
||||
4. Ask the user which preview to keep or what elements to mix.
|
||||
|
||||
Use the preset guide in `STYLE_PRESETS.md` when mapping mood to style.
|
||||
|
||||
### 4. Build the Presentation
|
||||
|
||||
Output either:
|
||||
- `presentation.html`
|
||||
- `[presentation-name].html`
|
||||
|
||||
Use an `assets/` folder only when the deck contains extracted or user-supplied images.
|
||||
|
||||
Required structure:
|
||||
- semantic slide sections
|
||||
- a viewport-safe CSS base from `STYLE_PRESETS.md`
|
||||
- CSS custom properties for theme values
|
||||
- a presentation controller class for keyboard, wheel, and touch navigation
|
||||
- Intersection Observer for reveal animations
|
||||
- reduced-motion support
|
||||
|
||||
### 5. Enforce Viewport Fit
|
||||
|
||||
Treat this as a hard gate.
|
||||
|
||||
Rules:
|
||||
- every `.slide` must use `height: 100vh; height: 100dvh; overflow: hidden;`
|
||||
- all type and spacing must scale with `clamp()`
|
||||
- when content does not fit, split into multiple slides
|
||||
- never solve overflow by shrinking text below readable sizes
|
||||
- never allow scrollbars inside a slide
|
||||
|
||||
Use the density limits and mandatory CSS block in `STYLE_PRESETS.md`.
|
||||
|
||||
### 6. Validate
|
||||
|
||||
Check the finished deck at these sizes:
|
||||
- 1920x1080
|
||||
- 1280x720
|
||||
- 768x1024
|
||||
- 375x667
|
||||
- 667x375
|
||||
|
||||
If browser automation is available, use it to verify no slide overflows and that keyboard navigation works.
|
||||
|
||||
### 7. Deliver
|
||||
|
||||
At handoff:
|
||||
- delete temporary preview files unless the user wants to keep them
|
||||
- open the deck with the platform-appropriate opener when useful
|
||||
- summarize file path, preset used, slide count, and easy theme customization points
|
||||
|
||||
Use the correct opener for the current OS:
|
||||
- macOS: `open file.html`
|
||||
- Linux: `xdg-open file.html`
|
||||
- Windows: `start "" file.html`
|
||||
|
||||
## PPT / PPTX Conversion
|
||||
|
||||
For PowerPoint conversion:
|
||||
1. Prefer `python3` with `python-pptx` to extract text, images, and notes.
|
||||
2. If `python-pptx` is unavailable, ask whether to install it or fall back to a manual/export-based workflow.
|
||||
3. Preserve slide order, speaker notes, and extracted assets.
|
||||
4. After extraction, run the same style-selection workflow as a new presentation.
|
||||
|
||||
Keep conversion cross-platform. Do not rely on macOS-only tools when Python can do the job.
|
||||
|
||||
## Implementation Requirements
|
||||
|
||||
### HTML / CSS
|
||||
|
||||
- Use inline CSS and JS unless the user explicitly wants a multi-file project.
|
||||
- Fonts may come from Google Fonts or Fontshare.
|
||||
- Prefer atmospheric backgrounds, strong type hierarchy, and a clear visual direction.
|
||||
- Use abstract shapes, gradients, grids, noise, and geometry rather than illustrations.
|
||||
|
||||
### JavaScript
|
||||
|
||||
Include:
|
||||
- keyboard navigation
|
||||
- touch / swipe navigation
|
||||
- mouse wheel navigation
|
||||
- progress indicator or slide index
|
||||
- reveal-on-enter animation triggers
|
||||
|
||||
### Accessibility
|
||||
|
||||
- use semantic structure (`main`, `section`, `nav`)
|
||||
- keep contrast readable
|
||||
- support keyboard-only navigation
|
||||
- respect `prefers-reduced-motion`
|
||||
|
||||
## Content Density Limits
|
||||
|
||||
Use these maxima unless the user explicitly asks for denser slides and readability still holds:
|
||||
|
||||
| Slide type | Limit |
|
||||
|------------|-------|
|
||||
| Title | 1 heading + 1 subtitle + optional tagline |
|
||||
| Content | 1 heading + 4-6 bullets or 2 short paragraphs |
|
||||
| Feature grid | 6 cards max |
|
||||
| Code | 8-10 lines max |
|
||||
| Quote | 1 quote + attribution |
|
||||
| Image | 1 image constrained by viewport |
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
- generic startup gradients with no visual identity
|
||||
- system-font decks unless intentionally editorial
|
||||
- long bullet walls
|
||||
- code blocks that need scrolling
|
||||
- fixed-height content boxes that break on short screens
|
||||
- invalid negated CSS functions like `-clamp(...)`
|
||||
|
||||
## Related ECC Skills
|
||||
|
||||
- `frontend-patterns` for component and interaction patterns around the deck
|
||||
- `liquid-glass-design` when a presentation intentionally borrows Apple glass aesthetics
|
||||
- `e2e-testing` if you need automated browser verification for the final deck
|
||||
|
||||
## Deliverable Checklist
|
||||
|
||||
- presentation runs from a local file in a browser
|
||||
- every slide fits the viewport without scrolling
|
||||
- style is distinctive and intentional
|
||||
- animation is meaningful, not noisy
|
||||
- reduced motion is respected
|
||||
- file paths and customization points are explained at handoff
|
||||
330
.agents/skills/frontend-slides/STYLE_PRESETS.md
Normal file
330
.agents/skills/frontend-slides/STYLE_PRESETS.md
Normal file
@@ -0,0 +1,330 @@
|
||||
# Style Presets Reference
|
||||
|
||||
Curated visual styles for `frontend-slides`.
|
||||
|
||||
Use this file for:
|
||||
- the mandatory viewport-fitting CSS base
|
||||
- preset selection and mood mapping
|
||||
- CSS gotchas and validation rules
|
||||
|
||||
Abstract shapes only. Avoid illustrations unless the user explicitly asks for them.
|
||||
|
||||
## Viewport Fit Is Non-Negotiable
|
||||
|
||||
Every slide must fully fit in one viewport.
|
||||
|
||||
### Golden Rule
|
||||
|
||||
```text
|
||||
Each slide = exactly one viewport height.
|
||||
Too much content = split into more slides.
|
||||
Never scroll inside a slide.
|
||||
```
|
||||
|
||||
### Density Limits
|
||||
|
||||
| Slide Type | Maximum Content |
|
||||
|------------|-----------------|
|
||||
| Title slide | 1 heading + 1 subtitle + optional tagline |
|
||||
| Content slide | 1 heading + 4-6 bullets or 2 paragraphs |
|
||||
| Feature grid | 6 cards maximum |
|
||||
| Code slide | 8-10 lines maximum |
|
||||
| Quote slide | 1 quote + attribution |
|
||||
| Image slide | 1 image, ideally under 60vh |
|
||||
|
||||
## Mandatory Base CSS
|
||||
|
||||
Copy this block into every generated presentation and then theme on top of it.
|
||||
|
||||
```css
|
||||
/* ===========================================
|
||||
VIEWPORT FITTING: MANDATORY BASE STYLES
|
||||
=========================================== */
|
||||
|
||||
html, body {
|
||||
height: 100%;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-snap-type: y mandatory;
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
.slide {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
height: 100dvh;
|
||||
overflow: hidden;
|
||||
scroll-snap-align: start;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.slide-content {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
max-height: 100%;
|
||||
overflow: hidden;
|
||||
padding: var(--slide-padding);
|
||||
}
|
||||
|
||||
:root {
|
||||
--title-size: clamp(1.5rem, 5vw, 4rem);
|
||||
--h2-size: clamp(1.25rem, 3.5vw, 2.5rem);
|
||||
--h3-size: clamp(1rem, 2.5vw, 1.75rem);
|
||||
--body-size: clamp(0.75rem, 1.5vw, 1.125rem);
|
||||
--small-size: clamp(0.65rem, 1vw, 0.875rem);
|
||||
|
||||
--slide-padding: clamp(1rem, 4vw, 4rem);
|
||||
--content-gap: clamp(0.5rem, 2vw, 2rem);
|
||||
--element-gap: clamp(0.25rem, 1vw, 1rem);
|
||||
}
|
||||
|
||||
.card, .container, .content-box {
|
||||
max-width: min(90vw, 1000px);
|
||||
max-height: min(80vh, 700px);
|
||||
}
|
||||
|
||||
.feature-list, .bullet-list {
|
||||
gap: clamp(0.4rem, 1vh, 1rem);
|
||||
}
|
||||
|
||||
.feature-list li, .bullet-list li {
|
||||
font-size: var(--body-size);
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr));
|
||||
gap: clamp(0.5rem, 1.5vw, 1rem);
|
||||
}
|
||||
|
||||
img, .image-container {
|
||||
max-width: 100%;
|
||||
max-height: min(50vh, 400px);
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
@media (max-height: 700px) {
|
||||
:root {
|
||||
--slide-padding: clamp(0.75rem, 3vw, 2rem);
|
||||
--content-gap: clamp(0.4rem, 1.5vw, 1rem);
|
||||
--title-size: clamp(1.25rem, 4.5vw, 2.5rem);
|
||||
--h2-size: clamp(1rem, 3vw, 1.75rem);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-height: 600px) {
|
||||
:root {
|
||||
--slide-padding: clamp(0.5rem, 2.5vw, 1.5rem);
|
||||
--content-gap: clamp(0.3rem, 1vw, 0.75rem);
|
||||
--title-size: clamp(1.1rem, 4vw, 2rem);
|
||||
--body-size: clamp(0.7rem, 1.2vw, 0.95rem);
|
||||
}
|
||||
|
||||
.nav-dots, .keyboard-hint, .decorative {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-height: 500px) {
|
||||
:root {
|
||||
--slide-padding: clamp(0.4rem, 2vw, 1rem);
|
||||
--title-size: clamp(1rem, 3.5vw, 1.5rem);
|
||||
--h2-size: clamp(0.9rem, 2.5vw, 1.25rem);
|
||||
--body-size: clamp(0.65rem, 1vw, 0.85rem);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
:root {
|
||||
--title-size: clamp(1.25rem, 7vw, 2.5rem);
|
||||
}
|
||||
|
||||
.grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
*, *::before, *::after {
|
||||
animation-duration: 0.01ms !important;
|
||||
transition-duration: 0.2s !important;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: auto;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Viewport Checklist
|
||||
|
||||
- every `.slide` has `height: 100vh`, `height: 100dvh`, and `overflow: hidden`
|
||||
- all typography uses `clamp()`
|
||||
- all spacing uses `clamp()` or viewport units
|
||||
- images have `max-height` constraints
|
||||
- grids adapt with `auto-fit` + `minmax()`
|
||||
- short-height breakpoints exist at `700px`, `600px`, and `500px`
|
||||
- if anything feels cramped, split the slide
|
||||
|
||||
## Mood to Preset Mapping
|
||||
|
||||
| Mood | Good Presets |
|
||||
|------|--------------|
|
||||
| Impressed / Confident | Bold Signal, Electric Studio, Dark Botanical |
|
||||
| Excited / Energized | Creative Voltage, Neon Cyber, Split Pastel |
|
||||
| Calm / Focused | Notebook Tabs, Paper & Ink, Swiss Modern |
|
||||
| Inspired / Moved | Dark Botanical, Vintage Editorial, Pastel Geometry |
|
||||
|
||||
## Preset Catalog
|
||||
|
||||
### 1. Bold Signal
|
||||
|
||||
- Vibe: confident, high-impact, keynote-ready
|
||||
- Best for: pitch decks, launches, statements
|
||||
- Fonts: Archivo Black + Space Grotesk
|
||||
- Palette: charcoal base, hot orange focal card, crisp white text
|
||||
- Signature: oversized section numbers, high-contrast card on dark field
|
||||
|
||||
### 2. Electric Studio
|
||||
|
||||
- Vibe: clean, bold, agency-polished
|
||||
- Best for: client presentations, strategic reviews
|
||||
- Fonts: Manrope only
|
||||
- Palette: black, white, saturated cobalt accent
|
||||
- Signature: two-panel split and sharp editorial alignment
|
||||
|
||||
### 3. Creative Voltage
|
||||
|
||||
- Vibe: energetic, retro-modern, playful confidence
|
||||
- Best for: creative studios, brand work, product storytelling
|
||||
- Fonts: Syne + Space Mono
|
||||
- Palette: electric blue, neon yellow, deep navy
|
||||
- Signature: halftone textures, badges, punchy contrast
|
||||
|
||||
### 4. Dark Botanical
|
||||
|
||||
- Vibe: elegant, premium, atmospheric
|
||||
- Best for: luxury brands, thoughtful narratives, premium product decks
|
||||
- Fonts: Cormorant + IBM Plex Sans
|
||||
- Palette: near-black, warm ivory, blush, gold, terracotta
|
||||
- Signature: blurred abstract circles, fine rules, restrained motion
|
||||
|
||||
### 5. Notebook Tabs
|
||||
|
||||
- Vibe: editorial, organized, tactile
|
||||
- Best for: reports, reviews, structured storytelling
|
||||
- Fonts: Bodoni Moda + DM Sans
|
||||
- Palette: cream paper on charcoal with pastel tabs
|
||||
- Signature: paper sheet, colored side tabs, binder details
|
||||
|
||||
### 6. Pastel Geometry
|
||||
|
||||
- Vibe: approachable, modern, friendly
|
||||
- Best for: product overviews, onboarding, lighter brand decks
|
||||
- Fonts: Plus Jakarta Sans only
|
||||
- Palette: pale blue field, cream card, soft pink/mint/lavender accents
|
||||
- Signature: vertical pills, rounded cards, soft shadows
|
||||
|
||||
### 7. Split Pastel
|
||||
|
||||
- Vibe: playful, modern, creative
|
||||
- Best for: agency intros, workshops, portfolios
|
||||
- Fonts: Outfit only
|
||||
- Palette: peach + lavender split with mint badges
|
||||
- Signature: split backdrop, rounded tags, light grid overlays
|
||||
|
||||
### 8. Vintage Editorial
|
||||
|
||||
- Vibe: witty, personality-driven, magazine-inspired
|
||||
- Best for: personal brands, opinionated talks, storytelling
|
||||
- Fonts: Fraunces + Work Sans
|
||||
- Palette: cream, charcoal, dusty warm accents
|
||||
- Signature: geometric accents, bordered callouts, punchy serif headlines
|
||||
|
||||
### 9. Neon Cyber
|
||||
|
||||
- Vibe: futuristic, techy, kinetic
|
||||
- Best for: AI, infra, dev tools, future-of-X talks
|
||||
- Fonts: Clash Display + Satoshi
|
||||
- Palette: midnight navy, cyan, magenta
|
||||
- Signature: glow, particles, grids, data-radar energy
|
||||
|
||||
### 10. Terminal Green
|
||||
|
||||
- Vibe: developer-focused, hacker-clean
|
||||
- Best for: APIs, CLI tools, engineering demos
|
||||
- Fonts: JetBrains Mono only
|
||||
- Palette: GitHub dark + terminal green
|
||||
- Signature: scan lines, command-line framing, precise monospace rhythm
|
||||
|
||||
### 11. Swiss Modern
|
||||
|
||||
- Vibe: minimal, precise, data-forward
|
||||
- Best for: corporate, product strategy, analytics
|
||||
- Fonts: Archivo + Nunito
|
||||
- Palette: white, black, signal red
|
||||
- Signature: visible grids, asymmetry, geometric discipline
|
||||
|
||||
### 12. Paper & Ink
|
||||
|
||||
- Vibe: literary, thoughtful, story-driven
|
||||
- Best for: essays, keynote narratives, manifesto decks
|
||||
- Fonts: Cormorant Garamond + Source Serif 4
|
||||
- Palette: warm cream, charcoal, crimson accent
|
||||
- Signature: pull quotes, drop caps, elegant rules
|
||||
|
||||
## Direct Selection Prompts
|
||||
|
||||
If the user already knows the style they want, let them pick directly from the preset names above instead of forcing preview generation.
|
||||
|
||||
## Animation Feel Mapping
|
||||
|
||||
| Feeling | Motion Direction |
|
||||
|---------|------------------|
|
||||
| Dramatic / Cinematic | slow fades, parallax, large scale-ins |
|
||||
| Techy / Futuristic | glow, particles, grid motion, scramble text |
|
||||
| Playful / Friendly | springy easing, rounded shapes, floating motion |
|
||||
| Professional / Corporate | subtle 200-300ms transitions, clean slides |
|
||||
| Calm / Minimal | very restrained movement, whitespace-first |
|
||||
| Editorial / Magazine | strong hierarchy, staggered text and image interplay |
|
||||
|
||||
## CSS Gotcha: Negating Functions
|
||||
|
||||
Never write these:
|
||||
|
||||
```css
|
||||
right: -clamp(28px, 3.5vw, 44px);
|
||||
margin-left: -min(10vw, 100px);
|
||||
```
|
||||
|
||||
Browsers ignore them silently.
|
||||
|
||||
Always write this instead:
|
||||
|
||||
```css
|
||||
right: calc(-1 * clamp(28px, 3.5vw, 44px));
|
||||
margin-left: calc(-1 * min(10vw, 100px));
|
||||
```
|
||||
|
||||
## Validation Sizes
|
||||
|
||||
Test at minimum:
|
||||
- Desktop: `1920x1080`, `1440x900`, `1280x720`
|
||||
- Tablet: `1024x768`, `768x1024`
|
||||
- Mobile: `375x667`, `414x896`
|
||||
- Landscape phone: `667x375`, `896x414`
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
Do not use:
|
||||
- purple-on-white startup templates
|
||||
- Inter / Roboto / Arial as the visual voice unless the user explicitly wants utilitarian neutrality
|
||||
- bullet walls, tiny type, or code blocks that require scrolling
|
||||
- decorative illustrations when abstract geometry would do the job better
|
||||
7
.agents/skills/frontend-slides/agents/openai.yaml
Normal file
7
.agents/skills/frontend-slides/agents/openai.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
interface:
|
||||
display_name: "Frontend Slides"
|
||||
short_description: "Create distinctive HTML slide decks and convert PPTX to web"
|
||||
brand_color: "#FF6B3D"
|
||||
default_prompt: "Create a viewport-safe HTML presentation with strong visual direction"
|
||||
policy:
|
||||
allow_implicit_invocation: true
|
||||
96
.agents/skills/investor-materials/SKILL.md
Normal file
96
.agents/skills/investor-materials/SKILL.md
Normal file
@@ -0,0 +1,96 @@
|
||||
---
|
||||
name: investor-materials
|
||||
description: Create and update pitch decks, one-pagers, investor memos, accelerator applications, financial models, and fundraising materials. Use when the user needs investor-facing documents, projections, use-of-funds tables, milestone plans, or materials that must stay internally consistent across multiple fundraising assets.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Investor Materials
|
||||
|
||||
Build investor-facing materials that are consistent, credible, and easy to defend.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- creating or revising a pitch deck
|
||||
- writing an investor memo or one-pager
|
||||
- building a financial model, milestone plan, or use-of-funds table
|
||||
- answering accelerator or incubator application questions
|
||||
- aligning multiple fundraising docs around one source of truth
|
||||
|
||||
## Golden Rule
|
||||
|
||||
All investor materials must agree with each other.
|
||||
|
||||
Create or confirm a single source of truth before writing:
|
||||
- traction metrics
|
||||
- pricing and revenue assumptions
|
||||
- raise size and instrument
|
||||
- use of funds
|
||||
- team bios and titles
|
||||
- milestones and timelines
|
||||
|
||||
If conflicting numbers appear, stop and resolve them before drafting.
|
||||
|
||||
## Core Workflow
|
||||
|
||||
1. inventory the canonical facts
|
||||
2. identify missing assumptions
|
||||
3. choose the asset type
|
||||
4. draft the asset with explicit logic
|
||||
5. cross-check every number against the source of truth
|
||||
|
||||
## Asset Guidance
|
||||
|
||||
### Pitch Deck
|
||||
Recommended flow:
|
||||
1. company + wedge
|
||||
2. problem
|
||||
3. solution
|
||||
4. product / demo
|
||||
5. market
|
||||
6. business model
|
||||
7. traction
|
||||
8. team
|
||||
9. competition / differentiation
|
||||
10. ask
|
||||
11. use of funds / milestones
|
||||
12. appendix
|
||||
|
||||
If the user wants a web-native deck, pair this skill with `frontend-slides`.
|
||||
|
||||
### One-Pager / Memo
|
||||
- state what the company does in one clean sentence
|
||||
- show why now
|
||||
- include traction and proof points early
|
||||
- make the ask precise
|
||||
- keep claims easy to verify
|
||||
|
||||
### Financial Model
|
||||
Include:
|
||||
- explicit assumptions
|
||||
- bear / base / bull cases when useful
|
||||
- clean layer-by-layer revenue logic
|
||||
- milestone-linked spending
|
||||
- sensitivity analysis where the decision hinges on assumptions
|
||||
|
||||
### Accelerator Applications
|
||||
- answer the exact question asked
|
||||
- prioritize traction, insight, and team advantage
|
||||
- avoid puffery
|
||||
- keep internal metrics consistent with the deck and model
|
||||
|
||||
## Red Flags to Avoid
|
||||
|
||||
- unverifiable claims
|
||||
- fuzzy market sizing without assumptions
|
||||
- inconsistent team roles or titles
|
||||
- revenue math that does not sum cleanly
|
||||
- inflated certainty where assumptions are fragile
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- every number matches the current source of truth
|
||||
- use of funds and revenue layers sum correctly
|
||||
- assumptions are visible, not buried
|
||||
- the story is clear without hype language
|
||||
- the final asset is defensible in a partner meeting
|
||||
7
.agents/skills/investor-materials/agents/openai.yaml
Normal file
7
.agents/skills/investor-materials/agents/openai.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
interface:
|
||||
display_name: "Investor Materials"
|
||||
short_description: "Create decks, memos, and financial materials from one source of truth"
|
||||
brand_color: "#7C3AED"
|
||||
default_prompt: "Draft investor materials that stay numerically consistent across assets"
|
||||
policy:
|
||||
allow_implicit_invocation: true
|
||||
76
.agents/skills/investor-outreach/SKILL.md
Normal file
76
.agents/skills/investor-outreach/SKILL.md
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
name: investor-outreach
|
||||
description: Draft cold emails, warm intro blurbs, follow-ups, update emails, and investor communications for fundraising. Use when the user wants outreach to angels, VCs, strategic investors, or accelerators and needs concise, personalized, investor-facing messaging.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Investor Outreach
|
||||
|
||||
Write investor communication that is short, personalized, and easy to act on.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- writing a cold email to an investor
|
||||
- drafting a warm intro request
|
||||
- sending follow-ups after a meeting or no response
|
||||
- writing investor updates during a process
|
||||
- tailoring outreach based on fund thesis or partner fit
|
||||
|
||||
## Core Rules
|
||||
|
||||
1. Personalize every outbound message.
|
||||
2. Keep the ask low-friction.
|
||||
3. Use proof, not adjectives.
|
||||
4. Stay concise.
|
||||
5. Never send generic copy that could go to any investor.
|
||||
|
||||
## Cold Email Structure
|
||||
|
||||
1. subject line: short and specific
|
||||
2. opener: why this investor specifically
|
||||
3. pitch: what the company does, why now, what proof matters
|
||||
4. ask: one concrete next step
|
||||
5. sign-off: name, role, one credibility anchor if needed
|
||||
|
||||
## Personalization Sources
|
||||
|
||||
Reference one or more of:
|
||||
- relevant portfolio companies
|
||||
- a public thesis, talk, post, or article
|
||||
- a mutual connection
|
||||
- a clear market or product fit with the investor's focus
|
||||
|
||||
If that context is missing, ask for it or state that the draft is a template awaiting personalization.
|
||||
|
||||
## Follow-Up Cadence
|
||||
|
||||
Default:
|
||||
- day 0: initial outbound
|
||||
- day 4-5: short follow-up with one new data point
|
||||
- day 10-12: final follow-up with a clean close
|
||||
|
||||
Do not keep nudging after that unless the user wants a longer sequence.
|
||||
|
||||
## Warm Intro Requests
|
||||
|
||||
Make life easy for the connector:
|
||||
- explain why the intro is a fit
|
||||
- include a forwardable blurb
|
||||
- keep the forwardable blurb under 100 words
|
||||
|
||||
## Post-Meeting Updates
|
||||
|
||||
Include:
|
||||
- the specific thing discussed
|
||||
- the answer or update promised
|
||||
- one new proof point if available
|
||||
- the next step
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- message is personalized
|
||||
- the ask is explicit
|
||||
- there is no fluff or begging language
|
||||
- the proof point is concrete
|
||||
- word count stays tight
|
||||
7
.agents/skills/investor-outreach/agents/openai.yaml
Normal file
7
.agents/skills/investor-outreach/agents/openai.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
interface:
|
||||
display_name: "Investor Outreach"
|
||||
short_description: "Write concise, personalized outreach and follow-ups for fundraising"
|
||||
brand_color: "#059669"
|
||||
default_prompt: "Draft a personalized investor outreach email with a clear low-friction ask"
|
||||
policy:
|
||||
allow_implicit_invocation: true
|
||||
75
.agents/skills/market-research/SKILL.md
Normal file
75
.agents/skills/market-research/SKILL.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
name: market-research
|
||||
description: Conduct market research, competitive analysis, investor due diligence, and industry intelligence with source attribution and decision-oriented summaries. Use when the user wants market sizing, competitor comparisons, fund research, technology scans, or research that informs business decisions.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Market Research
|
||||
|
||||
Produce research that supports decisions, not research theater.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- researching a market, category, company, investor, or technology trend
|
||||
- building TAM/SAM/SOM estimates
|
||||
- comparing competitors or adjacent products
|
||||
- preparing investor dossiers before outreach
|
||||
- pressure-testing a thesis before building, funding, or entering a market
|
||||
|
||||
## Research Standards
|
||||
|
||||
1. Every important claim needs a source.
|
||||
2. Prefer recent data and call out stale data.
|
||||
3. Include contrarian evidence and downside cases.
|
||||
4. Translate findings into a decision, not just a summary.
|
||||
5. Separate fact, inference, and recommendation clearly.
|
||||
|
||||
## Common Research Modes
|
||||
|
||||
### Investor / Fund Diligence
|
||||
Collect:
|
||||
- fund size, stage, and typical check size
|
||||
- relevant portfolio companies
|
||||
- public thesis and recent activity
|
||||
- reasons the fund is or is not a fit
|
||||
- any obvious red flags or mismatches
|
||||
|
||||
### Competitive Analysis
|
||||
Collect:
|
||||
- product reality, not marketing copy
|
||||
- funding and investor history if public
|
||||
- traction metrics if public
|
||||
- distribution and pricing clues
|
||||
- strengths, weaknesses, and positioning gaps
|
||||
|
||||
### Market Sizing
|
||||
Use:
|
||||
- top-down estimates from reports or public datasets
|
||||
- bottom-up sanity checks from realistic customer acquisition assumptions
|
||||
- explicit assumptions for every leap in logic
|
||||
|
||||
### Technology / Vendor Research
|
||||
Collect:
|
||||
- how it works
|
||||
- trade-offs and adoption signals
|
||||
- integration complexity
|
||||
- lock-in, security, compliance, and operational risk
|
||||
|
||||
## Output Format
|
||||
|
||||
Default structure:
|
||||
1. executive summary
|
||||
2. key findings
|
||||
3. implications
|
||||
4. risks and caveats
|
||||
5. recommendation
|
||||
6. sources
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- all numbers are sourced or labeled as estimates
|
||||
- old data is flagged
|
||||
- the recommendation follows from the evidence
|
||||
- risks and counterarguments are included
|
||||
- the output makes a decision easier
|
||||
7
.agents/skills/market-research/agents/openai.yaml
Normal file
7
.agents/skills/market-research/agents/openai.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
interface:
|
||||
display_name: "Market Research"
|
||||
short_description: "Source-attributed market, competitor, and investor research"
|
||||
brand_color: "#2563EB"
|
||||
default_prompt: "Research this market and summarize the decision-relevant findings"
|
||||
policy:
|
||||
allow_implicit_invocation: true
|
||||
@@ -1,8 +1,10 @@
|
||||
{
|
||||
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
|
||||
"name": "everything-claude-code",
|
||||
"description": "Battle-tested Claude Code configurations from an Anthropic hackathon winner — agents, skills, hooks, commands, and rules evolved over 10+ months of intensive daily use",
|
||||
"owner": {
|
||||
"name": "Affaan Mustafa",
|
||||
"email": "affaan@example.com"
|
||||
"email": "me@affaanmustafa.com"
|
||||
},
|
||||
"metadata": {
|
||||
"description": "Battle-tested Claude Code configurations from an Anthropic hackathon winner"
|
||||
@@ -11,9 +13,11 @@
|
||||
{
|
||||
"name": "everything-claude-code",
|
||||
"source": "./",
|
||||
"description": "Complete collection of agents, skills, hooks, commands, and rules evolved over 10+ months of intensive daily use",
|
||||
"description": "The most comprehensive Claude Code plugin — 14+ agents, 56+ skills, 33+ commands, and production-ready hooks for TDD, security scanning, code review, and continuous learning",
|
||||
"version": "1.8.0",
|
||||
"author": {
|
||||
"name": "Affaan Mustafa"
|
||||
"name": "Affaan Mustafa",
|
||||
"email": "me@affaanmustafa.com"
|
||||
},
|
||||
"homepage": "https://github.com/affaan-m/everything-claude-code",
|
||||
"repository": "https://github.com/affaan-m/everything-claude-code",
|
||||
@@ -38,7 +42,8 @@
|
||||
"code-review",
|
||||
"security",
|
||||
"best-practices"
|
||||
]
|
||||
],
|
||||
"strict": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "everything-claude-code",
|
||||
"version": "1.4.1",
|
||||
"version": "1.8.0",
|
||||
"description": "Complete collection of battle-tested Claude Code configs from an Anthropic hackathon winner - agents, skills, hooks, and rules evolved over 10+ months of intensive daily use",
|
||||
"author": {
|
||||
"name": "Affaan Mustafa",
|
||||
@@ -21,21 +21,5 @@
|
||||
"workflow",
|
||||
"automation",
|
||||
"best-practices"
|
||||
],
|
||||
"skills": ["./skills/", "./commands/"],
|
||||
"agents": [
|
||||
"./agents/architect.md",
|
||||
"./agents/build-error-resolver.md",
|
||||
"./agents/code-reviewer.md",
|
||||
"./agents/database-reviewer.md",
|
||||
"./agents/doc-updater.md",
|
||||
"./agents/e2e-runner.md",
|
||||
"./agents/go-build-resolver.md",
|
||||
"./agents/go-reviewer.md",
|
||||
"./agents/planner.md",
|
||||
"./agents/python-reviewer.md",
|
||||
"./agents/refactor-cleaner.md",
|
||||
"./agents/security-reviewer.md",
|
||||
"./agents/tdd-guide.md"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -22,6 +22,12 @@ Available skills:
|
||||
- security-review — Comprehensive security checklist
|
||||
- coding-standards — Universal coding standards
|
||||
- frontend-patterns — React/Next.js patterns
|
||||
- frontend-slides — Viewport-safe HTML presentations and PPTX-to-web conversion
|
||||
- article-writing — Long-form writing from notes and voice references
|
||||
- content-engine — Platform-native social content and repurposing
|
||||
- market-research — Source-attributed market and competitor research
|
||||
- investor-materials — Decks, memos, models, and one-pagers
|
||||
- investor-outreach — Personalized investor outreach and follow-ups
|
||||
- backend-patterns — API design, database, caching
|
||||
- e2e-testing — Playwright E2E tests
|
||||
- eval-harness — Eval-driven development
|
||||
|
||||
@@ -29,13 +29,14 @@ function transformToClaude(cursorInput, overrides = {}) {
|
||||
return {
|
||||
tool_input: {
|
||||
command: cursorInput.command || cursorInput.args?.command || '',
|
||||
file_path: cursorInput.path || cursorInput.file || '',
|
||||
file_path: cursorInput.path || cursorInput.file || cursorInput.args?.filePath || '',
|
||||
...overrides.tool_input,
|
||||
},
|
||||
tool_output: {
|
||||
output: cursorInput.output || cursorInput.result || '',
|
||||
...overrides.tool_output,
|
||||
},
|
||||
transcript_path: cursorInput.transcript_path || cursorInput.transcriptPath || cursorInput.session?.transcript_path || '',
|
||||
_cursor: {
|
||||
conversation_id: cursorInput.conversation_id,
|
||||
hook_event_name: cursorInput.hook_event_name,
|
||||
@@ -59,4 +60,22 @@ function runExistingHook(scriptName, stdinData) {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { readStdin, getPluginRoot, transformToClaude, runExistingHook };
|
||||
function hookEnabled(hookId, allowedProfiles = ['standard', 'strict']) {
|
||||
const rawProfile = String(process.env.ECC_HOOK_PROFILE || 'standard').toLowerCase();
|
||||
const profile = ['minimal', 'standard', 'strict'].includes(rawProfile) ? rawProfile : 'standard';
|
||||
|
||||
const disabled = new Set(
|
||||
String(process.env.ECC_DISABLED_HOOKS || '')
|
||||
.split(',')
|
||||
.map(v => v.trim().toLowerCase())
|
||||
.filter(Boolean)
|
||||
);
|
||||
|
||||
if (disabled.has(String(hookId || '').toLowerCase())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return allowedProfiles.includes(profile);
|
||||
}
|
||||
|
||||
module.exports = { readStdin, getPluginRoot, transformToClaude, runExistingHook, hookEnabled };
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin } = require('./adapter');
|
||||
const { readStdin, hookEnabled } = require('./adapter');
|
||||
|
||||
readStdin().then(raw => {
|
||||
try {
|
||||
const input = JSON.parse(raw);
|
||||
const cmd = input.command || '';
|
||||
const output = input.output || input.result || '';
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const cmd = String(input.command || input.args?.command || '');
|
||||
const output = String(input.output || input.result || '');
|
||||
|
||||
// PR creation logging
|
||||
if (/gh pr create/.test(cmd)) {
|
||||
if (hookEnabled('post:bash:pr-created', ['standard', 'strict']) && /\bgh\s+pr\s+create\b/.test(cmd)) {
|
||||
const m = output.match(/https:\/\/github\.com\/[^/]+\/[^/]+\/pull\/\d+/);
|
||||
if (m) {
|
||||
console.error('[ECC] PR created: ' + m[0]);
|
||||
@@ -17,10 +17,12 @@ readStdin().then(raw => {
|
||||
}
|
||||
}
|
||||
|
||||
// Build completion notice
|
||||
if (/(npm run build|pnpm build|yarn build)/.test(cmd)) {
|
||||
if (hookEnabled('post:bash:build-complete', ['standard', 'strict']) && /(npm run build|pnpm build|yarn build)/.test(cmd)) {
|
||||
console.error('[ECC] Build completed');
|
||||
}
|
||||
} catch {}
|
||||
} catch {
|
||||
// noop
|
||||
}
|
||||
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
|
||||
@@ -1,27 +1,72 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin } = require('./adapter');
|
||||
readStdin().then(raw => {
|
||||
try {
|
||||
const input = JSON.parse(raw);
|
||||
const cmd = input.command || '';
|
||||
const { readStdin, hookEnabled } = require('./adapter');
|
||||
|
||||
// 1. Block dev server outside tmux
|
||||
if (process.platform !== 'win32' && /(npm run dev\b|pnpm( run)? dev\b|yarn dev\b|bun run dev\b)/.test(cmd)) {
|
||||
console.error('[ECC] BLOCKED: Dev server must run in tmux for log access');
|
||||
console.error('[ECC] Use: tmux new-session -d -s dev "npm run dev"');
|
||||
process.exit(2);
|
||||
function splitShellSegments(command) {
|
||||
const segments = [];
|
||||
let current = '';
|
||||
let quote = null;
|
||||
|
||||
for (let i = 0; i < command.length; i++) {
|
||||
const ch = command[i];
|
||||
if (quote) {
|
||||
if (ch === quote) quote = null;
|
||||
current += ch;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 2. Tmux reminder for long-running commands
|
||||
if (process.platform !== 'win32' && !process.env.TMUX &&
|
||||
/(npm (install|test)|pnpm (install|test)|yarn (install|test)?|bun (install|test)|cargo build|make\b|docker\b|pytest|vitest|playwright)/.test(cmd)) {
|
||||
if (ch === '"' || ch === "'") {
|
||||
quote = ch;
|
||||
current += ch;
|
||||
continue;
|
||||
}
|
||||
|
||||
const next = command[i + 1] || '';
|
||||
if (ch === ';' || (ch === '&' && next === '&') || (ch === '|' && next === '|') || (ch === '&' && next !== '&')) {
|
||||
if (current.trim()) segments.push(current.trim());
|
||||
current = '';
|
||||
if ((ch === '&' && next === '&') || (ch === '|' && next === '|')) i++;
|
||||
continue;
|
||||
}
|
||||
|
||||
current += ch;
|
||||
}
|
||||
|
||||
if (current.trim()) segments.push(current.trim());
|
||||
return segments;
|
||||
}
|
||||
|
||||
readStdin().then(raw => {
|
||||
try {
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const cmd = String(input.command || input.args?.command || '');
|
||||
|
||||
if (hookEnabled('pre:bash:dev-server-block', ['standard', 'strict']) && process.platform !== 'win32') {
|
||||
const segments = splitShellSegments(cmd);
|
||||
const tmuxLauncher = /^\s*tmux\s+(new|new-session|new-window|split-window)\b/;
|
||||
const devPattern = /\b(npm\s+run\s+dev|pnpm(?:\s+run)?\s+dev|yarn\s+dev|bun\s+run\s+dev)\b/;
|
||||
const hasBlockedDev = segments.some(segment => devPattern.test(segment) && !tmuxLauncher.test(segment));
|
||||
if (hasBlockedDev) {
|
||||
console.error('[ECC] BLOCKED: Dev server must run in tmux for log access');
|
||||
console.error('[ECC] Use: tmux new-session -d -s dev "npm run dev"');
|
||||
process.exit(2);
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
hookEnabled('pre:bash:tmux-reminder', ['strict']) &&
|
||||
process.platform !== 'win32' &&
|
||||
!process.env.TMUX &&
|
||||
/(npm (install|test)|pnpm (install|test)|yarn (install|test)?|bun (install|test)|cargo build|make\b|docker\b|pytest|vitest|playwright)/.test(cmd)
|
||||
) {
|
||||
console.error('[ECC] Consider running in tmux for session persistence');
|
||||
}
|
||||
|
||||
// 3. Git push review reminder
|
||||
if (/git push/.test(cmd)) {
|
||||
if (hookEnabled('pre:bash:git-push-reminder', ['strict']) && /\bgit\s+push\b/.test(cmd)) {
|
||||
console.error('[ECC] Review changes before push: git diff origin/main...HEAD');
|
||||
}
|
||||
} catch {}
|
||||
} catch {
|
||||
// noop
|
||||
}
|
||||
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin, runExistingHook, transformToClaude } = require('./adapter');
|
||||
const { readStdin, runExistingHook, transformToClaude, hookEnabled } = require('./adapter');
|
||||
readStdin().then(raw => {
|
||||
const input = JSON.parse(raw);
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const claudeInput = transformToClaude(input);
|
||||
runExistingHook('session-end.js', claudeInput);
|
||||
runExistingHook('evaluate-session.js', claudeInput);
|
||||
if (hookEnabled('session:end:marker', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('session-end-marker.js', claudeInput);
|
||||
}
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin, runExistingHook, transformToClaude } = require('./adapter');
|
||||
const { readStdin, runExistingHook, transformToClaude, hookEnabled } = require('./adapter');
|
||||
readStdin().then(raw => {
|
||||
const input = JSON.parse(raw);
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const claudeInput = transformToClaude(input);
|
||||
runExistingHook('session-start.js', claudeInput);
|
||||
if (hookEnabled('session:start', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('session-start.js', claudeInput);
|
||||
}
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
|
||||
@@ -1,7 +1,21 @@
|
||||
#!/usr/bin/env node
|
||||
const { readStdin, runExistingHook, transformToClaude } = require('./adapter');
|
||||
const { readStdin, runExistingHook, transformToClaude, hookEnabled } = require('./adapter');
|
||||
readStdin().then(raw => {
|
||||
const claudeInput = JSON.parse(raw || '{}');
|
||||
runExistingHook('check-console-log.js', transformToClaude(claudeInput));
|
||||
const input = JSON.parse(raw || '{}');
|
||||
const claudeInput = transformToClaude(input);
|
||||
|
||||
if (hookEnabled('stop:check-console-log', ['standard', 'strict'])) {
|
||||
runExistingHook('check-console-log.js', claudeInput);
|
||||
}
|
||||
if (hookEnabled('stop:session-end', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('session-end.js', claudeInput);
|
||||
}
|
||||
if (hookEnabled('stop:evaluate-session', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('evaluate-session.js', claudeInput);
|
||||
}
|
||||
if (hookEnabled('stop:cost-tracker', ['minimal', 'standard', 'strict'])) {
|
||||
runExistingHook('cost-tracker.js', claudeInput);
|
||||
}
|
||||
|
||||
process.stdout.write(raw);
|
||||
}).catch(() => process.exit(0));
|
||||
|
||||
85
.cursor/skills/article-writing/SKILL.md
Normal file
85
.cursor/skills/article-writing/SKILL.md
Normal file
@@ -0,0 +1,85 @@
|
||||
---
|
||||
name: article-writing
|
||||
description: Write articles, guides, blog posts, tutorials, newsletter issues, and other long-form content in a distinctive voice derived from supplied examples or brand guidance. Use when the user wants polished written content longer than a paragraph, especially when voice consistency, structure, and credibility matter.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Article Writing
|
||||
|
||||
Write long-form content that sounds like a real person or brand, not generic AI output.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- drafting blog posts, essays, launch posts, guides, tutorials, or newsletter issues
|
||||
- turning notes, transcripts, or research into polished articles
|
||||
- matching an existing founder, operator, or brand voice from examples
|
||||
- tightening structure, pacing, and evidence in already-written long-form copy
|
||||
|
||||
## Core Rules
|
||||
|
||||
1. Lead with the concrete thing: example, output, anecdote, number, screenshot description, or code block.
|
||||
2. Explain after the example, not before.
|
||||
3. Prefer short, direct sentences over padded ones.
|
||||
4. Use specific numbers when available and sourced.
|
||||
5. Never invent biographical facts, company metrics, or customer evidence.
|
||||
|
||||
## Voice Capture Workflow
|
||||
|
||||
If the user wants a specific voice, collect one or more of:
|
||||
- published articles
|
||||
- newsletters
|
||||
- X / LinkedIn posts
|
||||
- docs or memos
|
||||
- a short style guide
|
||||
|
||||
Then extract:
|
||||
- sentence length and rhythm
|
||||
- whether the voice is formal, conversational, or sharp
|
||||
- favored rhetorical devices such as parentheses, lists, fragments, or questions
|
||||
- tolerance for humor, opinion, and contrarian framing
|
||||
- formatting habits such as headers, bullets, code blocks, and pull quotes
|
||||
|
||||
If no voice references are given, default to a direct, operator-style voice: concrete, practical, and low on hype.
|
||||
|
||||
## Banned Patterns
|
||||
|
||||
Delete and rewrite any of these:
|
||||
- generic openings like "In today's rapidly evolving landscape"
|
||||
- filler transitions such as "Moreover" and "Furthermore"
|
||||
- hype phrases like "game-changer", "cutting-edge", or "revolutionary"
|
||||
- vague claims without evidence
|
||||
- biography or credibility claims not backed by provided context
|
||||
|
||||
## Writing Process
|
||||
|
||||
1. Clarify the audience and purpose.
|
||||
2. Build a skeletal outline with one purpose per section.
|
||||
3. Start each section with evidence, example, or scene.
|
||||
4. Expand only where the next sentence earns its place.
|
||||
5. Remove anything that sounds templated or self-congratulatory.
|
||||
|
||||
## Structure Guidance
|
||||
|
||||
### Technical Guides
|
||||
- open with what the reader gets
|
||||
- use code or terminal examples in every major section
|
||||
- end with concrete takeaways, not a soft summary
|
||||
|
||||
### Essays / Opinion Pieces
|
||||
- start with tension, contradiction, or a sharp observation
|
||||
- keep one argument thread per section
|
||||
- use examples that earn the opinion
|
||||
|
||||
### Newsletters
|
||||
- keep the first screen strong
|
||||
- mix insight with updates, not diary filler
|
||||
- use clear section labels and easy skim structure
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- verify factual claims against provided sources
|
||||
- remove filler and corporate language
|
||||
- confirm the voice matches the supplied examples
|
||||
- ensure every section adds new information
|
||||
- check formatting for the intended platform
|
||||
88
.cursor/skills/content-engine/SKILL.md
Normal file
88
.cursor/skills/content-engine/SKILL.md
Normal file
@@ -0,0 +1,88 @@
|
||||
---
|
||||
name: content-engine
|
||||
description: Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Content Engine
|
||||
|
||||
Turn one idea into strong, platform-native content instead of posting the same thing everywhere.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- writing X posts or threads
|
||||
- drafting LinkedIn posts or launch updates
|
||||
- scripting short-form video or YouTube explainers
|
||||
- repurposing articles, podcasts, demos, or docs into social content
|
||||
- building a lightweight content plan around a launch, milestone, or theme
|
||||
|
||||
## First Questions
|
||||
|
||||
Clarify:
|
||||
- source asset: what are we adapting from
|
||||
- audience: builders, investors, customers, operators, or general audience
|
||||
- platform: X, LinkedIn, TikTok, YouTube, newsletter, or multi-platform
|
||||
- goal: awareness, conversion, recruiting, authority, launch support, or engagement
|
||||
|
||||
## Core Rules
|
||||
|
||||
1. Adapt for the platform. Do not cross-post the same copy.
|
||||
2. Hooks matter more than summaries.
|
||||
3. Every post should carry one clear idea.
|
||||
4. Use specifics over slogans.
|
||||
5. Keep the ask small and clear.
|
||||
|
||||
## Platform Guidance
|
||||
|
||||
### X
|
||||
- open fast
|
||||
- one idea per post or per tweet in a thread
|
||||
- keep links out of the main body unless necessary
|
||||
- avoid hashtag spam
|
||||
|
||||
### LinkedIn
|
||||
- strong first line
|
||||
- short paragraphs
|
||||
- more explicit framing around lessons, results, and takeaways
|
||||
|
||||
### TikTok / Short Video
|
||||
- first 3 seconds must interrupt attention
|
||||
- script around visuals, not just narration
|
||||
- one demo, one claim, one CTA
|
||||
|
||||
### YouTube
|
||||
- show the result early
|
||||
- structure by chapter
|
||||
- refresh the visual every 20-30 seconds
|
||||
|
||||
### Newsletter
|
||||
- deliver one clear lens, not a bundle of unrelated items
|
||||
- make section titles skimmable
|
||||
- keep the opening paragraph doing real work
|
||||
|
||||
## Repurposing Flow
|
||||
|
||||
Default cascade:
|
||||
1. anchor asset: article, video, demo, memo, or launch doc
|
||||
2. extract 3-7 atomic ideas
|
||||
3. write platform-native variants
|
||||
4. trim repetition across outputs
|
||||
5. align CTAs with platform intent
|
||||
|
||||
## Deliverables
|
||||
|
||||
When asked for a campaign, return:
|
||||
- the core angle
|
||||
- platform-specific drafts
|
||||
- optional posting order
|
||||
- optional CTA variants
|
||||
- any missing inputs needed before publishing
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- each draft reads natively for its platform
|
||||
- hooks are strong and specific
|
||||
- no generic hype language
|
||||
- no duplicated copy across platforms unless requested
|
||||
- the CTA matches the content and audience
|
||||
184
.cursor/skills/frontend-slides/SKILL.md
Normal file
184
.cursor/skills/frontend-slides/SKILL.md
Normal file
@@ -0,0 +1,184 @@
|
||||
---
|
||||
name: frontend-slides
|
||||
description: Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to build a presentation, convert a PPT/PPTX to web, or create slides for a talk/pitch. Helps non-designers discover their aesthetic through visual exploration rather than abstract choices.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Frontend Slides
|
||||
|
||||
Create zero-dependency, animation-rich HTML presentations that run entirely in the browser.
|
||||
|
||||
Inspired by the visual exploration approach showcased in work by [zarazhangrui](https://github.com/zarazhangrui).
|
||||
|
||||
## When to Activate
|
||||
|
||||
- Creating a talk deck, pitch deck, workshop deck, or internal presentation
|
||||
- Converting `.ppt` or `.pptx` slides into an HTML presentation
|
||||
- Improving an existing HTML presentation's layout, motion, or typography
|
||||
- Exploring presentation styles with a user who does not know their design preference yet
|
||||
|
||||
## Non-Negotiables
|
||||
|
||||
1. **Zero dependencies**: default to one self-contained HTML file with inline CSS and JS.
|
||||
2. **Viewport fit is mandatory**: every slide must fit inside one viewport with no internal scrolling.
|
||||
3. **Show, don't tell**: use visual previews instead of abstract style questionnaires.
|
||||
4. **Distinctive design**: avoid generic purple-gradient, Inter-on-white, template-looking decks.
|
||||
5. **Production quality**: keep code commented, accessible, responsive, and performant.
|
||||
|
||||
Before generating, read `STYLE_PRESETS.md` for the viewport-safe CSS base, density limits, preset catalog, and CSS gotchas.
|
||||
|
||||
## Workflow
|
||||
|
||||
### 1. Detect Mode
|
||||
|
||||
Choose one path:
|
||||
- **New presentation**: user has a topic, notes, or full draft
|
||||
- **PPT conversion**: user has `.ppt` or `.pptx`
|
||||
- **Enhancement**: user already has HTML slides and wants improvements
|
||||
|
||||
### 2. Discover Content
|
||||
|
||||
Ask only the minimum needed:
|
||||
- purpose: pitch, teaching, conference talk, internal update
|
||||
- length: short (5-10), medium (10-20), long (20+)
|
||||
- content state: finished copy, rough notes, topic only
|
||||
|
||||
If the user has content, ask them to paste it before styling.
|
||||
|
||||
### 3. Discover Style
|
||||
|
||||
Default to visual exploration.
|
||||
|
||||
If the user already knows the desired preset, skip previews and use it directly.
|
||||
|
||||
Otherwise:
|
||||
1. Ask what feeling the deck should create: impressed, energized, focused, inspired.
|
||||
2. Generate **3 single-slide preview files** in `.ecc-design/slide-previews/`.
|
||||
3. Each preview must be self-contained, show typography/color/motion clearly, and stay under roughly 100 lines of slide content.
|
||||
4. Ask the user which preview to keep or what elements to mix.
|
||||
|
||||
Use the preset guide in `STYLE_PRESETS.md` when mapping mood to style.
|
||||
|
||||
### 4. Build the Presentation
|
||||
|
||||
Output either:
|
||||
- `presentation.html`
|
||||
- `[presentation-name].html`
|
||||
|
||||
Use an `assets/` folder only when the deck contains extracted or user-supplied images.
|
||||
|
||||
Required structure:
|
||||
- semantic slide sections
|
||||
- a viewport-safe CSS base from `STYLE_PRESETS.md`
|
||||
- CSS custom properties for theme values
|
||||
- a presentation controller class for keyboard, wheel, and touch navigation
|
||||
- Intersection Observer for reveal animations
|
||||
- reduced-motion support
|
||||
|
||||
### 5. Enforce Viewport Fit
|
||||
|
||||
Treat this as a hard gate.
|
||||
|
||||
Rules:
|
||||
- every `.slide` must use `height: 100vh; height: 100dvh; overflow: hidden;`
|
||||
- all type and spacing must scale with `clamp()`
|
||||
- when content does not fit, split into multiple slides
|
||||
- never solve overflow by shrinking text below readable sizes
|
||||
- never allow scrollbars inside a slide
|
||||
|
||||
Use the density limits and mandatory CSS block in `STYLE_PRESETS.md`.
|
||||
|
||||
### 6. Validate
|
||||
|
||||
Check the finished deck at these sizes:
|
||||
- 1920x1080
|
||||
- 1280x720
|
||||
- 768x1024
|
||||
- 375x667
|
||||
- 667x375
|
||||
|
||||
If browser automation is available, use it to verify no slide overflows and that keyboard navigation works.
|
||||
|
||||
### 7. Deliver
|
||||
|
||||
At handoff:
|
||||
- delete temporary preview files unless the user wants to keep them
|
||||
- open the deck with the platform-appropriate opener when useful
|
||||
- summarize file path, preset used, slide count, and easy theme customization points
|
||||
|
||||
Use the correct opener for the current OS:
|
||||
- macOS: `open file.html`
|
||||
- Linux: `xdg-open file.html`
|
||||
- Windows: `start "" file.html`
|
||||
|
||||
## PPT / PPTX Conversion
|
||||
|
||||
For PowerPoint conversion:
|
||||
1. Prefer `python3` with `python-pptx` to extract text, images, and notes.
|
||||
2. If `python-pptx` is unavailable, ask whether to install it or fall back to a manual/export-based workflow.
|
||||
3. Preserve slide order, speaker notes, and extracted assets.
|
||||
4. After extraction, run the same style-selection workflow as a new presentation.
|
||||
|
||||
Keep conversion cross-platform. Do not rely on macOS-only tools when Python can do the job.
|
||||
|
||||
## Implementation Requirements
|
||||
|
||||
### HTML / CSS
|
||||
|
||||
- Use inline CSS and JS unless the user explicitly wants a multi-file project.
|
||||
- Fonts may come from Google Fonts or Fontshare.
|
||||
- Prefer atmospheric backgrounds, strong type hierarchy, and a clear visual direction.
|
||||
- Use abstract shapes, gradients, grids, noise, and geometry rather than illustrations.
|
||||
|
||||
### JavaScript
|
||||
|
||||
Include:
|
||||
- keyboard navigation
|
||||
- touch / swipe navigation
|
||||
- mouse wheel navigation
|
||||
- progress indicator or slide index
|
||||
- reveal-on-enter animation triggers
|
||||
|
||||
### Accessibility
|
||||
|
||||
- use semantic structure (`main`, `section`, `nav`)
|
||||
- keep contrast readable
|
||||
- support keyboard-only navigation
|
||||
- respect `prefers-reduced-motion`
|
||||
|
||||
## Content Density Limits
|
||||
|
||||
Use these maxima unless the user explicitly asks for denser slides and readability still holds:
|
||||
|
||||
| Slide type | Limit |
|
||||
|------------|-------|
|
||||
| Title | 1 heading + 1 subtitle + optional tagline |
|
||||
| Content | 1 heading + 4-6 bullets or 2 short paragraphs |
|
||||
| Feature grid | 6 cards max |
|
||||
| Code | 8-10 lines max |
|
||||
| Quote | 1 quote + attribution |
|
||||
| Image | 1 image constrained by viewport |
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
- generic startup gradients with no visual identity
|
||||
- system-font decks unless intentionally editorial
|
||||
- long bullet walls
|
||||
- code blocks that need scrolling
|
||||
- fixed-height content boxes that break on short screens
|
||||
- invalid negated CSS functions like `-clamp(...)`
|
||||
|
||||
## Related ECC Skills
|
||||
|
||||
- `frontend-patterns` for component and interaction patterns around the deck
|
||||
- `liquid-glass-design` when a presentation intentionally borrows Apple glass aesthetics
|
||||
- `e2e-testing` if you need automated browser verification for the final deck
|
||||
|
||||
## Deliverable Checklist
|
||||
|
||||
- presentation runs from a local file in a browser
|
||||
- every slide fits the viewport without scrolling
|
||||
- style is distinctive and intentional
|
||||
- animation is meaningful, not noisy
|
||||
- reduced motion is respected
|
||||
- file paths and customization points are explained at handoff
|
||||
330
.cursor/skills/frontend-slides/STYLE_PRESETS.md
Normal file
330
.cursor/skills/frontend-slides/STYLE_PRESETS.md
Normal file
@@ -0,0 +1,330 @@
|
||||
# Style Presets Reference
|
||||
|
||||
Curated visual styles for `frontend-slides`.
|
||||
|
||||
Use this file for:
|
||||
- the mandatory viewport-fitting CSS base
|
||||
- preset selection and mood mapping
|
||||
- CSS gotchas and validation rules
|
||||
|
||||
Abstract shapes only. Avoid illustrations unless the user explicitly asks for them.
|
||||
|
||||
## Viewport Fit Is Non-Negotiable
|
||||
|
||||
Every slide must fully fit in one viewport.
|
||||
|
||||
### Golden Rule
|
||||
|
||||
```text
|
||||
Each slide = exactly one viewport height.
|
||||
Too much content = split into more slides.
|
||||
Never scroll inside a slide.
|
||||
```
|
||||
|
||||
### Density Limits
|
||||
|
||||
| Slide Type | Maximum Content |
|
||||
|------------|-----------------|
|
||||
| Title slide | 1 heading + 1 subtitle + optional tagline |
|
||||
| Content slide | 1 heading + 4-6 bullets or 2 paragraphs |
|
||||
| Feature grid | 6 cards maximum |
|
||||
| Code slide | 8-10 lines maximum |
|
||||
| Quote slide | 1 quote + attribution |
|
||||
| Image slide | 1 image, ideally under 60vh |
|
||||
|
||||
## Mandatory Base CSS
|
||||
|
||||
Copy this block into every generated presentation and then theme on top of it.
|
||||
|
||||
```css
|
||||
/* ===========================================
|
||||
VIEWPORT FITTING: MANDATORY BASE STYLES
|
||||
=========================================== */
|
||||
|
||||
html, body {
|
||||
height: 100%;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-snap-type: y mandatory;
|
||||
scroll-behavior: smooth;
|
||||
}
|
||||
|
||||
.slide {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
height: 100dvh;
|
||||
overflow: hidden;
|
||||
scroll-snap-align: start;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.slide-content {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
max-height: 100%;
|
||||
overflow: hidden;
|
||||
padding: var(--slide-padding);
|
||||
}
|
||||
|
||||
:root {
|
||||
--title-size: clamp(1.5rem, 5vw, 4rem);
|
||||
--h2-size: clamp(1.25rem, 3.5vw, 2.5rem);
|
||||
--h3-size: clamp(1rem, 2.5vw, 1.75rem);
|
||||
--body-size: clamp(0.75rem, 1.5vw, 1.125rem);
|
||||
--small-size: clamp(0.65rem, 1vw, 0.875rem);
|
||||
|
||||
--slide-padding: clamp(1rem, 4vw, 4rem);
|
||||
--content-gap: clamp(0.5rem, 2vw, 2rem);
|
||||
--element-gap: clamp(0.25rem, 1vw, 1rem);
|
||||
}
|
||||
|
||||
.card, .container, .content-box {
|
||||
max-width: min(90vw, 1000px);
|
||||
max-height: min(80vh, 700px);
|
||||
}
|
||||
|
||||
.feature-list, .bullet-list {
|
||||
gap: clamp(0.4rem, 1vh, 1rem);
|
||||
}
|
||||
|
||||
.feature-list li, .bullet-list li {
|
||||
font-size: var(--body-size);
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr));
|
||||
gap: clamp(0.5rem, 1.5vw, 1rem);
|
||||
}
|
||||
|
||||
img, .image-container {
|
||||
max-width: 100%;
|
||||
max-height: min(50vh, 400px);
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
@media (max-height: 700px) {
|
||||
:root {
|
||||
--slide-padding: clamp(0.75rem, 3vw, 2rem);
|
||||
--content-gap: clamp(0.4rem, 1.5vw, 1rem);
|
||||
--title-size: clamp(1.25rem, 4.5vw, 2.5rem);
|
||||
--h2-size: clamp(1rem, 3vw, 1.75rem);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-height: 600px) {
|
||||
:root {
|
||||
--slide-padding: clamp(0.5rem, 2.5vw, 1.5rem);
|
||||
--content-gap: clamp(0.3rem, 1vw, 0.75rem);
|
||||
--title-size: clamp(1.1rem, 4vw, 2rem);
|
||||
--body-size: clamp(0.7rem, 1.2vw, 0.95rem);
|
||||
}
|
||||
|
||||
.nav-dots, .keyboard-hint, .decorative {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-height: 500px) {
|
||||
:root {
|
||||
--slide-padding: clamp(0.4rem, 2vw, 1rem);
|
||||
--title-size: clamp(1rem, 3.5vw, 1.5rem);
|
||||
--h2-size: clamp(0.9rem, 2.5vw, 1.25rem);
|
||||
--body-size: clamp(0.65rem, 1vw, 0.85rem);
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
:root {
|
||||
--title-size: clamp(1.25rem, 7vw, 2.5rem);
|
||||
}
|
||||
|
||||
.grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
*, *::before, *::after {
|
||||
animation-duration: 0.01ms !important;
|
||||
transition-duration: 0.2s !important;
|
||||
}
|
||||
|
||||
html {
|
||||
scroll-behavior: auto;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Viewport Checklist
|
||||
|
||||
- every `.slide` has `height: 100vh`, `height: 100dvh`, and `overflow: hidden`
|
||||
- all typography uses `clamp()`
|
||||
- all spacing uses `clamp()` or viewport units
|
||||
- images have `max-height` constraints
|
||||
- grids adapt with `auto-fit` + `minmax()`
|
||||
- short-height breakpoints exist at `700px`, `600px`, and `500px`
|
||||
- if anything feels cramped, split the slide
|
||||
|
||||
## Mood to Preset Mapping
|
||||
|
||||
| Mood | Good Presets |
|
||||
|------|--------------|
|
||||
| Impressed / Confident | Bold Signal, Electric Studio, Dark Botanical |
|
||||
| Excited / Energized | Creative Voltage, Neon Cyber, Split Pastel |
|
||||
| Calm / Focused | Notebook Tabs, Paper & Ink, Swiss Modern |
|
||||
| Inspired / Moved | Dark Botanical, Vintage Editorial, Pastel Geometry |
|
||||
|
||||
## Preset Catalog
|
||||
|
||||
### 1. Bold Signal
|
||||
|
||||
- Vibe: confident, high-impact, keynote-ready
|
||||
- Best for: pitch decks, launches, statements
|
||||
- Fonts: Archivo Black + Space Grotesk
|
||||
- Palette: charcoal base, hot orange focal card, crisp white text
|
||||
- Signature: oversized section numbers, high-contrast card on dark field
|
||||
|
||||
### 2. Electric Studio
|
||||
|
||||
- Vibe: clean, bold, agency-polished
|
||||
- Best for: client presentations, strategic reviews
|
||||
- Fonts: Manrope only
|
||||
- Palette: black, white, saturated cobalt accent
|
||||
- Signature: two-panel split and sharp editorial alignment
|
||||
|
||||
### 3. Creative Voltage
|
||||
|
||||
- Vibe: energetic, retro-modern, playful confidence
|
||||
- Best for: creative studios, brand work, product storytelling
|
||||
- Fonts: Syne + Space Mono
|
||||
- Palette: electric blue, neon yellow, deep navy
|
||||
- Signature: halftone textures, badges, punchy contrast
|
||||
|
||||
### 4. Dark Botanical
|
||||
|
||||
- Vibe: elegant, premium, atmospheric
|
||||
- Best for: luxury brands, thoughtful narratives, premium product decks
|
||||
- Fonts: Cormorant + IBM Plex Sans
|
||||
- Palette: near-black, warm ivory, blush, gold, terracotta
|
||||
- Signature: blurred abstract circles, fine rules, restrained motion
|
||||
|
||||
### 5. Notebook Tabs
|
||||
|
||||
- Vibe: editorial, organized, tactile
|
||||
- Best for: reports, reviews, structured storytelling
|
||||
- Fonts: Bodoni Moda + DM Sans
|
||||
- Palette: cream paper on charcoal with pastel tabs
|
||||
- Signature: paper sheet, colored side tabs, binder details
|
||||
|
||||
### 6. Pastel Geometry
|
||||
|
||||
- Vibe: approachable, modern, friendly
|
||||
- Best for: product overviews, onboarding, lighter brand decks
|
||||
- Fonts: Plus Jakarta Sans only
|
||||
- Palette: pale blue field, cream card, soft pink/mint/lavender accents
|
||||
- Signature: vertical pills, rounded cards, soft shadows
|
||||
|
||||
### 7. Split Pastel
|
||||
|
||||
- Vibe: playful, modern, creative
|
||||
- Best for: agency intros, workshops, portfolios
|
||||
- Fonts: Outfit only
|
||||
- Palette: peach + lavender split with mint badges
|
||||
- Signature: split backdrop, rounded tags, light grid overlays
|
||||
|
||||
### 8. Vintage Editorial
|
||||
|
||||
- Vibe: witty, personality-driven, magazine-inspired
|
||||
- Best for: personal brands, opinionated talks, storytelling
|
||||
- Fonts: Fraunces + Work Sans
|
||||
- Palette: cream, charcoal, dusty warm accents
|
||||
- Signature: geometric accents, bordered callouts, punchy serif headlines
|
||||
|
||||
### 9. Neon Cyber
|
||||
|
||||
- Vibe: futuristic, techy, kinetic
|
||||
- Best for: AI, infra, dev tools, future-of-X talks
|
||||
- Fonts: Clash Display + Satoshi
|
||||
- Palette: midnight navy, cyan, magenta
|
||||
- Signature: glow, particles, grids, data-radar energy
|
||||
|
||||
### 10. Terminal Green
|
||||
|
||||
- Vibe: developer-focused, hacker-clean
|
||||
- Best for: APIs, CLI tools, engineering demos
|
||||
- Fonts: JetBrains Mono only
|
||||
- Palette: GitHub dark + terminal green
|
||||
- Signature: scan lines, command-line framing, precise monospace rhythm
|
||||
|
||||
### 11. Swiss Modern
|
||||
|
||||
- Vibe: minimal, precise, data-forward
|
||||
- Best for: corporate, product strategy, analytics
|
||||
- Fonts: Archivo + Nunito
|
||||
- Palette: white, black, signal red
|
||||
- Signature: visible grids, asymmetry, geometric discipline
|
||||
|
||||
### 12. Paper & Ink
|
||||
|
||||
- Vibe: literary, thoughtful, story-driven
|
||||
- Best for: essays, keynote narratives, manifesto decks
|
||||
- Fonts: Cormorant Garamond + Source Serif 4
|
||||
- Palette: warm cream, charcoal, crimson accent
|
||||
- Signature: pull quotes, drop caps, elegant rules
|
||||
|
||||
## Direct Selection Prompts
|
||||
|
||||
If the user already knows the style they want, let them pick directly from the preset names above instead of forcing preview generation.
|
||||
|
||||
## Animation Feel Mapping
|
||||
|
||||
| Feeling | Motion Direction |
|
||||
|---------|------------------|
|
||||
| Dramatic / Cinematic | slow fades, parallax, large scale-ins |
|
||||
| Techy / Futuristic | glow, particles, grid motion, scramble text |
|
||||
| Playful / Friendly | springy easing, rounded shapes, floating motion |
|
||||
| Professional / Corporate | subtle 200-300ms transitions, clean slides |
|
||||
| Calm / Minimal | very restrained movement, whitespace-first |
|
||||
| Editorial / Magazine | strong hierarchy, staggered text and image interplay |
|
||||
|
||||
## CSS Gotcha: Negating Functions
|
||||
|
||||
Never write these:
|
||||
|
||||
```css
|
||||
right: -clamp(28px, 3.5vw, 44px);
|
||||
margin-left: -min(10vw, 100px);
|
||||
```
|
||||
|
||||
Browsers ignore them silently.
|
||||
|
||||
Always write this instead:
|
||||
|
||||
```css
|
||||
right: calc(-1 * clamp(28px, 3.5vw, 44px));
|
||||
margin-left: calc(-1 * min(10vw, 100px));
|
||||
```
|
||||
|
||||
## Validation Sizes
|
||||
|
||||
Test at minimum:
|
||||
- Desktop: `1920x1080`, `1440x900`, `1280x720`
|
||||
- Tablet: `1024x768`, `768x1024`
|
||||
- Mobile: `375x667`, `414x896`
|
||||
- Landscape phone: `667x375`, `896x414`
|
||||
|
||||
## Anti-Patterns
|
||||
|
||||
Do not use:
|
||||
- purple-on-white startup templates
|
||||
- Inter / Roboto / Arial as the visual voice unless the user explicitly wants utilitarian neutrality
|
||||
- bullet walls, tiny type, or code blocks that require scrolling
|
||||
- decorative illustrations when abstract geometry would do the job better
|
||||
96
.cursor/skills/investor-materials/SKILL.md
Normal file
96
.cursor/skills/investor-materials/SKILL.md
Normal file
@@ -0,0 +1,96 @@
|
||||
---
|
||||
name: investor-materials
|
||||
description: Create and update pitch decks, one-pagers, investor memos, accelerator applications, financial models, and fundraising materials. Use when the user needs investor-facing documents, projections, use-of-funds tables, milestone plans, or materials that must stay internally consistent across multiple fundraising assets.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Investor Materials
|
||||
|
||||
Build investor-facing materials that are consistent, credible, and easy to defend.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- creating or revising a pitch deck
|
||||
- writing an investor memo or one-pager
|
||||
- building a financial model, milestone plan, or use-of-funds table
|
||||
- answering accelerator or incubator application questions
|
||||
- aligning multiple fundraising docs around one source of truth
|
||||
|
||||
## Golden Rule
|
||||
|
||||
All investor materials must agree with each other.
|
||||
|
||||
Create or confirm a single source of truth before writing:
|
||||
- traction metrics
|
||||
- pricing and revenue assumptions
|
||||
- raise size and instrument
|
||||
- use of funds
|
||||
- team bios and titles
|
||||
- milestones and timelines
|
||||
|
||||
If conflicting numbers appear, stop and resolve them before drafting.
|
||||
|
||||
## Core Workflow
|
||||
|
||||
1. inventory the canonical facts
|
||||
2. identify missing assumptions
|
||||
3. choose the asset type
|
||||
4. draft the asset with explicit logic
|
||||
5. cross-check every number against the source of truth
|
||||
|
||||
## Asset Guidance
|
||||
|
||||
### Pitch Deck
|
||||
Recommended flow:
|
||||
1. company + wedge
|
||||
2. problem
|
||||
3. solution
|
||||
4. product / demo
|
||||
5. market
|
||||
6. business model
|
||||
7. traction
|
||||
8. team
|
||||
9. competition / differentiation
|
||||
10. ask
|
||||
11. use of funds / milestones
|
||||
12. appendix
|
||||
|
||||
If the user wants a web-native deck, pair this skill with `frontend-slides`.
|
||||
|
||||
### One-Pager / Memo
|
||||
- state what the company does in one clean sentence
|
||||
- show why now
|
||||
- include traction and proof points early
|
||||
- make the ask precise
|
||||
- keep claims easy to verify
|
||||
|
||||
### Financial Model
|
||||
Include:
|
||||
- explicit assumptions
|
||||
- bear / base / bull cases when useful
|
||||
- clean layer-by-layer revenue logic
|
||||
- milestone-linked spending
|
||||
- sensitivity analysis where the decision hinges on assumptions
|
||||
|
||||
### Accelerator Applications
|
||||
- answer the exact question asked
|
||||
- prioritize traction, insight, and team advantage
|
||||
- avoid puffery
|
||||
- keep internal metrics consistent with the deck and model
|
||||
|
||||
## Red Flags to Avoid
|
||||
|
||||
- unverifiable claims
|
||||
- fuzzy market sizing without assumptions
|
||||
- inconsistent team roles or titles
|
||||
- revenue math that does not sum cleanly
|
||||
- inflated certainty where assumptions are fragile
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- every number matches the current source of truth
|
||||
- use of funds and revenue layers sum correctly
|
||||
- assumptions are visible, not buried
|
||||
- the story is clear without hype language
|
||||
- the final asset is defensible in a partner meeting
|
||||
76
.cursor/skills/investor-outreach/SKILL.md
Normal file
76
.cursor/skills/investor-outreach/SKILL.md
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
name: investor-outreach
|
||||
description: Draft cold emails, warm intro blurbs, follow-ups, update emails, and investor communications for fundraising. Use when the user wants outreach to angels, VCs, strategic investors, or accelerators and needs concise, personalized, investor-facing messaging.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Investor Outreach
|
||||
|
||||
Write investor communication that is short, personalized, and easy to act on.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- writing a cold email to an investor
|
||||
- drafting a warm intro request
|
||||
- sending follow-ups after a meeting or no response
|
||||
- writing investor updates during a process
|
||||
- tailoring outreach based on fund thesis or partner fit
|
||||
|
||||
## Core Rules
|
||||
|
||||
1. Personalize every outbound message.
|
||||
2. Keep the ask low-friction.
|
||||
3. Use proof, not adjectives.
|
||||
4. Stay concise.
|
||||
5. Never send generic copy that could go to any investor.
|
||||
|
||||
## Cold Email Structure
|
||||
|
||||
1. subject line: short and specific
|
||||
2. opener: why this investor specifically
|
||||
3. pitch: what the company does, why now, what proof matters
|
||||
4. ask: one concrete next step
|
||||
5. sign-off: name, role, one credibility anchor if needed
|
||||
|
||||
## Personalization Sources
|
||||
|
||||
Reference one or more of:
|
||||
- relevant portfolio companies
|
||||
- a public thesis, talk, post, or article
|
||||
- a mutual connection
|
||||
- a clear market or product fit with the investor's focus
|
||||
|
||||
If that context is missing, ask for it or state that the draft is a template awaiting personalization.
|
||||
|
||||
## Follow-Up Cadence
|
||||
|
||||
Default:
|
||||
- day 0: initial outbound
|
||||
- day 4-5: short follow-up with one new data point
|
||||
- day 10-12: final follow-up with a clean close
|
||||
|
||||
Do not keep nudging after that unless the user wants a longer sequence.
|
||||
|
||||
## Warm Intro Requests
|
||||
|
||||
Make life easy for the connector:
|
||||
- explain why the intro is a fit
|
||||
- include a forwardable blurb
|
||||
- keep the forwardable blurb under 100 words
|
||||
|
||||
## Post-Meeting Updates
|
||||
|
||||
Include:
|
||||
- the specific thing discussed
|
||||
- the answer or update promised
|
||||
- one new proof point if available
|
||||
- the next step
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- message is personalized
|
||||
- the ask is explicit
|
||||
- there is no fluff or begging language
|
||||
- the proof point is concrete
|
||||
- word count stays tight
|
||||
75
.cursor/skills/market-research/SKILL.md
Normal file
75
.cursor/skills/market-research/SKILL.md
Normal file
@@ -0,0 +1,75 @@
|
||||
---
|
||||
name: market-research
|
||||
description: Conduct market research, competitive analysis, investor due diligence, and industry intelligence with source attribution and decision-oriented summaries. Use when the user wants market sizing, competitor comparisons, fund research, technology scans, or research that informs business decisions.
|
||||
origin: ECC
|
||||
---
|
||||
|
||||
# Market Research
|
||||
|
||||
Produce research that supports decisions, not research theater.
|
||||
|
||||
## When to Activate
|
||||
|
||||
- researching a market, category, company, investor, or technology trend
|
||||
- building TAM/SAM/SOM estimates
|
||||
- comparing competitors or adjacent products
|
||||
- preparing investor dossiers before outreach
|
||||
- pressure-testing a thesis before building, funding, or entering a market
|
||||
|
||||
## Research Standards
|
||||
|
||||
1. Every important claim needs a source.
|
||||
2. Prefer recent data and call out stale data.
|
||||
3. Include contrarian evidence and downside cases.
|
||||
4. Translate findings into a decision, not just a summary.
|
||||
5. Separate fact, inference, and recommendation clearly.
|
||||
|
||||
## Common Research Modes
|
||||
|
||||
### Investor / Fund Diligence
|
||||
Collect:
|
||||
- fund size, stage, and typical check size
|
||||
- relevant portfolio companies
|
||||
- public thesis and recent activity
|
||||
- reasons the fund is or is not a fit
|
||||
- any obvious red flags or mismatches
|
||||
|
||||
### Competitive Analysis
|
||||
Collect:
|
||||
- product reality, not marketing copy
|
||||
- funding and investor history if public
|
||||
- traction metrics if public
|
||||
- distribution and pricing clues
|
||||
- strengths, weaknesses, and positioning gaps
|
||||
|
||||
### Market Sizing
|
||||
Use:
|
||||
- top-down estimates from reports or public datasets
|
||||
- bottom-up sanity checks from realistic customer acquisition assumptions
|
||||
- explicit assumptions for every leap in logic
|
||||
|
||||
### Technology / Vendor Research
|
||||
Collect:
|
||||
- how it works
|
||||
- trade-offs and adoption signals
|
||||
- integration complexity
|
||||
- lock-in, security, compliance, and operational risk
|
||||
|
||||
## Output Format
|
||||
|
||||
Default structure:
|
||||
1. executive summary
|
||||
2. key findings
|
||||
3. implications
|
||||
4. risks and caveats
|
||||
5. recommendation
|
||||
6. sources
|
||||
|
||||
## Quality Gate
|
||||
|
||||
Before delivering:
|
||||
- all numbers are sourced or labeled as estimates
|
||||
- old data is flagged
|
||||
- the recommendation follows from the evidence
|
||||
- risks and counterarguments are included
|
||||
- the output makes a decision easier
|
||||
15
.github/FUNDING.yml
vendored
15
.github/FUNDING.yml
vendored
@@ -1,15 +1,2 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: [affaan-m]
|
||||
# patreon: # Replace with a single Patreon username
|
||||
# open_collective: # Replace with a single Open Collective username
|
||||
# ko_fi: # Replace with a single Ko-fi username
|
||||
# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
|
||||
# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-hierarchical-namespace-controller
|
||||
# liberapay: # Replace with a single Liberapay username
|
||||
# issuehunt: # Replace with a single IssueHunt username
|
||||
# lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-hierarchical-namespace-controller
|
||||
# polar: # Replace with a single Polar username
|
||||
# buy_me_a_coffee: # Replace with a single Buy Me a Coffee username
|
||||
# thanks_dev: # Replace with a single thanks.dev username
|
||||
github: affaan-m
|
||||
custom: ['https://ecc.tools']
|
||||
|
||||
20
.github/release.yml
vendored
Normal file
20
.github/release.yml
vendored
Normal file
@@ -0,0 +1,20 @@
|
||||
changelog:
|
||||
categories:
|
||||
- title: Core Harness
|
||||
labels:
|
||||
- enhancement
|
||||
- feature
|
||||
- title: Reliability & Bug Fixes
|
||||
labels:
|
||||
- bug
|
||||
- fix
|
||||
- title: Docs & Guides
|
||||
labels:
|
||||
- docs
|
||||
- title: Tooling & CI
|
||||
labels:
|
||||
- ci
|
||||
- chore
|
||||
exclude:
|
||||
labels:
|
||||
- skip-changelog
|
||||
18
.github/workflows/copilot-setup-steps.yml
vendored
18
.github/workflows/copilot-setup-steps.yml
vendored
@@ -1,18 +0,0 @@
|
||||
steps:
|
||||
- name: Setup Go environment
|
||||
uses: actions/setup-go@v6.2.0
|
||||
with:
|
||||
# The Go version to download (if necessary) and use. Supports semver spec and ranges. Be sure to enclose this option in single quotation marks.
|
||||
go-version: # optional
|
||||
# Path to the go.mod, go.work, .go-version, or .tool-versions file.
|
||||
go-version-file: # optional
|
||||
# Set this option to true if you want the action to always check for the latest available version that satisfies the version spec
|
||||
check-latest: # optional
|
||||
# Used to pull Go distributions from go-versions. Since there's a default, this is typically not supplied by the user. When running this action on github.com, the default value is sufficient. When running on GHES, you can pass a personal access token for github.com if you are experiencing rate limiting.
|
||||
token: # optional, default is ${{ github.server_url == 'https://github.com' && github.token || '' }}
|
||||
# Used to specify whether caching is needed. Set to true, if you'd like to enable caching.
|
||||
cache: # optional, default is true
|
||||
# Used to specify the path to a dependency file - go.sum
|
||||
cache-dependency-path: # optional
|
||||
# Target architecture for Go to use. Examples: x86, x64. Will use system architecture by default.
|
||||
architecture: # optional
|
||||
185
.github/workflows/monthly-metrics.yml
vendored
Normal file
185
.github/workflows/monthly-metrics.yml
vendored
Normal file
@@ -0,0 +1,185 @@
|
||||
name: Monthly Metrics Snapshot
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 14 1 * *' # Monthly on the 1st at 14:00 UTC
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
issues: write
|
||||
|
||||
jobs:
|
||||
snapshot:
|
||||
name: Update metrics issue
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Update monthly metrics issue
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const owner = context.repo.owner;
|
||||
const repo = context.repo.repo;
|
||||
const title = "Monthly Metrics Snapshot";
|
||||
const label = "metrics-snapshot";
|
||||
const monthKey = new Date().toISOString().slice(0, 7);
|
||||
|
||||
function parseLastPage(linkHeader) {
|
||||
if (!linkHeader) return null;
|
||||
const match = linkHeader.match(/&page=(\d+)>; rel="last"/);
|
||||
return match ? Number(match[1]) : null;
|
||||
}
|
||||
|
||||
function fmt(value) {
|
||||
if (value === null || value === undefined) return "n/a";
|
||||
return Number(value).toLocaleString("en-US");
|
||||
}
|
||||
|
||||
async function getNpmDownloads(range, pkg) {
|
||||
try {
|
||||
const res = await fetch(`https://api.npmjs.org/downloads/point/${range}/${pkg}`);
|
||||
if (!res.ok) return null;
|
||||
const data = await res.json();
|
||||
return data.downloads ?? null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function getContributorsCount() {
|
||||
try {
|
||||
const resp = await github.rest.repos.listContributors({
|
||||
owner,
|
||||
repo,
|
||||
per_page: 1,
|
||||
anon: "false"
|
||||
});
|
||||
return parseLastPage(resp.headers.link) ?? resp.data.length;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function getReleasesCount() {
|
||||
try {
|
||||
const resp = await github.rest.repos.listReleases({
|
||||
owner,
|
||||
repo,
|
||||
per_page: 1
|
||||
});
|
||||
return parseLastPage(resp.headers.link) ?? resp.data.length;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function getTraffic(metric) {
|
||||
try {
|
||||
const route = metric === "clones"
|
||||
? "GET /repos/{owner}/{repo}/traffic/clones"
|
||||
: "GET /repos/{owner}/{repo}/traffic/views";
|
||||
const resp = await github.request(route, { owner, repo });
|
||||
return resp.data?.count ?? null;
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
const [
|
||||
mainWeek,
|
||||
shieldWeek,
|
||||
mainMonth,
|
||||
shieldMonth,
|
||||
repoData,
|
||||
contributors,
|
||||
releases,
|
||||
views14d,
|
||||
clones14d
|
||||
] = await Promise.all([
|
||||
getNpmDownloads("last-week", "ecc-universal"),
|
||||
getNpmDownloads("last-week", "ecc-agentshield"),
|
||||
getNpmDownloads("last-month", "ecc-universal"),
|
||||
getNpmDownloads("last-month", "ecc-agentshield"),
|
||||
github.rest.repos.get({ owner, repo }),
|
||||
getContributorsCount(),
|
||||
getReleasesCount(),
|
||||
getTraffic("views"),
|
||||
getTraffic("clones")
|
||||
]);
|
||||
|
||||
const stars = repoData.data.stargazers_count;
|
||||
const forks = repoData.data.forks_count;
|
||||
|
||||
const tableHeader = [
|
||||
"| Month (UTC) | ecc-universal (week) | ecc-agentshield (week) | ecc-universal (30d) | ecc-agentshield (30d) | Stars | Forks | Contributors | GitHub App installs (manual) | Views (14d) | Clones (14d) | Releases |",
|
||||
"|---|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|---:|"
|
||||
].join("\n");
|
||||
|
||||
const row = `| ${monthKey} | ${fmt(mainWeek)} | ${fmt(shieldWeek)} | ${fmt(mainMonth)} | ${fmt(shieldMonth)} | ${fmt(stars)} | ${fmt(forks)} | ${fmt(contributors)} | n/a | ${fmt(views14d)} | ${fmt(clones14d)} | ${fmt(releases)} |`;
|
||||
|
||||
const intro = [
|
||||
"# Monthly Metrics Snapshot",
|
||||
"",
|
||||
"Automated monthly snapshot for sponsor/partner reporting.",
|
||||
"",
|
||||
"- `GitHub App installs (manual)` is intentionally manual until a stable public API path is available.",
|
||||
"- Traffic metrics are 14-day rolling windows from the GitHub traffic API and can show `n/a` if unavailable.",
|
||||
"",
|
||||
tableHeader
|
||||
].join("\n");
|
||||
|
||||
try {
|
||||
await github.rest.issues.getLabel({ owner, repo, name: label });
|
||||
} catch (error) {
|
||||
if (error.status === 404) {
|
||||
await github.rest.issues.createLabel({
|
||||
owner,
|
||||
repo,
|
||||
name: label,
|
||||
color: "0e8a16",
|
||||
description: "Automated monthly project metrics snapshots"
|
||||
});
|
||||
} else {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
const issuesResp = await github.rest.issues.listForRepo({
|
||||
owner,
|
||||
repo,
|
||||
state: "open",
|
||||
labels: label,
|
||||
per_page: 100
|
||||
});
|
||||
|
||||
let issue = issuesResp.data.find((item) => item.title === title);
|
||||
|
||||
if (!issue) {
|
||||
const created = await github.rest.issues.create({
|
||||
owner,
|
||||
repo,
|
||||
title,
|
||||
labels: [label],
|
||||
body: `${intro}\n${row}\n`
|
||||
});
|
||||
console.log(`Created issue #${created.data.number}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const currentBody = issue.body || "";
|
||||
if (currentBody.includes(`| ${monthKey} |`)) {
|
||||
console.log(`Issue #${issue.number} already has snapshot row for ${monthKey}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const body = currentBody.includes("| Month (UTC) |")
|
||||
? `${currentBody.trimEnd()}\n${row}\n`
|
||||
: `${intro}\n${row}\n`;
|
||||
|
||||
await github.rest.issues.update({
|
||||
owner,
|
||||
repo,
|
||||
issue_number: issue.number,
|
||||
body
|
||||
});
|
||||
console.log(`Updated issue #${issue.number}`);
|
||||
38
.github/workflows/release.yml
vendored
38
.github/workflows/release.yml
vendored
@@ -37,23 +37,31 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Generate changelog
|
||||
id: changelog
|
||||
- name: Generate release highlights
|
||||
id: highlights
|
||||
env:
|
||||
TAG_NAME: ${{ github.ref_name }}
|
||||
run: |
|
||||
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
|
||||
if [ -z "$PREV_TAG" ]; then
|
||||
COMMITS=$(git log --pretty=format:"- %s" HEAD)
|
||||
else
|
||||
COMMITS=$(git log --pretty=format:"- %s" ${PREV_TAG}..HEAD)
|
||||
fi
|
||||
echo "commits<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$COMMITS" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
TAG_VERSION="${TAG_NAME#v}"
|
||||
cat > release_body.md <<EOF
|
||||
## ECC ${TAG_VERSION}
|
||||
|
||||
### What This Release Focuses On
|
||||
- Harness reliability and hook stability across Claude Code, Cursor, OpenCode, and Codex
|
||||
- Stronger eval-driven workflows and quality gates
|
||||
- Better operator UX for autonomous loop execution
|
||||
|
||||
### Notable Changes
|
||||
- Session persistence and hook lifecycle fixes
|
||||
- Expanded skills and command coverage for harness performance work
|
||||
- Improved release-note generation and changelog hygiene
|
||||
|
||||
### Notes
|
||||
- For migration tips and compatibility notes, see README and CHANGELOG.
|
||||
EOF
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
body: |
|
||||
## Changes
|
||||
${{ steps.changelog.outputs.commits }}
|
||||
generate_release_notes: false
|
||||
body_path: release_body.md
|
||||
generate_release_notes: true
|
||||
|
||||
29
.github/workflows/reusable-release.yml
vendored
29
.github/workflows/reusable-release.yml
vendored
@@ -34,26 +34,23 @@ jobs:
|
||||
exit 1
|
||||
fi
|
||||
|
||||
- name: Generate changelog
|
||||
id: changelog
|
||||
- name: Generate release highlights
|
||||
env:
|
||||
TAG_NAME: ${{ inputs.tag }}
|
||||
run: |
|
||||
PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "")
|
||||
if [ -z "$PREV_TAG" ]; then
|
||||
COMMITS=$(git log --pretty=format:"- %s" HEAD)
|
||||
else
|
||||
COMMITS=$(git log --pretty=format:"- %s" ${PREV_TAG}..HEAD)
|
||||
fi
|
||||
# Use unique delimiter to prevent truncation if commit messages contain EOF
|
||||
DELIMITER="COMMITS_END_$(date +%s)"
|
||||
echo "commits<<${DELIMITER}" >> $GITHUB_OUTPUT
|
||||
echo "$COMMITS" >> $GITHUB_OUTPUT
|
||||
echo "${DELIMITER}" >> $GITHUB_OUTPUT
|
||||
TAG_VERSION="${TAG_NAME#v}"
|
||||
cat > release_body.md <<EOF
|
||||
## ECC ${TAG_VERSION}
|
||||
|
||||
### What This Release Focuses On
|
||||
- Harness reliability and cross-platform compatibility
|
||||
- Eval-driven quality improvements
|
||||
- Better workflow and operator ergonomics
|
||||
EOF
|
||||
|
||||
- name: Create GitHub Release
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: ${{ inputs.tag }}
|
||||
body: |
|
||||
## Changes
|
||||
${{ steps.changelog.outputs.commits }}
|
||||
body_path: release_body.md
|
||||
generate_release_notes: ${{ inputs.generate-notes }}
|
||||
|
||||
@@ -258,6 +258,8 @@ After migration, ALL 23 commands are available:
|
||||
| `/instinct-import` | Import instincts |
|
||||
| `/instinct-export` | Export instincts |
|
||||
| `/evolve` | Cluster instincts into skills |
|
||||
| `/promote` | Promote project instincts to global scope |
|
||||
| `/projects` | List known projects and instinct stats |
|
||||
|
||||
## Available Agents
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ opencode
|
||||
| go-build-resolver | Go build errors |
|
||||
| database-reviewer | Database optimization |
|
||||
|
||||
### Commands (24)
|
||||
### Commands (31)
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
@@ -95,6 +95,13 @@ opencode
|
||||
| `/instinct-import` | Import instincts |
|
||||
| `/instinct-export` | Export instincts |
|
||||
| `/evolve` | Cluster instincts |
|
||||
| `/promote` | Promote project instincts |
|
||||
| `/projects` | List known projects |
|
||||
| `/harness-audit` | Audit harness reliability and eval readiness |
|
||||
| `/loop-start` | Start controlled agentic loops |
|
||||
| `/loop-status` | Check loop state and checkpoints |
|
||||
| `/quality-gate` | Run quality gates on file/repo scope |
|
||||
| `/model-route` | Route tasks by model and budget |
|
||||
|
||||
### Plugin Hooks
|
||||
|
||||
@@ -128,25 +135,41 @@ OpenCode's plugin system maps to Claude Code hooks:
|
||||
|
||||
OpenCode has 20+ additional events not available in Claude Code.
|
||||
|
||||
### Hook Runtime Controls
|
||||
|
||||
OpenCode plugin hooks honor the same runtime controls used by Claude Code/Cursor:
|
||||
|
||||
```bash
|
||||
export ECC_HOOK_PROFILE=standard
|
||||
export ECC_DISABLED_HOOKS="pre:bash:tmux-reminder,post:edit:typecheck"
|
||||
```
|
||||
|
||||
- `ECC_HOOK_PROFILE`: `minimal`, `standard` (default), `strict`
|
||||
- `ECC_DISABLED_HOOKS`: comma-separated hook IDs to disable
|
||||
|
||||
## Skills
|
||||
|
||||
All 16 ECC skills are available via the `instructions` array:
|
||||
The default OpenCode config loads 11 curated ECC skills via the `instructions` array:
|
||||
|
||||
- coding-standards
|
||||
- backend-patterns
|
||||
- frontend-patterns
|
||||
- frontend-slides
|
||||
- security-review
|
||||
- tdd-workflow
|
||||
- continuous-learning
|
||||
- continuous-learning-v2
|
||||
- iterative-retrieval
|
||||
- strategic-compact
|
||||
- eval-harness
|
||||
- verification-loop
|
||||
- golang-patterns
|
||||
- golang-testing
|
||||
- clickhouse-io
|
||||
- pmx-guidelines
|
||||
- api-design
|
||||
- e2e-testing
|
||||
|
||||
Additional specialized skills are shipped in `skills/` but not loaded by default to keep OpenCode sessions lean:
|
||||
|
||||
- article-writing
|
||||
- content-engine
|
||||
- market-research
|
||||
- investor-materials
|
||||
- investor-outreach
|
||||
|
||||
## Configuration
|
||||
|
||||
|
||||
@@ -1,112 +1,36 @@
|
||||
---
|
||||
description: Cluster instincts into skills
|
||||
description: Analyze instincts and suggest or generate evolved structures
|
||||
agent: build
|
||||
---
|
||||
|
||||
# Evolve Command
|
||||
|
||||
Cluster related instincts into structured skills: $ARGUMENTS
|
||||
Analyze and evolve instincts in continuous-learning-v2: $ARGUMENTS
|
||||
|
||||
## Your Task
|
||||
|
||||
Analyze instincts and promote clusters to skills.
|
||||
Run:
|
||||
|
||||
## Evolution Process
|
||||
|
||||
### Step 1: Analyze Instincts
|
||||
|
||||
Group instincts by:
|
||||
- Trigger similarity
|
||||
- Action patterns
|
||||
- Category tags
|
||||
- Confidence levels
|
||||
|
||||
### Step 2: Identify Clusters
|
||||
|
||||
```
|
||||
Cluster: Error Handling
|
||||
├── Instinct: Catch specific errors (0.85)
|
||||
├── Instinct: Wrap errors with context (0.82)
|
||||
├── Instinct: Log errors with stack trace (0.78)
|
||||
└── Instinct: Return meaningful error messages (0.80)
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" evolve $ARGUMENTS
|
||||
```
|
||||
|
||||
### Step 3: Generate Skill
|
||||
If `CLAUDE_PLUGIN_ROOT` is unavailable, use:
|
||||
|
||||
When cluster has:
|
||||
- 3+ instincts
|
||||
- Average confidence > 0.75
|
||||
- Cohesive theme
|
||||
|
||||
Generate SKILL.md:
|
||||
|
||||
```markdown
|
||||
# Error Handling Skill
|
||||
|
||||
## Overview
|
||||
Patterns for robust error handling learned from session observations.
|
||||
|
||||
## Patterns
|
||||
|
||||
### 1. Catch Specific Errors
|
||||
**Trigger**: When catching errors with generic catch
|
||||
**Action**: Use specific error types
|
||||
|
||||
### 2. Wrap Errors with Context
|
||||
**Trigger**: When re-throwing errors
|
||||
**Action**: Add context with fmt.Errorf or Error.cause
|
||||
|
||||
### 3. Log with Stack Trace
|
||||
**Trigger**: When logging errors
|
||||
**Action**: Include stack trace for debugging
|
||||
|
||||
### 4. Meaningful Messages
|
||||
**Trigger**: When returning errors to users
|
||||
**Action**: Provide actionable error messages
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py evolve $ARGUMENTS
|
||||
```
|
||||
|
||||
### Step 4: Archive Instincts
|
||||
## Supported Args (v2.1)
|
||||
|
||||
Move evolved instincts to `archived/` with reference to skill.
|
||||
- no args: analysis only
|
||||
- `--generate`: also generate files under `evolved/{skills,commands,agents}`
|
||||
|
||||
## Evolution Report
|
||||
## Behavior Notes
|
||||
|
||||
```
|
||||
Evolution Summary
|
||||
=================
|
||||
|
||||
Clusters Found: X
|
||||
|
||||
Cluster 1: Error Handling
|
||||
- Instincts: 5
|
||||
- Avg Confidence: 0.82
|
||||
- Status: ✅ Promoted to skill
|
||||
|
||||
Cluster 2: Testing Patterns
|
||||
- Instincts: 3
|
||||
- Avg Confidence: 0.71
|
||||
- Status: ⏳ Needs more confidence
|
||||
|
||||
Cluster 3: Git Workflow
|
||||
- Instincts: 2
|
||||
- Avg Confidence: 0.88
|
||||
- Status: ⏳ Needs more instincts
|
||||
|
||||
Skills Created:
|
||||
- skills/error-handling/SKILL.md
|
||||
|
||||
Instincts Archived: 5
|
||||
Remaining Instincts: 12
|
||||
```
|
||||
|
||||
## Thresholds
|
||||
|
||||
| Metric | Threshold |
|
||||
|--------|-----------|
|
||||
| Min instincts per cluster | 3 |
|
||||
| Min average confidence | 0.75 |
|
||||
| Min cluster cohesion | 0.6 |
|
||||
|
||||
---
|
||||
|
||||
**TIP**: Run `/evolve` periodically to graduate instincts to skills as confidence grows.
|
||||
- Uses project + global instincts for analysis.
|
||||
- Shows skill/command/agent candidates from trigger and domain clustering.
|
||||
- Shows project -> global promotion candidates.
|
||||
- With `--generate`, output path is:
|
||||
- project context: `~/.claude/homunculus/projects/<project-id>/evolved/`
|
||||
- global fallback: `~/.claude/homunculus/evolved/`
|
||||
|
||||
58
.opencode/commands/harness-audit.md
Normal file
58
.opencode/commands/harness-audit.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Harness Audit Command
|
||||
|
||||
Audit the current repository's agent harness setup and return a prioritized scorecard.
|
||||
|
||||
## Usage
|
||||
|
||||
`/harness-audit [scope] [--format text|json]`
|
||||
|
||||
- `scope` (optional): `repo` (default), `hooks`, `skills`, `commands`, `agents`
|
||||
- `--format`: output style (`text` default, `json` for automation)
|
||||
|
||||
## What to Evaluate
|
||||
|
||||
Score each category from `0` to `10`:
|
||||
|
||||
1. Tool Coverage
|
||||
2. Context Efficiency
|
||||
3. Quality Gates
|
||||
4. Memory Persistence
|
||||
5. Eval Coverage
|
||||
6. Security Guardrails
|
||||
7. Cost Efficiency
|
||||
|
||||
## Output Contract
|
||||
|
||||
Return:
|
||||
|
||||
1. `overall_score` out of 70
|
||||
2. Category scores and concrete findings
|
||||
3. Top 3 actions with exact file paths
|
||||
4. Suggested ECC skills to apply next
|
||||
|
||||
## Checklist
|
||||
|
||||
- Inspect `hooks/hooks.json`, `scripts/hooks/`, and hook tests.
|
||||
- Inspect `skills/`, command coverage, and agent coverage.
|
||||
- Verify cross-harness parity for `.cursor/`, `.opencode/`, `.codex/`.
|
||||
- Flag broken or stale references.
|
||||
|
||||
## Example Result
|
||||
|
||||
```text
|
||||
Harness Audit (repo): 52/70
|
||||
- Quality Gates: 9/10
|
||||
- Eval Coverage: 6/10
|
||||
- Cost Efficiency: 4/10
|
||||
|
||||
Top 3 Actions:
|
||||
1) Add cost tracking hook in scripts/hooks/cost-tracker.js
|
||||
2) Add pass@k docs and templates in skills/eval-harness/SKILL.md
|
||||
3) Add command parity for /harness-audit in .opencode/commands/
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `repo|hooks|skills|commands|agents` (optional scope)
|
||||
- `--format text|json` (optional output format)
|
||||
@@ -1,75 +1,29 @@
|
||||
---
|
||||
description: View learned instincts with confidence scores
|
||||
description: Show learned instincts (project + global) with confidence
|
||||
agent: build
|
||||
---
|
||||
|
||||
# Instinct Status Command
|
||||
|
||||
Display learned instincts and their confidence scores: $ARGUMENTS
|
||||
Show instinct status from continuous-learning-v2: $ARGUMENTS
|
||||
|
||||
## Your Task
|
||||
|
||||
Read and display instincts from the continuous-learning-v2 system.
|
||||
Run:
|
||||
|
||||
## Instinct Location
|
||||
|
||||
Global: `~/.claude/instincts/`
|
||||
Project: `.claude/instincts/`
|
||||
|
||||
## Status Display
|
||||
|
||||
### Instinct Summary
|
||||
|
||||
| Category | Count | Avg Confidence |
|
||||
|----------|-------|----------------|
|
||||
| Coding | X | 0.XX |
|
||||
| Testing | X | 0.XX |
|
||||
| Security | X | 0.XX |
|
||||
| Git | X | 0.XX |
|
||||
|
||||
### High Confidence Instincts (>0.8)
|
||||
|
||||
```
|
||||
[trigger] → [action] (confidence: 0.XX)
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" status
|
||||
```
|
||||
|
||||
### Learning Progress
|
||||
If `CLAUDE_PLUGIN_ROOT` is unavailable, use:
|
||||
|
||||
- Total instincts: X
|
||||
- This session: X
|
||||
- Promoted to skills: X
|
||||
|
||||
### Recent Instincts
|
||||
|
||||
Last 5 instincts learned:
|
||||
|
||||
1. **[timestamp]** - [trigger] → [action]
|
||||
2. **[timestamp]** - [trigger] → [action]
|
||||
...
|
||||
|
||||
## Instinct Structure
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "instinct-123",
|
||||
"trigger": "When I see a try-catch without specific error type",
|
||||
"action": "Suggest using specific error types for better handling",
|
||||
"confidence": 0.75,
|
||||
"applications": 5,
|
||||
"successes": 4,
|
||||
"source": "session-observation",
|
||||
"timestamp": "2025-01-15T10:30:00Z"
|
||||
}
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
|
||||
```
|
||||
|
||||
## Confidence Calculation
|
||||
## Behavior Notes
|
||||
|
||||
```
|
||||
confidence = (successes + 1) / (applications + 2)
|
||||
```
|
||||
|
||||
Bayesian smoothing ensures new instincts don't have extreme confidence.
|
||||
|
||||
---
|
||||
|
||||
**TIP**: Use `/evolve` to cluster related instincts into skills when confidence is high.
|
||||
- Output includes both project-scoped and global instincts.
|
||||
- Project instincts override global instincts when IDs conflict.
|
||||
- Output is grouped by domain with confidence bars.
|
||||
- This command does not support extra filters in v2.1.
|
||||
|
||||
32
.opencode/commands/loop-start.md
Normal file
32
.opencode/commands/loop-start.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Loop Start Command
|
||||
|
||||
Start a managed autonomous loop pattern with safety defaults.
|
||||
|
||||
## Usage
|
||||
|
||||
`/loop-start [pattern] [--mode safe|fast]`
|
||||
|
||||
- `pattern`: `sequential`, `continuous-pr`, `rfc-dag`, `infinite`
|
||||
- `--mode`:
|
||||
- `safe` (default): strict quality gates and checkpoints
|
||||
- `fast`: reduced gates for speed
|
||||
|
||||
## Flow
|
||||
|
||||
1. Confirm repository state and branch strategy.
|
||||
2. Select loop pattern and model tier strategy.
|
||||
3. Enable required hooks/profile for the chosen mode.
|
||||
4. Create loop plan and write runbook under `.claude/plans/`.
|
||||
5. Print commands to start and monitor the loop.
|
||||
|
||||
## Required Safety Checks
|
||||
|
||||
- Verify tests pass before first loop iteration.
|
||||
- Ensure `ECC_HOOK_PROFILE` is not disabled globally.
|
||||
- Ensure loop has explicit stop condition.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `<pattern>` optional (`sequential|continuous-pr|rfc-dag|infinite`)
|
||||
- `--mode safe|fast` optional
|
||||
24
.opencode/commands/loop-status.md
Normal file
24
.opencode/commands/loop-status.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Loop Status Command
|
||||
|
||||
Inspect active loop state, progress, and failure signals.
|
||||
|
||||
## Usage
|
||||
|
||||
`/loop-status [--watch]`
|
||||
|
||||
## What to Report
|
||||
|
||||
- active loop pattern
|
||||
- current phase and last successful checkpoint
|
||||
- failing checks (if any)
|
||||
- estimated time/cost drift
|
||||
- recommended intervention (continue/pause/stop)
|
||||
|
||||
## Watch Mode
|
||||
|
||||
When `--watch` is present, refresh status periodically and surface state changes.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `--watch` optional
|
||||
26
.opencode/commands/model-route.md
Normal file
26
.opencode/commands/model-route.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Model Route Command
|
||||
|
||||
Recommend the best model tier for the current task by complexity and budget.
|
||||
|
||||
## Usage
|
||||
|
||||
`/model-route [task-description] [--budget low|med|high]`
|
||||
|
||||
## Routing Heuristic
|
||||
|
||||
- `haiku`: deterministic, low-risk mechanical changes
|
||||
- `sonnet`: default for implementation and refactors
|
||||
- `opus`: architecture, deep review, ambiguous requirements
|
||||
|
||||
## Required Output
|
||||
|
||||
- recommended model
|
||||
- confidence level
|
||||
- why this model fits
|
||||
- fallback model if first attempt fails
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `[task-description]` optional free-text
|
||||
- `--budget low|med|high` optional
|
||||
23
.opencode/commands/projects.md
Normal file
23
.opencode/commands/projects.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
description: List registered projects and instinct counts
|
||||
agent: build
|
||||
---
|
||||
|
||||
# Projects Command
|
||||
|
||||
Show continuous-learning-v2 project registry and stats: $ARGUMENTS
|
||||
|
||||
## Your Task
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" projects
|
||||
```
|
||||
|
||||
If `CLAUDE_PLUGIN_ROOT` is unavailable, use:
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py projects
|
||||
```
|
||||
|
||||
23
.opencode/commands/promote.md
Normal file
23
.opencode/commands/promote.md
Normal file
@@ -0,0 +1,23 @@
|
||||
---
|
||||
description: Promote project instincts to global scope
|
||||
agent: build
|
||||
---
|
||||
|
||||
# Promote Command
|
||||
|
||||
Promote instincts in continuous-learning-v2: $ARGUMENTS
|
||||
|
||||
## Your Task
|
||||
|
||||
Run:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" promote $ARGUMENTS
|
||||
```
|
||||
|
||||
If `CLAUDE_PLUGIN_ROOT` is unavailable, use:
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py promote $ARGUMENTS
|
||||
```
|
||||
|
||||
29
.opencode/commands/quality-gate.md
Normal file
29
.opencode/commands/quality-gate.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Quality Gate Command
|
||||
|
||||
Run the ECC quality pipeline on demand for a file or project scope.
|
||||
|
||||
## Usage
|
||||
|
||||
`/quality-gate [path|.] [--fix] [--strict]`
|
||||
|
||||
- default target: current directory (`.`)
|
||||
- `--fix`: allow auto-format/fix where configured
|
||||
- `--strict`: fail on warnings where supported
|
||||
|
||||
## Pipeline
|
||||
|
||||
1. Detect language/tooling for target.
|
||||
2. Run formatter checks.
|
||||
3. Run lint/type checks when available.
|
||||
4. Produce a concise remediation list.
|
||||
|
||||
## Notes
|
||||
|
||||
This command mirrors hook behavior but is operator-invoked.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `[path|.]` optional target path
|
||||
- `--fix` optional
|
||||
- `--strict` optional
|
||||
@@ -11,6 +11,7 @@
|
||||
"skills/security-review/SKILL.md",
|
||||
"skills/coding-standards/SKILL.md",
|
||||
"skills/frontend-patterns/SKILL.md",
|
||||
"skills/frontend-slides/SKILL.md",
|
||||
"skills/backend-patterns/SKILL.md",
|
||||
"skills/e2e-testing/SKILL.md",
|
||||
"skills/verification-loop/SKILL.md",
|
||||
@@ -302,6 +303,14 @@
|
||||
"evolve": {
|
||||
"description": "Cluster instincts into skills",
|
||||
"template": "{file:.opencode/commands/evolve.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"promote": {
|
||||
"description": "Promote project instincts to global scope",
|
||||
"template": "{file:.opencode/commands/promote.md}\n\n$ARGUMENTS"
|
||||
},
|
||||
"projects": {
|
||||
"description": "List known projects and instinct stats",
|
||||
"template": "{file:.opencode/commands/projects.md}\n\n$ARGUMENTS"
|
||||
}
|
||||
},
|
||||
"permission": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "ecc-universal",
|
||||
"version": "1.6.0",
|
||||
"version": "1.8.0",
|
||||
"description": "Everything Claude Code (ECC) plugin for OpenCode - agents, commands, hooks, and skills",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
|
||||
@@ -21,6 +21,8 @@ export const ECCHooksPlugin = async ({
|
||||
directory,
|
||||
worktree,
|
||||
}: PluginInput) => {
|
||||
type HookProfile = "minimal" | "standard" | "strict"
|
||||
|
||||
// Track files edited in current session for console.log audit
|
||||
const editedFiles = new Set<string>()
|
||||
|
||||
@@ -28,6 +30,40 @@ export const ECCHooksPlugin = async ({
|
||||
const log = (level: "debug" | "info" | "warn" | "error", message: string) =>
|
||||
client.app.log({ body: { service: "ecc", level, message } })
|
||||
|
||||
const normalizeProfile = (value: string | undefined): HookProfile => {
|
||||
if (value === "minimal" || value === "strict") return value
|
||||
return "standard"
|
||||
}
|
||||
|
||||
const currentProfile = normalizeProfile(process.env.ECC_HOOK_PROFILE)
|
||||
const disabledHooks = new Set(
|
||||
(process.env.ECC_DISABLED_HOOKS || "")
|
||||
.split(",")
|
||||
.map((item) => item.trim())
|
||||
.filter(Boolean)
|
||||
)
|
||||
|
||||
const profileOrder: Record<HookProfile, number> = {
|
||||
minimal: 0,
|
||||
standard: 1,
|
||||
strict: 2,
|
||||
}
|
||||
|
||||
const profileAllowed = (required: HookProfile | HookProfile[]): boolean => {
|
||||
if (Array.isArray(required)) {
|
||||
return required.some((entry) => profileOrder[currentProfile] >= profileOrder[entry])
|
||||
}
|
||||
return profileOrder[currentProfile] >= profileOrder[required]
|
||||
}
|
||||
|
||||
const hookEnabled = (
|
||||
hookId: string,
|
||||
requiredProfile: HookProfile | HookProfile[] = "standard"
|
||||
): boolean => {
|
||||
if (disabledHooks.has(hookId)) return false
|
||||
return profileAllowed(requiredProfile)
|
||||
}
|
||||
|
||||
return {
|
||||
/**
|
||||
* Prettier Auto-Format Hook
|
||||
@@ -41,7 +77,7 @@ export const ECCHooksPlugin = async ({
|
||||
editedFiles.add(event.path)
|
||||
|
||||
// Auto-format JS/TS files
|
||||
if (event.path.match(/\.(ts|tsx|js|jsx)$/)) {
|
||||
if (hookEnabled("post:edit:format", ["standard", "strict"]) && event.path.match(/\.(ts|tsx|js|jsx)$/)) {
|
||||
try {
|
||||
await $`prettier --write ${event.path} 2>/dev/null`
|
||||
log("info", `[ECC] Formatted: ${event.path}`)
|
||||
@@ -51,7 +87,7 @@ export const ECCHooksPlugin = async ({
|
||||
}
|
||||
|
||||
// Console.log warning check
|
||||
if (event.path.match(/\.(ts|tsx|js|jsx)$/)) {
|
||||
if (hookEnabled("post:edit:console-warn", ["standard", "strict"]) && event.path.match(/\.(ts|tsx|js|jsx)$/)) {
|
||||
try {
|
||||
const result = await $`grep -n "console\\.log" ${event.path} 2>/dev/null`.text()
|
||||
if (result.trim()) {
|
||||
@@ -80,6 +116,7 @@ export const ECCHooksPlugin = async ({
|
||||
) => {
|
||||
// Check if a TypeScript file was edited
|
||||
if (
|
||||
hookEnabled("post:edit:typecheck", ["standard", "strict"]) &&
|
||||
input.tool === "edit" &&
|
||||
input.args?.filePath?.match(/\.tsx?$/)
|
||||
) {
|
||||
@@ -98,7 +135,11 @@ export const ECCHooksPlugin = async ({
|
||||
}
|
||||
|
||||
// PR creation logging
|
||||
if (input.tool === "bash" && input.args?.toString().includes("gh pr create")) {
|
||||
if (
|
||||
hookEnabled("post:bash:pr-created", ["standard", "strict"]) &&
|
||||
input.tool === "bash" &&
|
||||
input.args?.toString().includes("gh pr create")
|
||||
) {
|
||||
log("info", "[ECC] PR created - check GitHub Actions status")
|
||||
}
|
||||
},
|
||||
@@ -115,6 +156,7 @@ export const ECCHooksPlugin = async ({
|
||||
) => {
|
||||
// Git push review reminder
|
||||
if (
|
||||
hookEnabled("pre:bash:git-push-reminder", "strict") &&
|
||||
input.tool === "bash" &&
|
||||
input.args?.toString().includes("git push")
|
||||
) {
|
||||
@@ -126,6 +168,7 @@ export const ECCHooksPlugin = async ({
|
||||
|
||||
// Block creation of unnecessary documentation files
|
||||
if (
|
||||
hookEnabled("pre:write:doc-file-warning", ["standard", "strict"]) &&
|
||||
input.tool === "write" &&
|
||||
input.args?.filePath &&
|
||||
typeof input.args.filePath === "string"
|
||||
@@ -146,7 +189,7 @@ export const ECCHooksPlugin = async ({
|
||||
}
|
||||
|
||||
// Long-running command reminder
|
||||
if (input.tool === "bash") {
|
||||
if (hookEnabled("pre:bash:tmux-reminder", "strict") && input.tool === "bash") {
|
||||
const cmd = String(input.args?.command || input.args || "")
|
||||
if (
|
||||
cmd.match(/^(npm|pnpm|yarn|bun)\s+(install|build|test|run)/) ||
|
||||
@@ -169,7 +212,9 @@ export const ECCHooksPlugin = async ({
|
||||
* Action: Loads context and displays welcome message
|
||||
*/
|
||||
"session.created": async () => {
|
||||
log("info", "[ECC] Session started - Everything Claude Code hooks active")
|
||||
if (!hookEnabled("session:start", ["minimal", "standard", "strict"])) return
|
||||
|
||||
log("info", `[ECC] Session started - profile=${currentProfile}`)
|
||||
|
||||
// Check for project-specific context files
|
||||
try {
|
||||
@@ -190,6 +235,7 @@ export const ECCHooksPlugin = async ({
|
||||
* Action: Runs console.log audit on all edited files
|
||||
*/
|
||||
"session.idle": async () => {
|
||||
if (!hookEnabled("stop:check-console-log", ["minimal", "standard", "strict"])) return
|
||||
if (editedFiles.size === 0) return
|
||||
|
||||
log("info", "[ECC] Session idle - running console.log audit")
|
||||
@@ -244,6 +290,7 @@ export const ECCHooksPlugin = async ({
|
||||
* Action: Final cleanup and state saving
|
||||
*/
|
||||
"session.deleted": async () => {
|
||||
if (!hookEnabled("session:end-marker", ["minimal", "standard", "strict"])) return
|
||||
log("info", "[ECC] Session ended - cleaning up")
|
||||
editedFiles.clear()
|
||||
},
|
||||
@@ -285,8 +332,10 @@ export const ECCHooksPlugin = async ({
|
||||
*/
|
||||
"shell.env": async () => {
|
||||
const env: Record<string, string> = {
|
||||
ECC_VERSION: "1.6.0",
|
||||
ECC_VERSION: "1.8.0",
|
||||
ECC_PLUGIN: "true",
|
||||
ECC_HOOK_PROFILE: currentProfile,
|
||||
ECC_DISABLED_HOOKS: process.env.ECC_DISABLED_HOOKS || "",
|
||||
PROJECT_ROOT: worktree || directory,
|
||||
}
|
||||
|
||||
@@ -343,7 +392,7 @@ export const ECCHooksPlugin = async ({
|
||||
const contextBlock = [
|
||||
"# ECC Context (preserve across compaction)",
|
||||
"",
|
||||
"## Active Plugin: Everything Claude Code v1.6.0",
|
||||
"## Active Plugin: Everything Claude Code v1.8.0",
|
||||
"- Hooks: file.edited, tool.execute.before/after, session.created/idle/deleted, shell.env, compacting, permission.ask",
|
||||
"- Tools: run-tests, check-coverage, security-audit, format-code, lint-check, git-summary",
|
||||
"- Agents: 13 specialized (planner, architect, tdd-guide, code-reviewer, security-reviewer, build-error-resolver, e2e-runner, refactor-cleaner, doc-updater, go-reviewer, go-build-resolver, database-reviewer, python-reviewer)",
|
||||
|
||||
@@ -1,66 +1,68 @@
|
||||
/**
|
||||
* ECC Custom Tool: Format Code
|
||||
*
|
||||
* Language-aware code formatter that auto-detects the project's formatter.
|
||||
* Supports: Biome/Prettier (JS/TS), Black (Python), gofmt (Go), rustfmt (Rust)
|
||||
* Returns the formatter command that should be run for a given file.
|
||||
* This avoids shell execution assumptions while still giving precise guidance.
|
||||
*/
|
||||
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import { z } from "zod"
|
||||
import { tool } from "@opencode-ai/plugin/tool"
|
||||
import * as path from "path"
|
||||
import * as fs from "fs"
|
||||
|
||||
type Formatter = "biome" | "prettier" | "black" | "gofmt" | "rustfmt"
|
||||
|
||||
export default tool({
|
||||
name: "format-code",
|
||||
description: "Format a file using the project's configured formatter. Auto-detects Biome, Prettier, Black, gofmt, or rustfmt.",
|
||||
parameters: z.object({
|
||||
filePath: z.string().describe("Path to the file to format"),
|
||||
formatter: z.string().optional().describe("Override formatter: biome, prettier, black, gofmt, rustfmt (default: auto-detect)"),
|
||||
}),
|
||||
execute: async ({ filePath, formatter }, { $ }) => {
|
||||
const ext = filePath.split(".").pop()?.toLowerCase() || ""
|
||||
|
||||
// Auto-detect formatter based on file extension and config files
|
||||
let detected = formatter
|
||||
if (!detected) {
|
||||
if (["ts", "tsx", "js", "jsx", "json", "css", "scss"].includes(ext)) {
|
||||
// Check for Biome first, then Prettier
|
||||
try {
|
||||
await $`test -f biome.json || test -f biome.jsonc`
|
||||
detected = "biome"
|
||||
} catch {
|
||||
detected = "prettier"
|
||||
}
|
||||
} else if (["py", "pyi"].includes(ext)) {
|
||||
detected = "black"
|
||||
} else if (ext === "go") {
|
||||
detected = "gofmt"
|
||||
} else if (ext === "rs") {
|
||||
detected = "rustfmt"
|
||||
}
|
||||
}
|
||||
description:
|
||||
"Detect formatter for a file and return the exact command to run (Biome, Prettier, Black, gofmt, rustfmt).",
|
||||
args: {
|
||||
filePath: tool.schema.string().describe("Path to the file to format"),
|
||||
formatter: tool.schema
|
||||
.enum(["biome", "prettier", "black", "gofmt", "rustfmt"])
|
||||
.optional()
|
||||
.describe("Optional formatter override"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const cwd = context.worktree || context.directory
|
||||
const ext = args.filePath.split(".").pop()?.toLowerCase() || ""
|
||||
const detected = args.formatter || detectFormatter(cwd, ext)
|
||||
|
||||
if (!detected) {
|
||||
return { formatted: false, message: `No formatter detected for .${ext} files` }
|
||||
return JSON.stringify({
|
||||
success: false,
|
||||
message: `No formatter detected for .${ext} files`,
|
||||
})
|
||||
}
|
||||
|
||||
const commands: Record<string, string> = {
|
||||
biome: `npx @biomejs/biome format --write ${filePath}`,
|
||||
prettier: `npx prettier --write ${filePath}`,
|
||||
black: `black ${filePath}`,
|
||||
gofmt: `gofmt -w ${filePath}`,
|
||||
rustfmt: `rustfmt ${filePath}`,
|
||||
}
|
||||
|
||||
const cmd = commands[detected]
|
||||
if (!cmd) {
|
||||
return { formatted: false, message: `Unknown formatter: ${detected}` }
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await $`${cmd}`.text()
|
||||
return { formatted: true, formatter: detected, output: result }
|
||||
} catch (error: unknown) {
|
||||
const err = error as { stderr?: string }
|
||||
return { formatted: false, formatter: detected, error: err.stderr || "Format failed" }
|
||||
}
|
||||
const command = buildFormatterCommand(detected, args.filePath)
|
||||
return JSON.stringify({
|
||||
success: true,
|
||||
formatter: detected,
|
||||
command,
|
||||
instructions: `Run this command:\n\n${command}`,
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
function detectFormatter(cwd: string, ext: string): Formatter | null {
|
||||
if (["ts", "tsx", "js", "jsx", "json", "css", "scss", "md", "yaml", "yml"].includes(ext)) {
|
||||
if (fs.existsSync(path.join(cwd, "biome.json")) || fs.existsSync(path.join(cwd, "biome.jsonc"))) {
|
||||
return "biome"
|
||||
}
|
||||
return "prettier"
|
||||
}
|
||||
if (["py", "pyi"].includes(ext)) return "black"
|
||||
if (ext === "go") return "gofmt"
|
||||
if (ext === "rs") return "rustfmt"
|
||||
return null
|
||||
}
|
||||
|
||||
function buildFormatterCommand(formatter: Formatter, filePath: string): string {
|
||||
const commands: Record<Formatter, string> = {
|
||||
biome: `npx @biomejs/biome format --write ${filePath}`,
|
||||
prettier: `npx prettier --write ${filePath}`,
|
||||
black: `black ${filePath}`,
|
||||
gofmt: `gofmt -w ${filePath}`,
|
||||
rustfmt: `rustfmt ${filePath}`,
|
||||
}
|
||||
return commands[formatter]
|
||||
}
|
||||
|
||||
@@ -1,56 +1,54 @@
|
||||
/**
|
||||
* ECC Custom Tool: Git Summary
|
||||
*
|
||||
* Provides a comprehensive git status including branch info, status,
|
||||
* recent log, and diff against base branch.
|
||||
* Returns branch/status/log/diff details for the active repository.
|
||||
*/
|
||||
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import { z } from "zod"
|
||||
import { tool } from "@opencode-ai/plugin/tool"
|
||||
import { execSync } from "child_process"
|
||||
|
||||
export default tool({
|
||||
name: "git-summary",
|
||||
description: "Get comprehensive git summary: branch, status, recent log, and diff against base branch.",
|
||||
parameters: z.object({
|
||||
depth: z.number().optional().describe("Number of recent commits to show (default: 5)"),
|
||||
includeDiff: z.boolean().optional().describe("Include diff against base branch (default: true)"),
|
||||
baseBranch: z.string().optional().describe("Base branch for comparison (default: main)"),
|
||||
}),
|
||||
execute: async ({ depth = 5, includeDiff = true, baseBranch = "main" }, { $ }) => {
|
||||
const results: Record<string, string> = {}
|
||||
description:
|
||||
"Generate git summary with branch, status, recent commits, and optional diff stats.",
|
||||
args: {
|
||||
depth: tool.schema
|
||||
.number()
|
||||
.optional()
|
||||
.describe("Number of recent commits to include (default: 5)"),
|
||||
includeDiff: tool.schema
|
||||
.boolean()
|
||||
.optional()
|
||||
.describe("Include diff stats against base branch (default: true)"),
|
||||
baseBranch: tool.schema
|
||||
.string()
|
||||
.optional()
|
||||
.describe("Base branch for diff comparison (default: main)"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const cwd = context.worktree || context.directory
|
||||
const depth = args.depth ?? 5
|
||||
const includeDiff = args.includeDiff ?? true
|
||||
const baseBranch = args.baseBranch ?? "main"
|
||||
|
||||
try {
|
||||
results.branch = (await $`git branch --show-current`.text()).trim()
|
||||
} catch {
|
||||
results.branch = "unknown"
|
||||
}
|
||||
|
||||
try {
|
||||
results.status = (await $`git status --short`.text()).trim()
|
||||
} catch {
|
||||
results.status = "unable to get status"
|
||||
}
|
||||
|
||||
try {
|
||||
results.log = (await $`git log --oneline -${depth}`.text()).trim()
|
||||
} catch {
|
||||
results.log = "unable to get log"
|
||||
const result: Record<string, string> = {
|
||||
branch: run("git branch --show-current", cwd) || "unknown",
|
||||
status: run("git status --short", cwd) || "clean",
|
||||
log: run(`git log --oneline -${depth}`, cwd) || "no commits found",
|
||||
}
|
||||
|
||||
if (includeDiff) {
|
||||
try {
|
||||
results.stagedDiff = (await $`git diff --cached --stat`.text()).trim()
|
||||
} catch {
|
||||
results.stagedDiff = ""
|
||||
}
|
||||
|
||||
try {
|
||||
results.branchDiff = (await $`git diff ${baseBranch}...HEAD --stat`.text()).trim()
|
||||
} catch {
|
||||
results.branchDiff = `unable to diff against ${baseBranch}`
|
||||
}
|
||||
result.stagedDiff = run("git diff --cached --stat", cwd) || ""
|
||||
result.branchDiff = run(`git diff ${baseBranch}...HEAD --stat`, cwd) || `unable to diff against ${baseBranch}`
|
||||
}
|
||||
|
||||
return results
|
||||
return JSON.stringify(result)
|
||||
},
|
||||
})
|
||||
|
||||
function run(command: string, cwd: string): string {
|
||||
try {
|
||||
return execSync(command, { cwd, encoding: "utf-8", stdio: ["ignore", "pipe", "pipe"] }).trim()
|
||||
} catch {
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,74 +1,85 @@
|
||||
/**
|
||||
* ECC Custom Tool: Lint Check
|
||||
*
|
||||
* Multi-language linter that auto-detects the project's linting tool.
|
||||
* Supports: ESLint/Biome (JS/TS), Pylint/Ruff (Python), golangci-lint (Go)
|
||||
* Detects the appropriate linter and returns a runnable lint command.
|
||||
*/
|
||||
|
||||
import { tool } from "@opencode-ai/plugin"
|
||||
import { z } from "zod"
|
||||
import { tool } from "@opencode-ai/plugin/tool"
|
||||
import * as path from "path"
|
||||
import * as fs from "fs"
|
||||
|
||||
type Linter = "biome" | "eslint" | "ruff" | "pylint" | "golangci-lint"
|
||||
|
||||
export default tool({
|
||||
name: "lint-check",
|
||||
description: "Run linter on files or directories. Auto-detects ESLint, Biome, Ruff, Pylint, or golangci-lint.",
|
||||
parameters: z.object({
|
||||
target: z.string().optional().describe("File or directory to lint (default: current directory)"),
|
||||
fix: z.boolean().optional().describe("Auto-fix issues if supported (default: false)"),
|
||||
linter: z.string().optional().describe("Override linter: eslint, biome, ruff, pylint, golangci-lint (default: auto-detect)"),
|
||||
}),
|
||||
execute: async ({ target = ".", fix = false, linter }, { $ }) => {
|
||||
// Auto-detect linter
|
||||
let detected = linter
|
||||
if (!detected) {
|
||||
try {
|
||||
await $`test -f biome.json || test -f biome.jsonc`
|
||||
detected = "biome"
|
||||
} catch {
|
||||
try {
|
||||
await $`test -f .eslintrc.json || test -f .eslintrc.js || test -f .eslintrc.cjs || test -f eslint.config.js || test -f eslint.config.mjs`
|
||||
detected = "eslint"
|
||||
} catch {
|
||||
try {
|
||||
await $`test -f pyproject.toml && grep -q "ruff" pyproject.toml`
|
||||
detected = "ruff"
|
||||
} catch {
|
||||
try {
|
||||
await $`test -f .golangci.yml || test -f .golangci.yaml`
|
||||
detected = "golangci-lint"
|
||||
} catch {
|
||||
// Fall back based on file extensions in target
|
||||
detected = "eslint"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
description:
|
||||
"Detect linter for a target path and return command for check/fix runs.",
|
||||
args: {
|
||||
target: tool.schema
|
||||
.string()
|
||||
.optional()
|
||||
.describe("File or directory to lint (default: current directory)"),
|
||||
fix: tool.schema
|
||||
.boolean()
|
||||
.optional()
|
||||
.describe("Enable auto-fix mode"),
|
||||
linter: tool.schema
|
||||
.enum(["biome", "eslint", "ruff", "pylint", "golangci-lint"])
|
||||
.optional()
|
||||
.describe("Optional linter override"),
|
||||
},
|
||||
async execute(args, context) {
|
||||
const cwd = context.worktree || context.directory
|
||||
const target = args.target || "."
|
||||
const fix = args.fix ?? false
|
||||
const detected = args.linter || detectLinter(cwd)
|
||||
|
||||
const fixFlag = fix ? " --fix" : ""
|
||||
const commands: Record<string, string> = {
|
||||
biome: `npx @biomejs/biome lint${fix ? " --write" : ""} ${target}`,
|
||||
eslint: `npx eslint${fixFlag} ${target}`,
|
||||
ruff: `ruff check${fixFlag} ${target}`,
|
||||
pylint: `pylint ${target}`,
|
||||
"golangci-lint": `golangci-lint run${fixFlag} ${target}`,
|
||||
}
|
||||
|
||||
const cmd = commands[detected]
|
||||
if (!cmd) {
|
||||
return { success: false, message: `Unknown linter: ${detected}` }
|
||||
}
|
||||
|
||||
try {
|
||||
const result = await $`${cmd}`.text()
|
||||
return { success: true, linter: detected, output: result, issues: 0 }
|
||||
} catch (error: unknown) {
|
||||
const err = error as { stdout?: string; stderr?: string }
|
||||
return {
|
||||
success: false,
|
||||
linter: detected,
|
||||
output: err.stdout || "",
|
||||
errors: err.stderr || "",
|
||||
}
|
||||
}
|
||||
const command = buildLintCommand(detected, target, fix)
|
||||
return JSON.stringify({
|
||||
success: true,
|
||||
linter: detected,
|
||||
command,
|
||||
instructions: `Run this command:\n\n${command}`,
|
||||
})
|
||||
},
|
||||
})
|
||||
|
||||
function detectLinter(cwd: string): Linter {
|
||||
if (fs.existsSync(path.join(cwd, "biome.json")) || fs.existsSync(path.join(cwd, "biome.jsonc"))) {
|
||||
return "biome"
|
||||
}
|
||||
|
||||
const eslintConfigs = [
|
||||
".eslintrc.json",
|
||||
".eslintrc.js",
|
||||
".eslintrc.cjs",
|
||||
"eslint.config.js",
|
||||
"eslint.config.mjs",
|
||||
]
|
||||
if (eslintConfigs.some((name) => fs.existsSync(path.join(cwd, name)))) {
|
||||
return "eslint"
|
||||
}
|
||||
|
||||
const pyprojectPath = path.join(cwd, "pyproject.toml")
|
||||
if (fs.existsSync(pyprojectPath)) {
|
||||
try {
|
||||
const content = fs.readFileSync(pyprojectPath, "utf-8")
|
||||
if (content.includes("ruff")) return "ruff"
|
||||
} catch {
|
||||
// ignore read errors and keep fallback logic
|
||||
}
|
||||
}
|
||||
|
||||
if (fs.existsSync(path.join(cwd, ".golangci.yml")) || fs.existsSync(path.join(cwd, ".golangci.yaml"))) {
|
||||
return "golangci-lint"
|
||||
}
|
||||
|
||||
return "eslint"
|
||||
}
|
||||
|
||||
function buildLintCommand(linter: Linter, target: string, fix: boolean): string {
|
||||
if (linter === "biome") return `npx @biomejs/biome lint${fix ? " --write" : ""} ${target}`
|
||||
if (linter === "eslint") return `npx eslint${fix ? " --fix" : ""} ${target}`
|
||||
if (linter === "ruff") return `ruff check${fix ? " --fix" : ""} ${target}`
|
||||
if (linter === "pylint") return `pylint ${target}`
|
||||
return `golangci-lint run ${target}`
|
||||
}
|
||||
|
||||
8
.prettierrc
Normal file
8
.prettierrc
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none",
|
||||
"semi": true,
|
||||
"tabWidth": 2,
|
||||
"printWidth": 200,
|
||||
"arrowParens": "avoid"
|
||||
}
|
||||
46
CHANGELOG.md
Normal file
46
CHANGELOG.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Changelog
|
||||
|
||||
## 1.8.0 - 2026-03-04
|
||||
|
||||
### Highlights
|
||||
|
||||
- Harness-first release focused on reliability, eval discipline, and autonomous loop operations.
|
||||
- Hook runtime now supports profile-based control and targeted hook disabling.
|
||||
- NanoClaw v2 adds model routing, skill hot-load, branching, search, compaction, export, and metrics.
|
||||
|
||||
### Core
|
||||
|
||||
- Added new commands: `/harness-audit`, `/loop-start`, `/loop-status`, `/quality-gate`, `/model-route`.
|
||||
- Added new skills:
|
||||
- `agent-harness-construction`
|
||||
- `agentic-engineering`
|
||||
- `ralphinho-rfc-pipeline`
|
||||
- `ai-first-engineering`
|
||||
- `enterprise-agent-ops`
|
||||
- `nanoclaw-repl`
|
||||
- `continuous-agent-loop`
|
||||
- Added new agents:
|
||||
- `harness-optimizer`
|
||||
- `loop-operator`
|
||||
|
||||
### Hook Reliability
|
||||
|
||||
- Fixed SessionStart root resolution with robust fallback search.
|
||||
- Moved session summary persistence to `Stop` where transcript payload is available.
|
||||
- Added quality-gate and cost-tracker hooks.
|
||||
- Replaced fragile inline hook one-liners with dedicated script files.
|
||||
- Added `ECC_HOOK_PROFILE` and `ECC_DISABLED_HOOKS` controls.
|
||||
|
||||
### Cross-Platform
|
||||
|
||||
- Improved Windows-safe path handling in doc warning logic.
|
||||
- Hardened observer loop behavior to avoid non-interactive hangs.
|
||||
|
||||
### Notes
|
||||
|
||||
- `autonomous-loops` is kept as a compatibility alias for one release; `continuous-agent-loop` is the canonical name.
|
||||
|
||||
### Credits
|
||||
|
||||
- inspired by [zarazhangrui](https://github.com/zarazhangrui)
|
||||
- homunculus-inspired by [humanplane](https://github.com/humanplane)
|
||||
128
CODE_OF_CONDUCT.md
Normal file
128
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
@@ -62,7 +62,7 @@ cp -r skills/my-skill ~/.claude/skills/ # for skills
|
||||
# Then test with Claude Code
|
||||
|
||||
# 5. Submit PR
|
||||
git add . && git commit -m "feat: add my-skill" && git push
|
||||
git add . && git commit -m "feat: add my-skill" && git push -u origin feat/my-contribution
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
149
README.md
149
README.md
@@ -5,6 +5,9 @@
|
||||
[](https://github.com/affaan-m/everything-claude-code/stargazers)
|
||||
[](https://github.com/affaan-m/everything-claude-code/network/members)
|
||||
[](https://github.com/affaan-m/everything-claude-code/graphs/contributors)
|
||||
[](https://www.npmjs.com/package/ecc-universal)
|
||||
[](https://www.npmjs.com/package/ecc-agentshield)
|
||||
[](https://github.com/marketplace/ecc-tools)
|
||||
[](LICENSE)
|
||||

|
||||

|
||||
@@ -27,9 +30,29 @@
|
||||
|
||||
---
|
||||
|
||||
**The complete collection of Claude Code configs from an Anthropic hackathon winner.**
|
||||
**The performance optimization system for AI agent harnesses. From an Anthropic hackathon winner.**
|
||||
|
||||
Production-ready agents, skills, hooks, commands, rules, and MCP configurations evolved over 10+ months of intensive daily use building real products.
|
||||
Not just configs. A complete system: skills, instincts, memory optimization, continuous learning, security scanning, and research-first development. Production-ready agents, hooks, commands, rules, and MCP configurations evolved over 10+ months of intensive daily use building real products.
|
||||
|
||||
Works across **Claude Code**, **Codex**, **Cowork**, and other AI agent harnesses.
|
||||
|
||||
---
|
||||
|
||||
## Traction & Distribution
|
||||
|
||||
Use these live signals when presenting ECC to sponsors, platforms, or ecosystem partners:
|
||||
|
||||
- **Main package installs:** [`ecc-universal` on npm](https://www.npmjs.com/package/ecc-universal)
|
||||
- **Security companion installs:** [`ecc-agentshield` on npm](https://www.npmjs.com/package/ecc-agentshield)
|
||||
- **GitHub App distribution:** [ECC Tools marketplace listing](https://github.com/marketplace/ecc-tools)
|
||||
- **Automated monthly metrics issue:** powered by `.github/workflows/monthly-metrics.yml`
|
||||
- **Repo adoption signal:** stars/forks/contributors badges at the top of this README
|
||||
|
||||
Download counts for Claude Code plugin installs are not currently exposed as a public API. For partner reporting, combine npm metrics with GitHub App installs and repository traffic/fork growth.
|
||||
|
||||
For a sponsor-call metrics checklist and command snippets, see [`docs/business/metrics-and-sponsorship.md`](docs/business/metrics-and-sponsorship.md).
|
||||
|
||||
[**Sponsor ECC**](https://github.com/sponsors/affaan-m) | [Sponsor Tiers](SPONSORS.md) | [Sponsorship Program](SPONSORING.md)
|
||||
|
||||
---
|
||||
|
||||
@@ -69,6 +92,24 @@ This repo is the raw code only. The guides explain everything.
|
||||
|
||||
## What's New
|
||||
|
||||
### v1.8.0 — Harness Performance System (Mar 2026)
|
||||
|
||||
- **Harness-first release** — ECC is now explicitly framed as an agent harness performance system, not just a config pack.
|
||||
- **Hook reliability overhaul** — SessionStart root fallback, Stop-phase session summaries, and script-based hooks replacing fragile inline one-liners.
|
||||
- **Hook runtime controls** — `ECC_HOOK_PROFILE=minimal|standard|strict` and `ECC_DISABLED_HOOKS=...` for runtime gating without editing hook files.
|
||||
- **New harness commands** — `/harness-audit`, `/loop-start`, `/loop-status`, `/quality-gate`, `/model-route`.
|
||||
- **NanoClaw v2** — model routing, skill hot-load, session branch/search/export/compact/metrics.
|
||||
- **Cross-harness parity** — behavior tightened across Claude Code, Cursor, OpenCode, and Codex app/CLI.
|
||||
- **997 internal tests passing** — full suite green after hook/runtime refactor and compatibility updates.
|
||||
|
||||
### v1.7.0 — Cross-Platform Expansion & Presentation Builder (Feb 2026)
|
||||
|
||||
- **Codex app + CLI support** — Direct `AGENTS.md`-based Codex support, installer targeting, and Codex docs
|
||||
- **`frontend-slides` skill** — Zero-dependency HTML presentation builder with PPTX conversion guidance and strict viewport-fit rules
|
||||
- **5 new generic business/content skills** — `article-writing`, `content-engine`, `market-research`, `investor-materials`, `investor-outreach`
|
||||
- **Broader tool coverage** — Cursor, Codex, and OpenCode support tightened so the same repo ships cleanly across all major harnesses
|
||||
- **992 internal tests** — Expanded validation and regression coverage across plugin, hooks, skills, and packaging
|
||||
|
||||
### v1.6.0 — Codex CLI, AgentShield & Marketplace (Feb 2026)
|
||||
|
||||
- **Codex CLI support** — New `/codex-setup` command generates `codex.md` for OpenAI Codex CLI compatibility
|
||||
@@ -126,7 +167,6 @@ Get up and running in under 2 minutes:
|
||||
|
||||
> ⚠️ **Important:** Claude Code plugins cannot distribute `rules` automatically. Install them manually:
|
||||
|
||||
|
||||
```bash
|
||||
# Clone the repo first
|
||||
git clone https://github.com/affaan-m/everything-claude-code.git
|
||||
@@ -138,6 +178,8 @@ cd everything-claude-code
|
||||
# ./install.sh typescript python golang
|
||||
# or target cursor:
|
||||
# ./install.sh --target cursor typescript
|
||||
# or target antigravity:
|
||||
# ./install.sh --target antigravity typescript
|
||||
```
|
||||
|
||||
For manual install instructions see the README in the `rules/` folder.
|
||||
@@ -155,13 +197,13 @@ For manual install instructions see the README in the `rules/` folder.
|
||||
/plugin list everything-claude-code@everything-claude-code
|
||||
```
|
||||
|
||||
✨ **That's it!** You now have access to 13 agents, 48 skills, and 32 commands.
|
||||
✨ **That's it!** You now have access to 16 agents, 65 skills, and 40 commands.
|
||||
|
||||
---
|
||||
|
||||
## 🌐 Cross-Platform Support
|
||||
|
||||
This plugin now fully supports **Windows, macOS, and Linux**. All hooks and scripts have been rewritten in Node.js for maximum compatibility.
|
||||
This plugin now fully supports **Windows, macOS, and Linux**, alongside tight integration across major IDEs (Cursor, OpenCode, Antigravity) and CLI harnesses. All hooks and scripts have been rewritten in Node.js for maximum compatibility.
|
||||
|
||||
### Package Manager Detection
|
||||
|
||||
@@ -192,6 +234,18 @@ node scripts/setup-package-manager.js --detect
|
||||
|
||||
Or use the `/setup-pm` command in Claude Code.
|
||||
|
||||
### Hook Runtime Controls
|
||||
|
||||
Use runtime flags to tune strictness or disable specific hooks temporarily:
|
||||
|
||||
```bash
|
||||
# Hook strictness profile (default: standard)
|
||||
export ECC_HOOK_PROFILE=standard
|
||||
|
||||
# Comma-separated hook IDs to disable
|
||||
export ECC_DISABLED_HOOKS="pre:bash:tmux-reminder,post:edit:typecheck"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 What's Inside
|
||||
@@ -224,6 +278,12 @@ everything-claude-code/
|
||||
| |-- clickhouse-io/ # ClickHouse analytics, queries, data engineering
|
||||
| |-- backend-patterns/ # API, database, caching patterns
|
||||
| |-- frontend-patterns/ # React, Next.js patterns
|
||||
| |-- frontend-slides/ # HTML slide decks and PPTX-to-web presentation workflows (NEW)
|
||||
| |-- article-writing/ # Long-form writing in a supplied voice without generic AI tone (NEW)
|
||||
| |-- content-engine/ # Multi-platform social content and repurposing workflows (NEW)
|
||||
| |-- market-research/ # Source-attributed market, competitor, and investor research (NEW)
|
||||
| |-- investor-materials/ # Pitch decks, one-pagers, memos, and financial models (NEW)
|
||||
| |-- investor-outreach/ # Personalized fundraising outreach and follow-up (NEW)
|
||||
| |-- continuous-learning/ # Auto-extract patterns from sessions (Longform Guide)
|
||||
| |-- continuous-learning-v2/ # Instinct-based learning with confidence scoring
|
||||
| |-- iterative-retrieval/ # Progressive context refinement for subagents
|
||||
@@ -268,6 +328,8 @@ everything-claude-code/
|
||||
| |-- liquid-glass-design/ # iOS 26 Liquid Glass design system (NEW)
|
||||
| |-- foundation-models-on-device/ # Apple on-device LLM with FoundationModels (NEW)
|
||||
| |-- swift-concurrency-6-2/ # Swift 6.2 Approachable Concurrency (NEW)
|
||||
| |-- autonomous-loops/ # Autonomous loop patterns: sequential pipelines, PR loops, DAG orchestration (NEW)
|
||||
| |-- plankton-code-quality/ # Write-time code quality enforcement with Plankton hooks (NEW)
|
||||
|
|
||||
|-- commands/ # Slash commands for quick execution
|
||||
| |-- tdd.md # /tdd - Test-driven development
|
||||
@@ -427,6 +489,10 @@ Use `/security-scan` in Claude Code to run it, or add to CI with the [GitHub Act
|
||||
|
||||
[GitHub](https://github.com/affaan-m/agentshield) | [npm](https://www.npmjs.com/package/ecc-agentshield)
|
||||
|
||||
### 🔬 Plankton — Write-Time Code Quality Enforcement
|
||||
|
||||
Plankton (credit: @alxfazio) is a recommended companion for write-time code quality enforcement. It runs formatters and 20+ linters on every file edit via PostToolUse hooks, then spawns Claude subprocesses (routed to Haiku/Sonnet/Opus by violation complexity) to fix issues the main agent missed. Three-phase architecture: auto-format silently (40-50% of issues), collect remaining violations as structured JSON, delegate fixes to a subprocess. Includes config protection hooks that prevent agents from modifying linter configs to pass instead of fixing code. Supports Python, TypeScript, Shell, YAML, JSON, TOML, Markdown, and Dockerfile. Use alongside AgentShield for security + quality coverage. See `skills/plankton-code-quality/` for full integration guide.
|
||||
|
||||
### 🧠 Continuous Learning v2
|
||||
|
||||
The instinct-based learning system automatically learns your patterns:
|
||||
@@ -544,8 +610,15 @@ cp -r everything-claude-code/rules/golang/* ~/.claude/rules/
|
||||
# Copy commands
|
||||
cp everything-claude-code/commands/*.md ~/.claude/commands/
|
||||
|
||||
# Copy skills
|
||||
cp -r everything-claude-code/skills/* ~/.claude/skills/
|
||||
# Copy skills (core vs niche)
|
||||
# Recommended (new users): core/general skills only
|
||||
cp -r everything-claude-code/.agents/skills/* ~/.claude/skills/
|
||||
cp -r everything-claude-code/skills/search-first ~/.claude/skills/
|
||||
|
||||
# Optional: add niche/framework-specific skills only when needed
|
||||
# for s in django-patterns django-tdd springboot-patterns; do
|
||||
# cp -r everything-claude-code/skills/$s ~/.claude/skills/
|
||||
# done
|
||||
```
|
||||
|
||||
#### Add hooks to settings.json
|
||||
@@ -717,12 +790,13 @@ Each component is fully independent.
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><b>Does this work with Cursor / OpenCode / Codex?</b></summary>
|
||||
<summary><b>Does this work with Cursor / OpenCode / Codex / Antigravity?</b></summary>
|
||||
|
||||
Yes. ECC is cross-platform:
|
||||
- **Cursor**: Pre-translated configs in `.cursor/`. See [Cursor IDE Support](#cursor-ide-support).
|
||||
- **OpenCode**: Full plugin support in `.opencode/`. See [OpenCode Support](#-opencode-support).
|
||||
- **Codex**: First-class support with adapter drift guards and SessionStart fallback. See PR [#257](https://github.com/affaan-m/everything-claude-code/pull/257).
|
||||
- **Codex**: First-class support for both macOS app and CLI, with adapter drift guards and SessionStart fallback. See PR [#257](https://github.com/affaan-m/everything-claude-code/pull/257).
|
||||
- **Antigravity**: Tightly integrated setup for workflows, skills, and flatten rules in `.agent/`.
|
||||
- **Claude Code**: Native — this is the primary target.
|
||||
</details>
|
||||
|
||||
@@ -796,7 +870,7 @@ ECC provides **full Cursor IDE support** with hooks, rules, agents, skills, comm
|
||||
| Hook Scripts | 16 | Thin Node.js scripts delegating to `scripts/hooks/` via shared adapter |
|
||||
| Rules | 29 | 9 common (alwaysApply) + 20 language-specific (TypeScript, Python, Go, Swift) |
|
||||
| Agents | Shared | Via AGENTS.md at root (read by Cursor natively) |
|
||||
| Skills | Shared | Via AGENTS.md at root |
|
||||
| Skills | Shared + Bundled | Via AGENTS.md at root and `.cursor/skills/` for translated additions |
|
||||
| Commands | Shared | `.cursor/commands/` if installed |
|
||||
| MCP Config | Shared | `.cursor/mcp.json` if installed |
|
||||
|
||||
@@ -830,27 +904,32 @@ alwaysApply: false
|
||||
|
||||
---
|
||||
|
||||
## Codex CLI Support
|
||||
## Codex macOS App + CLI Support
|
||||
|
||||
ECC provides **first-class Codex CLI support** with a reference configuration, Codex-specific AGENTS.md supplement, and 10 ported skills.
|
||||
ECC provides **first-class Codex support** for both the macOS app and CLI, with a reference configuration, Codex-specific AGENTS.md supplement, and shared skills.
|
||||
|
||||
### Quick Start (Codex)
|
||||
### Quick Start (Codex App + CLI)
|
||||
|
||||
```bash
|
||||
# Copy the reference config to your home directory
|
||||
cp .codex/config.toml ~/.codex/config.toml
|
||||
|
||||
# Run Codex in the repo — AGENTS.md is auto-detected
|
||||
# Run Codex CLI in the repo — AGENTS.md is auto-detected
|
||||
codex
|
||||
```
|
||||
|
||||
Codex macOS app:
|
||||
- Open this repository as your workspace.
|
||||
- The root `AGENTS.md` is auto-detected.
|
||||
- Optional: copy `.codex/config.toml` to `~/.codex/config.toml` for CLI/app behavior consistency.
|
||||
|
||||
### What's Included
|
||||
|
||||
| Component | Count | Details |
|
||||
|-----------|-------|---------|
|
||||
| Config | 1 | `.codex/config.toml` — model, permissions, MCP servers, persistent instructions |
|
||||
| AGENTS.md | 2 | Root (universal) + `.codex/AGENTS.md` (Codex-specific supplement) |
|
||||
| Skills | 10 | `.agents/skills/` — SKILL.md + agents/openai.yaml per skill |
|
||||
| Skills | 16 | `.agents/skills/` — SKILL.md + agents/openai.yaml per skill |
|
||||
| MCP Servers | 4 | GitHub, Context7, Memory, Sequential Thinking (command-based) |
|
||||
| Profiles | 2 | `strict` (read-only sandbox) and `yolo` (full auto-approve) |
|
||||
|
||||
@@ -864,6 +943,12 @@ Skills at `.agents/skills/` are auto-loaded by Codex:
|
||||
| security-review | Comprehensive security checklist |
|
||||
| coding-standards | Universal coding standards |
|
||||
| frontend-patterns | React/Next.js patterns |
|
||||
| frontend-slides | HTML presentations, PPTX conversion, visual style exploration |
|
||||
| article-writing | Long-form writing from notes and voice references |
|
||||
| content-engine | Platform-native social content and repurposing |
|
||||
| market-research | Source-attributed market and competitor research |
|
||||
| investor-materials | Decks, memos, models, and one-pagers |
|
||||
| investor-outreach | Personalized outreach, follow-ups, and intro blurbs |
|
||||
| backend-patterns | API design, database, caching |
|
||||
| e2e-testing | Playwright E2E tests |
|
||||
| eval-harness | Eval-driven development |
|
||||
@@ -873,7 +958,7 @@ Skills at `.agents/skills/` are auto-loaded by Codex:
|
||||
|
||||
### Key Limitation
|
||||
|
||||
Codex CLI does **not yet support hooks** ([GitHub Issue #2109](https://github.com/openai/codex/issues/2109), 430+ upvotes). Security enforcement is instruction-based via `persistent_instructions` in config.toml and the sandbox permission system.
|
||||
Codex does **not yet provide Claude-style hook execution parity**. ECC enforcement there is instruction-based via `AGENTS.md` and `persistent_instructions`, plus sandbox permissions.
|
||||
|
||||
---
|
||||
|
||||
@@ -897,9 +982,9 @@ The configuration is automatically detected from `.opencode/opencode.json`.
|
||||
|
||||
| Feature | Claude Code | OpenCode | Status |
|
||||
|---------|-------------|----------|--------|
|
||||
| Agents | ✅ 13 agents | ✅ 12 agents | **Claude Code leads** |
|
||||
| Commands | ✅ 33 commands | ✅ 24 commands | **Claude Code leads** |
|
||||
| Skills | ✅ 50+ skills | ✅ 37 skills | **Claude Code leads** |
|
||||
| Agents | ✅ 16 agents | ✅ 12 agents | **Claude Code leads** |
|
||||
| Commands | ✅ 40 commands | ✅ 31 commands | **Claude Code leads** |
|
||||
| Skills | ✅ 65 skills | ✅ 37 skills | **Claude Code leads** |
|
||||
| Hooks | ✅ 8 event types | ✅ 11 events | **OpenCode has more!** |
|
||||
| Rules | ✅ 29 rules | ✅ 13 instructions | **Claude Code leads** |
|
||||
| MCP Servers | ✅ 14 servers | ✅ Full | **Full parity** |
|
||||
@@ -919,7 +1004,7 @@ OpenCode's plugin system is MORE sophisticated than Claude Code with 20+ event t
|
||||
|
||||
**Additional OpenCode events**: `file.edited`, `file.watcher.updated`, `message.updated`, `lsp.client.diagnostics`, `tui.toast.show`, and more.
|
||||
|
||||
### Available Commands (32)
|
||||
### Available Commands (31+)
|
||||
|
||||
| Command | Description |
|
||||
|---------|-------------|
|
||||
@@ -953,8 +1038,15 @@ OpenCode's plugin system is MORE sophisticated than Claude Code with 20+ event t
|
||||
| `/instinct-import` | Import instincts |
|
||||
| `/instinct-export` | Export instincts |
|
||||
| `/evolve` | Cluster instincts into skills |
|
||||
| `/promote` | Promote project instincts to global scope |
|
||||
| `/projects` | List known projects and instinct stats |
|
||||
| `/learn-eval` | Extract and evaluate patterns before saving |
|
||||
| `/setup-pm` | Configure package manager |
|
||||
| `/harness-audit` | Audit harness reliability, eval readiness, and risk posture |
|
||||
| `/loop-start` | Start controlled agentic loop execution pattern |
|
||||
| `/loop-status` | Inspect active loop status and checkpoints |
|
||||
| `/quality-gate` | Run quality gate checks for paths or entire repo |
|
||||
| `/model-route` | Route tasks to models by complexity and budget |
|
||||
|
||||
### Plugin Installation
|
||||
|
||||
@@ -991,11 +1083,11 @@ ECC is the **first plugin to maximize every major AI coding tool**. Here's how e
|
||||
|
||||
| Feature | Claude Code | Cursor IDE | Codex CLI | OpenCode |
|
||||
|---------|------------|------------|-----------|----------|
|
||||
| **Agents** | 13 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 |
|
||||
| **Commands** | 33 | Shared | Instruction-based | 24 |
|
||||
| **Skills** | 50+ | Shared | 10 (native format) | 37 |
|
||||
| **Agents** | 16 | Shared (AGENTS.md) | Shared (AGENTS.md) | 12 |
|
||||
| **Commands** | 40 | Shared | Instruction-based | 31 |
|
||||
| **Skills** | 65 | Shared | 10 (native format) | 37 |
|
||||
| **Hook Events** | 8 types | 15 types | None yet | 11 types |
|
||||
| **Hook Scripts** | 9 scripts | 16 scripts (DRY adapter) | N/A | Plugin hooks |
|
||||
| **Hook Scripts** | 20+ scripts | 16 scripts (DRY adapter) | N/A | Plugin hooks |
|
||||
| **Rules** | 29 (common + lang) | 29 (YAML frontmatter) | Instruction-based | 13 instructions |
|
||||
| **Custom Tools** | Via hooks | Via hooks | N/A | 6 native tools |
|
||||
| **MCP Servers** | 14 | Shared (mcp.json) | 4 (command-based) | Full |
|
||||
@@ -1003,7 +1095,7 @@ ECC is the **first plugin to maximize every major AI coding tool**. Here's how e
|
||||
| **Context File** | CLAUDE.md + AGENTS.md | AGENTS.md | AGENTS.md | AGENTS.md |
|
||||
| **Secret Detection** | Hook-based | beforeSubmitPrompt hook | Sandbox-based | Hook-based |
|
||||
| **Auto-Format** | PostToolUse hook | afterFileEdit hook | N/A | file.edited hook |
|
||||
| **Version** | Plugin | Plugin | Reference config | 1.6.0 |
|
||||
| **Version** | Plugin | Plugin | Reference config | 1.8.0 |
|
||||
|
||||
**Key architectural decisions:**
|
||||
- **AGENTS.md** at root is the universal cross-tool file (read by all 4 tools)
|
||||
@@ -1019,6 +1111,11 @@ I've been using Claude Code since the experimental rollout. Won the Anthropic x
|
||||
|
||||
These configs are battle-tested across multiple production applications.
|
||||
|
||||
## Inspiration Credits
|
||||
|
||||
- inspired by [zarazhangrui](https://github.com/zarazhangrui)
|
||||
- homunculus-inspired by [humanplane](https://github.com/humanplane)
|
||||
|
||||
---
|
||||
|
||||
## Token Optimization
|
||||
@@ -1123,7 +1220,7 @@ These configs work for my workflow. You should:
|
||||
|
||||
This project is free and open source. Sponsors help keep it maintained and growing.
|
||||
|
||||
[**Become a Sponsor**](https://github.com/sponsors/affaan-m) | [Sponsor Tiers](SPONSORS.md)
|
||||
[**Become a Sponsor**](https://github.com/sponsors/affaan-m) | [Sponsor Tiers](SPONSORS.md) | [Sponsorship Program](SPONSORING.md)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -287,6 +287,8 @@ everything-claude-code/
|
||||
/instinct-import <file> # 从他人导入直觉
|
||||
/instinct-export # 导出你的直觉以供分享
|
||||
/evolve # 将相关直觉聚类到技能中
|
||||
/promote # 将项目级直觉提升为全局直觉
|
||||
/projects # 查看已识别项目与直觉统计
|
||||
```
|
||||
|
||||
完整文档见 `skills/continuous-learning-v2/`。
|
||||
|
||||
43
SPONSORING.md
Normal file
43
SPONSORING.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Sponsoring ECC
|
||||
|
||||
ECC is maintained as an open-source agent harness performance system across Claude Code, Cursor, OpenCode, and Codex app/CLI.
|
||||
|
||||
## Why Sponsor
|
||||
|
||||
Sponsorship directly funds:
|
||||
|
||||
- Faster bug-fix and release cycles
|
||||
- Cross-platform parity work across harnesses
|
||||
- Public docs, skills, and reliability tooling that remain free for the community
|
||||
|
||||
## Sponsorship Tiers
|
||||
|
||||
These are practical starting points and can be adjusted for partnership scope.
|
||||
|
||||
| Tier | Price | Best For | Includes |
|
||||
|------|-------|----------|----------|
|
||||
| Pilot Partner | $200/mo | First sponsor engagement | Monthly metrics update, roadmap preview, prioritized maintainer feedback |
|
||||
| Growth Partner | $500/mo | Teams actively adopting ECC | Pilot benefits + monthly office-hours sync + workflow integration guidance |
|
||||
| Strategic Partner | $1,000+/mo | Platform/ecosystem partnerships | Growth benefits + coordinated launch support + deeper maintainer collaboration |
|
||||
|
||||
## Sponsor Reporting
|
||||
|
||||
Metrics shared monthly can include:
|
||||
|
||||
- npm downloads (`ecc-universal`, `ecc-agentshield`)
|
||||
- Repository adoption (stars, forks, contributors)
|
||||
- GitHub App install trend
|
||||
- Release cadence and reliability milestones
|
||||
|
||||
For exact command snippets and a repeatable pull process, see [`docs/business/metrics-and-sponsorship.md`](docs/business/metrics-and-sponsorship.md).
|
||||
|
||||
## Expectations and Scope
|
||||
|
||||
- Sponsorship supports maintenance and acceleration; it does not transfer project ownership.
|
||||
- Feature requests are prioritized based on sponsor tier, ecosystem impact, and maintenance risk.
|
||||
- Security and reliability fixes take precedence over net-new features.
|
||||
|
||||
## Sponsor Here
|
||||
|
||||
- GitHub Sponsors: [https://github.com/sponsors/affaan-m](https://github.com/sponsors/affaan-m)
|
||||
- Project site: [https://ecc.tools](https://ecc.tools)
|
||||
12
SPONSORS.md
12
SPONSORS.md
@@ -29,6 +29,17 @@ Your sponsorship helps:
|
||||
- **Better support** — Sponsors get priority responses
|
||||
- **Shape the roadmap** — Pro+ sponsors vote on features
|
||||
|
||||
## Sponsor Readiness Signals
|
||||
|
||||
Use these proof points in sponsor conversations:
|
||||
|
||||
- Live npm install/download metrics for `ecc-universal` and `ecc-agentshield`
|
||||
- GitHub App distribution via Marketplace installs
|
||||
- Public adoption signals: stars, forks, contributors, release cadence
|
||||
- Cross-harness support: Claude Code, Cursor, OpenCode, Codex app/CLI
|
||||
|
||||
See [`docs/business/metrics-and-sponsorship.md`](docs/business/metrics-and-sponsorship.md) for a copy/paste metrics pull workflow.
|
||||
|
||||
## Sponsor Tiers
|
||||
|
||||
| Tier | Price | Benefits |
|
||||
@@ -37,6 +48,7 @@ Your sponsorship helps:
|
||||
| Builder | $10/mo | Premium tools access |
|
||||
| Pro | $25/mo | Priority support, office hours |
|
||||
| Team | $100/mo | 5 seats, team configs |
|
||||
| Harness Partner | $200/mo | Monthly roadmap sync, prioritized maintainer feedback, release-note mention |
|
||||
| Business | $500/mo | 25 seats, consulting credit |
|
||||
| Enterprise | $2K/mo | Unlimited seats, custom tools |
|
||||
|
||||
|
||||
@@ -146,6 +146,6 @@ claude /schedule-reply "Reply to Sarah about the board meeting"
|
||||
## Prerequisites
|
||||
|
||||
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code)
|
||||
- Gmail CLI (e.g., [gog](https://github.com/pterm/gog))
|
||||
- Gmail CLI (e.g., gog by @pterm)
|
||||
- Node.js 18+ (for calendar-suggest.js)
|
||||
- Optional: Slack MCP server, Matrix bridge (LINE), Chrome + Playwright (Messenger)
|
||||
|
||||
@@ -222,3 +222,16 @@ When available, also check project-specific conventions from `CLAUDE.md` or proj
|
||||
- State management conventions (Zustand, Redux, Context)
|
||||
|
||||
Adapt your review to the project's established patterns. When in doubt, match what the rest of the codebase does.
|
||||
|
||||
## v1.8 AI-Generated Code Review Addendum
|
||||
|
||||
When reviewing AI-generated changes, prioritize:
|
||||
|
||||
1. Behavioral regressions and edge-case handling
|
||||
2. Security assumptions and trust boundaries
|
||||
3. Hidden coupling or accidental architecture drift
|
||||
4. Unnecessary model-cost-inducing complexity
|
||||
|
||||
Cost-awareness check:
|
||||
- Flag workflows that escalate to higher-cost models without clear reasoning need.
|
||||
- Recommend defaulting to lower-cost tiers for deterministic refactors.
|
||||
|
||||
@@ -7,7 +7,7 @@ model: sonnet
|
||||
|
||||
# Database Reviewer
|
||||
|
||||
You are an expert PostgreSQL database specialist focused on query optimization, schema design, security, and performance. Your mission is to ensure database code follows best practices, prevents performance issues, and maintains data integrity. Incorporates patterns from [Supabase's postgres-best-practices](https://github.com/supabase/agent-skills).
|
||||
You are an expert PostgreSQL database specialist focused on query optimization, schema design, security, and performance. Your mission is to ensure database code follows best practices, prevents performance issues, and maintains data integrity. Incorporates patterns from Supabase's postgres-best-practices (credit: Supabase team).
|
||||
|
||||
## Core Responsibilities
|
||||
|
||||
@@ -88,4 +88,4 @@ For detailed index patterns, schema design examples, connection management, conc
|
||||
|
||||
**Remember**: Database issues are often the root cause of application performance problems. Optimize queries and schema design early. Use EXPLAIN ANALYZE to verify assumptions. Always index foreign keys and RLS policy columns.
|
||||
|
||||
*Patterns adapted from [Supabase Agent Skills](https://github.com/supabase/agent-skills) under MIT license.*
|
||||
*Patterns adapted from Supabase Agent Skills (credit: Supabase team) under MIT license.*
|
||||
|
||||
35
agents/harness-optimizer.md
Normal file
35
agents/harness-optimizer.md
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
name: harness-optimizer
|
||||
description: Analyze and improve the local agent harness configuration for reliability, cost, and throughput.
|
||||
tools: ["Read", "Grep", "Glob", "Bash", "Edit"]
|
||||
model: sonnet
|
||||
color: teal
|
||||
---
|
||||
|
||||
You are the harness optimizer.
|
||||
|
||||
## Mission
|
||||
|
||||
Raise agent completion quality by improving harness configuration, not by rewriting product code.
|
||||
|
||||
## Workflow
|
||||
|
||||
1. Run `/harness-audit` and collect baseline score.
|
||||
2. Identify top 3 leverage areas (hooks, evals, routing, context, safety).
|
||||
3. Propose minimal, reversible configuration changes.
|
||||
4. Apply changes and run validation.
|
||||
5. Report before/after deltas.
|
||||
|
||||
## Constraints
|
||||
|
||||
- Prefer small changes with measurable effect.
|
||||
- Preserve cross-platform behavior.
|
||||
- Avoid introducing fragile shell quoting.
|
||||
- Keep compatibility across Claude Code, Cursor, OpenCode, and Codex.
|
||||
|
||||
## Output
|
||||
|
||||
- baseline scorecard
|
||||
- applied changes
|
||||
- measured improvements
|
||||
- remaining risks
|
||||
36
agents/loop-operator.md
Normal file
36
agents/loop-operator.md
Normal file
@@ -0,0 +1,36 @@
|
||||
---
|
||||
name: loop-operator
|
||||
description: Operate autonomous agent loops, monitor progress, and intervene safely when loops stall.
|
||||
tools: ["Read", "Grep", "Glob", "Bash", "Edit"]
|
||||
model: sonnet
|
||||
color: orange
|
||||
---
|
||||
|
||||
You are the loop operator.
|
||||
|
||||
## Mission
|
||||
|
||||
Run autonomous loops safely with clear stop conditions, observability, and recovery actions.
|
||||
|
||||
## Workflow
|
||||
|
||||
1. Start loop from explicit pattern and mode.
|
||||
2. Track progress checkpoints.
|
||||
3. Detect stalls and retry storms.
|
||||
4. Pause and reduce scope when failure repeats.
|
||||
5. Resume only after verification passes.
|
||||
|
||||
## Required Checks
|
||||
|
||||
- quality gates are active
|
||||
- eval baseline exists
|
||||
- rollback path exists
|
||||
- branch/worktree isolation is configured
|
||||
|
||||
## Escalation
|
||||
|
||||
Escalate when any condition is true:
|
||||
- no progress across two consecutive checkpoints
|
||||
- repeated failures with identical stack traces
|
||||
- cost drift outside budget window
|
||||
- merge conflicts blocking queue advancement
|
||||
@@ -78,3 +78,14 @@ npm run test:coverage
|
||||
- [ ] Coverage is 80%+
|
||||
|
||||
For detailed mocking patterns and framework-specific examples, see `skill: tdd-workflow`.
|
||||
|
||||
## v1.8 Eval-Driven TDD Addendum
|
||||
|
||||
Integrate eval-driven development into TDD flow:
|
||||
|
||||
1. Define capability + regression evals before implementation.
|
||||
2. Run baseline and capture failure signatures.
|
||||
3. Implement minimum passing change.
|
||||
4. Re-run tests and evals; report pass@1 and pass@3.
|
||||
|
||||
Release-critical paths should target pass^3 stability before merge.
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
---
|
||||
description: Start the NanoClaw agent REPL — a persistent, session-aware AI assistant powered by the claude CLI.
|
||||
description: Start NanoClaw v2 — ECC's persistent, zero-dependency REPL with model routing, skill hot-load, branching, compaction, export, and metrics.
|
||||
---
|
||||
|
||||
# Claw Command
|
||||
|
||||
Start an interactive AI agent session that persists conversation history to disk and optionally loads ECC skill context.
|
||||
Start an interactive AI agent session with persistent markdown history and operational controls.
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -23,57 +23,29 @@ npm run claw
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `CLAW_SESSION` | `default` | Session name (alphanumeric + hyphens) |
|
||||
| `CLAW_SKILLS` | *(empty)* | Comma-separated skill names to load as system context |
|
||||
| `CLAW_SKILLS` | *(empty)* | Comma-separated skills loaded at startup |
|
||||
| `CLAW_MODEL` | `sonnet` | Default model for the session |
|
||||
|
||||
## REPL Commands
|
||||
|
||||
Inside the REPL, type these commands directly at the prompt:
|
||||
|
||||
```
|
||||
/clear Clear current session history
|
||||
/history Print full conversation history
|
||||
/sessions List all saved sessions
|
||||
/help Show available commands
|
||||
exit Quit the REPL
|
||||
```text
|
||||
/help Show help
|
||||
/clear Clear current session history
|
||||
/history Print full conversation history
|
||||
/sessions List saved sessions
|
||||
/model [name] Show/set model
|
||||
/load <skill-name> Hot-load a skill into context
|
||||
/branch <session-name> Branch current session
|
||||
/search <query> Search query across sessions
|
||||
/compact Compact old turns, keep recent context
|
||||
/export <md|json|txt> [path] Export session
|
||||
/metrics Show session metrics
|
||||
exit Quit
|
||||
```
|
||||
|
||||
## How It Works
|
||||
## Notes
|
||||
|
||||
1. Reads `CLAW_SESSION` env var to select a named session (default: `default`)
|
||||
2. Loads conversation history from `~/.claude/claw/{session}.md`
|
||||
3. Optionally loads ECC skill context from `CLAW_SKILLS` env var
|
||||
4. Enters a blocking prompt loop — each user message is sent to `claude -p` with full history
|
||||
5. Responses are appended to the session file for persistence across restarts
|
||||
|
||||
## Session Storage
|
||||
|
||||
Sessions are stored as Markdown files in `~/.claude/claw/`:
|
||||
|
||||
```
|
||||
~/.claude/claw/default.md
|
||||
~/.claude/claw/my-project.md
|
||||
```
|
||||
|
||||
Each turn is formatted as:
|
||||
|
||||
```markdown
|
||||
### [2025-01-15T10:30:00.000Z] User
|
||||
What does this function do?
|
||||
---
|
||||
### [2025-01-15T10:30:05.000Z] Assistant
|
||||
This function calculates...
|
||||
---
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Start default session
|
||||
node scripts/claw.js
|
||||
|
||||
# Named session
|
||||
CLAW_SESSION=my-project node scripts/claw.js
|
||||
|
||||
# With skill context
|
||||
CLAW_SKILLS=tdd-workflow,security-review node scripts/claw.js
|
||||
```
|
||||
- NanoClaw remains zero-dependency.
|
||||
- Sessions are stored at `~/.claude/claw/<session>.md`.
|
||||
- Compaction keeps the most recent turns and writes a compaction header.
|
||||
- Export supports markdown, JSON turns, and plain text.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: evolve
|
||||
description: Cluster related instincts into skills, commands, or agents
|
||||
description: Analyze instincts and suggest or generate evolved structures
|
||||
command: true
|
||||
---
|
||||
|
||||
@@ -29,9 +29,7 @@ Analyzes instincts and clusters related ones into higher-level structures:
|
||||
|
||||
```
|
||||
/evolve # Analyze all instincts and suggest evolutions
|
||||
/evolve --domain testing # Only evolve instincts in testing domain
|
||||
/evolve --dry-run # Show what would be created without creating
|
||||
/evolve --threshold 5 # Require 5+ related instincts to cluster
|
||||
/evolve --generate # Also generate files under evolved/{skills,commands,agents}
|
||||
```
|
||||
|
||||
## Evolution Rules
|
||||
@@ -78,63 +76,50 @@ Example:
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Read all instincts from `~/.claude/homunculus/instincts/`
|
||||
2. Group instincts by:
|
||||
- Domain similarity
|
||||
- Trigger pattern overlap
|
||||
- Action sequence relationship
|
||||
3. For each cluster of 3+ related instincts:
|
||||
- Determine evolution type (command/skill/agent)
|
||||
- Generate the appropriate file
|
||||
- Save to `~/.claude/homunculus/evolved/{commands,skills,agents}/`
|
||||
4. Link evolved structure back to source instincts
|
||||
1. Detect current project context
|
||||
2. Read project + global instincts (project takes precedence on ID conflicts)
|
||||
3. Group instincts by trigger/domain patterns
|
||||
4. Identify:
|
||||
- Skill candidates (trigger clusters with 2+ instincts)
|
||||
- Command candidates (high-confidence workflow instincts)
|
||||
- Agent candidates (larger, high-confidence clusters)
|
||||
5. Show promotion candidates (project -> global) when applicable
|
||||
6. If `--generate` is passed, write files to:
|
||||
- Project scope: `~/.claude/homunculus/projects/<project-id>/evolved/`
|
||||
- Global fallback: `~/.claude/homunculus/evolved/`
|
||||
|
||||
## Output Format
|
||||
|
||||
```
|
||||
🧬 Evolve Analysis
|
||||
==================
|
||||
============================================================
|
||||
EVOLVE ANALYSIS - 12 instincts
|
||||
Project: my-app (a1b2c3d4e5f6)
|
||||
Project-scoped: 8 | Global: 4
|
||||
============================================================
|
||||
|
||||
Found 3 clusters ready for evolution:
|
||||
High confidence instincts (>=80%): 5
|
||||
|
||||
## Cluster 1: Database Migration Workflow
|
||||
Instincts: new-table-migration, update-schema, regenerate-types
|
||||
Type: Command
|
||||
Confidence: 85% (based on 12 observations)
|
||||
## SKILL CANDIDATES
|
||||
1. Cluster: "adding tests"
|
||||
Instincts: 3
|
||||
Avg confidence: 82%
|
||||
Domains: testing
|
||||
Scopes: project
|
||||
|
||||
Would create: /new-table command
|
||||
Files:
|
||||
- ~/.claude/homunculus/evolved/commands/new-table.md
|
||||
## COMMAND CANDIDATES (2)
|
||||
/adding-tests
|
||||
From: test-first-workflow [project]
|
||||
Confidence: 84%
|
||||
|
||||
## Cluster 2: Functional Code Style
|
||||
Instincts: prefer-functional, use-immutable, avoid-classes, pure-functions
|
||||
Type: Skill
|
||||
Confidence: 78% (based on 8 observations)
|
||||
|
||||
Would create: functional-patterns skill
|
||||
Files:
|
||||
- ~/.claude/homunculus/evolved/skills/functional-patterns.md
|
||||
|
||||
## Cluster 3: Debugging Process
|
||||
Instincts: debug-check-logs, debug-isolate, debug-reproduce, debug-verify
|
||||
Type: Agent
|
||||
Confidence: 72% (based on 6 observations)
|
||||
|
||||
Would create: debugger agent
|
||||
Files:
|
||||
- ~/.claude/homunculus/evolved/agents/debugger.md
|
||||
|
||||
---
|
||||
Run `/evolve --execute` to create these files.
|
||||
## AGENT CANDIDATES (1)
|
||||
adding-tests-agent
|
||||
Covers 3 instincts
|
||||
Avg confidence: 82%
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
- `--execute`: Actually create the evolved structures (default is preview)
|
||||
- `--dry-run`: Preview without creating
|
||||
- `--domain <name>`: Only evolve instincts in specified domain
|
||||
- `--threshold <n>`: Minimum instincts required to form cluster (default: 3)
|
||||
- `--type <command|skill|agent>`: Only create specified type
|
||||
- `--generate`: Generate evolved files in addition to analysis output
|
||||
|
||||
## Generated File Format
|
||||
|
||||
|
||||
58
commands/harness-audit.md
Normal file
58
commands/harness-audit.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Harness Audit Command
|
||||
|
||||
Audit the current repository's agent harness setup and return a prioritized scorecard.
|
||||
|
||||
## Usage
|
||||
|
||||
`/harness-audit [scope] [--format text|json]`
|
||||
|
||||
- `scope` (optional): `repo` (default), `hooks`, `skills`, `commands`, `agents`
|
||||
- `--format`: output style (`text` default, `json` for automation)
|
||||
|
||||
## What to Evaluate
|
||||
|
||||
Score each category from `0` to `10`:
|
||||
|
||||
1. Tool Coverage
|
||||
2. Context Efficiency
|
||||
3. Quality Gates
|
||||
4. Memory Persistence
|
||||
5. Eval Coverage
|
||||
6. Security Guardrails
|
||||
7. Cost Efficiency
|
||||
|
||||
## Output Contract
|
||||
|
||||
Return:
|
||||
|
||||
1. `overall_score` out of 70
|
||||
2. Category scores and concrete findings
|
||||
3. Top 3 actions with exact file paths
|
||||
4. Suggested ECC skills to apply next
|
||||
|
||||
## Checklist
|
||||
|
||||
- Inspect `hooks/hooks.json`, `scripts/hooks/`, and hook tests.
|
||||
- Inspect `skills/`, command coverage, and agent coverage.
|
||||
- Verify cross-harness parity for `.cursor/`, `.opencode/`, `.codex/`.
|
||||
- Flag broken or stale references.
|
||||
|
||||
## Example Result
|
||||
|
||||
```text
|
||||
Harness Audit (repo): 52/70
|
||||
- Quality Gates: 9/10
|
||||
- Eval Coverage: 6/10
|
||||
- Cost Efficiency: 4/10
|
||||
|
||||
Top 3 Actions:
|
||||
1) Add cost tracking hook in scripts/hooks/cost-tracker.js
|
||||
2) Add pass@k docs and templates in skills/eval-harness/SKILL.md
|
||||
3) Add command parity for /harness-audit in .opencode/commands/
|
||||
```
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `repo|hooks|skills|commands|agents` (optional scope)
|
||||
- `--format text|json` (optional output format)
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: instinct-export
|
||||
description: Export instincts for sharing with teammates or other projects
|
||||
description: Export instincts from project/global scope to a file
|
||||
command: /instinct-export
|
||||
---
|
||||
|
||||
@@ -18,17 +18,18 @@ Exports instincts to a shareable format. Perfect for:
|
||||
/instinct-export --domain testing # Export only testing instincts
|
||||
/instinct-export --min-confidence 0.7 # Only export high-confidence instincts
|
||||
/instinct-export --output team-instincts.yaml
|
||||
/instinct-export --scope project --output project-instincts.yaml
|
||||
```
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Read instincts from `~/.claude/homunculus/instincts/personal/`
|
||||
2. Filter based on flags
|
||||
3. Strip sensitive information:
|
||||
- Remove session IDs
|
||||
- Remove file paths (keep only patterns)
|
||||
- Remove timestamps older than "last week"
|
||||
4. Generate export file
|
||||
1. Detect current project context
|
||||
2. Load instincts by selected scope:
|
||||
- `project`: current project only
|
||||
- `global`: global only
|
||||
- `all`: project + global merged (default)
|
||||
3. Apply filters (`--domain`, `--min-confidence`)
|
||||
4. Write YAML-style export to file (or stdout if no output path provided)
|
||||
|
||||
## Output Format
|
||||
|
||||
@@ -40,52 +41,26 @@ Creates a YAML file:
|
||||
# Source: personal
|
||||
# Count: 12 instincts
|
||||
|
||||
version: "2.0"
|
||||
exported_by: "continuous-learning-v2"
|
||||
export_date: "2025-01-22T10:30:00Z"
|
||||
---
|
||||
id: prefer-functional-style
|
||||
trigger: "when writing new functions"
|
||||
confidence: 0.8
|
||||
domain: code-style
|
||||
source: session-observation
|
||||
scope: project
|
||||
project_id: a1b2c3d4e5f6
|
||||
project_name: my-app
|
||||
---
|
||||
|
||||
instincts:
|
||||
- id: prefer-functional-style
|
||||
trigger: "when writing new functions"
|
||||
action: "Use functional patterns over classes"
|
||||
confidence: 0.8
|
||||
domain: code-style
|
||||
observations: 8
|
||||
# Prefer Functional Style
|
||||
|
||||
- id: test-first-workflow
|
||||
trigger: "when adding new functionality"
|
||||
action: "Write test first, then implementation"
|
||||
confidence: 0.9
|
||||
domain: testing
|
||||
observations: 12
|
||||
|
||||
- id: grep-before-edit
|
||||
trigger: "when modifying code"
|
||||
action: "Search with Grep, confirm with Read, then Edit"
|
||||
confidence: 0.7
|
||||
domain: workflow
|
||||
observations: 6
|
||||
## Action
|
||||
Use functional patterns over classes.
|
||||
```
|
||||
|
||||
## Privacy Considerations
|
||||
|
||||
Exports include:
|
||||
- ✅ Trigger patterns
|
||||
- ✅ Actions
|
||||
- ✅ Confidence scores
|
||||
- ✅ Domains
|
||||
- ✅ Observation counts
|
||||
|
||||
Exports do NOT include:
|
||||
- ❌ Actual code snippets
|
||||
- ❌ File paths
|
||||
- ❌ Session transcripts
|
||||
- ❌ Personal identifiers
|
||||
|
||||
## Flags
|
||||
|
||||
- `--domain <name>`: Export only specified domain
|
||||
- `--min-confidence <n>`: Minimum confidence threshold (default: 0.3)
|
||||
- `--output <file>`: Output file path (default: instincts-export-YYYYMMDD.yaml)
|
||||
- `--format <yaml|json|md>`: Output format (default: yaml)
|
||||
- `--include-evidence`: Include evidence text (default: excluded)
|
||||
- `--min-confidence <n>`: Minimum confidence threshold
|
||||
- `--output <file>`: Output file path (prints to stdout when omitted)
|
||||
- `--scope <project|global|all>`: Export scope (default: `all`)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
name: instinct-import
|
||||
description: Import instincts from teammates, Skill Creator, or other sources
|
||||
description: Import instincts from file or URL into project/global scope
|
||||
command: true
|
||||
---
|
||||
|
||||
@@ -11,7 +11,7 @@ command: true
|
||||
Run the instinct CLI using the plugin root path:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" import <file-or-url> [--dry-run] [--force] [--min-confidence 0.7]
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" import <file-or-url> [--dry-run] [--force] [--min-confidence 0.7] [--scope project|global]
|
||||
```
|
||||
|
||||
Or if `CLAUDE_PLUGIN_ROOT` is not set (manual installation):
|
||||
@@ -20,18 +20,15 @@ Or if `CLAUDE_PLUGIN_ROOT` is not set (manual installation):
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py import <file-or-url>
|
||||
```
|
||||
|
||||
Import instincts from:
|
||||
- Teammates' exports
|
||||
- Skill Creator (repo analysis)
|
||||
- Community collections
|
||||
- Previous machine backups
|
||||
Import instincts from local file paths or HTTP(S) URLs.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
/instinct-import team-instincts.yaml
|
||||
/instinct-import https://github.com/org/repo/instincts.yaml
|
||||
/instinct-import --from-skill-creator acme/webapp
|
||||
/instinct-import team-instincts.yaml --dry-run
|
||||
/instinct-import team-instincts.yaml --scope global --force
|
||||
```
|
||||
|
||||
## What to Do
|
||||
@@ -40,7 +37,9 @@ Import instincts from:
|
||||
2. Parse and validate the format
|
||||
3. Check for duplicates with existing instincts
|
||||
4. Merge or add new instincts
|
||||
5. Save to `~/.claude/homunculus/instincts/inherited/`
|
||||
5. Save to inherited instincts directory:
|
||||
- Project scope: `~/.claude/homunculus/projects/<project-id>/instincts/inherited/`
|
||||
- Global scope: `~/.claude/homunculus/instincts/inherited/`
|
||||
|
||||
## Import Process
|
||||
|
||||
@@ -71,60 +70,33 @@ Already have similar instincts:
|
||||
Import: 0.9 confidence
|
||||
→ Update to import (higher confidence)
|
||||
|
||||
## Conflicting Instincts (1)
|
||||
These contradict local instincts:
|
||||
❌ use-classes-for-services
|
||||
Conflicts with: avoid-classes
|
||||
→ Skip (requires manual resolution)
|
||||
|
||||
---
|
||||
Import 8 new, update 1, skip 3?
|
||||
Import 8 new, update 1?
|
||||
```
|
||||
|
||||
## Merge Strategies
|
||||
## Merge Behavior
|
||||
|
||||
### For Duplicates
|
||||
When importing an instinct that matches an existing one:
|
||||
- **Higher confidence wins**: Keep the one with higher confidence
|
||||
- **Merge evidence**: Combine observation counts
|
||||
- **Update timestamp**: Mark as recently validated
|
||||
|
||||
### For Conflicts
|
||||
When importing an instinct that contradicts an existing one:
|
||||
- **Skip by default**: Don't import conflicting instincts
|
||||
- **Flag for review**: Mark both as needing attention
|
||||
- **Manual resolution**: User decides which to keep
|
||||
When importing an instinct with an existing ID:
|
||||
- Higher-confidence import becomes an update candidate
|
||||
- Equal/lower-confidence import is skipped
|
||||
- User confirms unless `--force` is used
|
||||
|
||||
## Source Tracking
|
||||
|
||||
Imported instincts are marked with:
|
||||
```yaml
|
||||
source: "inherited"
|
||||
source: inherited
|
||||
scope: project
|
||||
imported_from: "team-instincts.yaml"
|
||||
imported_at: "2025-01-22T10:30:00Z"
|
||||
original_source: "session-observation" # or "repo-analysis"
|
||||
project_id: "a1b2c3d4e5f6"
|
||||
project_name: "my-project"
|
||||
```
|
||||
|
||||
## Skill Creator Integration
|
||||
|
||||
When importing from Skill Creator:
|
||||
|
||||
```
|
||||
/instinct-import --from-skill-creator acme/webapp
|
||||
```
|
||||
|
||||
This fetches instincts generated from repo analysis:
|
||||
- Source: `repo-analysis`
|
||||
- Higher initial confidence (0.7+)
|
||||
- Linked to source repository
|
||||
|
||||
## Flags
|
||||
|
||||
- `--dry-run`: Preview without importing
|
||||
- `--force`: Import even if conflicts exist
|
||||
- `--merge-strategy <higher|local|import>`: How to handle duplicates
|
||||
- `--from-skill-creator <owner/repo>`: Import from Skill Creator analysis
|
||||
- `--force`: Skip confirmation prompt
|
||||
- `--min-confidence <n>`: Only import instincts above threshold
|
||||
- `--scope <project|global>`: Select target scope (default: `project`)
|
||||
|
||||
## Output
|
||||
|
||||
@@ -134,7 +106,7 @@ After import:
|
||||
|
||||
Added: 8 instincts
|
||||
Updated: 1 instinct
|
||||
Skipped: 3 instincts (2 duplicates, 1 conflict)
|
||||
Skipped: 3 instincts (equal/higher confidence already exists)
|
||||
|
||||
New instincts saved to: ~/.claude/homunculus/instincts/inherited/
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
---
|
||||
name: instinct-status
|
||||
description: Show all learned instincts with their confidence levels
|
||||
description: Show learned instincts (project + global) with confidence
|
||||
command: true
|
||||
---
|
||||
|
||||
# Instinct Status Command
|
||||
|
||||
Shows all learned instincts with their confidence scores, grouped by domain.
|
||||
Shows learned instincts for the current project plus global instincts, grouped by domain.
|
||||
|
||||
## Implementation
|
||||
|
||||
@@ -26,61 +26,34 @@ python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py status
|
||||
|
||||
```
|
||||
/instinct-status
|
||||
/instinct-status --domain code-style
|
||||
/instinct-status --low-confidence
|
||||
```
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Read all instinct files from `~/.claude/homunculus/instincts/personal/`
|
||||
2. Read inherited instincts from `~/.claude/homunculus/instincts/inherited/`
|
||||
3. Display them grouped by domain with confidence bars
|
||||
1. Detect current project context (git remote/path hash)
|
||||
2. Read project instincts from `~/.claude/homunculus/projects/<project-id>/instincts/`
|
||||
3. Read global instincts from `~/.claude/homunculus/instincts/`
|
||||
4. Merge with precedence rules (project overrides global when IDs collide)
|
||||
5. Display grouped by domain with confidence bars and observation stats
|
||||
|
||||
## Output Format
|
||||
|
||||
```
|
||||
📊 Instinct Status
|
||||
==================
|
||||
============================================================
|
||||
INSTINCT STATUS - 12 total
|
||||
============================================================
|
||||
|
||||
## Code Style (4 instincts)
|
||||
Project: my-app (a1b2c3d4e5f6)
|
||||
Project instincts: 8
|
||||
Global instincts: 4
|
||||
|
||||
### prefer-functional-style
|
||||
Trigger: when writing new functions
|
||||
Action: Use functional patterns over classes
|
||||
Confidence: ████████░░ 80%
|
||||
Source: session-observation | Last updated: 2025-01-22
|
||||
## PROJECT-SCOPED (my-app)
|
||||
### WORKFLOW (3)
|
||||
███████░░░ 70% grep-before-edit [project]
|
||||
trigger: when modifying code
|
||||
|
||||
### use-path-aliases
|
||||
Trigger: when importing modules
|
||||
Action: Use @/ path aliases instead of relative imports
|
||||
Confidence: ██████░░░░ 60%
|
||||
Source: repo-analysis (github.com/acme/webapp)
|
||||
|
||||
## Testing (2 instincts)
|
||||
|
||||
### test-first-workflow
|
||||
Trigger: when adding new functionality
|
||||
Action: Write test first, then implementation
|
||||
Confidence: █████████░ 90%
|
||||
Source: session-observation
|
||||
|
||||
## Workflow (3 instincts)
|
||||
|
||||
### grep-before-edit
|
||||
Trigger: when modifying code
|
||||
Action: Search with Grep, confirm with Read, then Edit
|
||||
Confidence: ███████░░░ 70%
|
||||
Source: session-observation
|
||||
|
||||
---
|
||||
Total: 9 instincts (4 personal, 5 inherited)
|
||||
Observer: Running (last analysis: 5 min ago)
|
||||
## GLOBAL (apply to all projects)
|
||||
### SECURITY (2)
|
||||
█████████░ 85% validate-user-input [global]
|
||||
trigger: when handling user input
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
- `--domain <name>`: Filter by domain (code-style, testing, git, etc.)
|
||||
- `--low-confidence`: Show only instincts with confidence < 0.5
|
||||
- `--high-confidence`: Show only instincts with confidence >= 0.7
|
||||
- `--source <type>`: Filter by source (session-observation, repo-analysis, inherited)
|
||||
- `--json`: Output as JSON for programmatic use
|
||||
|
||||
32
commands/loop-start.md
Normal file
32
commands/loop-start.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Loop Start Command
|
||||
|
||||
Start a managed autonomous loop pattern with safety defaults.
|
||||
|
||||
## Usage
|
||||
|
||||
`/loop-start [pattern] [--mode safe|fast]`
|
||||
|
||||
- `pattern`: `sequential`, `continuous-pr`, `rfc-dag`, `infinite`
|
||||
- `--mode`:
|
||||
- `safe` (default): strict quality gates and checkpoints
|
||||
- `fast`: reduced gates for speed
|
||||
|
||||
## Flow
|
||||
|
||||
1. Confirm repository state and branch strategy.
|
||||
2. Select loop pattern and model tier strategy.
|
||||
3. Enable required hooks/profile for the chosen mode.
|
||||
4. Create loop plan and write runbook under `.claude/plans/`.
|
||||
5. Print commands to start and monitor the loop.
|
||||
|
||||
## Required Safety Checks
|
||||
|
||||
- Verify tests pass before first loop iteration.
|
||||
- Ensure `ECC_HOOK_PROFILE` is not disabled globally.
|
||||
- Ensure loop has explicit stop condition.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `<pattern>` optional (`sequential|continuous-pr|rfc-dag|infinite`)
|
||||
- `--mode safe|fast` optional
|
||||
24
commands/loop-status.md
Normal file
24
commands/loop-status.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# Loop Status Command
|
||||
|
||||
Inspect active loop state, progress, and failure signals.
|
||||
|
||||
## Usage
|
||||
|
||||
`/loop-status [--watch]`
|
||||
|
||||
## What to Report
|
||||
|
||||
- active loop pattern
|
||||
- current phase and last successful checkpoint
|
||||
- failing checks (if any)
|
||||
- estimated time/cost drift
|
||||
- recommended intervention (continue/pause/stop)
|
||||
|
||||
## Watch Mode
|
||||
|
||||
When `--watch` is present, refresh status periodically and surface state changes.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `--watch` optional
|
||||
26
commands/model-route.md
Normal file
26
commands/model-route.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Model Route Command
|
||||
|
||||
Recommend the best model tier for the current task by complexity and budget.
|
||||
|
||||
## Usage
|
||||
|
||||
`/model-route [task-description] [--budget low|med|high]`
|
||||
|
||||
## Routing Heuristic
|
||||
|
||||
- `haiku`: deterministic, low-risk mechanical changes
|
||||
- `sonnet`: default for implementation and refactors
|
||||
- `opus`: architecture, deep review, ambiguous requirements
|
||||
|
||||
## Required Output
|
||||
|
||||
- recommended model
|
||||
- confidence level
|
||||
- why this model fits
|
||||
- fallback model if first attempt fails
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `[task-description]` optional free-text
|
||||
- `--budget low|med|high` optional
|
||||
@@ -85,13 +85,13 @@ EOF",
|
||||
|
||||
### Phase 0: Prompt Enhancement (Optional)
|
||||
|
||||
`[Mode: Prepare]` - If ace-tool MCP available, call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for subsequent Codex calls**
|
||||
`[Mode: Prepare]` - If ace-tool MCP available, call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for subsequent Codex calls**. If unavailable, use `$ARGUMENTS` as-is.
|
||||
|
||||
### Phase 1: Research
|
||||
|
||||
`[Mode: Research]` - Understand requirements and gather context
|
||||
|
||||
1. **Code Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context` to retrieve existing APIs, data models, service architecture
|
||||
1. **Code Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context` to retrieve existing APIs, data models, service architecture. If unavailable, use built-in tools: `Glob` for file discovery, `Grep` for symbol/API search, `Read` for context gathering, `Task` (Explore agent) for deeper exploration.
|
||||
2. Requirement completeness score (0-10): >=7 continue, <7 stop and supplement
|
||||
|
||||
### Phase 2: Ideation
|
||||
|
||||
@@ -136,7 +136,7 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
`[Mode: Retrieval]`
|
||||
|
||||
**Must use MCP tool for quick context retrieval, do NOT manually read files one by one**
|
||||
**If ace-tool MCP is available**, use it for quick context retrieval:
|
||||
|
||||
Based on "Key Files" list in plan, call `mcp__ace-tool__search_context`:
|
||||
|
||||
@@ -151,7 +151,12 @@ mcp__ace-tool__search_context({
|
||||
- Extract target paths from plan's "Key Files" table
|
||||
- Build semantic query covering: entry files, dependency modules, related type definitions
|
||||
- If results insufficient, add 1-2 recursive retrievals
|
||||
- **NEVER** use Bash + find/ls to manually explore project structure
|
||||
|
||||
**If ace-tool MCP is NOT available**, use Claude Code built-in tools as fallback:
|
||||
1. **Glob**: Find target files from plan's "Key Files" table (e.g., `Glob("src/components/**/*.tsx")`)
|
||||
2. **Grep**: Search for key symbols, function names, type definitions across the codebase
|
||||
3. **Read**: Read the discovered files to gather complete context
|
||||
4. **Task (Explore agent)**: For broader exploration, use `Task` with `subagent_type: "Explore"`
|
||||
|
||||
**After Retrieval**:
|
||||
- Organize retrieved code snippets
|
||||
|
||||
@@ -85,13 +85,13 @@ EOF",
|
||||
|
||||
### Phase 0: Prompt Enhancement (Optional)
|
||||
|
||||
`[Mode: Prepare]` - If ace-tool MCP available, call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for subsequent Gemini calls**
|
||||
`[Mode: Prepare]` - If ace-tool MCP available, call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for subsequent Gemini calls**. If unavailable, use `$ARGUMENTS` as-is.
|
||||
|
||||
### Phase 1: Research
|
||||
|
||||
`[Mode: Research]` - Understand requirements and gather context
|
||||
|
||||
1. **Code Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context` to retrieve existing components, styles, design system
|
||||
1. **Code Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context` to retrieve existing components, styles, design system. If unavailable, use built-in tools: `Glob` for file discovery, `Grep` for component/style search, `Read` for context gathering, `Task` (Explore agent) for deeper exploration.
|
||||
2. Requirement completeness score (0-10): >=7 continue, <7 stop and supplement
|
||||
|
||||
### Phase 2: Ideation
|
||||
|
||||
@@ -71,7 +71,7 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
#### 1.1 Prompt Enhancement (MUST execute first)
|
||||
|
||||
**MUST call `mcp__ace-tool__enhance_prompt` tool**:
|
||||
**If ace-tool MCP is available**, call `mcp__ace-tool__enhance_prompt` tool:
|
||||
|
||||
```
|
||||
mcp__ace-tool__enhance_prompt({
|
||||
@@ -83,9 +83,11 @@ mcp__ace-tool__enhance_prompt({
|
||||
|
||||
Wait for enhanced prompt, **replace original $ARGUMENTS with enhanced result** for all subsequent phases.
|
||||
|
||||
**If ace-tool MCP is NOT available**: Skip this step and use the original `$ARGUMENTS` as-is for all subsequent phases.
|
||||
|
||||
#### 1.2 Context Retrieval
|
||||
|
||||
**Call `mcp__ace-tool__search_context` tool**:
|
||||
**If ace-tool MCP is available**, call `mcp__ace-tool__search_context` tool:
|
||||
|
||||
```
|
||||
mcp__ace-tool__search_context({
|
||||
@@ -96,7 +98,12 @@ mcp__ace-tool__search_context({
|
||||
|
||||
- Build semantic query using natural language (Where/What/How)
|
||||
- **NEVER answer based on assumptions**
|
||||
- If MCP unavailable: fallback to Glob + Grep for file discovery and key symbol location
|
||||
|
||||
**If ace-tool MCP is NOT available**, use Claude Code built-in tools as fallback:
|
||||
1. **Glob**: Find relevant files by pattern (e.g., `Glob("**/*.ts")`, `Glob("src/**/*.py")`)
|
||||
2. **Grep**: Search for key symbols, function names, class definitions (e.g., `Grep("className|functionName")`)
|
||||
3. **Read**: Read the discovered files to gather complete context
|
||||
4. **Task (Explore agent)**: For deeper exploration, use `Task` with `subagent_type: "Explore"` to search across the codebase
|
||||
|
||||
#### 1.3 Completeness Check
|
||||
|
||||
|
||||
@@ -15,14 +15,14 @@ Structured development workflow with quality gates, MCP services, and multi-mode
|
||||
- Task to develop: $ARGUMENTS
|
||||
- Structured 6-phase workflow with quality gates
|
||||
- Multi-model collaboration: Codex (backend) + Gemini (frontend) + Claude (orchestration)
|
||||
- MCP service integration (ace-tool) for enhanced capabilities
|
||||
- MCP service integration (ace-tool, optional) for enhanced capabilities
|
||||
|
||||
## Your Role
|
||||
|
||||
You are the **Orchestrator**, coordinating a multi-model collaborative system (Research → Ideation → Plan → Execute → Optimize → Review). Communicate concisely and professionally for experienced developers.
|
||||
|
||||
**Collaborative Models**:
|
||||
- **ace-tool MCP** – Code retrieval + Prompt enhancement
|
||||
- **ace-tool MCP** (optional) – Code retrieval + Prompt enhancement
|
||||
- **Codex** – Backend logic, algorithms, debugging (**Backend authority, trustworthy**)
|
||||
- **Gemini** – Frontend UI/UX, visual design (**Frontend expert, backend opinions for reference only**)
|
||||
- **Claude (self)** – Orchestration, planning, execution, delivery
|
||||
@@ -111,8 +111,8 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
`[Mode: Research]` - Understand requirements and gather context:
|
||||
|
||||
1. **Prompt Enhancement**: Call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for all subsequent Codex/Gemini calls**
|
||||
2. **Context Retrieval**: Call `mcp__ace-tool__search_context`
|
||||
1. **Prompt Enhancement** (if ace-tool MCP available): Call `mcp__ace-tool__enhance_prompt`, **replace original $ARGUMENTS with enhanced result for all subsequent Codex/Gemini calls**. If unavailable, use `$ARGUMENTS` as-is.
|
||||
2. **Context Retrieval** (if ace-tool MCP available): Call `mcp__ace-tool__search_context`. If unavailable, use built-in tools: `Glob` for file discovery, `Grep` for symbol search, `Read` for context gathering, `Task` (Explore agent) for deeper exploration.
|
||||
3. **Requirement Completeness Score** (0-10):
|
||||
- Goal clarity (0-3), Expected outcome (0-3), Scope boundaries (0-2), Constraints (0-2)
|
||||
- ≥7: Continue | <7: Stop, ask clarifying questions
|
||||
|
||||
39
commands/projects.md
Normal file
39
commands/projects.md
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
name: projects
|
||||
description: List known projects and their instinct statistics
|
||||
command: true
|
||||
---
|
||||
|
||||
# Projects Command
|
||||
|
||||
List project registry entries and per-project instinct/observation counts for continuous-learning-v2.
|
||||
|
||||
## Implementation
|
||||
|
||||
Run the instinct CLI using the plugin root path:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" projects
|
||||
```
|
||||
|
||||
Or if `CLAUDE_PLUGIN_ROOT` is not set (manual installation):
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py projects
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/projects
|
||||
```
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Read `~/.claude/homunculus/projects.json`
|
||||
2. For each project, display:
|
||||
- Project name, id, root, remote
|
||||
- Personal and inherited instinct counts
|
||||
- Observation event count
|
||||
- Last seen timestamp
|
||||
3. Also display global instinct totals
|
||||
41
commands/promote.md
Normal file
41
commands/promote.md
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
name: promote
|
||||
description: Promote project-scoped instincts to global scope
|
||||
command: true
|
||||
---
|
||||
|
||||
# Promote Command
|
||||
|
||||
Promote instincts from project scope to global scope in continuous-learning-v2.
|
||||
|
||||
## Implementation
|
||||
|
||||
Run the instinct CLI using the plugin root path:
|
||||
|
||||
```bash
|
||||
python3 "${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/scripts/instinct-cli.py" promote [instinct-id] [--force] [--dry-run]
|
||||
```
|
||||
|
||||
Or if `CLAUDE_PLUGIN_ROOT` is not set (manual installation):
|
||||
|
||||
```bash
|
||||
python3 ~/.claude/skills/continuous-learning-v2/scripts/instinct-cli.py promote [instinct-id] [--force] [--dry-run]
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
/promote # Auto-detect promotion candidates
|
||||
/promote --dry-run # Preview auto-promotion candidates
|
||||
/promote --force # Promote all qualified candidates without prompt
|
||||
/promote grep-before-edit # Promote one specific instinct from current project
|
||||
```
|
||||
|
||||
## What to Do
|
||||
|
||||
1. Detect current project
|
||||
2. If `instinct-id` is provided, promote only that instinct (if present in current project)
|
||||
3. Otherwise, find cross-project candidates that:
|
||||
- Appear in at least 2 projects
|
||||
- Meet confidence threshold
|
||||
4. Write promoted instincts to `~/.claude/homunculus/instincts/personal/` with `scope: global`
|
||||
29
commands/quality-gate.md
Normal file
29
commands/quality-gate.md
Normal file
@@ -0,0 +1,29 @@
|
||||
# Quality Gate Command
|
||||
|
||||
Run the ECC quality pipeline on demand for a file or project scope.
|
||||
|
||||
## Usage
|
||||
|
||||
`/quality-gate [path|.] [--fix] [--strict]`
|
||||
|
||||
- default target: current directory (`.`)
|
||||
- `--fix`: allow auto-format/fix where configured
|
||||
- `--strict`: fail on warnings where supported
|
||||
|
||||
## Pipeline
|
||||
|
||||
1. Detect language/tooling for target.
|
||||
2. Run formatter checks.
|
||||
3. Run lint/type checks when available.
|
||||
4. Produce a concise remediation list.
|
||||
|
||||
## Notes
|
||||
|
||||
This command mirrors hook behavior but is operator-invoked.
|
||||
|
||||
## Arguments
|
||||
|
||||
$ARGUMENTS:
|
||||
- `[path|.]` optional target path
|
||||
- `--fix` optional
|
||||
- `--strict` optional
|
||||
74
docs/business/metrics-and-sponsorship.md
Normal file
74
docs/business/metrics-and-sponsorship.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# Metrics and Sponsorship Playbook
|
||||
|
||||
This file is a practical script for sponsor calls and ecosystem partner reviews.
|
||||
|
||||
## What to Track
|
||||
|
||||
Use four categories in every update:
|
||||
|
||||
1. **Distribution** — npm packages and GitHub App installs
|
||||
2. **Adoption** — stars, forks, contributors, release cadence
|
||||
3. **Product surface** — commands/skills/agents and cross-platform support
|
||||
4. **Reliability** — test pass counts and production bug turnaround
|
||||
|
||||
## Pull Live Metrics
|
||||
|
||||
### npm downloads
|
||||
|
||||
```bash
|
||||
# Weekly downloads
|
||||
curl -s https://api.npmjs.org/downloads/point/last-week/ecc-universal
|
||||
curl -s https://api.npmjs.org/downloads/point/last-week/ecc-agentshield
|
||||
|
||||
# Last 30 days
|
||||
curl -s https://api.npmjs.org/downloads/point/last-month/ecc-universal
|
||||
curl -s https://api.npmjs.org/downloads/point/last-month/ecc-agentshield
|
||||
```
|
||||
|
||||
### GitHub repository adoption
|
||||
|
||||
```bash
|
||||
gh api repos/affaan-m/everything-claude-code \
|
||||
--jq '{stars:.stargazers_count,forks:.forks_count,contributors_url:.contributors_url,open_issues:.open_issues_count}'
|
||||
```
|
||||
|
||||
### GitHub traffic (maintainer access required)
|
||||
|
||||
```bash
|
||||
gh api repos/affaan-m/everything-claude-code/traffic/views
|
||||
gh api repos/affaan-m/everything-claude-code/traffic/clones
|
||||
```
|
||||
|
||||
### GitHub App installs
|
||||
|
||||
GitHub App install count is currently most reliable in the Marketplace/App dashboard.
|
||||
Use the latest value from:
|
||||
|
||||
- [ECC Tools Marketplace](https://github.com/marketplace/ecc-tools)
|
||||
|
||||
## What Cannot Be Measured Publicly (Yet)
|
||||
|
||||
- Claude plugin install/download counts are not currently exposed via a public API.
|
||||
- For partner conversations, use npm metrics + GitHub App installs + repo traffic as the proxy bundle.
|
||||
|
||||
## Suggested Sponsor Packaging
|
||||
|
||||
Use these as starting points in negotiation:
|
||||
|
||||
- **Pilot Partner:** `$200/month`
|
||||
- Best for first partnership validation and simple monthly sponsor updates.
|
||||
- **Growth Partner:** `$500/month`
|
||||
- Includes roadmap check-ins and implementation feedback loop.
|
||||
- **Strategic Partner:** `$1,000+/month`
|
||||
- Multi-touch collaboration, launch support, and deeper operational alignment.
|
||||
|
||||
## 60-Second Talking Track
|
||||
|
||||
Use this on calls:
|
||||
|
||||
> ECC is now positioned as an agent harness performance system, not a config repo.
|
||||
> We track adoption through npm distribution, GitHub App installs, and repository growth.
|
||||
> Claude plugin installs are structurally undercounted publicly, so we use a blended metrics model.
|
||||
> The project supports Claude Code, Cursor, OpenCode, and Codex app/CLI with production-grade hook reliability and a large passing test suite.
|
||||
|
||||
For launch-ready social copy snippets, see [`social-launch-copy.md`](./social-launch-copy.md).
|
||||
62
docs/business/social-launch-copy.md
Normal file
62
docs/business/social-launch-copy.md
Normal file
@@ -0,0 +1,62 @@
|
||||
# Social Launch Copy (X + LinkedIn)
|
||||
|
||||
Use these templates as launch-ready starting points. Replace placeholders before posting.
|
||||
|
||||
## X Post: Release Announcement
|
||||
|
||||
```text
|
||||
ECC v1.8.0 is live.
|
||||
|
||||
We moved from “config pack” to an agent harness performance system:
|
||||
- hook reliability fixes
|
||||
- new harness commands
|
||||
- cross-tool parity (Claude Code, Cursor, OpenCode, Codex)
|
||||
|
||||
Start here: <repo-link>
|
||||
```
|
||||
|
||||
## X Post: Proof + Metrics
|
||||
|
||||
```text
|
||||
If you evaluate agent tooling, use blended distribution metrics:
|
||||
- npm installs (`ecc-universal`, `ecc-agentshield`)
|
||||
- GitHub App installs
|
||||
- repo adoption (stars/forks/contributors)
|
||||
|
||||
We now track this monthly in-repo for sponsor transparency.
|
||||
```
|
||||
|
||||
## X Quote Tweet: Eval Skills Article
|
||||
|
||||
```text
|
||||
Strong point on eval discipline.
|
||||
|
||||
In ECC we turned this into production checks via:
|
||||
- /harness-audit
|
||||
- /quality-gate
|
||||
- Stop-phase session summaries
|
||||
|
||||
This is where harness performance compounds over time.
|
||||
```
|
||||
|
||||
## X Quote Tweet: Plankton / deslop workflow
|
||||
|
||||
```text
|
||||
This workflow direction is right: optimize the harness, not just prompts.
|
||||
|
||||
Our v1.8.0 focus was reliability + parity + measurable quality gates across toolchains.
|
||||
```
|
||||
|
||||
## LinkedIn Post: Partner-Friendly Summary
|
||||
|
||||
```text
|
||||
We shipped ECC v1.8.0 with one objective: improve agent harness performance in production.
|
||||
|
||||
Highlights:
|
||||
- more reliable hook lifecycle behavior
|
||||
- new harness-level quality commands
|
||||
- parity across Claude Code, Cursor, OpenCode, and Codex
|
||||
- stronger sponsor-facing metrics tracking
|
||||
|
||||
If your team runs AI coding agents daily, this is designed for operational use.
|
||||
```
|
||||
14
docs/continuous-learning-v2-spec.md
Normal file
14
docs/continuous-learning-v2-spec.md
Normal file
@@ -0,0 +1,14 @@
|
||||
# Continuous Learning v2 Spec
|
||||
|
||||
This document captures the v2 continuous-learning architecture:
|
||||
|
||||
1. Hook-based observation capture
|
||||
2. Background observer analysis loop
|
||||
3. Instinct scoring and persistence
|
||||
4. Evolution of instincts into reusable skills/commands
|
||||
|
||||
Primary implementation lives in:
|
||||
- `skills/continuous-learning-v2/`
|
||||
- `scripts/hooks/`
|
||||
|
||||
Use this file as the stable reference path for docs and translations.
|
||||
@@ -7,7 +7,7 @@ model: opus
|
||||
|
||||
# データベースレビューアー
|
||||
|
||||
あなたはクエリ最適化、スキーマ設計、セキュリティ、パフォーマンスに焦点を当てたエキスパートPostgreSQLデータベーススペシャリストです。あなたのミッションは、データベースコードがベストプラクティスに従い、パフォーマンス問題を防ぎ、データ整合性を維持することを確実にすることです。このエージェントは[SupabaseのPostgreSQLベストプラクティス](https://github.com/supabase/agent-skills)からのパターンを組み込んでいます。
|
||||
あなたはクエリ最適化、スキーマ設計、セキュリティ、パフォーマンスに焦点を当てたエキスパートPostgreSQLデータベーススペシャリストです。あなたのミッションは、データベースコードがベストプラクティスに従い、パフォーマンス問題を防ぎ、データ整合性を維持することを確実にすることです。このエージェントは[SupabaseのPostgreSQLベストプラクティス](Supabase Agent Skills (credit: Supabase team))からのパターンを組み込んでいます。
|
||||
|
||||
## 主な責務
|
||||
|
||||
@@ -651,4 +651,4 @@ ORDER BY rank DESC;
|
||||
|
||||
**覚えておくこと**: データベースの問題は、アプリケーションパフォーマンス問題の根本原因であることが多いです。クエリとスキーマ設計を早期に最適化してください。仮定を検証するためにEXPLAIN ANALYZEを使用してください。常に外部キーとRLSポリシー列にインデックスを作成してください。
|
||||
|
||||
*パターンはMITライセンスの下で[Supabase Agent Skills](https://github.com/supabase/agent-skills)から適応されています。*
|
||||
*パターンはMITライセンスの下で[Supabase Agent Skills](Supabase Agent Skills (credit: Supabase team))から適応されています。*
|
||||
|
||||
@@ -85,13 +85,13 @@ EOF",
|
||||
|
||||
### フェーズ 0: プロンプト強化(オプション)
|
||||
|
||||
`[Mode: Prepare]` - ace-tool MCPが利用可能な場合、`mcp__ace-tool__enhance_prompt`を呼び出し、**後続のCodex呼び出しのために元の$ARGUMENTSを強化結果で置き換える**
|
||||
`[Mode: Prepare]` - ace-tool MCPが利用可能な場合、`mcp__ace-tool__enhance_prompt`を呼び出し、**後続のCodex呼び出しのために元の$ARGUMENTSを強化結果で置き換える**。利用できない場合は`$ARGUMENTS`をそのまま使用。
|
||||
|
||||
### フェーズ 1: 調査
|
||||
|
||||
`[Mode: Research]` - 要件の理解とコンテキストの収集
|
||||
|
||||
1. **コード取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出して既存のAPI、データモデル、サービスアーキテクチャを取得
|
||||
1. **コード取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出して既存のAPI、データモデル、サービスアーキテクチャを取得。利用できない場合は組み込みツールを使用: `Glob`でファイル検索、`Grep`でシンボル/API検索、`Read`でコンテキスト収集、`Task`(Exploreエージェント)でより深い探索。
|
||||
2. 要件の完全性スコア(0-10): >=7で継続、<7で停止して補足
|
||||
|
||||
### フェーズ 2: アイデア創出
|
||||
|
||||
@@ -136,7 +136,7 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
`[Mode: Retrieval]`
|
||||
|
||||
**MCPツールを使用したクイックコンテキスト取得が必須です。ファイルを1つずつ手動で読まないでください**
|
||||
**ace-tool MCPが利用可能な場合**、クイックコンテキスト取得に使用:
|
||||
|
||||
計画の「キーファイル」リストに基づいて、`mcp__ace-tool__search_context`を呼び出します:
|
||||
|
||||
@@ -151,7 +151,12 @@ mcp__ace-tool__search_context({
|
||||
- 計画の「キーファイル」テーブルから対象パスを抽出
|
||||
- カバー範囲のセマンティッククエリを構築: エントリファイル、依存モジュール、関連する型定義
|
||||
- 結果が不十分な場合、1-2回の再帰的取得を追加
|
||||
- **決して**Bash + find/lsを使用してプロジェクト構造を手動で探索しない
|
||||
|
||||
**ace-tool MCPが利用できない場合**、Claude Code組み込みツールでフォールバック:
|
||||
1. **Glob**: 計画の「キーファイル」テーブルから対象ファイルを検索 (例: `Glob("src/components/**/*.tsx")`)
|
||||
2. **Grep**: キーシンボル、関数名、型定義をコードベース全体で検索
|
||||
3. **Read**: 発見したファイルを読み取り、完全なコンテキストを収集
|
||||
4. **Task (Explore エージェント)**: より広範な探索が必要な場合、`Task` を `subagent_type: "Explore"` で使用
|
||||
|
||||
**取得後**:
|
||||
- 取得したコードスニペットを整理
|
||||
|
||||
@@ -85,13 +85,13 @@ EOF",
|
||||
|
||||
### フェーズ 0: プロンプト強化(オプション)
|
||||
|
||||
`[Mode: Prepare]` - ace-tool MCPが利用可能な場合、`mcp__ace-tool__enhance_prompt`を呼び出し、**後続のGemini呼び出しのために元の$ARGUMENTSを強化結果で置き換える**
|
||||
`[Mode: Prepare]` - ace-tool MCPが利用可能な場合、`mcp__ace-tool__enhance_prompt`を呼び出し、**後続のGemini呼び出しのために元の$ARGUMENTSを強化結果で置き換える**。利用できない場合は`$ARGUMENTS`をそのまま使用。
|
||||
|
||||
### フェーズ 1: 調査
|
||||
|
||||
`[Mode: Research]` - 要件の理解とコンテキストの収集
|
||||
|
||||
1. **コード取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出して既存のコンポーネント、スタイル、デザインシステムを取得
|
||||
1. **コード取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出して既存のコンポーネント、スタイル、デザインシステムを取得。利用できない場合は組み込みツールを使用: `Glob`でファイル検索、`Grep`でコンポーネント/スタイル検索、`Read`でコンテキスト収集、`Task`(Exploreエージェント)でより深い探索。
|
||||
2. 要件の完全性スコア(0-10): >=7で継続、<7で停止して補足
|
||||
|
||||
### フェーズ 2: アイデア創出
|
||||
|
||||
@@ -71,7 +71,7 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
#### 1.1 プロンプト強化(最初に実行する必要があります)
|
||||
|
||||
**`mcp__ace-tool__enhance_prompt`ツールを呼び出す必要があります**:
|
||||
**ace-tool MCPが利用可能な場合**、`mcp__ace-tool__enhance_prompt`ツールを呼び出す:
|
||||
|
||||
```
|
||||
mcp__ace-tool__enhance_prompt({
|
||||
@@ -83,9 +83,11 @@ mcp__ace-tool__enhance_prompt({
|
||||
|
||||
強化されたプロンプトを待ち、**後続のすべてのフェーズのために元の$ARGUMENTSを強化結果で置き換える**。
|
||||
|
||||
**ace-tool MCPが利用できない場合**: このステップをスキップし、後続のすべてのフェーズで元の`$ARGUMENTS`をそのまま使用する。
|
||||
|
||||
#### 1.2 コンテキスト取得
|
||||
|
||||
**`mcp__ace-tool__search_context`ツールを呼び出す**:
|
||||
**ace-tool MCPが利用可能な場合**、`mcp__ace-tool__search_context`ツールを呼び出す:
|
||||
|
||||
```
|
||||
mcp__ace-tool__search_context({
|
||||
@@ -96,7 +98,12 @@ mcp__ace-tool__search_context({
|
||||
|
||||
- 自然言語を使用してセマンティッククエリを構築(Where/What/How)
|
||||
- **仮定に基づいて回答しない**
|
||||
- MCPが利用できない場合: Glob + Grepにフォールバックしてファイル検出とキーシンボル位置を特定
|
||||
|
||||
**ace-tool MCPが利用できない場合**、Claude Code組み込みツールでフォールバック:
|
||||
1. **Glob**: パターンで関連ファイルを検索 (例: `Glob("**/*.ts")`, `Glob("src/**/*.py")`)
|
||||
2. **Grep**: キーシンボル、関数名、クラス定義を検索 (例: `Grep("className|functionName")`)
|
||||
3. **Read**: 発見したファイルを読み取り、完全なコンテキストを収集
|
||||
4. **Task (Explore エージェント)**: より深い探索が必要な場合、`Task` を `subagent_type: "Explore"` で使用
|
||||
|
||||
#### 1.3 完全性チェック
|
||||
|
||||
|
||||
@@ -15,14 +15,14 @@
|
||||
- 開発するタスク: $ARGUMENTS
|
||||
- 品質ゲートを備えた構造化された6フェーズワークフロー
|
||||
- マルチモデル連携: Codex(バックエンド) + Gemini(フロントエンド) + Claude(オーケストレーション)
|
||||
- MCPサービス統合(ace-tool)による機能強化
|
||||
- MCPサービス統合(ace-tool、オプション)による機能強化
|
||||
|
||||
## 役割
|
||||
|
||||
あなたは**オーケストレーター**として、マルチモデル協調システムを調整します(調査 → アイデア創出 → 計画 → 実装 → 最適化 → レビュー)。経験豊富な開発者向けに簡潔かつ専門的にコミュニケーションします。
|
||||
|
||||
**連携モデル**:
|
||||
- **ace-tool MCP** – コード取得 + プロンプト強化
|
||||
- **ace-tool MCP**(オプション) – コード取得 + プロンプト強化
|
||||
- **Codex** – バックエンドロジック、アルゴリズム、デバッグ(**バックエンドの権威、信頼できる**)
|
||||
- **Gemini** – フロントエンドUI/UX、ビジュアルデザイン(**フロントエンドエキスパート、バックエンドの意見は参考のみ**)
|
||||
- **Claude(自身)** – オーケストレーション、計画、実装、配信
|
||||
@@ -111,8 +111,8 @@ TaskOutput({ task_id: "<task_id>", block: true, timeout: 600000 })
|
||||
|
||||
`[Mode: Research]` - 要件の理解とコンテキストの収集:
|
||||
|
||||
1. **プロンプト強化**: `mcp__ace-tool__enhance_prompt`を呼び出し、**後続のすべてのCodex/Gemini呼び出しのために元の$ARGUMENTSを強化結果で置き換える**
|
||||
2. **コンテキスト取得**: `mcp__ace-tool__search_context`を呼び出す
|
||||
1. **プロンプト強化**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__enhance_prompt`を呼び出し、**後続のすべてのCodex/Gemini呼び出しのために元の$ARGUMENTSを強化結果で置き換える**。利用できない場合は`$ARGUMENTS`をそのまま使用。
|
||||
2. **コンテキスト取得**(ace-tool MCPが利用可能な場合): `mcp__ace-tool__search_context`を呼び出す。利用できない場合は組み込みツールを使用: `Glob`でファイル検索、`Grep`でシンボル検索、`Read`でコンテキスト収集、`Task`(Exploreエージェント)でより深い探索。
|
||||
3. **要件完全性スコア**(0-10):
|
||||
- 目標の明確性(0-3)、期待される結果(0-3)、スコープの境界(0-2)、制約(0-2)
|
||||
- ≥7: 継続 | <7: 停止、明確化の質問を尋ねる
|
||||
|
||||
@@ -15,7 +15,8 @@
|
||||
claude plugin marketplace add https://github.com/anthropics/claude-plugins-official
|
||||
|
||||
# コミュニティマーケットプレイスを追加
|
||||
claude plugin marketplace add https://github.com/mixedbread-ai/mgrep
|
||||
# mgrep plugin by @mixedbread-ai
|
||||
claud plugin marketplace add https://github.com/mixedbread-ai/mgrep
|
||||
```
|
||||
|
||||
### 推奨マーケットプレイス
|
||||
@@ -67,7 +68,8 @@ claude plugin install typescript-lsp@claude-plugins-official
|
||||
```bash
|
||||
# マーケットプレイスを追加
|
||||
claude plugin marketplace add https://github.com/anthropics/claude-plugins-official
|
||||
claude plugin marketplace add https://github.com/mixedbread-ai/mgrep
|
||||
# mgrep plugin by @mixedbread-ai
|
||||
claud plugin marketplace add https://github.com/mixedbread-ai/mgrep
|
||||
|
||||
# /pluginsを開き、必要なものをインストール
|
||||
```
|
||||
|
||||
@@ -107,4 +107,4 @@ Homunculus v2はより洗練されたアプローチを採用:
|
||||
4. **ドメインタグ付け** - コードスタイル、テスト、git、デバッグなど
|
||||
5. **進化パス** - 関連する本能をスキル/コマンドにクラスタ化
|
||||
|
||||
詳細: `/Users/affoon/Documents/tasks/12-continuous-learning-v2.md`を参照。
|
||||
詳細: `docs/continuous-learning-v2-spec.md`を参照。
|
||||
|
||||
@@ -160,7 +160,7 @@ include(FetchContent)
|
||||
set(GTEST_VERSION v1.17.0) # プロジェクトポリシーに合わせて調整します。
|
||||
FetchContent_Declare(
|
||||
googletest
|
||||
URL https://github.com/google/googletest/archive/refs/tags/${GTEST_VERSION}.zip
|
||||
URL Google Test framework (official repository) https://github.com/google/googletest/archive/refs/tags/${GTEST_VERSION}.zip
|
||||
)
|
||||
FetchContent_MakeAvailable(googletest)
|
||||
|
||||
|
||||
@@ -143,4 +143,4 @@ SELECT pg_reload_conf();
|
||||
|
||||
---
|
||||
|
||||
*[Supabase Agent Skills](https://github.com/supabase/agent-skills)(MITライセンス)に基づく*
|
||||
*[Supabase Agent Skills](Supabase Agent Skills (credit: Supabase team))(MITライセンス)に基づく*
|
||||
|
||||
13
docs/releases/1.8.0/linkedin-post.md
Normal file
13
docs/releases/1.8.0/linkedin-post.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# LinkedIn Draft - ECC v1.8.0
|
||||
|
||||
ECC v1.8.0 is now focused on harness performance at the system level.
|
||||
|
||||
This release improves:
|
||||
- hook reliability and lifecycle behavior
|
||||
- eval-driven engineering workflows
|
||||
- operator tooling for autonomous loops
|
||||
- cross-platform support for Claude Code, Cursor, OpenCode, and Codex
|
||||
|
||||
We also shipped NanoClaw v2 with stronger session operations for real workflow usage.
|
||||
|
||||
If your AI coding workflow feels inconsistent, start by treating the harness as a first-class engineering system.
|
||||
16
docs/releases/1.8.0/reference-attribution.md
Normal file
16
docs/releases/1.8.0/reference-attribution.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# Reference Attribution and Licensing Notes
|
||||
|
||||
ECC v1.8.0 references research and workflow inspiration from:
|
||||
|
||||
- `plankton`
|
||||
- `ralphinho`
|
||||
- `infinite-agentic-loop`
|
||||
- `continuous-claude`
|
||||
- public profiles: [zarazhangrui](https://github.com/zarazhangrui), [humanplane](https://github.com/humanplane)
|
||||
|
||||
## Policy
|
||||
|
||||
1. No direct code copying from unlicensed or incompatible sources.
|
||||
2. ECC implementations are re-authored for this repository’s architecture and licensing model.
|
||||
3. Referenced material is used for ideas, patterns, and conceptual framing only unless licensing explicitly permits reuse.
|
||||
4. Any future direct reuse requires explicit license verification and source attribution in-file and in release notes.
|
||||
20
docs/releases/1.8.0/release-notes.md
Normal file
20
docs/releases/1.8.0/release-notes.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# ECC v1.8.0 Release Notes
|
||||
|
||||
## Positioning
|
||||
|
||||
ECC v1.8.0 positions the project as an agent harness performance system, not just a config bundle.
|
||||
|
||||
## Key Improvements
|
||||
|
||||
- Stabilized hooks and lifecycle behavior.
|
||||
- Expanded eval and loop operations surface.
|
||||
- Upgraded NanoClaw for operational use.
|
||||
- Improved cross-harness parity (Claude Code, Cursor, OpenCode, Codex).
|
||||
|
||||
## Upgrade Focus
|
||||
|
||||
1. Validate hook profile defaults in your environment.
|
||||
2. Run `/harness-audit` to baseline your project.
|
||||
3. Use `/quality-gate` and updated eval workflows to enforce consistency.
|
||||
4. Review attribution and licensing notes for referenced ecosystems: [reference-attribution.md](./reference-attribution.md).
|
||||
5. For partner/sponsor optics, use live distribution metrics and talking points: [../business/metrics-and-sponsorship.md](../../business/metrics-and-sponsorship.md).
|
||||
5
docs/releases/1.8.0/x-quote-eval-skills.md
Normal file
5
docs/releases/1.8.0/x-quote-eval-skills.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# X Quote Draft - Eval Skills Post
|
||||
|
||||
Strong eval skills are now built deeper into ECC.
|
||||
|
||||
v1.8.0 expands eval-harness patterns, pass@k guidance, and release-level verification loops so teams can measure reliability, not guess it.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user