264 lines
9.2 KiB
Markdown
264 lines
9.2 KiB
Markdown
|
|
# Plugin Architecture Philosophy
|
||
|
|
|
||
|
|
## Plugin Hierarchy
|
||
|
|
|
||
|
|
| Level | Scope | Examples |
|
||
|
|
|-------|-------|----------|
|
||
|
|
| High | Teams/orchestration | cc-architect |
|
||
|
|
| Medium | Domain specialists | ux, rails-dev, n8n |
|
||
|
|
| Low | Tools/services | invoice-ninja, commit, push |
|
||
|
|
|
||
|
|
Higher-level plugins may depend on lower-level. No circular dependencies.
|
||
|
|
|
||
|
|
## Plugin Lifecycle
|
||
|
|
|
||
|
|
Plugins move through phases. Friction tracking intensity varies by phase.
|
||
|
|
|
||
|
|
```
|
||
|
|
New/Changed → Active Development → Tuned → Maintenance
|
||
|
|
↑ | |
|
||
|
|
└──────────────┴─────── (changes) ───────┘
|
||
|
|
```
|
||
|
|
|
||
|
|
### Phases
|
||
|
|
|
||
|
|
**Active Development** - New plugins or plugins with recent changes.
|
||
|
|
- Reflection step runs after every workflow execution
|
||
|
|
- Friction logged to central friction directory
|
||
|
|
- Model uncertainty documented as friction
|
||
|
|
- Expect frequent iteration
|
||
|
|
|
||
|
|
Note: The friction tracking infrastructure described here is planned for V2+. Current V1 implementation tracks friction informally.
|
||
|
|
|
||
|
|
**Tuned** - Plugin is stable, producing reliable results.
|
||
|
|
- Reflection step removed (reduces overhead)
|
||
|
|
- Friction tracking disabled
|
||
|
|
- Changes trigger return to Active Development
|
||
|
|
|
||
|
|
**Maintenance** - Long-term stable, minimal changes.
|
||
|
|
- No active friction tracking
|
||
|
|
- Major changes restart the lifecycle
|
||
|
|
|
||
|
|
### Friction Files
|
||
|
|
|
||
|
|
Friction files live at user level, outside any project:
|
||
|
|
|
||
|
|
```
|
||
|
|
~/.claude/friction/
|
||
|
|
{plugin-name}/
|
||
|
|
{date}-{issue-slug}.md
|
||
|
|
```
|
||
|
|
|
||
|
|
Each friction file uses YAML frontmatter for discoverability:
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
---
|
||
|
|
plugin: cc-architect
|
||
|
|
skill: skill-architect
|
||
|
|
priority: P1
|
||
|
|
date: 2026-01-25
|
||
|
|
slug: audit-missing-step
|
||
|
|
---
|
||
|
|
```
|
||
|
|
|
||
|
|
Body contains:
|
||
|
|
- What happened (symptoms)
|
||
|
|
- Suspected cause
|
||
|
|
- Recommended investigation path
|
||
|
|
|
||
|
|
This separation lets friction accumulate without polluting plugin directories. User chooses when to address—urgent issues (P0-P1) get handled fast; optimization opportunities (P2-P3) wait.
|
||
|
|
|
||
|
|
### Enabling/Disabling Friction Tracking
|
||
|
|
|
||
|
|
Like inserting a debugger breakpoint:
|
||
|
|
- Add reflection step when developing or debugging a plugin
|
||
|
|
- Remove when plugin is tuned
|
||
|
|
- Re-add when making changes
|
||
|
|
|
||
|
|
The reflection step itself is a workflow that can be attached to any skill's completion phase.
|
||
|
|
|
||
|
|
## Core Components
|
||
|
|
|
||
|
|
### Skills (Orchestrators)
|
||
|
|
|
||
|
|
- Know available workflows and when to use each
|
||
|
|
- Dispatch general-purpose subagents with workflow documents
|
||
|
|
- Define reporting standards and persistence conventions
|
||
|
|
- Handle user interaction in main thread
|
||
|
|
- Do NOT execute detail work themselves
|
||
|
|
|
||
|
|
### Workflows
|
||
|
|
|
||
|
|
- Live in `workflows/` as `.md` files
|
||
|
|
- Contain: rubrics, templates, process steps
|
||
|
|
- Do NOT contain: theory, framework explanations
|
||
|
|
- Can be static (files) or dynamic (runtime-selected)
|
||
|
|
- Multiple skills/roles can dispatch the same workflow
|
||
|
|
|
||
|
|
See `knowledge-philosophy.md` for what belongs in workflows.
|
||
|
|
|
||
|
|
#### Workflow Composition
|
||
|
|
|
||
|
|
Roles dispatch workflows. Multiple roles can share workflows.
|
||
|
|
|
||
|
|
Example from UX plugin:
|
||
|
|
- **UX Consultant** (audit-focused) dispatches: heuristic evaluation, accessibility audit
|
||
|
|
- **UX Strategist** (planning-focused) dispatches: journey orchestration, feature prioritization
|
||
|
|
- **UX Architect** (system-level) dispatches: navigation model design, state-machine mapping
|
||
|
|
- **Shared workflows**: All roles might dispatch a common "reporting" workflow for consistent output format
|
||
|
|
|
||
|
|
Note: This example shows planned V2+ architecture with multiple specialized roles. Current V1 uses simpler single-role approach.
|
||
|
|
|
||
|
|
See `ux/` (marketplace root) for implementation reference.
|
||
|
|
|
||
|
|
### Scripts
|
||
|
|
|
||
|
|
- Deterministic, repeatable tasks
|
||
|
|
- Binary correctness (valid/invalid, not good/better)
|
||
|
|
- Pre-analysis before AI judgment
|
||
|
|
- Verification of work completion
|
||
|
|
|
||
|
|
**Under-scripting is a common failure mode.** When AI runs multiple deterministic commands sequentially (e.g., `git status`, `git diff`, `git log`), a script should batch them and return a structured report. Signs of under-scripting:
|
||
|
|
- AI running 3+ tool calls for data gathering that could be one script
|
||
|
|
- Same commands executed repeatedly across sessions
|
||
|
|
- Structured output parsed differently each time
|
||
|
|
|
||
|
|
See `tool-patterns/deterministic-scripting.md` for when to script.
|
||
|
|
|
||
|
|
### Hooks
|
||
|
|
|
||
|
|
Event-driven automation that runs at specific lifecycle points.
|
||
|
|
|
||
|
|
**When to use hooks:**
|
||
|
|
|
||
|
|
| Use Case | Hook Type | Example |
|
||
|
|
|----------|-----------|---------|
|
||
|
|
| Validate before execution | PreToolUse | Block writes to .env files |
|
||
|
|
| Format/lint after changes | PostToolUse | Run prettier on edited files |
|
||
|
|
| Inject session context | SessionStart | Load project-specific settings |
|
||
|
|
| Custom notifications | Notification | Desktop alerts for permissions |
|
||
|
|
| Control agent stopping | Stop, SubagentStop | Evaluate task completion |
|
||
|
|
|
||
|
|
**When NOT to use hooks:**
|
||
|
|
|
||
|
|
- Workflow logic that requires AI judgment (use subagents)
|
||
|
|
- Complex multi-step processes (use workflows)
|
||
|
|
- User interaction (use skills)
|
||
|
|
|
||
|
|
**Configuration levels:**
|
||
|
|
|
||
|
|
1. Plugin-level: `hooks/hooks.json` - applies when plugin enabled
|
||
|
|
2. Component-level: skill/agent frontmatter - scoped to component execution
|
||
|
|
|
||
|
|
**Key principle:** Hooks handle mechanical guardrails and automation. Skills handle orchestration and judgment.
|
||
|
|
|
||
|
|
## Execution Model
|
||
|
|
|
||
|
|
### Main Thread Delegates
|
||
|
|
|
||
|
|
Main thread responsibilities:
|
||
|
|
- Understand request
|
||
|
|
- Select workflow
|
||
|
|
- Create task file (if using task file pattern)
|
||
|
|
- Dispatch subagent
|
||
|
|
- Synthesize returned findings
|
||
|
|
- Present to user
|
||
|
|
|
||
|
|
Main thread does NOT:
|
||
|
|
- Read more than 3 files for workflow selection
|
||
|
|
- Execute evaluations
|
||
|
|
- Accumulate context through exploration
|
||
|
|
|
||
|
|
When exploration is needed, dispatch a subagent.
|
||
|
|
|
||
|
|
### General Subagents Over Custom Agents
|
||
|
|
|
||
|
|
**Decision:** Custom agents are relics. Use general-purpose + workflow documents.
|
||
|
|
|
||
|
|
Why:
|
||
|
|
- Same 294-token base overhead (no efficiency difference)
|
||
|
|
- More flexible (workflow docs can be composed, selected dynamically)
|
||
|
|
- No "context gatekeeping" (custom agents hide information from main thread)
|
||
|
|
- Community consensus (Jan 2026)
|
||
|
|
|
||
|
|
Migration path:
|
||
|
|
1. Extract agent logic into workflow document
|
||
|
|
2. Update skill to dispatch `general-purpose` subagent with workflow path
|
||
|
|
3. Delete agent file
|
||
|
|
|
||
|
|
### Command Consolidation
|
||
|
|
|
||
|
|
**Decision:** Skills are directly invocable with `/skill-name`. Standalone commands are redundant.
|
||
|
|
|
||
|
|
**Decision tree for existing commands:**
|
||
|
|
|
||
|
|
1. **Plugin+skill already does this** → Delete command (confirm with user first)
|
||
|
|
2. **Useful functionality, fits existing plugin** → Add as skill to that plugin, delete command
|
||
|
|
3. **Multiple related commands exist** → Create a plugin to house them as skills
|
||
|
|
- Example: `commit` command + `repo-init` command → `git` plugin with `commit` and `repo-init` skills
|
||
|
|
4. **Doesn't fit anywhere** → Case-by-case; may warrant new plugin or remain standalone
|
||
|
|
|
||
|
|
**Do not create new standalone commands.** New functionality goes into plugins as skills.
|
||
|
|
|
||
|
|
## Model Selection
|
||
|
|
|
||
|
|
| Task | Model |
|
||
|
|
|------|-------|
|
||
|
|
| Orchestration/synthesis | Opus |
|
||
|
|
| Workflow execution | Haiku |
|
||
|
|
| Script implementation | Haiku |
|
||
|
|
| Trade-off decisions | Opus |
|
||
|
|
|
||
|
|
**Default to Opus when uncertain.**
|
||
|
|
|
||
|
|
When model choice is uncertain during Active Development phase, log as friction:
|
||
|
|
- What task triggered uncertainty
|
||
|
|
- Why Haiku seemed potentially sufficient
|
||
|
|
- Outcome (did Opus quality justify cost?)
|
||
|
|
|
||
|
|
This creates data for future model selection refinement. User can later test Haiku for that task type to evaluate cost/quality tradeoff.
|
||
|
|
|
||
|
|
## Anti-Patterns
|
||
|
|
|
||
|
|
| Anti-Pattern | Fix |
|
||
|
|
|--------------|-----|
|
||
|
|
| Custom agent proliferation | Use general subagent + workflow document |
|
||
|
|
| Main thread execution | Dispatch subagent, synthesize returned findings |
|
||
|
|
| Inline workflow content in dispatch | 6-8 line dispatch pointing to workflow path |
|
||
|
|
| Over-scripting judgment | Script validates format; AI judges quality |
|
||
|
|
| Under-scripting deterministic work | Batch sequential commands into scripts returning structured reports |
|
||
|
|
| Command-skill duplication | Delete command or migrate to plugin skill |
|
||
|
|
| Hooks for complex logic | Move to workflow document |
|
||
|
|
| Theory in workflow docs | Move to skill description or delete |
|
||
|
|
|
||
|
|
## Known Issues
|
||
|
|
|
||
|
|
Issues identified but deferred for prioritization.
|
||
|
|
|
||
|
|
| Issue | Description | Priority |
|
||
|
|
|-------|-------------|----------|
|
||
|
|
| Architect under-scripting blind spot | skill-architect and plugin-architect do not flag sequential deterministic commands as scripting opportunities (e.g., commit skill runs git commands individually instead of via script) | P1 |
|
||
|
|
|
||
|
|
## Integration
|
||
|
|
|
||
|
|
Works with:
|
||
|
|
- `knowledge-philosophy.md` - What to document
|
||
|
|
- `subagent-pattern.md` - When/how to dispatch
|
||
|
|
- `tool-patterns/role-workflow-pattern.md` - Multi-workflow orchestration
|
||
|
|
- `tool-patterns/deterministic-scripting.md` - When to script
|
||
|
|
- `ux/` (marketplace root) - Reference implementation for role-workflow pattern
|
||
|
|
|
||
|
|
## Plugin Checklist
|
||
|
|
|
||
|
|
When creating or auditing a plugin:
|
||
|
|
|
||
|
|
- [ ] Skills dispatch general subagents (no custom agents)
|
||
|
|
- [ ] Workflows in `workflows/` as `.md` files
|
||
|
|
- [ ] Scripts handle mechanical tasks (watch for under-scripting)
|
||
|
|
- [ ] Task file template defined (if using `tool-patterns/role-workflow-pattern.md`)
|
||
|
|
- [ ] Reporting standards documented
|
||
|
|
- [ ] Model selection follows table
|
||
|
|
- [ ] Commands migrated to skills or deleted
|
||
|
|
- [ ] Hooks used only for guardrails/automation (not logic)
|
||
|
|
- [ ] Friction tracking enabled (if Active Development phase)
|