agentsclimarketplace

Ooda skill

Skill mataeil/OODA-loop/skills/ooda-skill

Create, disable, and enable domain skills. Generates project-specific SKILL.md files via a short interview.From its SKILL.md

Install
npx -y skills add mataeil/OODA-loop --skill ooda-skill

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 5 stars5 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

9.8 KB, ~2.5k tokens by cl100k_base, as published. Nobody here has run it

ooda-skill — Domain Skill Wizard

Manages domain skills: create new skills via guided interview, disable or enable domains, and list current domain status. Generates a complete, project- specific SKILL.md by combining user answers with a generator template.


Step 0: HALT Check (Always First)

Read agent/safety/HALT. If the file exists: [HALT] ooda-skill blocked. Remove agent/safety/HALT to continue. — stop.

If config.json is missing: config.json not found. Run /ooda-setup first. — stop.

Parse the subcommand from the user's invocation: create | disable | enable | list Unknown subcommand → print Usage block and exit.


Subcommand: list

Print a table of all domains from config.domains, sorted by status then name.

Domain              Status      Skill
──────────────────────────────────────────────────
service_health      active      /scan-health
ux_evolution        available   /scan-ux
business_strategy   available   /scan-market
competitors         disabled    /scan-competitors

Status values:

  • active — skill created and configured, evolve will invoke it
  • available — domain defined in config, skill not yet created
  • disabled — domain exists but status set to "disabled"

Footer: Total: {N} domains — {N} active, {N} available, {N} disabled If config.domains is empty: No domains configured. Run /ooda-setup first.


Subcommand: disable {domain-name}

  1. Look up config.domains.{domain-name}. Not found → print Domain not found: {name} and exit.
  2. Already disabled → print {name} is already disabled. and exit.
  3. Back up config.json to config.json.bak.
  4. Set config.domains.{domain-name}.status = "disabled".
  5. Write and re-parse config.json to confirm valid JSON.
  6. Print:
    {name} disabled.
    Re-enable with: /ooda-skill enable {name}
    

Subcommand: enable {domain-name}

  1. Look up config.domains.{domain-name}. Not found → print Domain not found: {name} and exit.
  2. Check if a skill file exists at skills/{name}/SKILL.md.
    • If yes → restore status to "active".
    • If no → restore status to "available".
  3. Back up config.json to config.json.bak.
  4. Write updated status. Re-parse to confirm valid JSON.
  5. Print:
    {name} enabled (status: {active|available}).
    
    If status is "available": Run /ooda-skill create {name} to generate the skill.

Subcommand: create {skill-name}

Step 1: Validate domain

Look up config.domains for an entry whose primary_skill matches /{skill-name}. If not found → No domain found for skill: {skill-name}. Check /ooda-skill list. — exit. If domain.status != "available":

  • "active"{skill-name} already exists. Find it at skills/{skill-name}/SKILL.md
  • "disabled"{skill-name} is disabled. Run /ooda-skill enable {domain-name} first. Exit in both cases.

Check that the generator template exists: templates/skill-generators/{skill-name}.prompt.md If missing → Generator template not found: templates/skill-generators/{skill-name}.prompt.md — exit.

Step 2: Interview

Print: Creating skill: {skill-name} Print: Answer a few questions to tailor this skill to your project. Print: (Press Enter to accept defaults where shown)

Run the question set for the specific skill (see Question Sets below). Store all answers in memory as user_context.

Step 3: Generate SKILL.md

Read the following files:

  1. templates/skill-generators/{skill-name}.prompt.md — generator instructions
  2. templates/SKILL_TEMPLATE.md — structural skeleton
  3. agent/contracts/schema.md — contract format

Compose a generation prompt:

You are generating a SKILL.md for the OODA-loop harness.

Generator instructions:
{contents of skill-generators/{skill-name}.prompt.md}

Skill template structure:
{contents of SKILL_TEMPLATE.md}

Contract schema:
{contents of agent/contracts/schema.md}

User's project context:
{user_context as labeled key-value pairs}

Generate a complete, production-ready SKILL.md for the {skill-name} skill.
Follow the generator instructions exactly. Use the user's project context
throughout — no generic placeholders.

Use Claude to generate the SKILL.md content.

Step 4: Validate generated output

Before writing any file, verify the generated SKILL.md contains:

