Design
Technical design and architecture for implementationFrom its SKILL.md
npx -y skills add jmylchreest/aide --skill designAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 16 stars16 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.9 KB, as published. Nobody here has run it
Design Mode
Recommended model tier: smart (opus) - this skill requires complex reasoning
Output a technical design specification that downstream SDLC stages can consume.
Purpose
Create a structured design document that defines:
- What to build (interfaces, types, components)
- How it fits together (data flow, interactions)
- Why key decisions were made (rationale)
- Success criteria (acceptance criteria for TEST stage)
Workflow
Step 1: Understand the Request
Read the request and identify:
- Core functionality required
- Constraints (tech stack, patterns, performance)
- Integration points with existing code
Step 2: Explore the Codebase
Use search tools to understand existing patterns:
- Use
Grepfor similar patterns, interfaces, types - Use
Globfor relevant files - Use
mcp__plugin_aide_aide__decision_listto review all decisions - Use
mcp__plugin_aide_aide__decision_getwith the relevant topic to check specific decisions
Step 3: Define Interfaces
Define the public API/interfaces first:
// Example TypeScript interface
interface UserService {
createUser(data: CreateUserInput): Promise<User>;
getUser(id: string): Promise<User | null>;
updateUser(id: string, data: UpdateUserInput): Promise<User>;
}
interface CreateUserInput {
email: string;
name: string;
}
// Example Go interface
type UserService interface {
CreateUser(ctx context.Context, input CreateUserInput) (*User, error)
GetUser(ctx context.Context, id string) (*User, error)
UpdateUser(ctx context.Context, id string, input UpdateUserInput) (*User, error)
}
Step 4: Document Data Flow
Describe how components interact:
Request → Controller → Service → Repository → Database
↓
Validator
↓
Error Handler → Response
Step 5: Record Key Decisions
Store architectural decisions for future reference:
./.aide/bin/aide decision set "<feature>-storage" "PostgreSQL with JSONB for metadata" \
--rationale="Need flexible schema for user preferences" --by="<git-username>"
./.aide/bin/aide decision set "<feature>-auth" "JWT with refresh tokens" \
--rationale="Stateless auth, mobile client support" --by="<git-username>"
Attribution (--by): use the git username — the GitHub handle, as in the remote
URL — not a display name. Never guess a person's identifier: if you do not know it, omit
--by rather than inventing one. The store is append-only, so a wrong byline cannot be
edited, only superseded by a new version whose sole change is the name.
Binary location: The aide binary is at .aide/bin/aide. If it's on your $PATH, you can use aide directly.
Step 6: Define Acceptance Criteria
List specific, testable criteria for the TEST stage:
## Acceptance Criteria
- [ ] User can be created with email and name
- [ ] Duplicate emails are rejected with 409 status
- [ ] Created user has UUID identifier
- [ ] User can be retrieved by ID
- [ ] Non-existent user returns null (not error)
- [ ] User email can be updated
- [ ] User name can be updated
Required Output Format
# Design: [Feature Name]
## Overview
[1-2 sentence summary of what this feature does]
## Interfaces
### [Interface/Type Name]
\`\`\`typescript
// Interface definition with comments
\`\`\`
## Data Flow
[Diagram or description of component interactions]
## Key Decisions
| Decision | Choice | Rationale |
| -------- | ---------- | --------- |
| Storage | PostgreSQL | [why] |
| Auth | JWT | [why] |
## Acceptance Criteria
- [ ] Criterion 1
- [ ] Criterion 2
- [ ] Criterion 3
## Files to Create/Modify
- `path/to/file.ts` - [purpose]
- `path/to/test.ts` - [test scope]
## Dependencies
- [External packages needed]
- [Internal modules to import]
## Out of Scope
- [Explicitly excluded items]
Failure Handling
Unclear Requirements
- List specific ambiguities
- State assumptions you're making
- Record assumptions:
./.aide/bin/aide memory add --category=decision --tags=project:<name>,session:${AIDE_SESSION_ID},source:inferred "Assumed X because Y" - Proceed with reasonable defaults
Conflicting Patterns Found
- Document the conflicting patterns
- Choose one and record the decision:
./.aide/bin/aide decision set "<topic>" "<choice>" --rationale="<why this over alternatives>"
Too Large / Too Vague
- Break into smaller, focused designs
- Design the core/MVP first
- Note future phases in "Out of Scope"
Verification Checklist
Before completing design:
- Interfaces are defined with types
- Data flow is documented
- Key decisions are recorded in aide
- Acceptance criteria are testable
- Files to modify are listed
- Dependencies are identified
Memory Hygiene
When storing memories from this skill (assumptions, decisions, discoveries), always:
- Include
source:tag — Usesource:inferredfor assumptions,source:discoveredfor findings during exploration - Include scope tags — Add
project:<name>,session:<id>(get project name from git remote or directory; session ID from$AIDE_SESSION_IDor$CLAUDE_SESSION_ID) - Verify codebase claims before storing — If a memory references a file, function, or path, confirm it exists first. See the
memoriseskill for the full verification workflow. - Never use
scope:globalunless storing a user preference
Completion
When design is complete:
- Output the full design document
- Confirm: "Design complete. Ready for TEST stage."
The design document feeds directly into the TEST stage, where acceptance criteria become test cases.