From ottonomous
Generates product specifications via collaborative interview with web research and codebase analysis. Lists, creates, and revises specs saved as Markdown in .otto/specs for planning, requirements, and feature design.
npx claudepluginhub brsbl/ottonomous --plugin ottonomousThis skill uses the workspace's default tool permissions.
**Argument:** $ARGUMENTS
Creates specification documents via adaptive multi-round interviews with proactive recommendations and optional research. Activates on 'create spec', 'new spec', or similar phrases.
Creates or updates SPEC.md documents from requirements, notes, or interview output, structuring into sections for goals, design, edge cases, security, testing, and success criteria. Use for feature specs.
Share bugs, ideas, or general feedback.
Argument: $ARGUMENTS
| Command | Behavior |
|---|---|
/spec list | List all specs with id, name, status, created date |
/spec {idea} | Create new spec through collaborative interview |
/spec revise {spec} | Save spec and go straight to review with codebase exploration |
If $ARGUMENTS is list:
.otto/specs/*.md | Name | ID | Status | Created |
|------|-----|--------|---------|
| Design Skill | design-skill-a1b2 | approved | 2026-01-28 |
/spec {idea} to create one."If $ARGUMENTS starts with revise:
Spec Content: Everything after revise  in $ARGUMENTS
If no spec content provided, ask: "Provide the spec content to save. The first line should be the product name."
Parse the provided content:
Analyze codebase:
Map the provided content to this template structure (mark missing sections as [TBD]):
Product Requirements:
Technical Design:
Planning:
[TBD: reason]Generate unique ID from product name:
name=$(echo "$NAME" | head -1)
slug="${name,,}" # Convert to lowercase
slug="${slug// /-}" # Replace spaces with hyphens
slug="${slug:0:30}" # Truncate to 30 characters
hash=$(sha1sum <<< "$name$(date +%s%N)" 2>/dev/null || shasum <<< "$name$(date +%s%N)")
hash="${hash:0:4}"
id="${slug}-${hash}"
mkdir -p .otto/specs
Write to .otto/specs/{id}.md:
---
id: {id}
name: {Name}
status: draft
created_date: {YYYY-MM-DD}
description: {one-line summary of the spec}
---
{spec content mapped to template structure}
If any sections are marked [TBD] or contain ambiguous requirements:
Use AskUserQuestion to resolve each ambiguity before proceeding to review. For each unclear item:
Skip this step if the spec is complete with no [TBD] markers.
Launch technical-product-manager subagent with Task tool:
Handoff to technical-product-manager:
.otto/specs/{id}.md{id}The subagent reads the spec, reviews for completeness, consistency, feasibility, ambiguity, and technical correctness. Returns prioritized findings (P0-P2) with specific sections, issues, and suggestions.
Wait for review to complete.
If no findings, skip to step 7.
For each finding (highest priority first):
AskUserQuestion with "Accept", "Reject", "Modify"AskUserQuestion with the optionsAfter processing all findings, update the spec file with changes.
Output the full spec as rendered markdown so the user can review it inline.
Use AskUserQuestion with options:
open .otto/specs/{id}.md, then ask againAfter each revision: Output the full updated spec as rendered markdown before asking for approval again. Revise until approved.
On approval, update status: draft to status: approved in the file.
Report: "Spec approved and saved to .otto/specs/{id}.md"
Offer task generation:
"Run
/task {name}to generate implementation tasks."
Product Idea: $ARGUMENTS
If no argument provided, ask: "What would you like to build?"
Check for existing specs:
ls .otto/specs/*.md 2>/dev/null
Ask about reference projects:
"Are there any reference projects or examples I should look at for inspiration?"
If provided, explore the reference project(s) to understand their approach.
Analyze codebase:
Use WebSearch to find and WebFetch to read:
For visual research (competitor products, reference implementations):
skills/otto/lib/browser) to navigate sites and capture screenshots.otto/research/Use AskUserQuestion to gather requirements. For each decision point:
Topics to cover:
Write a spec covering:
Product Requirements:
Technical Design:
Planning:
[TBD: reason]Generate unique ID from product idea:
slug="${ARGUMENTS,,}" # Convert to lowercase
slug="${slug// /-}" # Replace spaces with hyphens
slug="${slug:0:30}" # Truncate to 30 characters
hash=$(sha1sum <<< "$ARGUMENTS$(date +%s%N)" 2>/dev/null || shasum <<< "$ARGUMENTS$(date +%s%N)")
hash="${hash:0:4}"
id="${slug}-${hash}"
mkdir -p .otto/specs
Write to .otto/specs/{id}.md:
---
id: {id}
name: {Product Idea}
status: draft
created_date: {YYYY-MM-DD}
description: {one-line summary of the spec}
---
{spec content}
Launch technical-product-manager subagent with Task tool:
Handoff to technical-product-manager:
.otto/specs/{id}.md{id}The subagent reads the spec, reviews for completeness, consistency, feasibility, ambiguity, and technical correctness. Returns prioritized findings (P0-P2) with specific sections, issues, and suggestions.
Wait for review to complete.
If no findings, skip to step 8.
For each finding (highest priority first):
AskUserQuestion with "Accept", "Reject", "Modify"AskUserQuestion with the optionsAfter processing all findings, update the spec file with changes.
Output the full spec as rendered markdown so the user can review it inline.
Use AskUserQuestion with options:
open .otto/specs/{id}.md, then ask againAfter each revision: Output the full updated spec as rendered markdown before asking for approval again. Revise until approved.
On approval, update status: draft to status: approved in the file.
Report: "Spec approved and saved to .otto/specs/{id}.md"
Offer task generation:
"Run
/task {name}to generate implementation tasks."