CheckRule
YAML frontmatter--- block at top with name, ooda_phase, version, description
contract_version fieldPresent and set to "1.0"
name fieldEquals {skill-name}
ooda_phase fieldOne of: meta, observe, detect, strategize, execute, support
status fieldPresent — active or deprecated (default: active)
safety.halt_checktrue
safety.read_onlyPresent
input.filesNon-empty list
output.filesNon-empty list
Step 0 (Adaptive Lens)Section reading agent/state/{domain}/lens.json
Step 1 (HALT check)HALT file check before any action
references/context.jsonSkill reads this file in input.files or Step 1

If any check fails: print [WARN] Generated skill missing: {check}. Regenerating... and retry generation once with the specific gap highlighted. If second attempt also fails, write the file anyway and append a ## TODO section listing the missing items for manual completion.

Step 5: Write files

Create directory: skills/{skill-name}/ Write: skills/{skill-name}/SKILL.md (generated content)

Write skills/{skill-name}/references/context.json:

{
  "schema_version": "1.0.0",
  "skill": "{skill-name}",
  "generated_at": "{ISO 8601 timestamp}",
  "user_context": {
    {user_context key-value pairs as JSON}
  }
}

For scan-market also write skills/{skill-name}/references/known-entities.md:

# Known Entities — {skill-name}

## Product
{product_description from user answers}

## Target Customer
{target_customer from user answers}

## Competitors
{competitors list from user answers, one per line as - name}

## Data Sources
{data_sources from user answers}

Step 6: Update config + symlink

Back up config.json to config.json.bak. Set config.domains.{domain-name}.status = "active" in config.json. Write and re-parse config.json to confirm valid JSON.

Step 7: Print summary

Skill created: {skill-name}

  SKILL.md:      skills/{skill-name}/SKILL.md
  References:    skills/{skill-name}/references/context.json
  Domain status: active

Next steps:
  Review:  skills/{skill-name}/SKILL.md
  Run:     /{skill-name}
  Config:  /ooda-config domain list

Question Sets

scan-market (5 questions)

Q1: What does your product do? (1-2 sentences)
    > {user input}
    → stored as: product_description

Q2: Who is your target customer?
    (e.g., "solo indie hackers", "B2B SaaS teams", "e-commerce stores")
    > {user input}
    → stored as: target_customer

Q3: What are your top 3 business goals?
    (e.g., "grow to 1000 users", "reduce churn below 5%", "launch in new market")
    > {user input}
    → stored as: business_goals

Q4: What data sources can you access?
    (e.g., "Google Analytics, Stripe dashboard, GitHub stars, HN upvotes")
    > {user input}
    → stored as: data_sources

Q5: Name 2-5 competitors (product names or URLs, comma-separated)
    > {user input}
    → stored as: competitors

scan-ux (4 questions)

Q1: What is your frontend stack?
    (e.g., "React + TypeScript", "Vue 3", "vanilla HTML/CSS", "Next.js")
    > {user input}
    → stored as: frontend_stack

Q2: What are the key user flows to audit?
    (e.g., "signup, checkout, onboarding, settings page")
    > {user input}
    → stored as: key_flows

Q3: What UX framework or heuristics to apply?
    (e.g., "Nielsen's 10 heuristics", "WCAG 2.1 AA", or "use defaults")
    [default: use defaults]
    > {user input}
    → stored as: ux_framework

Q4: Any specific pages or components to focus on?
    (e.g., "/pricing, /signup, <Header> component" — or "all" for site-wide)
    [default: all]
    > {user input}
    → stored as: focus_areas

scan-competitors (3 questions)

Q1: Who are your top 3-5 competitors? (names or URLs, comma-separated)
    > {user input}
    → stored as: competitors

Q2: What to track?
    (options: pricing, features, changelog, all)
    [default: all]
    > {user input}
    → stored as: track_what

Q3: Any competitor URLs to monitor directly?
    (paste URLs comma-separated, or press Enter to use search-based discovery)
    > {user input}
    → stored as: competitor_urls

Graceful Degradation

ConditionBehavior
HALT file existsPrint reason, exit immediately
config.json missingPrint setup message, exit
Domain not found for skillPrint message with /ooda-skill list hint, exit
Generator template missingPrint message with file path, exit
Generation failsPrint error, suggest manual creation via SKILL_TEMPLATE.md
Symlink target already existsSkip silently, continue
config.json write failsPrint error, revert from config.json.bak

Usage

/ooda-skill create {skill-name}    Create a new domain skill via interview
/ooda-skill disable {domain-name}  Disable a domain (sets status to "disabled")
/ooda-skill enable {domain-name}   Re-enable a domain
/ooda-skill list                   Show all domains with status

Supported skill-name values for create: scan-market, scan-ux, scan-competitors

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.