diff --git a/.agents/skills/create-justification/SKILL.md b/.agents/skills/create-justification/SKILL.md deleted file mode 100644 index 78a2aaea9..000000000 --- a/.agents/skills/create-justification/SKILL.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -name: create-justification -description: Create a new justification file in .agents/justifications/ with a unique three-word ID, frontmatter, and formatted title -license: MIT -compatibility: opencode -metadata: - audience: agents - workflow: decision-making ---- - -## What I do - -I help you create new justification files in the `.agents/justifications/` directory. Each justification file gets: - -- A unique three-word identifier (e.g., `swift-emerald-river`) -- Frontmatter with the current date and formatted title -- Content you provide - -## How to use - -Run the script with a slug and content: - -```bash -npx tsx scripts/create-justification.ts "decision-name" "Justification content here" -``` - -Or use heredoc for multi-line content: - -```bash -npx tsx scripts/create-justification.ts "decision-name" << HEREDOC -Multi-line -justification content -goes here -HEREDOC -``` - -## File format - -Files are created as: `{three-word-id}-{slug}.md` - -Example: `swift-emerald-river-decision-name.md` - -The file includes frontmatter: - -```markdown ---- -date: 2026-01-13 -title: Decision Name ---- - -Your content here -``` - -## When to use me - -Use this skill when you need to document the reasoning or justification for a decision, approach, or architectural choice. The unique ID ensures no filename conflicts, and the frontmatter provides metadata for organization. diff --git a/.agents/skills/create-plan/SKILL.md b/.agents/skills/create-plan/SKILL.md deleted file mode 100644 index 8ceb2ef8c..000000000 --- a/.agents/skills/create-plan/SKILL.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -name: create-plan -description: Create a new plan file in .agents/plans/ with a unique three-word ID, frontmatter, and formatted title -license: MIT -compatibility: opencode -metadata: - audience: agents - workflow: planning ---- - -## What I do - -I help you create new plan files in the `.agents/plans/` directory. Each plan file gets: - -- A unique three-word identifier (e.g., `happy-blue-moon`) -- Frontmatter with the current date and formatted title -- Content you provide - -## How to use - -Run the script with a slug and content: - -```bash -npx tsx scripts/create-plan.ts "feature-name" "Plan content here" -``` - -Or use heredoc for multi-line content: - -```bash -npx tsx scripts/create-plan.ts "feature-name" << HEREDOC -Multi-line -plan content -goes here -HEREDOC -``` - -## File format - -Files are created as: `{three-word-id}-{slug}.md` - -Example: `happy-blue-moon-feature-name.md` - -The file includes frontmatter: - -```markdown ---- -date: 2026-01-13 -title: Feature Name ---- - -Your content here -``` - -## When to use me - -Use this skill when you need to create a new plan document for a feature, task, or project. The unique ID ensures no filename conflicts, and the frontmatter provides metadata for organization. diff --git a/.agents/skills/create-scratch/SKILL.md b/.agents/skills/create-scratch/SKILL.md deleted file mode 100644 index e44e4779d..000000000 --- a/.agents/skills/create-scratch/SKILL.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -name: create-scratch -description: Create a new scratch file in .agents/scratches/ with a unique three-word ID, frontmatter, and formatted title -license: MIT -compatibility: opencode -metadata: - audience: agents - workflow: exploration ---- - -## What I do - -I help you create new scratch files in the `.agents/scratches/` directory. Each scratch file gets: - -- A unique three-word identifier (e.g., `calm-teal-cloud`) -- Frontmatter with the current date and formatted title -- Content you provide - -## How to use - -Run the script with a slug and content: - -```bash -npx tsx scripts/create-scratch.ts "note-name" "Scratch content here" -``` - -Or use heredoc for multi-line content: - -```bash -npx tsx scripts/create-scratch.ts "note-name" << HEREDOC -Multi-line -scratch content -goes here -HEREDOC -``` - -## File format - -Files are created as: `{three-word-id}-{slug}.md` - -Example: `calm-teal-cloud-note-name.md` - -The file includes frontmatter: - -```markdown ---- -date: 2026-01-13 -title: Note Name ---- - -Your content here -``` - -## When to use me - -Use this skill when you need to create a temporary note, exploration document, or scratch pad for ideas. The unique ID ensures no filename conflicts, and the frontmatter provides metadata for organization. diff --git a/scripts/create-justification.ts b/scripts/create-justification.ts deleted file mode 100644 index 04f48d70c..000000000 --- a/scripts/create-justification.ts +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env node -import { mkdirSync, readFileSync, writeFileSync } from 'fs'; -import { join } from 'path'; - -import { generateId } from './utils/generate-id'; - -const JUSTIFICATIONS_DIR = join(process.cwd(), '.agents', 'justifications'); - -const main = () => { - const args = process.argv.slice(2); - - if (args.length === 0) { - console.error('Usage: npx tsx scripts/create-justification.ts "file-slug" [content]'); - console.error(' or: npx tsx scripts/create-justification.ts "file-slug" << HEREDOC'); - process.exit(1); - } - - const slug = args[0]; - let content = ''; - - // Check if content is provided as second argument - if (args.length > 1) { - content = args.slice(1).join(' '); - } else { - // Read from stdin (heredoc) - try { - const stdin = readFileSync(0, 'utf-8'); - content = stdin.trim(); - } catch (error) { - console.error('Error reading from stdin:', error); - process.exit(1); - } - } - - if (!content) { - console.error('Error: No content provided'); - process.exit(1); - } - - // Generate unique ID - const id = generateId(); - const filename = `${id}-${slug}.md`; - const filepath = join(JUSTIFICATIONS_DIR, filename); - - // Format title from slug (kebab-case to Title Case) - const title = slug - .split('-') - .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) - .join(' '); - - // Get current date in ISO format - const date = new Date().toISOString().split('T')[0]; - - // Create frontmatter - const frontmatter = `--- -date: ${date} -title: ${title} ---- - -`; - - // Ensure directory exists - mkdirSync(JUSTIFICATIONS_DIR, { recursive: true }); - - // Write file with frontmatter - writeFileSync(filepath, frontmatter + content, 'utf-8'); - - console.log(`Created justification: ${filepath}`); - console.log(`ID: ${id}`); - console.log(`Filename: ${filename}`); -}; - -main(); diff --git a/scripts/create-plan.ts b/scripts/create-plan.ts deleted file mode 100644 index 647205935..000000000 --- a/scripts/create-plan.ts +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env node -import { mkdirSync, readFileSync, writeFileSync } from 'fs'; -import { join } from 'path'; - -import { generateId } from './utils/generate-id'; - -const PLANS_DIR = join(process.cwd(), '.agents', 'plans'); - -const main = () => { - const args = process.argv.slice(2); - - if (args.length === 0) { - console.error('Usage: npx tsx scripts/create-plan.ts "file-slug" [content]'); - console.error(' or: npx tsx scripts/create-plan.ts "file-slug" << HEREDOC'); - process.exit(1); - } - - const slug = args[0]; - let content = ''; - - // Check if content is provided as second argument - if (args.length > 1) { - content = args.slice(1).join(' '); - } else { - // Read from stdin (heredoc) - try { - const stdin = readFileSync(0, 'utf-8'); - content = stdin.trim(); - } catch (error) { - console.error('Error reading from stdin:', error); - process.exit(1); - } - } - - if (!content) { - console.error('Error: No content provided'); - process.exit(1); - } - - // Generate unique ID - const id = generateId(); - const filename = `${id}-${slug}.md`; - const filepath = join(PLANS_DIR, filename); - - // Format title from slug (kebab-case to Title Case) - const title = slug - .split('-') - .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) - .join(' '); - - // Get current date in ISO format - const date = new Date().toISOString().split('T')[0]; - - // Create frontmatter - const frontmatter = `--- -date: ${date} -title: ${title} ---- - -`; - - // Ensure directory exists - mkdirSync(PLANS_DIR, { recursive: true }); - - // Write file with frontmatter - writeFileSync(filepath, frontmatter + content, 'utf-8'); - - console.log(`Created plan: ${filepath}`); - console.log(`ID: ${id}`); - console.log(`Filename: ${filename}`); -}; - -main(); diff --git a/scripts/create-scratch.ts b/scripts/create-scratch.ts deleted file mode 100644 index fe77644ce..000000000 --- a/scripts/create-scratch.ts +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env node -import { mkdirSync, readFileSync, writeFileSync } from 'fs'; -import { join } from 'path'; - -import { generateId } from './utils/generate-id'; - -const SCRATCHES_DIR = join(process.cwd(), '.agents', 'scratches'); - -const main = () => { - const args = process.argv.slice(2); - - if (args.length === 0) { - console.error('Usage: npx tsx scripts/create-scratch.ts "file-slug" [content]'); - console.error(' or: npx tsx scripts/create-scratch.ts "file-slug" << HEREDOC'); - process.exit(1); - } - - const slug = args[0]; - let content = ''; - - // Check if content is provided as second argument - if (args.length > 1) { - content = args.slice(1).join(' '); - } else { - // Read from stdin (heredoc) - try { - const stdin = readFileSync(0, 'utf-8'); - content = stdin.trim(); - } catch (error) { - console.error('Error reading from stdin:', error); - process.exit(1); - } - } - - if (!content) { - console.error('Error: No content provided'); - process.exit(1); - } - - // Generate unique ID - const id = generateId(); - const filename = `${id}-${slug}.md`; - const filepath = join(SCRATCHES_DIR, filename); - - // Format title from slug (kebab-case to Title Case) - const title = slug - .split('-') - .map((word) => word.charAt(0).toUpperCase() + word.slice(1)) - .join(' '); - - // Get current date in ISO format - const date = new Date().toISOString().split('T')[0]; - - // Create frontmatter - const frontmatter = `--- -date: ${date} -title: ${title} ---- - -`; - - // Ensure directory exists - mkdirSync(SCRATCHES_DIR, { recursive: true }); - - // Write file with frontmatter - writeFileSync(filepath, frontmatter + content, 'utf-8'); - - console.log(`Created scratch: ${filepath}`); - console.log(`ID: ${id}`); - console.log(`Filename: ${filename}`); -}; - -main(); diff --git a/scripts/utils/generate-id.ts b/scripts/utils/generate-id.ts deleted file mode 100644 index d2c950076..000000000 --- a/scripts/utils/generate-id.ts +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Generates a unique identifier using three simple words. - * Falls back to unix timestamp if word generation fails. - */ -export const generateId = (): string => { - const adjectives = [ - 'happy', - 'bright', - 'swift', - 'calm', - 'bold', - 'clever', - 'gentle', - 'quick', - 'sharp', - 'warm', - 'cool', - 'fresh', - 'solid', - 'clear', - 'sweet', - 'wild', - 'quiet', - 'loud', - 'smooth', - ]; - - const nouns = [ - 'moon', - 'star', - 'ocean', - 'river', - 'forest', - 'mountain', - 'cloud', - 'wave', - 'stone', - 'flower', - 'bird', - 'wind', - 'light', - 'shadow', - 'fire', - 'earth', - 'sky', - 'tree', - 'leaf', - 'rock', - ]; - - const colors = [ - 'blue', - 'red', - 'green', - 'yellow', - 'purple', - 'orange', - 'pink', - 'cyan', - 'amber', - 'emerald', - 'violet', - 'indigo', - 'coral', - 'teal', - 'gold', - 'silver', - 'copper', - 'bronze', - 'ivory', - 'jade', - ]; - - try { - const randomAdjective = adjectives[Math.floor(Math.random() * adjectives.length)]; - const randomColor = colors[Math.floor(Math.random() * colors.length)]; - const randomNoun = nouns[Math.floor(Math.random() * nouns.length)]; - - return `${randomAdjective}-${randomColor}-${randomNoun}`; - } catch { - // Fallback to unix timestamp if something goes wrong - return Date.now().toString(); - } -};