Awesome-omni-skill create-target
Scaffold a new target type (e.g., Zed, Windsurf) for universal-ai-config
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/tools/create-target" ~/.claude/skills/diegosouzapw-awesome-omni-skill-create-target && rm -rf "$T"
skills/tools/create-target/SKILL.mdCreate a new target implementation for universal-ai-config. A target maps universal template frontmatter and hooks to a specific AI coding assistant's configuration format.
Phase 1 — Research & Approval
-
Research the target's config format — find up-to-date documentation online for how the target AI assistant expects its configuration files. Look for:
- File locations and naming conventions (e.g.,
,.cursor/rules/*.mdc
).github/instructions/*.md - Frontmatter format for each file type
- Hook configuration format (JSON structure, event names)
Look through docs for all supported configuration types:
- Instructions/rules/"system prompt"
- Skills/Commands
- Agents
- Hooks
- File locations and naming conventions (e.g.,
-
Present findings for approval — before writing any code, present a structured summary of your research to the user. For each supported configuration type, include:
- What it maps to: the universal template type it corresponds to (instructions, skills, agents, hooks)
- File location & naming: where the target expects these files and what extensions/naming conventions it uses
- Frontmatter/metadata format: the exact fields, keys, and structure the target uses (with examples from docs)
- Hook format (if applicable): event names, JSON structure, how handlers are defined
- Source links: direct URLs to the official documentation pages you referenced
Format as a clear table or grouped list so the user can review each mapping. Ask the user to approve or flag any corrections before proceeding. Do not continue until the user explicitly approves.
Phase 2 — Plan
After the user approves the research findings, enter plan mode to design the full implementation before writing any code. The plan should cover:
-
Review existing targets for patterns — read through at least one existing target implementation (e.g.,
) and the shared types to understand the exact interfaces and conventions you need to follow.src/targets/claude/index.ts -
Draft the implementation plan — produce a detailed, step-by-step plan that includes:
- Target definition: the full
structure —defineTarget()
,name
,outputDir
, and for each supported type:supportedTypes
— every universal key and what it maps to (string rename or function transform), with reasoningfrontmatterMap
— the exact path logic, including howgetOutputPath
or other flags affect routingalwaysApply
- Hooks (if supported):
function logic mapping universal event names → target events,transform
, andoutputPath
if the hook config nests inside a larger filemergeKey - Registration: changes needed in
and thesrc/targets/index.ts
type inTargetsrc/types.ts - Config schema: any changes needed in
orsrc/config/schema.tssrc/config/defaults.ts - Tests: which fixture(s) to use or create, and what assertions to write
- Docs: any updates needed to README, meta-instruction templates, or seed files
Reference the
pattern:defineTarget()import { defineTarget } from "../define-target.js"; import type { UniversalFrontmatter, UniversalHookHandler } from "../../types.js"; export default defineTarget({ name: "<target-name>", outputDir: ".<target-dir>", supportedTypes: ["instructions", "skills", "agents", "hooks"], instructions: { frontmatterMap: { description: "description", globs: "<target-specific-key>", alwaysApply: "<target-specific-key>", }, getOutputPath: (name, fm) => `rules/${name}.<ext>`, }, // skills, agents — similar pattern // hooks — implement transform function });Key decisions to address in the plan:
: maps universal keys → target keys. Use a string for direct rename, or a functionfrontmatterMap
for transforms(value, fm) => Record<string, unknown>
: determines output file path from template name and frontmattergetOutputPath- Hook
: converts universal event names and handler format to target formattransform - Hook
: if the target's hook config is nested inside a larger settings file (like Claude'smergeKey
which has asettings.json
key)hooks
- Target definition: the full
-
Get plan approval — present the plan to the user for review. Do not start implementing until the plan is approved.
Phase 3 — Implementation
Once the plan is approved, execute it:
-
Create the target directory — create
src/targets/<name>/index.ts -
Implement
— follow the approved plan to build the full target definitiondefineTarget() -
Register the target — add to
and thesrc/targets/index.ts
type inTargetsrc/types.ts -
Add tests — create integration tests using existing fixtures that generate for the new target, verifying output paths and content
-
Run
to verify everything passespnpm check