From f0a0523272be77f15a58efe3f9deb159d1514160 Mon Sep 17 00:00:00 2001 From: Steffen Zellmer <151627820+Steffen025@users.noreply.github.com> Date: Sat, 28 Mar 2026 13:15:31 -0400 Subject: [PATCH 1/4] fix(runtime): align OpenCode paths and post-install defaults --- .opencode/PAI/Tools/SessionHarvester.ts | 16 +- .opencode/PAI/Tools/algorithm.ts | 8 +- .../plugins/handlers/implicit-sentiment.ts | 2 +- .opencode/plugins/handlers/update-counts.ts | 2 +- .../plugins/handlers/voice-notification.ts | 15 +- .opencode/plugins/lib/prd-template.ts | 160 ++++++++++++++++++ .opencode/settings.json | 14 +- .opencode/skills/Agents/Tools/ComposeAgent.ts | 6 +- .../skills/Research/Workflows/ExtractAlpha.md | 2 +- .opencode/skills/Research/Workflows/Fabric.md | 2 +- .../Telos/DashboardTemplate/Lib/telos-data.ts | 2 +- .../skills/Telos/Workflows/WriteReport.md | 10 +- .../skills/Utilities/Prompting/Standards.md | 22 +-- PAI-Install/engine/steps-fresh.ts | 5 +- 14 files changed, 218 insertions(+), 48 deletions(-) create mode 100644 .opencode/plugins/lib/prd-template.ts diff --git a/.opencode/PAI/Tools/SessionHarvester.ts b/.opencode/PAI/Tools/SessionHarvester.ts index 5b29cb01..ef06e93c 100755 --- a/.opencode/PAI/Tools/SessionHarvester.ts +++ b/.opencode/PAI/Tools/SessionHarvester.ts @@ -2,7 +2,7 @@ /** * SessionHarvester - Extract learnings from Claude Code session transcripts * - * Harvests insights from ~/.claude/projects/ sessions and writes to LEARNING/ + * Harvests insights from ~/.opencode/projects/ sessions and writes to LEARNING/ * * Commands: * --recent N Harvest from N most recent sessions (default: 10) @@ -19,19 +19,17 @@ import { parseArgs } from "util"; import * as fs from "fs"; import * as path from "path"; -import { getLearningCategory, isLearningCapture } from "../../hooks/lib/learning-utils"; +import { getLearningCategory, isLearningCapture } from "../../plugins/lib/learning-utils"; // ============================================================================ // Configuration // ============================================================================ -const CLAUDE_DIR = path.join(process.env.HOME!, ".claude"); -// Derive the project slug dynamically from CLAUDE_DIR (works on macOS and Linux) -// macOS: ${HOME}/.claude → -Users-username--claude -// Linux: /home/username/.claude → -home-username--claude -const CWD_SLUG = CLAUDE_DIR.replace(/[\/\.]/g, "-"); -const PROJECTS_DIR = path.join(CLAUDE_DIR, "projects", CWD_SLUG); -const LEARNING_DIR = path.join(CLAUDE_DIR, "MEMORY", "LEARNING"); +const OPENCODE_DIR = process.env.OPENCODE_DIR || path.join(process.env.HOME!, ".opencode"); +// Derive the project slug dynamically from current working directory +const CWD_SLUG = process.cwd().replace(/[\/\.]/g, "-"); +const PROJECTS_DIR = path.join(OPENCODE_DIR, "projects", CWD_SLUG); +const LEARNING_DIR = path.join(OPENCODE_DIR, "MEMORY", "LEARNING"); // Patterns indicating learning moments in conversations const CORRECTION_PATTERNS = [ diff --git a/.opencode/PAI/Tools/algorithm.ts b/.opencode/PAI/Tools/algorithm.ts index 950cb0ef..63b3a459 100644 --- a/.opencode/PAI/Tools/algorithm.ts +++ b/.opencode/PAI/Tools/algorithm.ts @@ -29,7 +29,7 @@ * algorithm stop -p Stop a loop * * EXAMPLES: - * algorithm -m loop -p ~/.claude/MEMORY/WORK/auth/PRD-20260207-auth.md + * algorithm -m loop -p ~/.opencode/MEMORY/WORK/auth/PRD-20260207-auth.md * algorithm -m loop -p /path/to/project/.prd/PRD-20260213-feature.md -n 20 * algorithm -m interactive -p PRD-20260213-surface * algorithm new -t "Build auth system" -e Extended @@ -41,12 +41,12 @@ import { readFileSync, writeFileSync, existsSync, readdirSync, mkdirSync, append import { resolve, basename, join, dirname } from "path"; import { spawnSync, spawn } from "child_process"; import { randomUUID } from "crypto"; -import { generatePRDTemplate } from "../../hooks/lib/prd-template"; +import { generatePRDTemplate } from "../../plugins/lib/prd-template"; // ─── Paths ─────────────────────────────────────────────────────────────────── const HOME = process.env.HOME || "~"; -const BASE_DIR = process.env.PAI_DIR || join(HOME, ".claude"); +const BASE_DIR = process.env.OPENCODE_DIR || join(HOME, ".opencode"); const ALGORITHMS_DIR = join(BASE_DIR, "MEMORY", "STATE", "algorithms"); const SESSION_NAMES_PATH = join(BASE_DIR, "MEMORY", "STATE", "session-names.json"); const PROJECTS_DIR = process.env.PROJECTS_DIR || join(HOME, "Projects"); @@ -211,7 +211,7 @@ Flags: -h, --help Show this help PRD Resolution: - Full path ~/.claude/MEMORY/WORK/auth/PRD-20260207-auth.md + Full path ~/.opencode/MEMORY/WORK/auth/PRD-20260207-auth.md PRD ID PRD-20260207-auth (searches MEMORY/WORK/ and ~/Projects/*/.prd/) Project path /path/to/project/.prd/PRD-20260213-feature.md diff --git a/.opencode/plugins/handlers/implicit-sentiment.ts b/.opencode/plugins/handlers/implicit-sentiment.ts index e90e6605..651c95cc 100644 --- a/.opencode/plugins/handlers/implicit-sentiment.ts +++ b/.opencode/plugins/handlers/implicit-sentiment.ts @@ -32,7 +32,7 @@ import { appendFileSync, existsSync, mkdirSync, writeFileSync } from "node:fs"; import { join } from "node:path"; -import { inference } from "../../skills/PAI/Tools/Inference"; +import { inference } from "../../PAI/Tools/Inference"; import { fileLog, fileLogError } from "../lib/file-logger"; import { getIdentity, getPrincipal } from "../lib/identity"; import { getLearningCategory } from "../lib/learning-utils"; diff --git a/.opencode/plugins/handlers/update-counts.ts b/.opencode/plugins/handlers/update-counts.ts index 89161b3e..6384091b 100644 --- a/.opencode/plugins/handlers/update-counts.ts +++ b/.opencode/plugins/handlers/update-counts.ts @@ -145,7 +145,7 @@ function getCounts(openCodeDir: string): Counts { workflows: countWorkflowFiles(join(openCodeDir, "skills")), plugins: countPlugins(openCodeDir), // Changed from 'hooks' signals: countRatingsLines(join(openCodeDir, "MEMORY/LEARNING/SIGNALS/ratings.jsonl")), - files: countFilesRecursive(join(openCodeDir, "skills/PAI/USER")), + files: countFilesRecursive(join(openCodeDir, "PAI/USER")), updatedAt: getISOTimestamp(), // Using time.ts utility }; } diff --git a/.opencode/plugins/handlers/voice-notification.ts b/.opencode/plugins/handlers/voice-notification.ts index 683988b9..d17e242a 100644 --- a/.opencode/plugins/handlers/voice-notification.ts +++ b/.opencode/plugins/handlers/voice-notification.ts @@ -240,10 +240,14 @@ async function sendGoogleTTS(message: string, sessionId: string): Promise { function isGoogleTTSConfigured(): boolean { if (!isMacOS()) return false; const settings = getSettings(); - return !!(settings.env?.GOOGLE_TTS_API_KEY || process.env.GOOGLE_TTS_API_KEY); + return !!( + settings.env?.GOOGLE_API_KEY || + settings.env?.GOOGLE_TTS_API_KEY || + process.env.GOOGLE_API_KEY || + process.env.GOOGLE_TTS_API_KEY + ); } function isMacOS(): boolean { diff --git a/.opencode/plugins/lib/prd-template.ts b/.opencode/plugins/lib/prd-template.ts new file mode 100644 index 00000000..7b40ab4a --- /dev/null +++ b/.opencode/plugins/lib/prd-template.ts @@ -0,0 +1,160 @@ +/** + * PRD template generator for PAI-OpenCode. + * + * Shared by algorithm.ts and any future PRD-creating tooling. + */ + +interface PRDOptions { + title: string; + slug: string; + effortLevel?: string; + mode?: "interactive" | "loop"; + prompt?: string; + sessionId?: string; +} + +const ISC_MINIMUMS: Record = { + TRIVIAL: { min: 2, target: "2-4" }, + QUICK: { min: 4, target: "4-8" }, + STANDARD: { min: 8, target: "8-16" }, + EXTENDED: { min: 16, target: "16-32" }, + ADVANCED: { min: 24, target: "24-48" }, + DEEP: { min: 40, target: "40-80" }, + COMPREHENSIVE: { min: 64, target: "64-150" }, + LOOP: { min: 16, target: "16-64" }, +}; + +const APPETITE_MAP: Record = { + TRIVIAL: { budget: "<10s", circuitBreaker: "1 session" }, + QUICK: { budget: "<1min", circuitBreaker: "1 session" }, + STANDARD: { budget: "<2min", circuitBreaker: "1 session" }, + EXTENDED: { budget: "<8min", circuitBreaker: "2 sessions" }, + ADVANCED: { budget: "<16min", circuitBreaker: "3 sessions" }, + DEEP: { budget: "<32min", circuitBreaker: "3 sessions" }, + COMPREHENSIVE: { budget: "<120m", circuitBreaker: "5 sessions" }, + LOOP: { budget: "unbounded", circuitBreaker: "max iterations" }, +}; + +export function curateTitle(rawPrompt: string): string { + let title = rawPrompt.trim(); + title = title.replace( + /^(okay|ok|hey|so|um|uh|well|right|alright|please|can you|i want you to|i need you to|i want to|we need to|lets|let's)\s+/gi, + "", + ); + title = title.replace(/\b(fuck|fucking|shit|shitty|damn|damnit|ass|bitch|motherfuck\w*|dumbass|goddamn)\b\s*/gi, ""); + title = title.replace(/\s+/g, " ").trim(); + + if (title.length > 0) { + title = title.charAt(0).toUpperCase() + title.slice(1); + } + + if (title.length > 80) { + const truncated = title.substring(0, 80); + const lastSpace = truncated.lastIndexOf(" "); + title = lastSpace > 40 ? truncated.substring(0, lastSpace) : truncated; + } + + return title || "Untitled Task"; +} + +export function generatePRDFilename(slug: string): string { + const now = new Date(); + const y = now.getFullYear(); + const m = String(now.getMonth() + 1).padStart(2, "0"); + const d = String(now.getDate()).padStart(2, "0"); + return `PRD-${y}${m}${d}-${slug}.md`; +} + +export function generatePRDId(slug: string): string { + const now = new Date(); + const y = now.getFullYear(); + const m = String(now.getMonth() + 1).padStart(2, "0"); + const d = String(now.getDate()).padStart(2, "0"); + return `PRD-${y}${m}${d}-${slug}`; +} + +export function generatePRDTemplate(opts: PRDOptions): string { + const today = new Date().toISOString().split("T")[0]; + const timestamp = new Date().toISOString(); + const id = generatePRDId(opts.slug); + const effort = opts.effortLevel || "Standard"; + const effortUpper = effort.toUpperCase(); + const mode = opts.mode || "interactive"; + + const curatedTitle = opts.prompt ? curateTitle(opts.prompt) : opts.title; + const promptSection = opts.prompt + ? `### Problem Space\n${opts.prompt.substring(0, 500)}\n` + : "### Problem Space\n_To be populated during OBSERVE phase._\n"; + + const iscGuide = ISC_MINIMUMS[effortUpper] || ISC_MINIMUMS.STANDARD; + const appetite = APPETITE_MAP[effortUpper] || APPETITE_MAP.STANDARD; + + return `--- +prd: true +id: ${id} +title: "${curatedTitle.replace(/"/g, '\\"')}" +session_id: "${opts.sessionId || "unknown"}" +status: ACTIVE +mode: ${mode} +effort_level: ${effort} +created: ${today} +updated: ${today} +completed_at: null +iteration: 0 +maxIterations: 128 +loopStatus: null +last_phase: null +failing_criteria: [] +verification_summary: "0/0" +parent: null +children: [] +--- + +# ${curatedTitle} + +> _To be populated during OBSERVE: what this achieves and why it matters._ + +## STATUS + +| What | State | +|------|-------| +| Progress | 0/0 criteria passing | +| Phase | ACTIVE | +| Next action | OBSERVE phase - create ISC | +| Blocked by | nothing | + +## APPETITE + +| Budget | Circuit Breaker | ISC Target | +|--------|----------------|------------| +| ${appetite.budget} | ${appetite.circuitBreaker} | ${iscGuide.target} criteria | + +## CONTEXT + +${promptSection} +### Key Files +_To be populated during exploration._ + +## RISKS & RABBIT HOLES + +_To be populated during THINK phase._ + +## PLAN + +_To be populated during PLAN phase._ + +## IDEAL STATE CRITERIA (Verification Criteria) + +### Criteria + +### Anti-Criteria + +## DECISIONS + +_Non-obvious technical decisions logged here during BUILD/EXECUTE._ + +## CHANGELOG + +- ${timestamp} | CREATED | ${effort} effort | ${iscGuide.target} ISC target +`; +} diff --git a/.opencode/settings.json b/.opencode/settings.json index 48bb0c1f..66ada01f 100644 --- a/.opencode/settings.json +++ b/.opencode/settings.json @@ -1,15 +1,15 @@ { - "paiVersion": "2.5-opencode", + "paiVersion": "4.0.3-opencode", "env": { "PAI_DIR": ".opencode", "OPENCODE_MAX_OUTPUT_TOKENS": "80000", "BASH_DEFAULT_TIMEOUT_MS": "600000" }, "contextFiles": [ - "skills/PAI/SKILL.md", - "skills/PAI/SYSTEM/AISTEERINGRULES.md", - "skills/PAI/USER/AISTEERINGRULES.md", - "skills/PAI/USER/DAIDENTITY.md" + "PAI/SKILL.md", + "PAI/AISTEERINGRULES.md", + "PAI/README.md", + "PAI/USER/README.md" ], "daidentity": { "name": "PAI", @@ -34,8 +34,8 @@ "pai": { "source": "github.com/Steffen025/pai-opencode", "upstream": "github.com/danielmiessler/PAI", - "version": "2.5", - "algorithm": "v0.2.25" + "version": "4.0.3", + "algorithm": "v3.7.0" }, "techStack": { "browser": "chrome", diff --git a/.opencode/skills/Agents/Tools/ComposeAgent.ts b/.opencode/skills/Agents/Tools/ComposeAgent.ts index 2cf7ea22..0bc76682 100755 --- a/.opencode/skills/Agents/Tools/ComposeAgent.ts +++ b/.opencode/skills/Agents/Tools/ComposeAgent.ts @@ -8,7 +8,7 @@ * * Configuration files: * Base: ~/.opencode/skills/Agents/Data/Traits.yaml - * User: ~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Agents/Traits.yaml + * User: ~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Agents/Traits.yaml * * Usage: * # Infer traits from task description @@ -35,7 +35,7 @@ import Handlebars from "handlebars"; // Paths const HOME = process.env.HOME || "~"; const BASE_TRAITS_PATH = `${HOME}/.opencode/skills/Agents/Data/Traits.yaml`; -const USER_TRAITS_PATH = `${HOME}/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Agents/Traits.yaml`; +const USER_TRAITS_PATH = `${HOME}/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Agents/Traits.yaml`; const TEMPLATE_PATH = `${HOME}/.opencode/skills/Agents/Templates/DynamicAgent.hbs`; // Types @@ -504,7 +504,7 @@ OPTIONS: CONFIGURATION: Base traits: ~/.opencode/skills/Agents/Data/Traits.yaml - User traits: ~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Agents/Traits.yaml + User traits: ~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Agents/Traits.yaml User traits are merged over base (user takes priority). Add your custom voices, personalities, and prosody settings in the user file. diff --git a/.opencode/skills/Research/Workflows/ExtractAlpha.md b/.opencode/skills/Research/Workflows/ExtractAlpha.md index da9d9fdd..e854eb9d 100755 --- a/.opencode/skills/Research/Workflows/ExtractAlpha.md +++ b/.opencode/skills/Research/Workflows/ExtractAlpha.md @@ -14,7 +14,7 @@ the most important and surprising insights without missing subtle but profound i **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/CORE/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` ## Core Philosophy diff --git a/.opencode/skills/Research/Workflows/Fabric.md b/.opencode/skills/Research/Workflows/Fabric.md index cac4607b..7c21be03 100755 --- a/.opencode/skills/Research/Workflows/Fabric.md +++ b/.opencode/skills/Research/Workflows/Fabric.md @@ -6,7 +6,7 @@ Intelligent pattern selection for Fabric CLI. Automatically selects the right pa **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/CORE/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) diff --git a/.opencode/skills/Telos/DashboardTemplate/Lib/telos-data.ts b/.opencode/skills/Telos/DashboardTemplate/Lib/telos-data.ts index 1ba686bc..f201e239 100755 --- a/.opencode/skills/Telos/DashboardTemplate/Lib/telos-data.ts +++ b/.opencode/skills/Telos/DashboardTemplate/Lib/telos-data.ts @@ -9,7 +9,7 @@ export interface TelosFile { type: 'markdown' | 'csv' } -const TELOS_DIR = path.join(os.homedir(), '.opencode/skills/CORE/USER/TELOS') +const TELOS_DIR = path.join(os.homedir(), '.opencode/PAI/USER/TELOS') export function getAllTelosData(): TelosFile[] { const files: TelosFile[] = [] diff --git a/.opencode/skills/Telos/Workflows/WriteReport.md b/.opencode/skills/Telos/Workflows/WriteReport.md index 3c9d8992..284f8ec2 100755 --- a/.opencode/skills/Telos/Workflows/WriteReport.md +++ b/.opencode/skills/Telos/Workflows/WriteReport.md @@ -151,7 +151,7 @@ If artifacts don't exist, run the assessment workflow first (CreateNarrativePoin ```bash # Copy template to output directory (if not already done) -cp -r ~/.opencode/skills/_TELOS/report-template/* {output_dir}/ +cp -r ~/.opencode/skills/Telos/ReportTemplate/* {output_dir}/ # Install dependencies cd {output_dir} && bun install @@ -463,7 +463,7 @@ cd {output_dir} && bun dev **CRITICAL: The report template lives at:** ``` -~/.opencode/skills/_TELOS/report-template/ +~/.opencode/skills/Telos/ReportTemplate/ ``` This template includes: @@ -609,11 +609,11 @@ Before board presentation: **To update fonts:** ```bash # Copy latest fonts from ULSite -cp ~/Projects/ULSite/public/fonts/*.woff2 ~/.opencode/skills/_TELOS/report-template/public/fonts/ +cp ~/Projects/ULSite/public/fonts/*.woff2 ~/.opencode/skills/Telos/ReportTemplate/Public/Fonts/ ``` **To update template components:** -Edit files in `~/.opencode/skills/_TELOS/report-template/components/` +Edit files in `~/.opencode/skills/Telos/ReportTemplate/Components/` **To change color scheme:** -Edit CSS custom properties in `~/.opencode/skills/_TELOS/report-template/app/globals.css` +Edit CSS custom properties in `~/.opencode/skills/Telos/ReportTemplate/App/globals.css` diff --git a/.opencode/skills/Utilities/Prompting/Standards.md b/.opencode/skills/Utilities/Prompting/Standards.md index 2f389c7d..efec41e1 100755 --- a/.opencode/skills/Utilities/Prompting/Standards.md +++ b/.opencode/skills/Utilities/Prompting/Standards.md @@ -693,21 +693,21 @@ An **open-source framework** for augmenting humans using AI. ## Native Fabric Patterns in PAI -**Location:** `~/.opencode/skills/CORE/Tools/fabric/Patterns/` +**Location:** `~/.opencode/skills/Utilities/Fabric/Patterns/` PAI maintains a local copy of all Fabric patterns for native execution. Instead of spawning the `fabric` CLI for every pattern-based task, the system reads and applies patterns directly as prompts. ### When to Use Native Patterns (Default) For any pattern-based processing, the system will: -1. Read `tools/fabric/Patterns/{pattern_name}/system.md` +1. Read `skills/Utilities/Fabric/Patterns/{pattern_name}/system.md` 2. Apply the pattern instructions directly to the content 3. Execute without external CLI calls **Examples:** -- `extract_wisdom` → Read and apply `tools/fabric/Patterns/extract_wisdom/system.md` -- `summarize` → Read and apply `tools/fabric/Patterns/summarize/system.md` -- `analyze_claims` → Read and apply `tools/fabric/Patterns/analyze_claims/system.md` +- `extract_wisdom` → Read and apply `skills/Utilities/Fabric/Patterns/extract_wisdom/system.md` +- `summarize` → Read and apply `skills/Utilities/Fabric/Patterns/summarize/system.md` +- `analyze_claims` → Read and apply `skills/Utilities/Fabric/Patterns/analyze_claims/system.md` ### When to Still Use the Fabric CLI @@ -720,9 +720,9 @@ These operations require the CLI because they access external services or config ### Updating Patterns -Run the update script to sync latest patterns: +Update Fabric patterns via the CLI: ```bash -~/.opencode/skills/CORE/Tools/fabric/update-patterns.sh +fabric -U ``` This pulls upstream updates via `fabric -U` and syncs to PAI's local copy. @@ -1157,10 +1157,10 @@ Reusable quality and completion checks. ## Template Location -All templates live in `~/.opencode/skills/Prompting/Templates/`: +All templates live in `~/.opencode/skills/Utilities/Prompting/Templates/`: ``` -skills/Prompting/ +skills/Utilities/Prompting/ ├── Templates/ │ ├── Primitives/ # Core template files (.hbs) │ │ ├── Roster.hbs @@ -1184,7 +1184,7 @@ skills/Prompting/ **CLI Usage:** ```bash -bun ~/.opencode/skills/Prompting/Tools/RenderTemplate.ts \ +bun ~/.opencode/skills/Utilities/Prompting/Tools/RenderTemplate.ts \ --template Primitives/Roster.hbs \ --data Data/Agents.yaml \ --output Compiled/AgentRoster.md @@ -1192,7 +1192,7 @@ bun ~/.opencode/skills/Prompting/Tools/RenderTemplate.ts \ **Programmatic Usage:** ```typescript -import { renderTemplate } from '~/.opencode/skills/Prompting/Tools/RenderTemplate.ts'; +import { renderTemplate } from '~/.opencode/skills/Utilities/Prompting/Tools/RenderTemplate.ts'; const output = renderTemplate('Primitives/Briefing.hbs', { agent: { id: 'EN-1', name: 'Skeptical Thinker', personality: '...' }, diff --git a/PAI-Install/engine/steps-fresh.ts b/PAI-Install/engine/steps-fresh.ts index 3c691399..75601bf5 100644 --- a/PAI-Install/engine/steps-fresh.ts +++ b/PAI-Install/engine/steps-fresh.ts @@ -262,7 +262,7 @@ export async function stepInstallPAI( // Create .env file with API keys (restricted permissions) const providerEnvVar = `${(state.collected.provider || "zen").toUpperCase()}_API_KEY`; - const voiceEnvVar = state.collected.voiceProvider === "google" ? "GOOGLE_TTS_API_KEY" : + const voiceEnvVar = state.collected.voiceProvider === "google" ? "GOOGLE_API_KEY" : state.collected.voiceProvider === "elevenlabs" ? "ELEVENLABS_API_KEY" : state.collected.voiceProvider === "macos" ? "" : ""; @@ -277,6 +277,9 @@ ${providerEnvVar}=${state.collected.apiKey || ""} if (voiceEnvVar && state.collected.voiceApiKey) { envContent += `${voiceEnvVar}=${state.collected.voiceApiKey}\n`; + if (state.collected.voiceProvider === "google") { + envContent += `GOOGLE_TTS_API_KEY=${state.collected.voiceApiKey}\n`; + } } const envPath = join(localOpencodeDir, ".env"); From 8f016ba22298bb1e52d0b07badebd99ac0106de0 Mon Sep 17 00:00:00 2001 From: Steffen Zellmer <151627820+Steffen025@users.noreply.github.com> Date: Sat, 28 Mar 2026 13:49:37 -0400 Subject: [PATCH 2/4] chore(paths): sweep docs and skills for OpenCode-native references --- .opencode/OPENCODE.md | 4 +- .opencode/PAI/PAISYSTEMARCHITECTURE.md | 4 +- .opencode/PAI/SKILL.md | 2 +- .opencode/PAI/THEDELEGATIONSYSTEM.md | 2 +- .opencode/PAI/Tools/AddBg.ts | 2 +- .opencode/PAI/Tools/AlgorithmPhaseReport.ts | 2 +- .opencode/PAI/Tools/Banner.ts | 2 +- .opencode/PAI/Tools/BannerMatrix.ts | 2 +- .opencode/PAI/Tools/BannerNeofetch.ts | 2 +- .opencode/PAI/Tools/BannerRetro.ts | 2 +- .opencode/PAI/Tools/FailureCapture.ts | 2 +- .opencode/PAI/Tools/FeatureRegistry.ts | 4 +- .opencode/PAI/Tools/GenerateSkillIndex.ts | 2 +- .opencode/PAI/Tools/GetCounts.ts | 2 +- .opencode/PAI/Tools/IntegrityMaintenance.ts | 6 +- .../PAI/Tools/LearningPatternSynthesis.ts | 2 +- .opencode/PAI/Tools/LoadSkillConfig.ts | 2 +- .opencode/PAI/Tools/NeofetchBanner.ts | 2 +- .opencode/PAI/Tools/OpinionTracker.ts | 2 +- .opencode/PAI/Tools/RelationshipReflect.ts | 2 +- .opencode/PAI/Tools/RemoveBg.ts | 2 +- .opencode/PAI/Tools/SessionProgress.ts | 4 +- .opencode/PAI/Tools/SkillSearch.ts | 12 ++-- .opencode/PAI/Tools/ValidateSkillStructure.ts | 2 +- .../PAI/Tools/WisdomCrossFrameSynthesizer.ts | 2 +- .opencode/PAI/Tools/WisdomDomainClassifier.ts | 2 +- .opencode/PAI/Tools/WisdomFrameUpdater.ts | 2 +- .opencode/PAI/Tools/YouTubeApi.ts | 2 +- .opencode/PAI/Tools/pai.ts | 6 +- .opencode/PAI/USER/STATUSLINE/README.md | 2 +- .opencode/agents/Algorithm.md | 2 +- .opencode/agents/Architect.md | 2 +- .opencode/agents/Artist.md | 2 +- .opencode/agents/ClaudeResearcher.md | 2 +- .opencode/agents/CodexResearcher.md | 2 +- .opencode/agents/Designer.md | 2 +- .opencode/agents/Engineer.md | 2 +- .opencode/agents/GeminiResearcher.md | 2 +- .opencode/agents/GrokResearcher.md | 2 +- .opencode/agents/PerplexityResearcher.md | 4 +- .opencode/agents/QATester.md | 4 +- .opencode/plugins/handlers/update-counts.ts | 4 +- .opencode/skills/Agents/AgentPersonalities.md | 2 +- .opencode/skills/Agents/ArchitectContext.md | 4 +- .opencode/skills/Agents/ArtistContext.md | 4 +- .../skills/Agents/CodexResearcherContext.md | 4 +- .../skills/Agents/DeepResearcherContext.md | 4 +- .opencode/skills/Agents/DesignerContext.md | 4 +- .opencode/skills/Agents/EngineerContext.md | 4 +- .../skills/Agents/GeminiResearcherContext.md | 4 +- .../skills/Agents/GrokResearcherContext.md | 4 +- .../Agents/PerplexityResearcherContext.md | 4 +- .opencode/skills/Agents/QATesterContext.md | 4 +- .opencode/skills/Agents/REDESIGN-SUMMARY.md | 4 +- .opencode/skills/Agents/SKILL.md | 4 +- .../Agents/Workflows/SpawnParallelAgents.md | 2 +- .../ContentAnalysis/ExtractWisdom/SKILL.md | 4 +- .opencode/skills/ContentAnalysis/SKILL.md | 2 +- .opencode/skills/Investigation/OSINT/SKILL.md | 2 +- .../PrivateInvestigator/SKILL.md | 2 +- .opencode/skills/Investigation/SKILL.md | 2 +- .opencode/skills/Media/Art/SKILL.md | 6 +- .../Art/Workflows/AdHocYouTubeThumbnail.md | 2 +- .../Media/Art/Workflows/CreatePAIPackIcon.md | 6 +- .opencode/skills/Media/Art/Workflows/Essay.md | 6 +- .../skills/Media/Art/Workflows/Mermaid.md | 2 +- .../skills/Media/Art/Workflows/Visualize.md | 2 +- .../skills/Media/Remotion/ArtIntegration.md | 2 +- .opencode/skills/Media/Remotion/SKILL.md | 2 +- .../skills/Media/Remotion/Tools/Theme.ts | 2 +- .../Remotion/Workflows/ContentToAnimation.md | 2 +- .opencode/skills/Media/SKILL.md | 2 +- .opencode/skills/Research/SKILL.md | 2 +- .../skills/Research/Workflows/Retrieve.md | 2 +- .../skills/Research/Workflows/WebScraping.md | 2 +- .../Research/Workflows/YoutubeExtraction.md | 2 +- .opencode/skills/Scraping/Apify/SKILL.md | 4 +- .opencode/skills/Scraping/BrightData/SKILL.md | 6 +- .opencode/skills/Scraping/SKILL.md | 2 +- .../skills/Security/AnnualReports/SKILL.md | 2 +- .../skills/Security/PromptInjection/SKILL.md | 2 +- .opencode/skills/Security/Recon/SKILL.md | 2 +- .opencode/skills/Security/SECUpdates/SKILL.md | 2 +- .opencode/skills/Security/SKILL.md | 2 +- .../skills/Security/WebAssessment/SKILL.md | 2 +- .../WebAssessment/Workflows/ffuf/FfufGuide.md | 2 +- .../Workflows/webapp/TestingGuide.md | 4 +- .opencode/skills/Telos/SKILL.md | 2 +- .opencode/skills/Telos/Workflows/Update.md | 10 ++-- .opencode/skills/Thinking/BeCreative/SKILL.md | 2 +- .opencode/skills/Thinking/Council/SKILL.md | 2 +- .../skills/Thinking/FirstPrinciples/SKILL.md | 2 +- .../skills/Thinking/IterativeDepth/SKILL.md | 2 +- .opencode/skills/Thinking/RedTeam/SKILL.md | 2 +- .opencode/skills/Thinking/SKILL.md | 2 +- .opencode/skills/Thinking/Science/SKILL.md | 2 +- .../Thinking/WorldThreatModelHarness/SKILL.md | 2 +- .opencode/skills/USMetrics/SKILL.md | 2 +- .opencode/skills/Utilities/Aphorisms/SKILL.md | 2 +- .opencode/skills/Utilities/Browser/README.md | 2 +- .opencode/skills/Utilities/Browser/SKILL.md | 4 +- .../skills/Utilities/Cloudflare/SKILL.md | 2 +- .opencode/skills/Utilities/CreateCLI/SKILL.md | 2 +- .../CreateCLI/Workflows/CreateCli.md | 2 +- .../skills/Utilities/CreateSkill/SKILL.md | 8 +-- .../Workflows/CanonicalizeSkill.md | 2 +- .../CreateSkill/Workflows/CreateSkill.md | 6 +- .../CreateSkill/Workflows/UpdateSkill.md | 2 +- .../CreateSkill/Workflows/ValidateSkill.md | 4 +- .opencode/skills/Utilities/Documents/SKILL.md | 4 +- .opencode/skills/Utilities/Docx/SKILL.md | 4 +- .opencode/skills/Utilities/Evals/SKILL.md | 2 +- .opencode/skills/Utilities/Fabric/SKILL.md | 4 +- .../skills/Utilities/OpenCodeSystem/SKILL.md | 2 +- .../skills/Utilities/PAIUpgrade/SKILL.md | 8 +-- .../PAIUpgrade/Workflows/CheckForUpgrades.md | 10 ++-- .../PAIUpgrade/Workflows/FindSources.md | 4 +- .opencode/skills/Utilities/Parser/SKILL.md | 2 +- .opencode/skills/Utilities/Pdf/SKILL.md | 2 +- .opencode/skills/Utilities/Pptx/SKILL.md | 4 +- .opencode/skills/Utilities/Prompting/SKILL.md | 2 +- .../Utilities/Prompting/Templates/README.md | 4 +- .opencode/skills/Utilities/SKILL.md | 2 +- .opencode/skills/Utilities/Sales/SKILL.md | 2 +- .../Sales/Workflows/CreateSalesPackage.md | 2 +- .../Utilities/Sales/Workflows/CreateVisual.md | 2 +- .opencode/skills/Utilities/System/SKILL.md | 2 +- .../System/Workflows/CrossRepoValidation.md | 2 +- .../System/Workflows/IntegrityCheck.md | 6 +- .../System/Workflows/PrivacyCheck.md | 2 +- .../skills/Utilities/WriteStory/SKILL.md | 2 +- .opencode/skills/Utilities/Xlsx/SKILL.md | 4 +- docs/REPO-PATH-SWEEP-2026-03-28.md | 55 +++++++++++++++++++ skill-packs/cost-aware-research/README.md | 6 +- skill-packs/cost-aware-research/SKILL.md | 2 +- .../Workflows/ExtractAlpha.md | 2 +- .../cost-aware-research/Workflows/Fabric.md | 2 +- .../cost-aware-research/Workflows/Retrieve.md | 2 +- .../Workflows/WebScraping.md | 2 +- .../Workflows/YoutubeExtraction.md | 2 +- 140 files changed, 262 insertions(+), 207 deletions(-) create mode 100644 docs/REPO-PATH-SWEEP-2026-03-28.md diff --git a/.opencode/OPENCODE.md b/.opencode/OPENCODE.md index 47c8dfe8..421b7574 100644 --- a/.opencode/OPENCODE.md +++ b/.opencode/OPENCODE.md @@ -7,7 +7,7 @@ When you start in this directory, determine the installation state: ### If settings.json exists and is configured: This is an established PAI installation. Read and follow the PAI skill: ``` -read skills/PAI/SKILL.md +read PAI/SKILL.md ``` ### If this is a fresh installation: @@ -21,7 +21,7 @@ Welcome to PAI-OpenCode v1.0! 1. **Just start**: `opencode` - everything works with defaults 2. **Customize**: Edit `settings.json` for identity and preferences -3. **Learn more**: Read `skills/PAI/SKILL.md` +3. **Learn more**: Read `PAI/SKILL.md` For full documentation, see the README.md in the repository root. diff --git a/.opencode/PAI/PAISYSTEMARCHITECTURE.md b/.opencode/PAI/PAISYSTEMARCHITECTURE.md index d2939a95..2bae61be 100755 --- a/.opencode/PAI/PAISYSTEMARCHITECTURE.md +++ b/.opencode/PAI/PAISYSTEMARCHITECTURE.md @@ -461,7 +461,7 @@ PAI actions and pipelines run in two environments with identical behavior: ### Repository Separation ``` -PRIVATE: ~/.claude/ PUBLIC: ${PROJECTS_DIR}/PAI/ +PRIVATE: ~/.opencode/ PUBLIC: ${PROJECTS_DIR}/PAI/ ├── Personal data ├── Sanitized examples ├── API keys (.env) ├── Generic templates ├── Session history └── Community sharing @@ -487,7 +487,7 @@ The System skill is the centralized mechanism for PAI self-management. It ensure | Function | Description | Workflow | |----------|-------------|----------| -| **Integrity Audits** | 16 parallel agents verify broken references across ~/.claude | `PrivateSystemAudit.md` | +| **Integrity Audits** | 16 parallel agents verify broken references across ~/.opencode | `PrivateSystemAudit.md` | | **Secret Scanning** | TruffleHog credential detection in any directory | `SecretScanning.md` | | **Privacy Validation** | Ensures USER/WORK content isolation from regular skills | `PrivacyCheck.md` | | **Cross-Repo Validation** | Verifies private/public repository separation | `CrossRepoValidation.md` | diff --git a/.opencode/PAI/SKILL.md b/.opencode/PAI/SKILL.md index 4087d45f..f9878ceb 100644 --- a/.opencode/PAI/SKILL.md +++ b/.opencode/PAI/SKILL.md @@ -293,7 +293,7 @@ Extended+: Rehearse verification for each CRITICAL criterion. - Validate prerequisites: env vars, credentials, dependencies, state, files. - Execution strategy: parallelize non-serial work at Extended+ (use Delegation skill). -- Create PRD at `~/.claude/MEMORY/WORK/{session-slug}/PRD-{YYYYMMDD}-{slug}.md` via `generatePRDTemplate()`. +- Create PRD at `~/.opencode/MEMORY/WORK/{session-slug}/PRD-{YYYYMMDD}-{slug}.md` via `generatePRDTemplate()`. - Write PLAN section. Every PRD requires a plan. - For complex multi-approach tasks, use PlanMode skill. - Quality Gate re-check. diff --git a/.opencode/PAI/THEDELEGATIONSYSTEM.md b/.opencode/PAI/THEDELEGATIONSYSTEM.md index e914bfee..f89a2b77 100755 --- a/.opencode/PAI/THEDELEGATIONSYSTEM.md +++ b/.opencode/PAI/THEDELEGATIONSYSTEM.md @@ -99,7 +99,7 @@ Use the Agents skill to compose task-specific agents with unique traits, voices, **For research specifically:** Use the Research skill, which has dedicated researcher agents (ClaudeResearcher, GeminiResearcher, etc.) -**Reference:** Agents skill (`~/.claude/skills/Agents/SKILL.md`) +**Reference:** Agents skill (`~/.opencode/skills/Agents/SKILL.md`) **Full Context Requirements:** When delegating, ALWAYS include: diff --git a/.opencode/PAI/Tools/AddBg.ts b/.opencode/PAI/Tools/AddBg.ts index 0c061745..5dd965ad 100755 --- a/.opencode/PAI/Tools/AddBg.ts +++ b/.opencode/PAI/Tools/AddBg.ts @@ -10,7 +10,7 @@ * add-bg input.png "#EAE9DF" output.png * add-bg input.png --brand output.png * - * @see ~/.claude/skills/Images/SKILL.md + * @see ~/.opencode/skills/Media/Art/SKILL.md */ import { existsSync } from "node:fs"; diff --git a/.opencode/PAI/Tools/AlgorithmPhaseReport.ts b/.opencode/PAI/Tools/AlgorithmPhaseReport.ts index 5aa21aec..0ea7365c 100644 --- a/.opencode/PAI/Tools/AlgorithmPhaseReport.ts +++ b/.opencode/PAI/Tools/AlgorithmPhaseReport.ts @@ -15,7 +15,7 @@ import { join } from "path"; import { homedir } from "os"; import { parseArgs } from "util"; -const STATE_DIR = join(homedir(), ".claude", "MEMORY", "STATE"); +const STATE_DIR = join(process.env.OPENCODE_DIR || join(homedir(), ".opencode"), "MEMORY", "STATE"); const STATE_FILE = join(STATE_DIR, "algorithm-phase.json"); interface AlgorithmState { diff --git a/.opencode/PAI/Tools/Banner.ts b/.opencode/PAI/Tools/Banner.ts index 796fccb5..3358420c 100755 --- a/.opencode/PAI/Tools/Banner.ts +++ b/.opencode/PAI/Tools/Banner.ts @@ -13,7 +13,7 @@ import { join } from "path"; import { spawnSync } from "child_process"; const HOME = process.env.HOME!; -const CLAUDE_DIR = join(HOME, ".claude"); +const CLAUDE_DIR = process.env.OPENCODE_DIR || join(HOME, ".opencode"); // ═══════════════════════════════════════════════════════════════════════════ // Terminal Width Detection diff --git a/.opencode/PAI/Tools/BannerMatrix.ts b/.opencode/PAI/Tools/BannerMatrix.ts index a5f10c61..5d7cfefe 100755 --- a/.opencode/PAI/Tools/BannerMatrix.ts +++ b/.opencode/PAI/Tools/BannerMatrix.ts @@ -23,7 +23,7 @@ import { spawnSync } from "child_process"; import { homedir } from "os"; const HOME = process.env.HOME ?? homedir(); -const CLAUDE_DIR = join(HOME, ".claude"); +const CLAUDE_DIR = process.env.OPENCODE_DIR || join(HOME, ".opencode"); // ============================================================================= // Terminal Width Detection diff --git a/.opencode/PAI/Tools/BannerNeofetch.ts b/.opencode/PAI/Tools/BannerNeofetch.ts index dc546829..a8fdb45b 100755 --- a/.opencode/PAI/Tools/BannerNeofetch.ts +++ b/.opencode/PAI/Tools/BannerNeofetch.ts @@ -15,7 +15,7 @@ import { join } from "path"; import { spawnSync } from "child_process"; const HOME = process.env.HOME!; -const CLAUDE_DIR = join(HOME, ".claude"); +const CLAUDE_DIR = process.env.OPENCODE_DIR || join(HOME, ".opencode"); // ═══════════════════════════════════════════════════════════════════════ // Terminal Width Detection diff --git a/.opencode/PAI/Tools/BannerRetro.ts b/.opencode/PAI/Tools/BannerRetro.ts index d3651109..67be967b 100755 --- a/.opencode/PAI/Tools/BannerRetro.ts +++ b/.opencode/PAI/Tools/BannerRetro.ts @@ -20,7 +20,7 @@ import { join } from "path"; import { spawnSync } from "child_process"; const HOME = process.env.HOME!; -const CLAUDE_DIR = join(HOME, ".claude"); +const CLAUDE_DIR = process.env.OPENCODE_DIR || join(HOME, ".opencode"); // ═══════════════════════════════════════════════════════════════════════════ // Terminal Width Detection diff --git a/.opencode/PAI/Tools/FailureCapture.ts b/.opencode/PAI/Tools/FailureCapture.ts index fb989953..6a65564e 100644 --- a/.opencode/PAI/Tools/FailureCapture.ts +++ b/.opencode/PAI/Tools/FailureCapture.ts @@ -30,7 +30,7 @@ import { join, basename } from 'path'; import { homedir } from 'os'; import { inference } from './Inference'; -const PAI_DIR = process.env.PAI_DIR || join(process.env.HOME ?? homedir(), '.claude'); +const PAI_DIR = process.env.OPENCODE_DIR || join(process.env.HOME ?? homedir(), '.opencode'); interface FailureCaptureInput { transcriptPath: string; diff --git a/.opencode/PAI/Tools/FeatureRegistry.ts b/.opencode/PAI/Tools/FeatureRegistry.ts index d44e7994..445bcc42 100755 --- a/.opencode/PAI/Tools/FeatureRegistry.ts +++ b/.opencode/PAI/Tools/FeatureRegistry.ts @@ -7,7 +7,7 @@ * than Markdown because models are less likely to corrupt structured data. * * Usage: - * bun run ~/.claude/Tools/FeatureRegistry.ts [options] + * bun run ~/.opencode/PAI/Tools/FeatureRegistry.ts [options] * * Commands: * init Initialize feature registry for project @@ -29,7 +29,7 @@ if (!HOME) { process.exit(1); } -const REGISTRY_DIR = join(HOME, '.claude', 'MEMORY', 'progress'); +const REGISTRY_DIR = join(process.env.OPENCODE_DIR || join(HOME, '.opencode'), 'MEMORY', 'progress'); interface TestStep { step: string; diff --git a/.opencode/PAI/Tools/GenerateSkillIndex.ts b/.opencode/PAI/Tools/GenerateSkillIndex.ts index 5caaf904..115542be 100644 --- a/.opencode/PAI/Tools/GenerateSkillIndex.ts +++ b/.opencode/PAI/Tools/GenerateSkillIndex.ts @@ -5,7 +5,7 @@ * Parses all SKILL.md files and builds a searchable index for dynamic skill discovery. * Run this after adding/modifying skills to update the index. * - * Usage: bun run ~/.opencode/skills/PAI/Tools/GenerateSkillIndex.ts + * Usage: bun run ~/.opencode/PAI/Tools/GenerateSkillIndex.ts * * Output: ~/.opencode/skills/skill-index.json */ diff --git a/.opencode/PAI/Tools/GetCounts.ts b/.opencode/PAI/Tools/GetCounts.ts index fe8fccad..3af15559 100644 --- a/.opencode/PAI/Tools/GetCounts.ts +++ b/.opencode/PAI/Tools/GetCounts.ts @@ -37,7 +37,7 @@ import { readdirSync, existsSync, statSync } from "fs"; import { join } from "path"; const HOME = process.env.HOME!; -const PAI_DIR = process.env.PAI_DIR || join(HOME, ".claude"); +const PAI_DIR = process.env.OPENCODE_DIR || join(HOME, ".opencode"); interface Counts { skills: number; diff --git a/.opencode/PAI/Tools/IntegrityMaintenance.ts b/.opencode/PAI/Tools/IntegrityMaintenance.ts index 479d218e..04f25845 100755 --- a/.opencode/PAI/Tools/IntegrityMaintenance.ts +++ b/.opencode/PAI/Tools/IntegrityMaintenance.ts @@ -108,7 +108,7 @@ interface UpdateData { // Constants // ============================================================================ -const PAI_DIR = process.env.HOME + '/.claude'; +const PAI_DIR = process.env.OPENCODE_DIR || process.env.HOME + '/.opencode'; const CREATE_UPDATE_SCRIPT = join(PAI_DIR, 'skills/_SYSTEM/Tools/CreateUpdate.ts'); // Words that indicate generic/bad titles - reject these @@ -719,7 +719,7 @@ async function generateVerboseNarrative( future_impact: aiNarrative.future_impact, future_bullets: aiNarrative.future_bullets, verification_steps: aiNarrative.verification_steps, - verification_commands: [`bun ~/.claude/skills/_SYSTEM/Tools/UpdateSearch.ts recent 5`], + verification_commands: [`bun ~/.opencode/PAI/Tools/UpdateSearch.ts recent 5`], confidence: 'high', }, aiTitle: aiNarrative.title, @@ -749,7 +749,7 @@ async function generateVerboseNarrative( future_impact: `The ${changeType.replace('_', ' ')} will use updated behavior.`, future_bullets: ['Changes are active for future sessions'], verification_steps: ['Changes applied via automatic detection'], - verification_commands: [`bun ~/.claude/skills/_SYSTEM/Tools/UpdateSearch.ts recent 5`], + verification_commands: [`bun ~/.opencode/PAI/Tools/UpdateSearch.ts recent 5`], confidence: 'medium', }, }; diff --git a/.opencode/PAI/Tools/LearningPatternSynthesis.ts b/.opencode/PAI/Tools/LearningPatternSynthesis.ts index a135aaab..5ff5b99a 100755 --- a/.opencode/PAI/Tools/LearningPatternSynthesis.ts +++ b/.opencode/PAI/Tools/LearningPatternSynthesis.ts @@ -24,7 +24,7 @@ import * as path from "path"; // Configuration // ============================================================================ -const CLAUDE_DIR = path.join(process.env.HOME!, ".claude"); +const CLAUDE_DIR = process.env.OPENCODE_DIR || path.join(process.env.HOME!, ".opencode"); const LEARNING_DIR = path.join(CLAUDE_DIR, "MEMORY", "LEARNING"); const RATINGS_FILE = path.join(LEARNING_DIR, "SIGNALS", "ratings.jsonl"); const SYNTHESIS_DIR = path.join(LEARNING_DIR, "SYNTHESIS"); diff --git a/.opencode/PAI/Tools/LoadSkillConfig.ts b/.opencode/PAI/Tools/LoadSkillConfig.ts index 5236b85c..ed5f3fdb 100755 --- a/.opencode/PAI/Tools/LoadSkillConfig.ts +++ b/.opencode/PAI/Tools/LoadSkillConfig.ts @@ -250,7 +250,7 @@ Usage: bun LoadSkillConfig.ts --check Check if skill has customizations Examples: - bun LoadSkillConfig.ts ~/.opencode/skills/PAIUpgrade sources.json + bun LoadSkillConfig.ts ~/.opencode/skills/Utilities/PAIUpgrade sources.json bun LoadSkillConfig.ts --list bun LoadSkillConfig.ts --check PAIUpgrade `); diff --git a/.opencode/PAI/Tools/NeofetchBanner.ts b/.opencode/PAI/Tools/NeofetchBanner.ts index b8ef9832..11916e7f 100755 --- a/.opencode/PAI/Tools/NeofetchBanner.ts +++ b/.opencode/PAI/Tools/NeofetchBanner.ts @@ -20,7 +20,7 @@ import { join } from "path"; import { spawnSync } from "child_process"; const HOME = process.env.HOME!; -const CLAUDE_DIR = join(HOME, ".claude"); +const CLAUDE_DIR = process.env.OPENCODE_DIR || join(HOME, ".opencode"); // ═══════════════════════════════════════════════════════════════════════ // Terminal Width Detection diff --git a/.opencode/PAI/Tools/OpinionTracker.ts b/.opencode/PAI/Tools/OpinionTracker.ts index 4a513e17..c0c0c876 100644 --- a/.opencode/PAI/Tools/OpinionTracker.ts +++ b/.opencode/PAI/Tools/OpinionTracker.ts @@ -24,7 +24,7 @@ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs'; import { join } from 'path'; -const PAI_DIR = process.env.PAI_DIR || join(process.env.HOME!, '.claude'); +const PAI_DIR = process.env.OPENCODE_DIR || join(process.env.HOME!, '.opencode'); const OPINIONS_FILE = join(PAI_DIR, 'PAI/USER/OPINIONS.md'); const RELATIONSHIP_LOG = join(PAI_DIR, 'MEMORY/RELATIONSHIP'); diff --git a/.opencode/PAI/Tools/RelationshipReflect.ts b/.opencode/PAI/Tools/RelationshipReflect.ts index fb5cd1d6..b66f9122 100644 --- a/.opencode/PAI/Tools/RelationshipReflect.ts +++ b/.opencode/PAI/Tools/RelationshipReflect.ts @@ -29,7 +29,7 @@ import { readFileSync, writeFileSync, existsSync, readdirSync, mkdirSync } from import { join } from 'path'; import { execFileSync } from 'child_process'; -const PAI_DIR = process.env.PAI_DIR || join(process.env.HOME!, '.claude'); +const PAI_DIR = process.env.OPENCODE_DIR || join(process.env.HOME!, '.opencode'); interface RelationshipNote { type: 'W' | 'B' | 'O'; diff --git a/.opencode/PAI/Tools/RemoveBg.ts b/.opencode/PAI/Tools/RemoveBg.ts index a4e5853c..5147e197 100755 --- a/.opencode/PAI/Tools/RemoveBg.ts +++ b/.opencode/PAI/Tools/RemoveBg.ts @@ -11,7 +11,7 @@ * remove-bg input.png output.png # Saves to new file * remove-bg file1.png file2.png file3.png # Batch process * - * @see ~/.claude/skills/Images/SKILL.md + * @see ~/.opencode/skills/Media/Art/SKILL.md */ import { readFile, writeFile } from "node:fs/promises"; diff --git a/.opencode/PAI/Tools/SessionProgress.ts b/.opencode/PAI/Tools/SessionProgress.ts index 45b27674..5e3f46ca 100755 --- a/.opencode/PAI/Tools/SessionProgress.ts +++ b/.opencode/PAI/Tools/SessionProgress.ts @@ -6,7 +6,7 @@ * Based on Anthropic's claude-progress.txt pattern. * * Usage: - * bun run ~/.claude/PAI/Tools/SessionProgress.ts [options] + * bun run ~/.opencode/PAI/Tools/SessionProgress.ts [options] */ import { existsSync, readFileSync, writeFileSync, readdirSync, mkdirSync } from 'fs'; @@ -52,7 +52,7 @@ interface SessionProgress { } // Progress files are now in STATE/progress/ (consolidated from MEMORY/PROGRESS/) -const PROGRESS_DIR = join(HOME, '.claude', 'MEMORY', 'STATE', 'progress'); +const PROGRESS_DIR = join(process.env.OPENCODE_DIR || join(HOME, '.opencode'), 'MEMORY', 'STATE', 'progress'); function getProgressPath(project: string): string { // Validate project name to prevent path traversal diff --git a/.opencode/PAI/Tools/SkillSearch.ts b/.opencode/PAI/Tools/SkillSearch.ts index 96d72a4d..8d3d00bb 100644 --- a/.opencode/PAI/Tools/SkillSearch.ts +++ b/.opencode/PAI/Tools/SkillSearch.ts @@ -6,11 +6,11 @@ * Use this when you need to find which skill handles a specific task. * * Usage: - * bun run ~/.opencode/skills/PAI/Tools/SkillSearch.ts - * bun run ~/.opencode/skills/PAI/Tools/SkillSearch.ts "scrape instagram" - * bun run ~/.opencode/skills/PAI/Tools/SkillSearch.ts --list # List all skills - * bun run ~/.opencode/skills/PAI/Tools/SkillSearch.ts --tier always # List always-loaded skills - * bun run ~/.opencode/skills/PAI/Tools/SkillSearch.ts --tier deferred # List deferred skills + * bun run ~/.opencode/PAI/Tools/SkillSearch.ts + * bun run ~/.opencode/PAI/Tools/SkillSearch.ts "scrape instagram" + * bun run ~/.opencode/PAI/Tools/SkillSearch.ts --list # List all skills + * bun run ~/.opencode/PAI/Tools/SkillSearch.ts --tier always # List always-loaded skills + * bun run ~/.opencode/PAI/Tools/SkillSearch.ts --tier deferred # List deferred skills * * Output: Matching skills with full descriptions and workflows */ @@ -149,7 +149,7 @@ async function main() { // Check if index exists if (!existsSync(INDEX_FILE)) { console.error('❌ Skill index not found. Run GenerateSkillIndex.ts first:'); - console.error(' bun run ~/.opencode/skills/PAI/Tools/GenerateSkillIndex.ts'); + console.error(' bun run ~/.opencode/PAI/Tools/GenerateSkillIndex.ts'); process.exit(1); } diff --git a/.opencode/PAI/Tools/ValidateSkillStructure.ts b/.opencode/PAI/Tools/ValidateSkillStructure.ts index 14958477..1f9cf543 100644 --- a/.opencode/PAI/Tools/ValidateSkillStructure.ts +++ b/.opencode/PAI/Tools/ValidateSkillStructure.ts @@ -5,7 +5,7 @@ * Validates the skill directory structure for consistency and correctness. * Run this to check for common issues after reorganizing skills. * - * Usage: bun run ~/.opencode/skills/PAI/Tools/ValidateSkillStructure.ts + * Usage: bun run ~/.opencode/PAI/Tools/ValidateSkillStructure.ts * * Checks: * - All skills have valid SKILL.md with frontmatter diff --git a/.opencode/PAI/Tools/WisdomCrossFrameSynthesizer.ts b/.opencode/PAI/Tools/WisdomCrossFrameSynthesizer.ts index 6b36926a..f9546856 100644 --- a/.opencode/PAI/Tools/WisdomCrossFrameSynthesizer.ts +++ b/.opencode/PAI/Tools/WisdomCrossFrameSynthesizer.ts @@ -18,7 +18,7 @@ import { existsSync, readdirSync, readFileSync, writeFileSync, mkdirSync } from import { join, basename } from 'path'; import { parseArgs } from 'util'; -const BASE_DIR = process.env.PAI_DIR || join(process.env.HOME!, '.claude'); +const BASE_DIR = process.env.OPENCODE_DIR || join(process.env.HOME!, '.opencode'); const WISDOM_DIR = join(BASE_DIR, 'MEMORY', 'WISDOM'); const FRAMES_DIR = join(WISDOM_DIR, 'FRAMES'); const PRINCIPLES_DIR = join(WISDOM_DIR, 'PRINCIPLES'); diff --git a/.opencode/PAI/Tools/WisdomDomainClassifier.ts b/.opencode/PAI/Tools/WisdomDomainClassifier.ts index 7c1c42bf..37a04aae 100644 --- a/.opencode/PAI/Tools/WisdomDomainClassifier.ts +++ b/.opencode/PAI/Tools/WisdomDomainClassifier.ts @@ -17,7 +17,7 @@ import { existsSync, readdirSync, readFileSync } from 'fs'; import { join, basename } from 'path'; import { parseArgs } from 'util'; -const BASE_DIR = process.env.PAI_DIR || join(process.env.HOME!, '.claude'); +const BASE_DIR = process.env.OPENCODE_DIR || join(process.env.HOME!, '.opencode'); const FRAMES_DIR = join(BASE_DIR, 'MEMORY', 'WISDOM', 'FRAMES'); // ── Domain Keyword Map ── diff --git a/.opencode/PAI/Tools/WisdomFrameUpdater.ts b/.opencode/PAI/Tools/WisdomFrameUpdater.ts index 785c08ba..e095004f 100644 --- a/.opencode/PAI/Tools/WisdomFrameUpdater.ts +++ b/.opencode/PAI/Tools/WisdomFrameUpdater.ts @@ -19,7 +19,7 @@ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs'; import { join } from 'path'; import { parseArgs } from 'util'; -const BASE_DIR = process.env.PAI_DIR || join(process.env.HOME!, '.claude'); +const BASE_DIR = process.env.OPENCODE_DIR || join(process.env.HOME!, '.opencode'); const FRAMES_DIR = join(BASE_DIR, 'MEMORY', 'WISDOM', 'FRAMES'); // ── Types ── diff --git a/.opencode/PAI/Tools/YouTubeApi.ts b/.opencode/PAI/Tools/YouTubeApi.ts index e8065174..1d0a3401 100755 --- a/.opencode/PAI/Tools/YouTubeApi.ts +++ b/.opencode/PAI/Tools/YouTubeApi.ts @@ -3,7 +3,7 @@ * YouTubeApi.ts - YouTube Data API v3 client * * Usage: - * bun ~/.claude/skills/YouTube/Tools/YouTubeApi.ts [options] + * bun ~/.opencode/PAI/Tools/YouTubeApi.ts [options] * * Commands: * channel Get channel statistics diff --git a/.opencode/PAI/Tools/pai.ts b/.opencode/PAI/Tools/pai.ts index c460798c..e22556b0 100755 --- a/.opencode/PAI/Tools/pai.ts +++ b/.opencode/PAI/Tools/pai.ts @@ -10,7 +10,7 @@ * pai -m bd Launch with Bright Data MCP * pai -m bd,ap Launch with multiple MCPs * pai -r / --resume Resume last session - * pai --local Stay in current directory (don't cd to ~/.claude) + * pai --local Stay in current directory (don't cd to ~/.opencode) * pai update Update Claude Code * pai version Show version info * pai profiles List available profiles @@ -28,7 +28,7 @@ import { join, basename } from "path"; // Configuration // ============================================================================ -const CLAUDE_DIR = join(homedir(), ".claude"); +const CLAUDE_DIR = process.env.OPENCODE_DIR || join(homedir(), ".opencode"); const MCP_DIR = join(CLAUDE_DIR, "MCPs"); const ACTIVE_MCP = join(CLAUDE_DIR, ".mcp.json"); const BANNER_SCRIPT = join(CLAUDE_DIR, "PAI", "Tools", "Banner.ts"); @@ -579,7 +579,7 @@ USAGE: k -m Launch with specific MCP(s) k -m bd,ap Launch with multiple MCPs k -r, --resume Resume last session - k -l, --local Stay in current directory (don't cd to ~/.claude) + k -l, --local Stay in current directory (don't cd to ~/.opencode) COMMANDS: k update Update Claude Code to latest version diff --git a/.opencode/PAI/USER/STATUSLINE/README.md b/.opencode/PAI/USER/STATUSLINE/README.md index b6c0b051..444480dd 100644 --- a/.opencode/PAI/USER/STATUSLINE/README.md +++ b/.opencode/PAI/USER/STATUSLINE/README.md @@ -4,4 +4,4 @@ Configure what appears in your Claude Code status line. PAI uses the status line ## Configuration -Create a `config.md` or modify the `statusline-command.sh` in the `.claude/` root to customize display elements. +Create a `config.md` or modify the `statusline-command.sh` in the `.opencode/` root to customize display elements. diff --git a/.opencode/agents/Algorithm.md b/.opencode/agents/Algorithm.md index f14d0284..528e9532 100644 --- a/.opencode/agents/Algorithm.md +++ b/.opencode/agents/Algorithm.md @@ -44,7 +44,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your knowledge base:** - - Read: `~/.claude/skills/PAI/SKILL.md` (The PAI Algorithm spec) + - Read: `~/.opencode/PAI/SKILL.md` (The PAI Algorithm spec) - Available skills are listed in the system prompt at session start - This loads all ISC principles and available skills - DO NOT proceed until you've read these files diff --git a/.opencode/agents/Architect.md b/.opencode/agents/Architect.md index 5a233b2a..ab235c92 100755 --- a/.opencode/agents/Architect.md +++ b/.opencode/agents/Architect.md @@ -81,7 +81,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/ArchitectContext.md` + - Read: `~/.opencode/skills/Agents/ArchitectContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file diff --git a/.opencode/agents/Artist.md b/.opencode/agents/Artist.md index efc29bc6..0f33d6e8 100755 --- a/.opencode/agents/Artist.md +++ b/.opencode/agents/Artist.md @@ -77,7 +77,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/ArtistContext.md` + - Read: `~/.opencode/skills/Agents/ArtistContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file diff --git a/.opencode/agents/ClaudeResearcher.md b/.opencode/agents/ClaudeResearcher.md index 61cc1eb7..6071308e 100755 --- a/.opencode/agents/ClaudeResearcher.md +++ b/.opencode/agents/ClaudeResearcher.md @@ -74,7 +74,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/ClaudeResearcherContext.md` + - Read: `~/.opencode/skills/Agents/ClaudeResearcherContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file diff --git a/.opencode/agents/CodexResearcher.md b/.opencode/agents/CodexResearcher.md index 1edd2764..e7c624f2 100755 --- a/.opencode/agents/CodexResearcher.md +++ b/.opencode/agents/CodexResearcher.md @@ -81,7 +81,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/CodexResearcherContext.md` + - Read: `~/.opencode/skills/Agents/CodexResearcherContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file diff --git a/.opencode/agents/Designer.md b/.opencode/agents/Designer.md index 237030fa..75b0aae3 100755 --- a/.opencode/agents/Designer.md +++ b/.opencode/agents/Designer.md @@ -78,7 +78,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/DesignerContext.md` + - Read: `~/.opencode/skills/Agents/DesignerContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file diff --git a/.opencode/agents/Engineer.md b/.opencode/agents/Engineer.md index cabb225f..f304ff50 100755 --- a/.opencode/agents/Engineer.md +++ b/.opencode/agents/Engineer.md @@ -79,7 +79,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/EngineerContext.md` + - Read: `~/.opencode/skills/Agents/EngineerContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file diff --git a/.opencode/agents/GeminiResearcher.md b/.opencode/agents/GeminiResearcher.md index b163a21f..711202cb 100755 --- a/.opencode/agents/GeminiResearcher.md +++ b/.opencode/agents/GeminiResearcher.md @@ -74,7 +74,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/GeminiResearcherContext.md` + - Read: `~/.opencode/skills/Agents/GeminiResearcherContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file diff --git a/.opencode/agents/GrokResearcher.md b/.opencode/agents/GrokResearcher.md index 0c7c7963..9070efaf 100755 --- a/.opencode/agents/GrokResearcher.md +++ b/.opencode/agents/GrokResearcher.md @@ -80,7 +80,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/GrokResearcherContext.md` + - Read: `~/.opencode/skills/Agents/GrokResearcherContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file diff --git a/.opencode/agents/PerplexityResearcher.md b/.opencode/agents/PerplexityResearcher.md index 24f0096f..4d945572 100644 --- a/.opencode/agents/PerplexityResearcher.md +++ b/.opencode/agents/PerplexityResearcher.md @@ -74,7 +74,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/PerplexityResearcherContext.md` + - Read: `~/.opencode/skills/Agents/PerplexityResearcherContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file @@ -168,7 +168,7 @@ You excel at deep investigative research using Perplexity's Sonar API for real-t **Perplexity Sonar API Research:** Your PRIMARY research tool is the Perplexity API via the research workflow: -- `~/.claude/skills/Research/Workflows/PerplexityResearch.md` +- `~/.opencode/skills/Research/Workflows/PerplexityResearch.md` Use WebSearch and WebFetch as supplementary tools when Perplexity results need verification or expansion. diff --git a/.opencode/agents/QATester.md b/.opencode/agents/QATester.md index fb5a2f63..865e0ac3 100755 --- a/.opencode/agents/QATester.md +++ b/.opencode/agents/QATester.md @@ -78,7 +78,7 @@ curl -X POST http://localhost:8888/notify \ ``` 2. **Load your complete knowledge base:** - - Read: `~/.claude/skills/Agents/QATesterContext.md` + - Read: `~/.opencode/skills/Agents/QATesterContext.md` - This loads all necessary Skills, standards, and domain knowledge - DO NOT proceed until you've read this file @@ -206,7 +206,7 @@ browser observe "" # Find elements **BrowserAutomation is the ONLY tool for web testing.** -There is no fallback. BrowserAutomation skill (`~/.claude/skills/BrowserAutomation/`) is always available and must be used for all web validation. +There is no fallback. Browser skill (`~/.opencode/skills/Utilities/Browser/`) is always available and must be used for all web validation. --- diff --git a/.opencode/plugins/handlers/update-counts.ts b/.opencode/plugins/handlers/update-counts.ts index 6384091b..8a5bc830 100644 --- a/.opencode/plugins/handlers/update-counts.ts +++ b/.opencode/plugins/handlers/update-counts.ts @@ -20,7 +20,7 @@ * - getPaiDir() → getOpenCodeDir() * - hooks/ → plugins/ * - console.error → fileLog (TUI-safe) - * - .claude/ → .opencode/ + * - Legacy directory references migrated to .opencode/ */ import { existsSync, readdirSync, readFileSync, statSync, writeFileSync } from "node:fs"; @@ -189,4 +189,4 @@ export async function handleUpdateCounts(): Promise { // NOTE: In OpenCode, this module is always imported (never run directly). // import.meta.main is always false — standalone execution not supported. -// Run: bun .opencode/skills/PAI/Tools/GetCounts.ts to update counts manually. +// Run: bun .opencode/PAI/Tools/GetCounts.ts to update counts manually. diff --git a/.opencode/skills/Agents/AgentPersonalities.md b/.opencode/skills/Agents/AgentPersonalities.md index c24ea0dd..5ad33258 100755 --- a/.opencode/skills/Agents/AgentPersonalities.md +++ b/.opencode/skills/Agents/AgentPersonalities.md @@ -155,7 +155,7 @@ Task(prompt="You are Dr. Nova...", subagent_type="general-purpose") ## Named Agent Architecture -- **Location**: `~/.opencode/skills/CORE/AgentPersonalities.md` (this file) +- **Location**: `~/.opencode/skills/Agents/AgentPersonalities.md` (this file) - **Consumer**: `~/.opencode/VoiceServer/server.ts` extracts JSON config from this file - **Format**: Human-readable markdown with embedded JSON configuration diff --git a/.opencode/skills/Agents/ArchitectContext.md b/.opencode/skills/Agents/ArchitectContext.md index 2064c9b3..47134046 100755 --- a/.opencode/skills/Agents/ArchitectContext.md +++ b/.opencode/skills/Agents/ArchitectContext.md @@ -9,8 +9,8 @@ ## Required Knowledge (Pre-load from Skills) ### Constitutional Foundation -- **skills/CORE/CONSTITUTION.md** - Foundational architectural principles -- **skills/CORE/CoreStack.md** - Stack preferences (TypeScript > Python, bun > npm, etc.) +- **PAI/AISTEERINGRULES.md** - Foundational architectural principles +- **PAI/README.md** - Stack preferences (TypeScript > Python, bun > npm, etc.) ### Development Methodology - **skills/Development/METHODOLOGY.md** - Spec-driven, test-driven development approach diff --git a/.opencode/skills/Agents/ArtistContext.md b/.opencode/skills/Agents/ArtistContext.md index 6f236401..dcd1e07f 100755 --- a/.opencode/skills/Agents/ArtistContext.md +++ b/.opencode/skills/Agents/ArtistContext.md @@ -9,8 +9,8 @@ ## Required Knowledge (Pre-load from Skills) ### Core Foundations -- **skills/CORE/CoreStack.md** - Stack preferences and tooling -- **skills/CORE/CONSTITUTION.md** - Constitutional principles +- **PAI/README.md** - Stack preferences and tooling +- **PAI/AISTEERINGRULES.md** - Constitutional principles ### Visual Standards - **skills/Media/Art/SKILL.md** - Art skill workflows and content types diff --git a/.opencode/skills/Agents/CodexResearcherContext.md b/.opencode/skills/Agents/CodexResearcherContext.md index 6b3b9225..2ac7604a 100755 --- a/.opencode/skills/Agents/CodexResearcherContext.md +++ b/.opencode/skills/Agents/CodexResearcherContext.md @@ -11,8 +11,8 @@ ## Required Knowledge (Pre-load from Skills) ### Core Foundations -- **skills/CORE/CoreStack.md** - Stack preferences (TypeScript > Python!) and tooling -- **skills/CORE/CONSTITUTION.md** - Constitutional principles +- **PAI/README.md** - Stack preferences (TypeScript > Python!) and tooling +- **PAI/AISTEERINGRULES.md** - Constitutional principles ### Research Standards - **skills/Research/SKILL.md** - Research skill workflows and methodologies diff --git a/.opencode/skills/Agents/DeepResearcherContext.md b/.opencode/skills/Agents/DeepResearcherContext.md index cd431b51..c5766983 100755 --- a/.opencode/skills/Agents/DeepResearcherContext.md +++ b/.opencode/skills/Agents/DeepResearcherContext.md @@ -11,8 +11,8 @@ ## Required Knowledge (Pre-load from Skills) ### Core Foundations -- **skills/CORE/CoreStack.md** - Stack preferences and tooling -- **skills/CORE/CONSTITUTION.md** - Constitutional principles +- **PAI/README.md** - Stack preferences and tooling +- **PAI/AISTEERINGRULES.md** - Constitutional principles ### Research Standards - **skills/Research/SKILL.md** - Research skill workflows and methodologies diff --git a/.opencode/skills/Agents/DesignerContext.md b/.opencode/skills/Agents/DesignerContext.md index cd8e9c34..afeaccb7 100755 --- a/.opencode/skills/Agents/DesignerContext.md +++ b/.opencode/skills/Agents/DesignerContext.md @@ -9,8 +9,8 @@ ## Required Knowledge (Pre-load from Skills) ### Core Foundations -- **skills/CORE/CoreStack.md** - Stack preferences and tooling -- **skills/CORE/CONSTITUTION.md** - Constitutional principles +- **PAI/README.md** - Stack preferences and tooling +- **PAI/AISTEERINGRULES.md** - Constitutional principles ### Design Standards - **skills/FrontendDesign/SKILL.md** - Frontend design workflows and patterns diff --git a/.opencode/skills/Agents/EngineerContext.md b/.opencode/skills/Agents/EngineerContext.md index 843d4826..5edf2e5c 100755 --- a/.opencode/skills/Agents/EngineerContext.md +++ b/.opencode/skills/Agents/EngineerContext.md @@ -9,8 +9,8 @@ ## Required Knowledge (Pre-load from Skills) ### Core Foundations -- **skills/CORE/CoreStack.md** - Stack preferences and tooling -- **skills/CORE/CONSTITUTION.md** - Constitutional principles +- **PAI/README.md** - Stack preferences and tooling +- **PAI/AISTEERINGRULES.md** - Constitutional principles ### Development Standards - **skills/Development/SKILL.md** - Development workflows and patterns diff --git a/.opencode/skills/Agents/GeminiResearcherContext.md b/.opencode/skills/Agents/GeminiResearcherContext.md index e96b225e..193f84a7 100755 --- a/.opencode/skills/Agents/GeminiResearcherContext.md +++ b/.opencode/skills/Agents/GeminiResearcherContext.md @@ -11,8 +11,8 @@ ## Required Knowledge (Pre-load from Skills) ### Core Foundations -- **skills/CORE/CoreStack.md** - Stack preferences and tooling -- **skills/CORE/CONSTITUTION.md** - Constitutional principles +- **PAI/README.md** - Stack preferences and tooling +- **PAI/AISTEERINGRULES.md** - Constitutional principles ### Research Standards - **skills/Research/SKILL.md** - Research skill workflows and methodologies diff --git a/.opencode/skills/Agents/GrokResearcherContext.md b/.opencode/skills/Agents/GrokResearcherContext.md index 47f590fc..b7cf22c0 100755 --- a/.opencode/skills/Agents/GrokResearcherContext.md +++ b/.opencode/skills/Agents/GrokResearcherContext.md @@ -11,8 +11,8 @@ ## Required Knowledge (Pre-load from Skills) ### Core Foundations -- **skills/CORE/CoreStack.md** - Stack preferences and tooling -- **skills/CORE/CONSTITUTION.md** - Constitutional principles +- **PAI/README.md** - Stack preferences and tooling +- **PAI/AISTEERINGRULES.md** - Constitutional principles ### Research Standards - **skills/Research/SKILL.md** - Research skill workflows and methodologies diff --git a/.opencode/skills/Agents/PerplexityResearcherContext.md b/.opencode/skills/Agents/PerplexityResearcherContext.md index 360e40f1..1d433c2c 100644 --- a/.opencode/skills/Agents/PerplexityResearcherContext.md +++ b/.opencode/skills/Agents/PerplexityResearcherContext.md @@ -11,8 +11,8 @@ ## Required Knowledge (Pre-load from Skills) ### Core Foundations -- **skills/CORE/CoreStack.md** - Stack preferences and tooling -- **skills/CORE/CONSTITUTION.md** - Constitutional principles +- **PAI/README.md** - Stack preferences and tooling +- **PAI/AISTEERINGRULES.md** - Constitutional principles ### Research Standards - **skills/Research/SKILL.md** - Research skill workflows and methodologies diff --git a/.opencode/skills/Agents/QATesterContext.md b/.opencode/skills/Agents/QATesterContext.md index 3fee018a..8bd22e5c 100755 --- a/.opencode/skills/Agents/QATesterContext.md +++ b/.opencode/skills/Agents/QATesterContext.md @@ -9,8 +9,8 @@ ## Required Knowledge (Pre-load from Skills) ### Core Foundations -- **skills/CORE/CoreStack.md** - Stack preferences and tooling -- **skills/CORE/CONSTITUTION.md** - Constitutional principles (Article IX) +- **PAI/README.md** - Stack preferences and tooling +- **PAI/AISTEERINGRULES.md** - Constitutional principles (Article IX) ### Testing Standards - **skills/Development/TESTING.md** - Testing standards and requirements diff --git a/.opencode/skills/Agents/REDESIGN-SUMMARY.md b/.opencode/skills/Agents/REDESIGN-SUMMARY.md index ae64e71e..fef86fb1 100755 --- a/.opencode/skills/Agents/REDESIGN-SUMMARY.md +++ b/.opencode/skills/Agents/REDESIGN-SUMMARY.md @@ -65,8 +65,8 @@ Example: `ArchitectContext.md` **Model**: opus ## Required Knowledge (Pre-load from Skills) -- **skills/CORE/CONSTITUTION.md** - Foundational principles -- **skills/CORE/CoreStack.md** - Stack preferences +- **PAI/AISTEERINGRULES.md** - Foundational principles +- **PAI/README.md** - Stack preferences ## Task-Specific Knowledge - **api** → skills/Development/References/APIDesign.md diff --git a/.opencode/skills/Agents/SKILL.md b/.opencode/skills/Agents/SKILL.md index 10a1d63f..ce1fda23 100755 --- a/.opencode/skills/Agents/SKILL.md +++ b/.opencode/skills/Agents/SKILL.md @@ -10,7 +10,7 @@ description: Dynamic agent composition. USE WHEN custom agents, agent personalit ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Agents/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Agents/` If this directory exists, load and apply: - `PREFERENCES.md` - Named agent roster summary @@ -181,7 +181,7 @@ bun run ~/.opencode/skills/Agents/Tools/AgentFactory.ts --list - Maps agent names to ElevenLabs voice IDs - Delivers personality-driven voice notifications -**CORE Skill** (`~/.opencode/skills/CORE/`) +**PAI Skill** (`~/.opencode/PAI/`) - References Agents skill for custom agent creation - Documents the custom vs generic distinction - Includes agent creation in delegation patterns diff --git a/.opencode/skills/Agents/Workflows/SpawnParallelAgents.md b/.opencode/skills/Agents/Workflows/SpawnParallelAgents.md index 817179e0..45c5fb10 100755 --- a/.opencode/skills/Agents/Workflows/SpawnParallelAgents.md +++ b/.opencode/skills/Agents/Workflows/SpawnParallelAgents.md @@ -360,4 +360,4 @@ Use **SpawnParallelAgents workflow** when: - Agent personalities: `~/.opencode/skills/Agents/AgentPersonalities.md` - Intern agent definition: Line 277-287 in AgentPersonalities.md -- Delegation patterns: `~/.opencode/skills/CORE/Workflows/Delegation.md` +- Delegation patterns: `~/.opencode/PAI/THEDELEGATIONSYSTEM.md` diff --git a/.opencode/skills/ContentAnalysis/ExtractWisdom/SKILL.md b/.opencode/skills/ContentAnalysis/ExtractWisdom/SKILL.md index 32c86bee..fda66cb8 100644 --- a/.opencode/skills/ContentAnalysis/ExtractWisdom/SKILL.md +++ b/.opencode/skills/ContentAnalysis/ExtractWisdom/SKILL.md @@ -6,7 +6,7 @@ description: Dynamic wisdom extraction that adapts sections to content. USE WHEN ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/ExtractWisdom/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/ExtractWisdom/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. @@ -60,7 +60,7 @@ The output should feel like your smartest friend watched/read the thing and is t ## Tone Rules (CRITICAL) -**Canonical voice reference: `skills/PAI/USER/WRITINGSTYLE.md`** — read this file for the full voice definition. The bullets should sound like {PRINCIPAL.NAME} telling a friend about it over coffee. Not compressed info nuggets. Not clever one-liners. Actual spoken observations. +**Canonical voice reference: `PAI/USER/WRITINGSTYLE.md`** — read this file for the full voice definition. The bullets should sound like {PRINCIPAL.NAME} telling a friend about it over coffee. Not compressed info nuggets. Not clever one-liners. Actual spoken observations. **THREE LEVELS — we're aiming for Level 3:** diff --git a/.opencode/skills/ContentAnalysis/SKILL.md b/.opencode/skills/ContentAnalysis/SKILL.md index 91bd8f86..c4134496 100644 --- a/.opencode/skills/ContentAnalysis/SKILL.md +++ b/.opencode/skills/ContentAnalysis/SKILL.md @@ -27,6 +27,6 @@ ContentAnalysis skills adapt to the content they process. Instead of static extr ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/ContentAnalysis/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/ContentAnalysis/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. diff --git a/.opencode/skills/Investigation/OSINT/SKILL.md b/.opencode/skills/Investigation/OSINT/SKILL.md index fcd13d79..57a815e5 100755 --- a/.opencode/skills/Investigation/OSINT/SKILL.md +++ b/.opencode/skills/Investigation/OSINT/SKILL.md @@ -6,7 +6,7 @@ description: "Open source intelligence gathering. USE WHEN OSINT, due diligence, ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/OSINT/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/OSINT/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Investigation/PrivateInvestigator/SKILL.md b/.opencode/skills/Investigation/PrivateInvestigator/SKILL.md index 2b56af5c..ab1ebc0d 100755 --- a/.opencode/skills/Investigation/PrivateInvestigator/SKILL.md +++ b/.opencode/skills/Investigation/PrivateInvestigator/SKILL.md @@ -6,7 +6,7 @@ description: "Ethical people-finding. USE WHEN find person, locate, reconnect, p ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/PrivateInvestigator/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/PrivateInvestigator/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Investigation/SKILL.md b/.opencode/skills/Investigation/SKILL.md index 2e96b84a..320d236c 100644 --- a/.opencode/skills/Investigation/SKILL.md +++ b/.opencode/skills/Investigation/SKILL.md @@ -29,6 +29,6 @@ Investigation skills operate within strict ethical frameworks. They gather publi ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Investigation/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Investigation/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. diff --git a/.opencode/skills/Media/Art/SKILL.md b/.opencode/skills/Media/Art/SKILL.md index cde154b9..5107e41f 100755 --- a/.opencode/skills/Media/Art/SKILL.md +++ b/.opencode/skills/Media/Art/SKILL.md @@ -10,7 +10,7 @@ Complete visual content system for creating illustrations, diagrams, and visual ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Art/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Art/` If this directory exists, load and apply: - `PREFERENCES.md` - Aesthetic preferences, default model, output location @@ -86,7 +86,7 @@ Route to the appropriate workflow based on the request. - Character design specifications - Scene composition rules -**Load from:** `~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md` +**Load from:** `~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md` --- @@ -94,7 +94,7 @@ Route to the appropriate workflow based on the request. **User customization** may include reference images for consistent style. -Check `~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md` for: +Check `~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md` for: - Reference image locations - Style examples by use case - Character and scene reference guidance diff --git a/.opencode/skills/Media/Art/Workflows/AdHocYouTubeThumbnail.md b/.opencode/skills/Media/Art/Workflows/AdHocYouTubeThumbnail.md index add01efb..d08b3267 100755 --- a/.opencode/skills/Media/Art/Workflows/AdHocYouTubeThumbnail.md +++ b/.opencode/skills/Media/Art/Workflows/AdHocYouTubeThumbnail.md @@ -210,7 +210,7 @@ Rembrandt lighting pattern. Looking at camera. Ultra-tight crop on face only. ### Remove Background ```bash -bun ~/.opencode/skills/CORE/Tools/RemoveBg.ts ~/Downloads/yt-headshot-${TIMESTAMP}.png +bun ~/.opencode/PAI/Tools/RemoveBg.ts ~/Downloads/yt-headshot-${TIMESTAMP}.png ``` --- diff --git a/.opencode/skills/Media/Art/Workflows/CreatePAIPackIcon.md b/.opencode/skills/Media/Art/Workflows/CreatePAIPackIcon.md index 9d6ddb9c..728cf7e6 100755 --- a/.opencode/skills/Media/Art/Workflows/CreatePAIPackIcon.md +++ b/.opencode/skills/Media/Art/Workflows/CreatePAIPackIcon.md @@ -198,9 +198,9 @@ Before marking icon complete: > **Note:** The PAI skill workflows referenced below are planned but not yet implemented. -- `~/.opencode/skills/PAI/Workflows/CreatePack.md` - *(NOT IMPLEMENTED)* Would use this for icon generation -- `~/.opencode/skills/PAI/Workflows/ValidatePack.md` - *(NOT IMPLEMENTED)* Would validate icon exists -- `~/.opencode/skills/PAI/Workflows/PAIIntegrityCheck.md` - *(NOT IMPLEMENTED)* Would check all icons +- `~/.opencode/PAI/Workflows/CreatePack.md` - *(NOT IMPLEMENTED)* Would use this for icon generation +- `~/.opencode/PAI/Workflows/ValidatePack.md` - *(NOT IMPLEMENTED)* Would validate icon exists +- `~/.opencode/PAI/Workflows/PAIIntegrityCheck.md` - *(NOT IMPLEMENTED)* Would check all icons --- diff --git a/.opencode/skills/Media/Art/Workflows/Essay.md b/.opencode/skills/Media/Art/Workflows/Essay.md index e2ad7008..b503b353 100755 --- a/.opencode/skills/Media/Art/Workflows/Essay.md +++ b/.opencode/skills/Media/Art/Workflows/Essay.md @@ -500,10 +500,10 @@ For non-blog images that only need transparency, or to remove backgrounds after ```bash # Use the Images Skill for background removal -bun ~/.opencode/skills/CORE/Tools/RemoveBg.ts /path/to/output.png +bun ~/.opencode/PAI/Tools/RemoveBg.ts /path/to/output.png # Or batch process multiple images -bun ~/.opencode/skills/CORE/Tools/RemoveBg.ts image1.png image2.png image3.png +bun ~/.opencode/PAI/Tools/RemoveBg.ts image1.png image2.png image3.png ``` ### 🚨 COMPOSITION: USE FULL FRAME, MINIMALIST, NO BACKGROUNDS @@ -807,7 +807,7 @@ open /path/to/generated-image.png ``` 1. UNDERSTAND → Deeply read and comprehend the content 2. CSE-24 → Run Create Story Explanation (24 items) to extract narrative arc -3. EMOTION → Match to register in ~/.opencode/skills/CORE/aesthetic.md +3. EMOTION → Match to register in ~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md 4. COMPOSITION → Design what to DRAW (content-relevant, NOT defaulting to architecture) 5. PROMPT → Build using charcoal sketch TECHNIQUE template 6. GENERATE → Execute with nano-banana-pro + --thumbnail flag diff --git a/.opencode/skills/Media/Art/Workflows/Mermaid.md b/.opencode/skills/Media/Art/Workflows/Mermaid.md index 5e4aac7b..f73166c0 100755 --- a/.opencode/skills/Media/Art/Workflows/Mermaid.md +++ b/.opencode/skills/Media/Art/Workflows/Mermaid.md @@ -656,7 +656,7 @@ GOING INTO BLOG/WEBSITE: Remove background for transparency **For blog/website use** — use the **Images skill** for background removal: ```bash -bun ~/.opencode/skills/CORE/Tools/RemoveBg.ts /path/to/mermaid-diagram.png +bun ~/.opencode/PAI/Tools/RemoveBg.ts /path/to/mermaid-diagram.png ``` **Immediately open:** diff --git a/.opencode/skills/Media/Art/Workflows/Visualize.md b/.opencode/skills/Media/Art/Workflows/Visualize.md index eed07737..0f257584 100755 --- a/.opencode/skills/Media/Art/Workflows/Visualize.md +++ b/.opencode/skills/Media/Art/Workflows/Visualize.md @@ -85,7 +85,7 @@ TRANSPARENT: Use Images skill to remove background for overlay use **For transparent background** — use the **Images skill** for background removal: ```bash -bun ~/.opencode/skills/PAI/Tools/RemoveBg.ts /path/to/visualization.png +bun ~/.opencode/PAI/Tools/RemoveBg.ts /path/to/visualization.png ``` ### Title/Subtitle Alignment diff --git a/.opencode/skills/Media/Remotion/ArtIntegration.md b/.opencode/skills/Media/Remotion/ArtIntegration.md index 9f8cd06c..1156bd79 100644 --- a/.opencode/skills/Media/Remotion/ArtIntegration.md +++ b/.opencode/skills/Media/Remotion/ArtIntegration.md @@ -6,7 +6,7 @@ 1. **Load Art preferences:** ```text - ~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md + ~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md ``` 2. **Apply the PAI Theme** derived from Art preferences: diff --git a/.opencode/skills/Media/Remotion/SKILL.md b/.opencode/skills/Media/Remotion/SKILL.md index acc57b31..3f6fb9f0 100644 --- a/.opencode/skills/Media/Remotion/SKILL.md +++ b/.opencode/skills/Media/Remotion/SKILL.md @@ -29,7 +29,7 @@ Create professional videos programmatically with React. ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Remotion/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Remotion/` ## Workflow Routing diff --git a/.opencode/skills/Media/Remotion/Tools/Theme.ts b/.opencode/skills/Media/Remotion/Tools/Theme.ts index 12fe555c..e5036471 100644 --- a/.opencode/skills/Media/Remotion/Tools/Theme.ts +++ b/.opencode/skills/Media/Remotion/Tools/Theme.ts @@ -2,7 +2,7 @@ * PAI Theme for Remotion * * Derived from Art skill preferences at: - * .opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md + * .opencode/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md * * Core aesthetic: Charcoal architectural sketch with purple accents * Visual feel: Monumental emotional spaces, gestural linework, cool washes diff --git a/.opencode/skills/Media/Remotion/Workflows/ContentToAnimation.md b/.opencode/skills/Media/Remotion/Workflows/ContentToAnimation.md index 650fea78..044f0a17 100644 --- a/.opencode/skills/Media/Remotion/Workflows/ContentToAnimation.md +++ b/.opencode/skills/Media/Remotion/Workflows/ContentToAnimation.md @@ -551,6 +551,6 @@ User: animate this content: "The three pillars of AI safety are..." ## Integration with Art Skill This workflow inherits visual theming from Art preferences: -- Load: `~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md` +- Load: `~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md` - Apply: Charcoal aesthetic, purple accents, organic animations - Reference: `~/.opencode/skills/Remotion/theme.ts` diff --git a/.opencode/skills/Media/SKILL.md b/.opencode/skills/Media/SKILL.md index 1d103998..20e05eae 100644 --- a/.opencode/skills/Media/SKILL.md +++ b/.opencode/skills/Media/SKILL.md @@ -29,6 +29,6 @@ Media skills bridge the gap between technical execution and creative vision. The ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Media/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Media/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. diff --git a/.opencode/skills/Research/SKILL.md b/.opencode/skills/Research/SKILL.md index 26f288ac..15341145 100755 --- a/.opencode/skills/Research/SKILL.md +++ b/.opencode/skills/Research/SKILL.md @@ -7,7 +7,7 @@ context: fork ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Research/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Research/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Research/Workflows/Retrieve.md b/.opencode/skills/Research/Workflows/Retrieve.md index 11fb5735..602b350b 100755 --- a/.opencode/skills/Research/Workflows/Retrieve.md +++ b/.opencode/skills/Research/Workflows/Retrieve.md @@ -6,7 +6,7 @@ Intelligent multi-layer content retrieval system for DIFFICULT content retrieval **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/CORE/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) diff --git a/.opencode/skills/Research/Workflows/WebScraping.md b/.opencode/skills/Research/Workflows/WebScraping.md index 62c75ac9..d64768e3 100755 --- a/.opencode/skills/Research/Workflows/WebScraping.md +++ b/.opencode/skills/Research/Workflows/WebScraping.md @@ -6,7 +6,7 @@ Web scraping and crawling using WebFetch for simple pages, BrightData MCP for CA **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/CORE/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) diff --git a/.opencode/skills/Research/Workflows/YoutubeExtraction.md b/.opencode/skills/Research/Workflows/YoutubeExtraction.md index 96fc1f3f..434ce41b 100755 --- a/.opencode/skills/Research/Workflows/YoutubeExtraction.md +++ b/.opencode/skills/Research/Workflows/YoutubeExtraction.md @@ -6,7 +6,7 @@ Extract content from YouTube videos using Fabric CLI. Automatically downloads, t **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/CORE/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) diff --git a/.opencode/skills/Scraping/Apify/SKILL.md b/.opencode/skills/Scraping/Apify/SKILL.md index 69529ca2..ce574ee9 100755 --- a/.opencode/skills/Scraping/Apify/SKILL.md +++ b/.opencode/skills/Scraping/Apify/SKILL.md @@ -7,7 +7,7 @@ context: fork ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Apify/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Apify/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. @@ -41,7 +41,7 @@ This skill is a **file-based MCP** - a code-first API wrapper that replaces toke **Why file-based?** Filter data in code BEFORE returning to model context = 97.5% token savings. -**Architecture:** See `~/.opencode/skills/PAI/SYSTEM/DOCUMENTATION/FileBasedMCPs.md` +**Architecture:** See `~/.opencode/PAI/THEPLUGINSYSTEM.md` ## 🎯 Overview diff --git a/.opencode/skills/Scraping/BrightData/SKILL.md b/.opencode/skills/Scraping/BrightData/SKILL.md index 7318167e..3ee7d54e 100755 --- a/.opencode/skills/Scraping/BrightData/SKILL.md +++ b/.opencode/skills/Scraping/BrightData/SKILL.md @@ -7,7 +7,7 @@ context: fork ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/BrightData/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/BrightData/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. @@ -175,7 +175,7 @@ Skill Response: --- **Related Documentation:** -- `~/.opencode/skills/CORE/SkillSystem.md` - Canonical structure guide -- `~/.opencode/skills/CORE/CONSTITUTION.md` - Overall PAI philosophy +- `~/.opencode/PAI/SKILLSYSTEM.md` - Canonical structure guide +- `~/.opencode/PAI/AISTEERINGRULES.md` - Overall PAI philosophy **Last Updated:** 2025-11-23 diff --git a/.opencode/skills/Scraping/SKILL.md b/.opencode/skills/Scraping/SKILL.md index 2c7a558a..ec21a728 100644 --- a/.opencode/skills/Scraping/SKILL.md +++ b/.opencode/skills/Scraping/SKILL.md @@ -28,6 +28,6 @@ Scraping skills respect robots.txt and rate limits. They prioritize reliable dat ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Scraping/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Scraping/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. diff --git a/.opencode/skills/Security/AnnualReports/SKILL.md b/.opencode/skills/Security/AnnualReports/SKILL.md index 770c9c4e..e628f3c6 100755 --- a/.opencode/skills/Security/AnnualReports/SKILL.md +++ b/.opencode/skills/Security/AnnualReports/SKILL.md @@ -6,7 +6,7 @@ description: Security report aggregation. USE WHEN annual reports, security repo ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/AnnualReports/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/AnnualReports/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Security/PromptInjection/SKILL.md b/.opencode/skills/Security/PromptInjection/SKILL.md index eeb21579..4d2d4420 100755 --- a/.opencode/skills/Security/PromptInjection/SKILL.md +++ b/.opencode/skills/Security/PromptInjection/SKILL.md @@ -6,7 +6,7 @@ description: Prompt injection testing. USE WHEN prompt injection, jailbreak, LLM ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/PromptInjection/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/PromptInjection/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Security/Recon/SKILL.md b/.opencode/skills/Security/Recon/SKILL.md index 84249bde..074944f8 100755 --- a/.opencode/skills/Security/Recon/SKILL.md +++ b/.opencode/skills/Security/Recon/SKILL.md @@ -6,7 +6,7 @@ description: "Security reconnaissance. USE WHEN recon, reconnaissance, bug bount ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Recon/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Recon/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Security/SECUpdates/SKILL.md b/.opencode/skills/Security/SECUpdates/SKILL.md index 57199eae..c264cd61 100644 --- a/.opencode/skills/Security/SECUpdates/SKILL.md +++ b/.opencode/skills/Security/SECUpdates/SKILL.md @@ -7,7 +7,7 @@ context: fork ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/SECUpdates/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/SECUpdates/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Security/SKILL.md b/.opencode/skills/Security/SKILL.md index 449861a6..a7ae3105 100644 --- a/.opencode/skills/Security/SKILL.md +++ b/.opencode/skills/Security/SKILL.md @@ -32,6 +32,6 @@ Security skills operate with explicit authorization. They follow responsible dis ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Security/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Security/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. diff --git a/.opencode/skills/Security/WebAssessment/SKILL.md b/.opencode/skills/Security/WebAssessment/SKILL.md index 74242a15..d67b46ca 100755 --- a/.opencode/skills/Security/WebAssessment/SKILL.md +++ b/.opencode/skills/Security/WebAssessment/SKILL.md @@ -6,7 +6,7 @@ description: Web security assessment. USE WHEN web assessment, pentest, security ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/WebAssessment/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/WebAssessment/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Security/WebAssessment/Workflows/ffuf/FfufGuide.md b/.opencode/skills/Security/WebAssessment/Workflows/ffuf/FfufGuide.md index f6b278fa..c05dd2de 100755 --- a/.opencode/skills/Security/WebAssessment/Workflows/ffuf/FfufGuide.md +++ b/.opencode/skills/Security/WebAssessment/Workflows/ffuf/FfufGuide.md @@ -9,7 +9,7 @@ description: Expert guidance for ffuf web fuzzing during penetration testing, in **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) diff --git a/.opencode/skills/Security/WebAssessment/Workflows/webapp/TestingGuide.md b/.opencode/skills/Security/WebAssessment/Workflows/webapp/TestingGuide.md index e4e8ef75..c88693f1 100755 --- a/.opencode/skills/Security/WebAssessment/Workflows/webapp/TestingGuide.md +++ b/.opencode/skills/Security/WebAssessment/Workflows/webapp/TestingGuide.md @@ -10,7 +10,7 @@ license: Complete terms in LICENSE.txt **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) @@ -107,4 +107,4 @@ with sync_playwright() as p: - **examples/** - Examples showing common patterns: - `element_discovery.py` - Discovering buttons, links, and inputs on a page - `static_html_automation.py` - Using file:// URLs for local HTML - - `console_logging.py` - Capturing console logs during automation \ No newline at end of file + - `console_logging.py` - Capturing console logs during automation diff --git a/.opencode/skills/Telos/SKILL.md b/.opencode/skills/Telos/SKILL.md index 66cb02b6..794ca239 100644 --- a/.opencode/skills/Telos/SKILL.md +++ b/.opencode/skills/Telos/SKILL.md @@ -27,6 +27,6 @@ Telos treats life as a system to be managed with intention. It connects daily ac ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Telos/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Telos/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. diff --git a/.opencode/skills/Telos/Workflows/Update.md b/.opencode/skills/Telos/Workflows/Update.md index 302f0e44..903bf495 100755 --- a/.opencode/skills/Telos/Workflows/Update.md +++ b/.opencode/skills/Telos/Workflows/Update.md @@ -11,7 +11,7 @@ When {principal.name} wants to update TELOS, you guide him through the process c # CONTEXT -TELOS is {principal.name}'s life framework stored in `~/.opencode/skills/CORE/USER/TELOS/`. It contains: +TELOS is {principal.name}'s life framework stored in `~/.opencode/PAI/USER/TELOS/`. It contains: **Core Philosophy:** - TELOS.md - Main framework document @@ -102,10 +102,10 @@ This is the main command you'll use. It takes three parameters: - WRONG.md - Things I was wrong about"` ## View Recent TELOS Updates -!`head -50 ~/.opencode/skills/CORE/USER/TELOS/updates.md` +!`head -50 ~/.opencode/PAI/USER/TELOS/updates.md` ## View Specific TELOS File -!`FILE="$1"; cat ~/.opencode/skills/CORE/USER/TELOS/"$FILE"` +!`FILE="$1"; cat ~/.opencode/PAI/USER/TELOS/"$FILE"` # PROCESSING INSTRUCTIONS @@ -288,6 +288,6 @@ The TypeScript implementation handles: The script is at: `~/.opencode/commands/update-telos.ts` -All backups are stored in: `~/.opencode/skills/CORE/USER/TELOS/Backups/` +All backups are stored in: `~/.opencode/PAI/USER/TELOS/Backups/` -All changes are logged in: `~/.opencode/skills/CORE/USER/TELOS/updates.md` +All changes are logged in: `~/.opencode/PAI/USER/TELOS/updates.md` diff --git a/.opencode/skills/Thinking/BeCreative/SKILL.md b/.opencode/skills/Thinking/BeCreative/SKILL.md index f693895b..fb0dc1fa 100755 --- a/.opencode/skills/Thinking/BeCreative/SKILL.md +++ b/.opencode/skills/Thinking/BeCreative/SKILL.md @@ -6,7 +6,7 @@ description: Extended thinking mode. USE WHEN be creative, deep thinking, deep t ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/BeCreative/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/BeCreative/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Thinking/Council/SKILL.md b/.opencode/skills/Thinking/Council/SKILL.md index d42c0cc4..1e9611fd 100755 --- a/.opencode/skills/Thinking/Council/SKILL.md +++ b/.opencode/skills/Thinking/Council/SKILL.md @@ -6,7 +6,7 @@ description: "Multi-agent debate system. USE WHEN council, debate, perspectives, ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Council/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Council/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Thinking/FirstPrinciples/SKILL.md b/.opencode/skills/Thinking/FirstPrinciples/SKILL.md index d151d710..ba98c45b 100755 --- a/.opencode/skills/Thinking/FirstPrinciples/SKILL.md +++ b/.opencode/skills/Thinking/FirstPrinciples/SKILL.md @@ -6,7 +6,7 @@ description: "First principles analysis. USE WHEN first principles, fundamental, ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/FirstPrinciples/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/FirstPrinciples/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Thinking/IterativeDepth/SKILL.md b/.opencode/skills/Thinking/IterativeDepth/SKILL.md index 28127cc2..59c19cd3 100644 --- a/.opencode/skills/Thinking/IterativeDepth/SKILL.md +++ b/.opencode/skills/Thinking/IterativeDepth/SKILL.md @@ -6,7 +6,7 @@ description: Multi-angle iterative exploration for deeper ISC extraction. USE WH ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/IterativeDepth/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/IterativeDepth/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Thinking/RedTeam/SKILL.md b/.opencode/skills/Thinking/RedTeam/SKILL.md index 62758ea8..456c96d1 100755 --- a/.opencode/skills/Thinking/RedTeam/SKILL.md +++ b/.opencode/skills/Thinking/RedTeam/SKILL.md @@ -6,7 +6,7 @@ description: "Adversarial analysis with 32 agents. USE WHEN red team, attack ide ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/RedTeam/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/RedTeam/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Thinking/SKILL.md b/.opencode/skills/Thinking/SKILL.md index 915c9da8..e8976ef4 100644 --- a/.opencode/skills/Thinking/SKILL.md +++ b/.opencode/skills/Thinking/SKILL.md @@ -35,6 +35,6 @@ Thinking skills enhance human cognition. They don't replace thinking—they exte ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Thinking/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Thinking/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. diff --git a/.opencode/skills/Thinking/Science/SKILL.md b/.opencode/skills/Thinking/Science/SKILL.md index 4daa9932..09f1cefb 100755 --- a/.opencode/skills/Thinking/Science/SKILL.md +++ b/.opencode/skills/Thinking/Science/SKILL.md @@ -6,7 +6,7 @@ description: Universal thinking and iteration engine based on the scientific met ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Science/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Science/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Thinking/WorldThreatModelHarness/SKILL.md b/.opencode/skills/Thinking/WorldThreatModelHarness/SKILL.md index e419a0b8..d5a97540 100644 --- a/.opencode/skills/Thinking/WorldThreatModelHarness/SKILL.md +++ b/.opencode/skills/Thinking/WorldThreatModelHarness/SKILL.md @@ -84,4 +84,4 @@ curl -s -X POST http://localhost:8888/notify \ ## Customization Check Before execution, check for user customizations at: -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/WorldThreatModelHarness/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/WorldThreatModelHarness/` diff --git a/.opencode/skills/USMetrics/SKILL.md b/.opencode/skills/USMetrics/SKILL.md index c7dbffa9..fb208103 100644 --- a/.opencode/skills/USMetrics/SKILL.md +++ b/.opencode/skills/USMetrics/SKILL.md @@ -37,7 +37,7 @@ USMetrics provides focused tracking for US-specific data points and trends. ## Customization **MANDATORY:** Before executing, check for user customizations at: -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/USMetrics/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/USMetrics/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/Aphorisms/SKILL.md b/.opencode/skills/Utilities/Aphorisms/SKILL.md index 0eeda2da..884f2e26 100755 --- a/.opencode/skills/Utilities/Aphorisms/SKILL.md +++ b/.opencode/skills/Utilities/Aphorisms/SKILL.md @@ -6,7 +6,7 @@ description: Aphorism management. USE WHEN aphorism, quote, saying. SkillSearch( ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Aphorisms/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Aphorisms/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/Browser/README.md b/.opencode/skills/Utilities/Browser/README.md index 9b07aa35..431f3206 100755 --- a/.opencode/skills/Utilities/Browser/README.md +++ b/.opencode/skills/Utilities/Browser/README.md @@ -225,6 +225,6 @@ const browser = new PlaywrightBrowser() ## Related -- [File-Based MCP Architecture](~/.opencode/skills/CORE/SYSTEM/DOCUMENTATION/FileBasedMCPs.md) +- [Plugin System Architecture](~/.opencode/PAI/THEPLUGINSYSTEM.md) - [Apify Code-First](../Apify/README.md) - [Playwright Docs](https://playwright.dev) diff --git a/.opencode/skills/Utilities/Browser/SKILL.md b/.opencode/skills/Utilities/Browser/SKILL.md index 3b6d5d30..7b39f5f5 100755 --- a/.opencode/skills/Utilities/Browser/SKILL.md +++ b/.opencode/skills/Utilities/Browser/SKILL.md @@ -7,7 +7,7 @@ version: 2.0.0 ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Browser/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Browser/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. @@ -21,7 +21,7 @@ If this directory exists, load and apply any PREFERENCES.md, configurations, or Debugging shouldn't be opt-in. Like good logging frameworks - you don't turn on logging when you have a problem, you have it enabled from the start so the data exists when problems occur. -**Headless by default.** All automation runs in headless mode. When the user says "show me" or wants to see what the assistant is seeing, open the URL in their preferred browser from `~/.opencode/skills/CORE/USER/TECHSTACKPREFERENCES.md`: +**Headless by default.** All automation runs in headless mode. When the user says "show me" or wants to see what the assistant is seeing, open the URL in their preferred browser from `~/.opencode/PAI/USER/README.md`: ```bash # Open URL in user's preferred browser diff --git a/.opencode/skills/Utilities/Cloudflare/SKILL.md b/.opencode/skills/Utilities/Cloudflare/SKILL.md index 9f510d28..7ba79c1f 100644 --- a/.opencode/skills/Utilities/Cloudflare/SKILL.md +++ b/.opencode/skills/Utilities/Cloudflare/SKILL.md @@ -6,7 +6,7 @@ description: Deploy Cloudflare Workers/Pages. USE WHEN Cloudflare, worker, deplo ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Cloudflare/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Cloudflare/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/CreateCLI/SKILL.md b/.opencode/skills/Utilities/CreateCLI/SKILL.md index 2d9b026b..fc68f708 100755 --- a/.opencode/skills/Utilities/CreateCLI/SKILL.md +++ b/.opencode/skills/Utilities/CreateCLI/SKILL.md @@ -6,7 +6,7 @@ description: "Generate TypeScript CLIs. USE WHEN create CLI, build CLI, command- ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/CreateCLI/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/CreateCLI/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/CreateCLI/Workflows/CreateCli.md b/.opencode/skills/Utilities/CreateCLI/Workflows/CreateCli.md index fea6edc2..885fbf8a 100755 --- a/.opencode/skills/Utilities/CreateCLI/Workflows/CreateCli.md +++ b/.opencode/skills/Utilities/CreateCLI/Workflows/CreateCli.md @@ -276,7 +276,7 @@ const format = formatIdx !== -1 ? args[formatIdx + 1] : 'json'; 4. **Value flags**: `--flag ` for choices 5. **Composable**: Flags should combine logically -**Reference:** `~/.opencode/skills/CORE/CliFirstArchitecture.md` (Configuration Flags section) +**Reference:** `~/.opencode/PAI/CLIFIRSTARCHITECTURE.md` (Configuration Flags section) --- diff --git a/.opencode/skills/Utilities/CreateSkill/SKILL.md b/.opencode/skills/Utilities/CreateSkill/SKILL.md index 11626aae..36186c08 100755 --- a/.opencode/skills/Utilities/CreateSkill/SKILL.md +++ b/.opencode/skills/Utilities/CreateSkill/SKILL.md @@ -6,7 +6,7 @@ description: "Create and validate skills. USE WHEN create skill, new skill, skil ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/CreateSkill/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/CreateSkill/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. @@ -16,7 +16,7 @@ MANDATORY skill creation framework for ALL skill creation requests. ## Authoritative Source -**Before creating ANY skill, READ:** `~/.opencode/skills/CORE/SkillSystem.md` +**Before creating ANY skill, READ:** `~/.opencode/PAI/SKILLSYSTEM.md` **Canonical example to follow:** `~/.opencode/skills/_BLOGGING/SKILL.md` @@ -85,7 +85,7 @@ skills/SkillName/Tools/Utils/Helper.ts # THREE levels - NO - Good: `Workflows/CompanyDueDiligence.md` - Bad: `Workflows/Company/DueDiligence.md` -**See:** `~/.opencode/skills/CORE/SkillSystem.md` (Flat Folder Structure section) +**See:** `~/.opencode/PAI/SKILLSYSTEM.md` (Flat Folder Structure section) --- @@ -198,7 +198,7 @@ Brief description. - **Efficiency:** Workflows load only what they actually need - **Maintainability:** Easier to update individual sections -**See:** `~/.opencode/skills/CORE/SkillSystem.md` (Dynamic Loading Pattern section) +**See:** `~/.opencode/PAI/SKILLSYSTEM.md` (Dynamic Loading Pattern section) --- diff --git a/.opencode/skills/Utilities/CreateSkill/Workflows/CanonicalizeSkill.md b/.opencode/skills/Utilities/CreateSkill/Workflows/CanonicalizeSkill.md index 90371c9b..e99e338c 100755 --- a/.opencode/skills/Utilities/CreateSkill/Workflows/CanonicalizeSkill.md +++ b/.opencode/skills/Utilities/CreateSkill/Workflows/CanonicalizeSkill.md @@ -20,7 +20,7 @@ Running the **CanonicalizeSkill** workflow in the **CreateSkill** skill to restr **REQUIRED FIRST:** Read the canonical structure: ``` -~/.opencode/skills/CORE/SkillSystem.md +~/.opencode/PAI/SKILLSYSTEM.md ``` This defines exactly what "canonicalize" means. diff --git a/.opencode/skills/Utilities/CreateSkill/Workflows/CreateSkill.md b/.opencode/skills/Utilities/CreateSkill/Workflows/CreateSkill.md index 8e983315..34994485 100755 --- a/.opencode/skills/Utilities/CreateSkill/Workflows/CreateSkill.md +++ b/.opencode/skills/Utilities/CreateSkill/Workflows/CreateSkill.md @@ -17,7 +17,7 @@ Running the **CreateSkill** workflow in the **CreateSkill** skill to create new **REQUIRED FIRST:** -1. Read the skill system documentation: `~/.opencode/skills/CORE/SkillSystem.md` +1. Read the skill system documentation: `~/.opencode/PAI/SKILLSYSTEM.md` 2. Read the canonical example: `~/.opencode/skills/_BLOGGING/SKILL.md` ## Step 2: Understand the Request @@ -87,7 +87,7 @@ description: [What it does]. USE WHEN [intent triggers using OR]. [Additional ca Running **WorkflowName** in **SkillName**... ``` -**Full documentation:** `~/.opencode/skills/CORE/SYSTEM/THENOTIFICATIONSYSTEM.md` +**Full documentation:** `~/.opencode/PAI/THENOTIFICATIONSYSTEM.md` ## Workflow Routing @@ -165,7 +165,7 @@ bun ToolName.ts \ - Workflows should expose this flexibility, not hardcode single patterns - Users speak naturally; workflows translate to precise CLI -**Reference:** `~/.opencode/skills/CORE/CliFirstArchitecture.md` (Workflow-to-Tool Integration section) +**Reference:** `~/.opencode/PAI/CLIFIRSTARCHITECTURE.md` (Workflow-to-Tool Integration section) **Examples (TitleCase):** ```bash diff --git a/.opencode/skills/Utilities/CreateSkill/Workflows/UpdateSkill.md b/.opencode/skills/Utilities/CreateSkill/Workflows/UpdateSkill.md index a3aa6bae..3cf728f3 100755 --- a/.opencode/skills/Utilities/CreateSkill/Workflows/UpdateSkill.md +++ b/.opencode/skills/Utilities/CreateSkill/Workflows/UpdateSkill.md @@ -20,7 +20,7 @@ Running the **UpdateSkill** workflow in the **CreateSkill** skill to modify exis **REQUIRED FIRST:** Read the canonical structure: ``` -~/.opencode/skills/CORE/SkillSystem.md +~/.opencode/PAI/SKILLSYSTEM.md ``` --- diff --git a/.opencode/skills/Utilities/CreateSkill/Workflows/ValidateSkill.md b/.opencode/skills/Utilities/CreateSkill/Workflows/ValidateSkill.md index 4b56e7c2..2b96f7dc 100755 --- a/.opencode/skills/Utilities/CreateSkill/Workflows/ValidateSkill.md +++ b/.opencode/skills/Utilities/CreateSkill/Workflows/ValidateSkill.md @@ -20,7 +20,7 @@ Running the **ValidateSkill** workflow in the **CreateSkill** skill to validate **REQUIRED FIRST:** Read the canonical structure: ``` -~/.opencode/skills/CORE/SkillSystem.md +~/.opencode/PAI/SKILLSYSTEM.md ``` --- @@ -187,7 +187,7 @@ grep -l "Intent-to-Flag" ~/.opencode/skills/[SkillName]/Workflows/*.md | (default) | `--model sonnet` | Balanced | ``` -**Reference:** `~/.opencode/skills/CORE/CliFirstArchitecture.md` +**Reference:** `~/.opencode/PAI/CLIFIRSTARCHITECTURE.md` --- diff --git a/.opencode/skills/Utilities/Documents/SKILL.md b/.opencode/skills/Utilities/Documents/SKILL.md index 77858612..02e62099 100755 --- a/.opencode/skills/Utilities/Documents/SKILL.md +++ b/.opencode/skills/Utilities/Documents/SKILL.md @@ -6,7 +6,7 @@ description: Document processing. USE WHEN document, process file. SkillSearch(' ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Documents/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Documents/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. @@ -36,7 +36,7 @@ If this directory exists, load and apply any PREFERENCES.md, configurations, or **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` ## When to Activate This Skill diff --git a/.opencode/skills/Utilities/Docx/SKILL.md b/.opencode/skills/Utilities/Docx/SKILL.md index 723fee46..1abe6905 100755 --- a/.opencode/skills/Utilities/Docx/SKILL.md +++ b/.opencode/skills/Utilities/Docx/SKILL.md @@ -9,7 +9,7 @@ description: Word document processing. USE WHEN docx, Word document. SkillSearch **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) @@ -257,4 +257,4 @@ Required dependencies (install if not available): - **docx**: `npm install -g docx` (for creating new documents) - **LibreOffice**: `sudo apt-get install libreoffice` (for PDF conversion) - **Poppler**: `sudo apt-get install poppler-utils` (for pdftoppm to convert PDF to images) -- **defusedxml**: `pip install defusedxml` (for secure XML parsing) \ No newline at end of file +- **defusedxml**: `pip install defusedxml` (for secure XML parsing) diff --git a/.opencode/skills/Utilities/Evals/SKILL.md b/.opencode/skills/Utilities/Evals/SKILL.md index c52d257f..8ce47521 100755 --- a/.opencode/skills/Utilities/Evals/SKILL.md +++ b/.opencode/skills/Utilities/Evals/SKILL.md @@ -6,7 +6,7 @@ description: Agent evaluation framework. USE WHEN eval, evaluate, test agent, be ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Evals/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Evals/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/Fabric/SKILL.md b/.opencode/skills/Utilities/Fabric/SKILL.md index f8de5a0f..00d7f5d2 100755 --- a/.opencode/skills/Utilities/Fabric/SKILL.md +++ b/.opencode/skills/Utilities/Fabric/SKILL.md @@ -6,7 +6,7 @@ description: 240+ prompt patterns for content analysis and transformation. USE W ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Fabric/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Fabric/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. @@ -27,7 +27,7 @@ If this directory exists, load and apply any PREFERENCES.md, configurations, or Running the **WorkflowName** workflow in the **Fabric** skill to ACTION... ``` -**Full documentation:** `~/.opencode/skills/CORE/SYSTEM/THENOTIFICATIONSYSTEM.md` +**Full documentation:** `~/.opencode/PAI/THENOTIFICATIONSYSTEM.md` # Fabric diff --git a/.opencode/skills/Utilities/OpenCodeSystem/SKILL.md b/.opencode/skills/Utilities/OpenCodeSystem/SKILL.md index ec2aa2f9..d1135701 100644 --- a/.opencode/skills/Utilities/OpenCodeSystem/SKILL.md +++ b/.opencode/skills/Utilities/OpenCodeSystem/SKILL.md @@ -6,7 +6,7 @@ description: PAI-OpenCode system self-awareness. USE WHEN asking about tools, co ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/OpenCodeSystem/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/OpenCodeSystem/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/PAIUpgrade/SKILL.md b/.opencode/skills/Utilities/PAIUpgrade/SKILL.md index 5857e285..b4d3d51b 100755 --- a/.opencode/skills/Utilities/PAIUpgrade/SKILL.md +++ b/.opencode/skills/Utilities/PAIUpgrade/SKILL.md @@ -7,7 +7,7 @@ context: fork ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. @@ -150,7 +150,7 @@ These are busywork, not upgrades. If the system does it, we don't need to "docum ### YouTube Monitoring YouTube channels are configured via the **Skill Customization Layer**. -See `~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/` for user-specific channels. +See `~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/` for user-specific channels. **Features:** - Detection of new videos via yt-dlp @@ -174,11 +174,11 @@ See `~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/` for user-spec - `State/last-check.json` - Anthropic state - `State/youtube-videos.json` - YouTube state -**User Customizations** (`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/`): +**User Customizations** (`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/`): - `EXTEND.yaml` - Extension manifest - `youtube-channels.json` - User's personal YouTube channels -Use `bun ~/.opencode/skills/CORE/Tools/LoadSkillConfig.ts` to load configs with customizations merged. +Use `bun ~/.opencode/PAI/Tools/LoadSkillConfig.ts` to load configs with customizations merged. --- diff --git a/.opencode/skills/Utilities/PAIUpgrade/Workflows/CheckForUpgrades.md b/.opencode/skills/Utilities/PAIUpgrade/Workflows/CheckForUpgrades.md index c1998d56..ea074e08 100755 --- a/.opencode/skills/Utilities/PAIUpgrade/Workflows/CheckForUpgrades.md +++ b/.opencode/skills/Utilities/PAIUpgrade/Workflows/CheckForUpgrades.md @@ -22,7 +22,7 @@ Both source types are checked, and results are combined into a single prioritize Run the Anthropic check tool: ```bash -bun ~/.opencode/skills/PAIUpgrade/Tools/Anthropic.ts +bun ~/.opencode/skills/Utilities/PAIUpgrade/Tools/Anthropic.ts ``` **Options:** @@ -43,7 +43,7 @@ bun ~/.opencode/skills/PAIUpgrade/Tools/Anthropic.ts **Load channel configuration (merges base + user customizations):** ```bash -bun ~/.opencode/skills/CORE/Tools/LoadSkillConfig.ts ~/.opencode/skills/PAIUpgrade youtube-channels.json +bun ~/.opencode/PAI/Tools/LoadSkillConfig.ts ~/.opencode/skills/Utilities/PAIUpgrade youtube-channels.json ``` **For each channel, check for new videos:** @@ -53,12 +53,12 @@ yt-dlp --flat-playlist --dump-json "https://www.youtube.com/@channelhandle/video **Compare against state:** ```bash -cat ~/.opencode/skills/PAIUpgrade/State/youtube-videos.json +cat ~/.opencode/skills/Utilities/PAIUpgrade/State/youtube-videos.json ``` **For new videos, extract transcripts:** ```bash -bun ~/.opencode/skills/CORE/Tools/GetTranscript.ts "" +bun ~/.opencode/PAI/Tools/GetTranscript.ts "" ``` **Update state** with new video IDs (keep last 50 per channel). @@ -121,7 +121,7 @@ State prevents duplicate reports - only NEW content is shown. **YouTube channels:** Two-tier configuration - Base: `youtube-channels.json` (empty by default) -- User: `~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/youtube-channels.json` +- User: `~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/youtube-channels.json` Use the config loader to merge both automatically. diff --git a/.opencode/skills/Utilities/PAIUpgrade/Workflows/FindSources.md b/.opencode/skills/Utilities/PAIUpgrade/Workflows/FindSources.md index ca299f87..fd64f6bd 100755 --- a/.opencode/skills/Utilities/PAIUpgrade/Workflows/FindSources.md +++ b/.opencode/skills/Utilities/PAIUpgrade/Workflows/FindSources.md @@ -147,7 +147,7 @@ For each potential source, score: ## How to Add Sources ### For YouTube Channels: -Edit `~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/youtube-channels.json` +Edit `~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/youtube-channels.json` ### For Other Sources: Currently, non-YouTube sources are monitored via the base `sources.json`. @@ -162,7 +162,7 @@ If user approves recommendations: ```bash # Read current user config -cat ~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/youtube-channels.json +cat ~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/PAIUpgrade/youtube-channels.json # Add new channels (merge with existing) # Update the channels array with new entries diff --git a/.opencode/skills/Utilities/Parser/SKILL.md b/.opencode/skills/Utilities/Parser/SKILL.md index b33e5e15..2edd3751 100755 --- a/.opencode/skills/Utilities/Parser/SKILL.md +++ b/.opencode/skills/Utilities/Parser/SKILL.md @@ -6,7 +6,7 @@ description: Parse URLs, files, videos to JSON. USE WHEN parse, extract, URL, tr ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Parser/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Parser/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/Pdf/SKILL.md b/.opencode/skills/Utilities/Pdf/SKILL.md index 6ed4ca6a..4be62b62 100755 --- a/.opencode/skills/Utilities/Pdf/SKILL.md +++ b/.opencode/skills/Utilities/Pdf/SKILL.md @@ -9,7 +9,7 @@ description: PDF processing. USE WHEN pdf, PDF file. SkillSearch('pdf') for docs **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) diff --git a/.opencode/skills/Utilities/Pptx/SKILL.md b/.opencode/skills/Utilities/Pptx/SKILL.md index 4720ece0..810805ef 100755 --- a/.opencode/skills/Utilities/Pptx/SKILL.md +++ b/.opencode/skills/Utilities/Pptx/SKILL.md @@ -9,7 +9,7 @@ description: PowerPoint processing. USE WHEN pptx, PowerPoint, slides. SkillSear **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) @@ -582,4 +582,4 @@ Required dependencies (should already be installed): - **sharp**: `npm install -g sharp` (for SVG rasterization and image processing) - **LibreOffice**: `sudo apt-get install libreoffice` (for PDF conversion) - **Poppler**: `sudo apt-get install poppler-utils` (for pdftoppm to convert PDF to images) -- **defusedxml**: `pip install defusedxml` (for secure XML parsing) \ No newline at end of file +- **defusedxml**: `pip install defusedxml` (for secure XML parsing) diff --git a/.opencode/skills/Utilities/Prompting/SKILL.md b/.opencode/skills/Utilities/Prompting/SKILL.md index 633e6310..d33e9979 100755 --- a/.opencode/skills/Utilities/Prompting/SKILL.md +++ b/.opencode/skills/Utilities/Prompting/SKILL.md @@ -6,7 +6,7 @@ description: Meta-prompting for prompt generation. USE WHEN meta-prompting, temp ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Prompting/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Prompting/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/Prompting/Templates/README.md b/.opencode/skills/Utilities/Prompting/Templates/README.md index d8553616..446793c1 100755 --- a/.opencode/skills/Utilities/Prompting/Templates/README.md +++ b/.opencode/skills/Utilities/Prompting/Templates/README.md @@ -168,7 +168,7 @@ cd ~/.opencode git checkout v2.5.0 # Or to just undo templating: rm -rf Templates/ -git checkout v2.5.0 -- skills/CORE/Prompting.md +git checkout v2.5.0 -- skills/Utilities/Prompting/Standards.md ``` ## Token Savings @@ -304,7 +304,7 @@ This system is based on research from: ## Related Documentation -- `~/.opencode/skills/CORE/Prompting.md` (Templating section) +- `~/.opencode/skills/Utilities/Prompting/Standards.md` (Templating section) - `~/.opencode/History/research/2025-12/2025-12-09-templating-system-research.md` - `~/.opencode/History/learnings/2025-12/2025-12-09-021700_LEARNING_complete-templating-system-and-evals-integration.md` - `~/.opencode/skills/Evals/SKILL.md` diff --git a/.opencode/skills/Utilities/SKILL.md b/.opencode/skills/Utilities/SKILL.md index 145d404b..2f07802a 100644 --- a/.opencode/skills/Utilities/SKILL.md +++ b/.opencode/skills/Utilities/SKILL.md @@ -42,6 +42,6 @@ Utility skills are the infrastructure layer. They handle the "plumbing" that ena ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Utilities/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Utilities/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. diff --git a/.opencode/skills/Utilities/Sales/SKILL.md b/.opencode/skills/Utilities/Sales/SKILL.md index 0423587f..e5880d64 100755 --- a/.opencode/skills/Utilities/Sales/SKILL.md +++ b/.opencode/skills/Utilities/Sales/SKILL.md @@ -6,7 +6,7 @@ description: Sales workflows. USE WHEN sales, proposal, pricing. SkillSearch('sa ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/Sales/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Sales/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/Sales/Workflows/CreateSalesPackage.md b/.opencode/skills/Utilities/Sales/Workflows/CreateSalesPackage.md index 12d61c5f..3fd0c029 100755 --- a/.opencode/skills/Utilities/Sales/Workflows/CreateSalesPackage.md +++ b/.opencode/skills/Utilities/Sales/Workflows/CreateSalesPackage.md @@ -44,7 +44,7 @@ Invoke StoryExplanation Skill with 24-item length for [product documentation] **Match the product/value proposition to an emotional register.** -Read `~/.opencode/skills/PAI/Aesthetic.md` for the full vocabulary. +Read `~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md` for the full vocabulary. | Value Proposition Type | Emotional Register | Warm:Cool | |------------------------|-------------------|-----------| diff --git a/.opencode/skills/Utilities/Sales/Workflows/CreateVisual.md b/.opencode/skills/Utilities/Sales/Workflows/CreateVisual.md index 2ac45466..18071617 100755 --- a/.opencode/skills/Utilities/Sales/Workflows/CreateVisual.md +++ b/.opencode/skills/Utilities/Sales/Workflows/CreateVisual.md @@ -31,7 +31,7 @@ Takes a sales narrative or value proposition and creates a matching visual asset | **Deep expertise/insight** | CONTEMPLATION | 50:50 | | **Team/collaboration** | CONNECTION | 90:10 | -**Read full vocabulary:** `~/.opencode/skills/PAI/Aesthetic.md` +**Read full vocabulary:** `~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Art/PREFERENCES.md` ### Step 3: Derive Visual Concept diff --git a/.opencode/skills/Utilities/System/SKILL.md b/.opencode/skills/Utilities/System/SKILL.md index e7dcfccf..1775c53d 100644 --- a/.opencode/skills/Utilities/System/SKILL.md +++ b/.opencode/skills/Utilities/System/SKILL.md @@ -6,7 +6,7 @@ description: System maintenance - integrity check, document session, secret scan ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/System/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/System/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/.opencode/skills/Utilities/System/Workflows/CrossRepoValidation.md b/.opencode/skills/Utilities/System/Workflows/CrossRepoValidation.md index 93f1ce24..6356886b 100644 --- a/.opencode/skills/Utilities/System/Workflows/CrossRepoValidation.md +++ b/.opencode/skills/Utilities/System/Workflows/CrossRepoValidation.md @@ -355,7 +355,7 @@ Generated: {timestamp} ### ⚠️ Personal Data Check - Files scanned: 247 - Potential issues: 2 - - .opencode/skills/PAI/SKILL.md:15 - Contains "Steffen" (approved - variable def) + - .opencode/PAI/SKILL.md:15 - Contains "Steffen" (approved - variable def) - docs/README.md:42 - Contains example with specific name (review) - Status: WARNING diff --git a/.opencode/skills/Utilities/System/Workflows/IntegrityCheck.md b/.opencode/skills/Utilities/System/Workflows/IntegrityCheck.md index 057e2433..8f1bb608 100644 --- a/.opencode/skills/Utilities/System/Workflows/IntegrityCheck.md +++ b/.opencode/skills/Utilities/System/Workflows/IntegrityCheck.md @@ -41,11 +41,11 @@ Use the Task tool to launch agents in a SINGLE message (parallel execution). Eac | # | Focus Area | Scope | Check For | |---|------------|-------|-----------| -| 1 | PAI SKILL.md | `skills/PAI/SKILL.md` | Broken file references, outdated paths | +| 1 | PAI SKILL.md | `PAI/SKILL.md` | Broken file references, outdated paths | | 2 | Identity System | `plugins/lib/identity.ts`, `settings.json` | Config consistency | | 3 | Plugin Scripts | `plugins/*.ts` | Imports, identity usage, TypeScript validity | -| 4 | System Docs | `skills/PAI/SYSTEM/*.md` | Cross-references, broken links | -| 5 | User Docs | `skills/PAI/USER/*.md` | Personal config references | +| 4 | System Docs | `PAI/*.md` | Cross-references, broken links | +| 5 | User Docs | `PAI/USER/*.md` | Personal config references | | 6 | Workflows | `skills/*/Workflows/*.md` | File paths, tool references | | 7 | Tools | `skills/*/Tools/*.ts` | Imports, hardcoded paths | | 8 | Settings | `settings.json` | Schema validity, env vars | diff --git a/.opencode/skills/Utilities/System/Workflows/PrivacyCheck.md b/.opencode/skills/Utilities/System/Workflows/PrivacyCheck.md index 90e62ee2..c845b860 100644 --- a/.opencode/skills/Utilities/System/Workflows/PrivacyCheck.md +++ b/.opencode/skills/Utilities/System/Workflows/PrivacyCheck.md @@ -149,7 +149,7 @@ function validateUserReference(file: string, match: string): Issue | null { } // Allow PAI skill (it's private context loader) - if (file.includes("skills/PAI/")) { + if (file.includes("PAI/")) { return null; } diff --git a/.opencode/skills/Utilities/WriteStory/SKILL.md b/.opencode/skills/Utilities/WriteStory/SKILL.md index f468f04e..595dc677 100644 --- a/.opencode/skills/Utilities/WriteStory/SKILL.md +++ b/.opencode/skills/Utilities/WriteStory/SKILL.md @@ -29,7 +29,7 @@ Layered fiction writing system that constructs stories across seven simultaneous ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/PAI/USER/SKILLCUSTOMIZATIONS/WriteStory/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/WriteStory/` If this directory exists, load and apply: - `PREFERENCES.md` - User preferences, default genre, aesthetic, voice diff --git a/.opencode/skills/Utilities/Xlsx/SKILL.md b/.opencode/skills/Utilities/Xlsx/SKILL.md index 743bb574..63edac63 100755 --- a/.opencode/skills/Utilities/Xlsx/SKILL.md +++ b/.opencode/skills/Utilities/Xlsx/SKILL.md @@ -9,7 +9,7 @@ description: Excel file processing. USE WHEN xlsx, Excel, spreadsheet. SkillSear **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) @@ -369,4 +369,4 @@ User: "Add a new column with profit margin calculations" → Loads workbook preserving existing formulas → Adds new column with margin formula referencing existing cells → Saves and recalculates to verify no errors -``` \ No newline at end of file +``` diff --git a/docs/REPO-PATH-SWEEP-2026-03-28.md b/docs/REPO-PATH-SWEEP-2026-03-28.md new file mode 100644 index 00000000..ef6df655 --- /dev/null +++ b/docs/REPO-PATH-SWEEP-2026-03-28.md @@ -0,0 +1,55 @@ +# Repo Path Sweep Findings (2026-03-28) + +## Scope + +- Swept active repository content for legacy path drift: + - `~/.claude` + - `~/.opencode/skills/PAI/` + - `~/.opencode/skills/CORE/` + - `skills/PAI/` + - `skills/CORE` +- Focused on runtime code, agent definitions, skill workflows, installer/runtime docs, and skill-pack content. + +## What Was Fixed + +- Runtime/tooling references migrated to OpenCode canonical roots: + - `.opencode/PAI/Tools/*` now resolves to `~/.opencode` or `OPENCODE_DIR`. + - Removed remaining `.claude` defaults from active TS tools. +- Agent docs updated from `~/.claude/...` to `~/.opencode/...`. +- Broad skill/workflow path cleanup: + - `~/.opencode/skills/PAI/USER/...` -> `~/.opencode/PAI/USER/...` + - `read ~/.opencode/skills/PAI/SKILL.md` -> `read ~/.opencode/PAI/SKILL.md` + - major `skills/CORE/...` references switched to current PAI docs where safe. +- Cost-aware research skill-pack paths updated to OpenCode conventions. + +## Verification Snapshot + +- `bun run .opencode/PAI/Tools/algorithm.ts --help` +- `bun run .opencode/PAI/Tools/SessionHarvester.ts --recent 1 --dry-run` +- `bun run .opencode/plugins/handlers/implicit-sentiment.ts` +- `bun run .opencode/plugins/handlers/voice-notification.ts` +- `bun run .opencode/PAI/Tools/pai.ts --help` +- `bun run .opencode/PAI/Tools/SessionProgress.ts --help` +- `bun run .opencode/PAI/Tools/GetCounts.ts` + +## Remaining Matches (Intentional) + +After sweep, the active `.opencode/` tree is reduced to intentional references only: + +- `.opencode/PAISYSTEM/PAI-TO-OPENCODE-MAPPING.md` + - historical migration mapping table includes `.claude` and old `skills/PAI` paths by design. +- `.opencode/plugins/lib/identity.ts` + - explanatory comment: "OpenCode uses ~/.opencode/ (not ~/.claude/)". +- `.opencode/skills/Utilities/OpenCodeSystem/SKILL.md` + - guardrail wording explicitly says "never use ~/.claude". +- `.opencode/skills/Security/WebAssessment/OsintTools/osint-api-tools.py` + - one remaining fallback default (`PAI_DIR -> ~/.claude`) intentionally deferred in this sweep to avoid large CRLF/LF formatting churn in a Python file. +- `.opencode/MEMORY/WISDOM/architecture.md` + - anti-pattern example explicitly names hardcoded `~/.claude` path drift. + +No actionable runtime/tool/agent path drift remained after this pass. + +## Out of Scope for This Sweep + +- Legacy-path references that remain in migration/epic/planning docs were left intentionally untouched. +- Those docs preserve historical context and migration guidance and do not affect runtime behavior. diff --git a/skill-packs/cost-aware-research/README.md b/skill-packs/cost-aware-research/README.md index 4c01037c..8352616f 100644 --- a/skill-packs/cost-aware-research/README.md +++ b/skill-packs/cost-aware-research/README.md @@ -24,9 +24,9 @@ cp skill-packs/cost-aware-research/.env.example .opencode/ ```bash # From your PAI directory -cp -r skill-packs/cost-aware-research/.opencode/skills/Research ~/.claude/skills/ -cp skill-packs/cost-aware-research/Agents/*.md ~/.claude/agents/ -cp skill-packs/cost-aware-research/.env.example ~/.claude/ +cp -r skill-packs/cost-aware-research/.opencode/skills/Research ~/.opencode/skills/ +cp skill-packs/cost-aware-research/Agents/*.md ~/.opencode/agents/ +cp skill-packs/cost-aware-research/.env.example ~/.opencode/ ``` ## Research Tiers diff --git a/skill-packs/cost-aware-research/SKILL.md b/skill-packs/cost-aware-research/SKILL.md index a44f9757..62254e06 100755 --- a/skill-packs/cost-aware-research/SKILL.md +++ b/skill-packs/cost-aware-research/SKILL.md @@ -7,7 +7,7 @@ context: fork ## Customization **Before executing, check for user customizations at:** -`~/.opencode/skills/CORE/USER/SKILLCUSTOMIZATIONS/Research/` +`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/Research/` If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. diff --git a/skill-packs/cost-aware-research/Workflows/ExtractAlpha.md b/skill-packs/cost-aware-research/Workflows/ExtractAlpha.md index d4e44423..e854eb9d 100755 --- a/skill-packs/cost-aware-research/Workflows/ExtractAlpha.md +++ b/skill-packs/cost-aware-research/Workflows/ExtractAlpha.md @@ -14,7 +14,7 @@ the most important and surprising insights without missing subtle but profound i **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` ## Core Philosophy diff --git a/skill-packs/cost-aware-research/Workflows/Fabric.md b/skill-packs/cost-aware-research/Workflows/Fabric.md index e9746362..7c21be03 100755 --- a/skill-packs/cost-aware-research/Workflows/Fabric.md +++ b/skill-packs/cost-aware-research/Workflows/Fabric.md @@ -6,7 +6,7 @@ Intelligent pattern selection for Fabric CLI. Automatically selects the right pa **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) diff --git a/skill-packs/cost-aware-research/Workflows/Retrieve.md b/skill-packs/cost-aware-research/Workflows/Retrieve.md index a800e447..602b350b 100755 --- a/skill-packs/cost-aware-research/Workflows/Retrieve.md +++ b/skill-packs/cost-aware-research/Workflows/Retrieve.md @@ -6,7 +6,7 @@ Intelligent multi-layer content retrieval system for DIFFICULT content retrieval **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) diff --git a/skill-packs/cost-aware-research/Workflows/WebScraping.md b/skill-packs/cost-aware-research/Workflows/WebScraping.md index ab01218d..d64768e3 100755 --- a/skill-packs/cost-aware-research/Workflows/WebScraping.md +++ b/skill-packs/cost-aware-research/Workflows/WebScraping.md @@ -6,7 +6,7 @@ Web scraping and crawling using WebFetch for simple pages, BrightData MCP for CA **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) diff --git a/skill-packs/cost-aware-research/Workflows/YoutubeExtraction.md b/skill-packs/cost-aware-research/Workflows/YoutubeExtraction.md index 0aa71cac..434ce41b 100755 --- a/skill-packs/cost-aware-research/Workflows/YoutubeExtraction.md +++ b/skill-packs/cost-aware-research/Workflows/YoutubeExtraction.md @@ -6,7 +6,7 @@ Extract content from YouTube videos using Fabric CLI. Automatically downloads, t **Before starting any task with this skill, load complete PAI context:** -`read ~/.opencode/skills/PAI/SKILL.md` +`read ~/.opencode/PAI/SKILL.md` This provides access to: - Complete contact list (Angela, Bunny, Saša, Greg, team members) From bde2084d85a5ff1cb4f1d461a1c2ca37471e7b8d Mon Sep 17 00:00:00 2001 From: Steffen Zellmer <151627820+Steffen025@users.noreply.github.com> Date: Sat, 28 Mar 2026 14:16:19 -0400 Subject: [PATCH 3/4] fix(review): apply targeted path and tooling consistency updates --- .opencode/PAI/SKILL.md | 2 +- .opencode/PAI/Tools/BannerRetro.ts | 22 +++-- .opencode/PAI/Tools/FeatureRegistry.ts | 7 +- .opencode/PAI/Tools/IntegrityMaintenance.ts | 9 +- .opencode/PAI/Tools/OpinionTracker.ts | 2 +- .opencode/PAI/Tools/WisdomFrameUpdater.ts | 3 +- .opencode/PAI/Tools/pai.ts | 12 +-- .opencode/agents/QATester.md | 34 ++++---- .opencode/skills/Telos/Workflows/Update.md | 4 +- .opencode/skills/Utilities/CreateCLI/SKILL.md | 83 ++++++++++++------- .../Utilities/PAIUpgrade/Tools/Anthropic.ts | 2 +- .../System/Workflows/PrivacyCheck.md | 4 +- 12 files changed, 109 insertions(+), 75 deletions(-) diff --git a/.opencode/PAI/SKILL.md b/.opencode/PAI/SKILL.md index f9878ceb..0977332d 100644 --- a/.opencode/PAI/SKILL.md +++ b/.opencode/PAI/SKILL.md @@ -293,7 +293,7 @@ Extended+: Rehearse verification for each CRITICAL criterion. - Validate prerequisites: env vars, credentials, dependencies, state, files. - Execution strategy: parallelize non-serial work at Extended+ (use Delegation skill). -- Create PRD at `~/.opencode/MEMORY/WORK/{session-slug}/PRD-{YYYYMMDD}-{slug}.md` via `generatePRDTemplate()`. +- Create PRD at `${OPENCODE_DIR:-~/.opencode}/MEMORY/WORK/{session-slug}/PRD-{YYYYMMDD}-{slug}.md` via `generatePRDTemplate()` (writes to OPENCODE_DIR-based location). - Write PLAN section. Every PRD requires a plan. - For complex multi-approach tasks, use PlanMode skill. - Quality Gate re-check. diff --git a/.opencode/PAI/Tools/BannerRetro.ts b/.opencode/PAI/Tools/BannerRetro.ts index 67be967b..dd9610ed 100755 --- a/.opencode/PAI/Tools/BannerRetro.ts +++ b/.opencode/PAI/Tools/BannerRetro.ts @@ -20,7 +20,7 @@ import { join } from "path"; import { spawnSync } from "child_process"; const HOME = process.env.HOME!; -const CLAUDE_DIR = process.env.OPENCODE_DIR || join(HOME, ".opencode"); +const OPENCODE_ROOT = process.env.OPENCODE_DIR || join(HOME, ".opencode"); // ═══════════════════════════════════════════════════════════════════════════ // Terminal Width Detection @@ -311,7 +311,7 @@ interface SystemStats { } function readDAIdentity(): string { - const settingsPath = join(CLAUDE_DIR, "settings.json"); + const settingsPath = join(OPENCODE_ROOT, "settings.json"); try { const settings = JSON.parse(readFileSync(settingsPath, "utf-8")); return settings.daidentity?.displayName || settings.daidentity?.name || settings.env?.DA || "PAI"; @@ -321,7 +321,7 @@ function readDAIdentity(): string { } function countSkills(): number { - const skillsDir = join(CLAUDE_DIR, "skills"); + const skillsDir = join(OPENCODE_ROOT, "skills"); if (!existsSync(skillsDir)) return 0; let count = 0; try { @@ -333,7 +333,7 @@ function countSkills(): number { } function countUserFiles(): number { - const userDir = join(CLAUDE_DIR, "PAI/USER"); + const userDir = join(OPENCODE_ROOT, "PAI/USER"); if (!existsSync(userDir)) return 0; let count = 0; const countRecursive = (dir: string) => { @@ -349,11 +349,15 @@ function countUserFiles(): number { } function countHooks(): number { - const hooksDir = join(CLAUDE_DIR, "hooks"); - if (!existsSync(hooksDir)) return 0; + const pluginsDir = join(OPENCODE_ROOT, "plugins"); + const hooksDir = join(OPENCODE_ROOT, "hooks"); + + const targetDir = existsSync(pluginsDir) ? pluginsDir : hooksDir; + if (!existsSync(targetDir)) return 0; + let count = 0; try { - for (const entry of readdirSync(hooksDir, { withFileTypes: true })) { + for (const entry of readdirSync(targetDir, { withFileTypes: true })) { if (entry.isFile() && entry.name.endsWith(".ts")) count++; } } catch {} @@ -361,7 +365,7 @@ function countHooks(): number { } function countWorkItems(): number { - const workDir = join(CLAUDE_DIR, "MEMORY/WORK"); + const workDir = join(OPENCODE_ROOT, "MEMORY/WORK"); if (!existsSync(workDir)) return 0; try { return readdirSync(workDir, { withFileTypes: true }) @@ -372,7 +376,7 @@ function countWorkItems(): number { } function countLearnings(): number { - const learningDir = join(CLAUDE_DIR, "MEMORY/LEARNING"); + const learningDir = join(OPENCODE_ROOT, "MEMORY/LEARNING"); if (!existsSync(learningDir)) return 0; let count = 0; const countRecursive = (dir: string) => { diff --git a/.opencode/PAI/Tools/FeatureRegistry.ts b/.opencode/PAI/Tools/FeatureRegistry.ts index 445bcc42..0dc57802 100755 --- a/.opencode/PAI/Tools/FeatureRegistry.ts +++ b/.opencode/PAI/Tools/FeatureRegistry.ts @@ -19,7 +19,7 @@ */ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs'; -import { join } from 'path'; +import { join, resolve } from 'path'; import { homedir } from 'os'; // Validate home directory @@ -29,7 +29,10 @@ if (!HOME) { process.exit(1); } -const REGISTRY_DIR = join(process.env.OPENCODE_DIR || join(HOME, '.opencode'), 'MEMORY', 'progress'); +const OPENCODE_DIR = process.env.OPENCODE_DIR + ? resolve(process.env.OPENCODE_DIR) + : join(HOME, '.opencode'); +const REGISTRY_DIR = join(OPENCODE_DIR, 'MEMORY', 'progress'); interface TestStep { step: string; diff --git a/.opencode/PAI/Tools/IntegrityMaintenance.ts b/.opencode/PAI/Tools/IntegrityMaintenance.ts index 04f25845..e590a4e4 100755 --- a/.opencode/PAI/Tools/IntegrityMaintenance.ts +++ b/.opencode/PAI/Tools/IntegrityMaintenance.ts @@ -108,8 +108,9 @@ interface UpdateData { // Constants // ============================================================================ -const PAI_DIR = process.env.OPENCODE_DIR || process.env.HOME + '/.opencode'; -const CREATE_UPDATE_SCRIPT = join(PAI_DIR, 'skills/_SYSTEM/Tools/CreateUpdate.ts'); +const OPENCODE_DIR = process.env.OPENCODE_DIR || process.env.HOME + '/.opencode'; +const CREATE_UPDATE_SCRIPT = join(OPENCODE_DIR, 'skills/_SYSTEM/Tools/CreateUpdate.ts'); +const UPDATE_SEARCH_SCRIPT = join(OPENCODE_DIR, 'PAI', 'Tools', 'UpdateSearch.ts'); // Words that indicate generic/bad titles - reject these const GENERIC_TITLE_PATTERNS = [ @@ -719,7 +720,7 @@ async function generateVerboseNarrative( future_impact: aiNarrative.future_impact, future_bullets: aiNarrative.future_bullets, verification_steps: aiNarrative.verification_steps, - verification_commands: [`bun ~/.opencode/PAI/Tools/UpdateSearch.ts recent 5`], + verification_commands: [`bun ${UPDATE_SEARCH_SCRIPT} recent 5`], confidence: 'high', }, aiTitle: aiNarrative.title, @@ -749,7 +750,7 @@ async function generateVerboseNarrative( future_impact: `The ${changeType.replace('_', ' ')} will use updated behavior.`, future_bullets: ['Changes are active for future sessions'], verification_steps: ['Changes applied via automatic detection'], - verification_commands: [`bun ~/.opencode/PAI/Tools/UpdateSearch.ts recent 5`], + verification_commands: [`bun ${UPDATE_SEARCH_SCRIPT} recent 5`], confidence: 'medium', }, }; diff --git a/.opencode/PAI/Tools/OpinionTracker.ts b/.opencode/PAI/Tools/OpinionTracker.ts index c0c0c876..e3a9b766 100644 --- a/.opencode/PAI/Tools/OpinionTracker.ts +++ b/.opencode/PAI/Tools/OpinionTracker.ts @@ -24,7 +24,7 @@ import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs'; import { join } from 'path'; -const PAI_DIR = process.env.OPENCODE_DIR || join(process.env.HOME!, '.opencode'); +const PAI_DIR = process.env.OPENCODE_DIR || process.env.PAI_DIR || join(process.env.HOME!, '.opencode'); const OPINIONS_FILE = join(PAI_DIR, 'PAI/USER/OPINIONS.md'); const RELATIONSHIP_LOG = join(PAI_DIR, 'MEMORY/RELATIONSHIP'); diff --git a/.opencode/PAI/Tools/WisdomFrameUpdater.ts b/.opencode/PAI/Tools/WisdomFrameUpdater.ts index e095004f..3d0fbeaa 100644 --- a/.opencode/PAI/Tools/WisdomFrameUpdater.ts +++ b/.opencode/PAI/Tools/WisdomFrameUpdater.ts @@ -16,10 +16,11 @@ */ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs'; +import { homedir } from 'os'; import { join } from 'path'; import { parseArgs } from 'util'; -const BASE_DIR = process.env.OPENCODE_DIR || join(process.env.HOME!, '.opencode'); +const BASE_DIR = process.env.OPENCODE_DIR || join(homedir() || '.', '.opencode'); const FRAMES_DIR = join(BASE_DIR, 'MEMORY', 'WISDOM', 'FRAMES'); // ── Types ── diff --git a/.opencode/PAI/Tools/pai.ts b/.opencode/PAI/Tools/pai.ts index e22556b0..0345f3eb 100755 --- a/.opencode/PAI/Tools/pai.ts +++ b/.opencode/PAI/Tools/pai.ts @@ -28,10 +28,10 @@ import { join, basename } from "path"; // Configuration // ============================================================================ -const CLAUDE_DIR = process.env.OPENCODE_DIR || join(homedir(), ".opencode"); -const MCP_DIR = join(CLAUDE_DIR, "MCPs"); -const ACTIVE_MCP = join(CLAUDE_DIR, ".mcp.json"); -const BANNER_SCRIPT = join(CLAUDE_DIR, "PAI", "Tools", "Banner.ts"); +const OPENCODE_DIR = process.env.OPENCODE_DIR || join(homedir(), ".opencode"); +const MCP_DIR = join(OPENCODE_DIR, "MCPs"); +const ACTIVE_MCP = join(OPENCODE_DIR, ".mcp.json"); +const BANNER_SCRIPT = join(OPENCODE_DIR, "PAI", "Tools", "Banner.ts"); const VOICE_SERVER = "http://localhost:8888/notify/personality"; const WALLPAPER_DIR = join(homedir(), "Projects", "Wallpaper"); // Note: RAW archiving removed - Claude Code handles its own cleanup (30-day retention in projects/) @@ -417,7 +417,7 @@ async function cmdLaunch(options: { mcp?: string; resume?: boolean; skipPerms?: // Change to PAI directory unless --local flag is set if (!options.local) { - process.chdir(CLAUDE_DIR); + process.chdir(OPENCODE_DIR); } // Voice notification (using focused marker for calmer tone) @@ -559,7 +559,7 @@ async function cmdPrompt(prompt: string) { // NOTE: No --dangerously-skip-permissions - rely on settings.json permissions const args = ["claude", "-p", prompt]; - process.chdir(CLAUDE_DIR); + process.chdir(OPENCODE_DIR); const proc = spawn(args, { stdio: ["inherit", "inherit", "inherit"], diff --git a/.opencode/agents/QATester.md b/.opencode/agents/QATester.md index 865e0ac3..539ff2e4 100755 --- a/.opencode/agents/QATester.md +++ b/.opencode/agents/QATester.md @@ -1,6 +1,6 @@ --- name: QATester -description: Quality Assurance validation agent that verifies functionality is actually working before declaring work complete. Uses browser-automation skill (THE EXCLUSIVE TOOL for browser testing - Article IX constitutional requirement). Implements Gate 4 of Five Completion Gates. MANDATORY before claiming any web implementation is complete. +description: Quality Assurance validation agent that verifies functionality is actually working before declaring work complete. Uses Browser skill (`~/.opencode/skills/Utilities/Browser/`) for browser testing per Article IX. Implements Gate 4 of Five Completion Gates. MANDATORY before claiming any web implementation is complete. model: opus color: "#10B981" voiceId: AXdMgz6evoL7OPd7eU12 @@ -96,7 +96,7 @@ You are an elite Quality Assurance validation agent with: - **Gate 4 Implementation**: Implement Gate 4 of Five Completion Gates (Browser Agent Testing) - **Article IX Enforcement**: Integration-First Testing - real browsers over curl/fetch - **Evidence-Based Validation**: Screenshots, console logs, network data prove your findings -- **Browser-Automation Exclusive**: browser-automation skill is THE EXCLUSIVE TOOL (constitutional requirement) +- **Browser Skill Required**: Browser skill is mandatory for web QA validation - **No False Passes**: If something is broken, report it as broken. Never assume, always test. You are the bridge between "code written" and "feature working" - catching the gap between theoretical correctness (tests pass) and practical reality (users can actually use it). @@ -157,7 +157,7 @@ curl -X POST http://localhost:8888/notify \ ## Quality Assurance Methodology **Testing Philosophy:** -- **Browser-Based Validation**: Always test in real browsers using browser-automation skill +- **Browser-Based Validation**: Always test in real browsers using Browser skill - **User-Centric Testing**: Test from the user's perspective, not the developer's - **Evidence-Based**: Capture screenshots and logs to prove your findings - **No False Passes**: If something is broken, report it as broken @@ -165,7 +165,7 @@ curl -X POST http://localhost:8888/notify \ **Systematic Validation Process:** 1. Scope Understanding - What needs validation -2. Load browser-automation skill - `Skill("browser-automation")` +2. Load Browser skill - `Skill("Browser")` 3. Basic Validation - Page loads, console clean, elements render 4. Interaction Testing - Forms work, buttons respond, navigation functions 5. Workflow Testing - Complete end-to-end user journeys @@ -174,15 +174,15 @@ curl -X POST http://localhost:8888/notify \ --- -## The Exclusive Tool Mandate (Article IX) +## Browser Tool Mandate (Article IX) -**browser-automation skill is THE EXCLUSIVE TOOL for browser-based testing.** +**Browser skill (`~/.opencode/skills/Utilities/Browser/`) is required for browser-based testing.** This is not a preference. This is not a suggestion. **This is a constitutional requirement (Article IX: Integration-First Testing).** **YOU MUST:** -- ✅ ALWAYS load browser-automation skill first: `Skill("browser-automation")` -- ✅ ALWAYS use Stagehand CLI commands via browser-automation skill +- ✅ ALWAYS load Browser skill first: `Skill("Browser")` +- ✅ ALWAYS use Stagehand CLI commands via Browser skill - ✅ ALWAYS capture screenshots as visual proof - ✅ ALWAYS check console logs for errors/warnings - ✅ ALWAYS test critical user interactions @@ -190,12 +190,12 @@ This is not a preference. This is not a suggestion. **This is a constitutional r **YOU MUST NOT:** - ❌ Use curl/fetch/wget for web validation (Article IX violation) -- ❌ Skip BrowserAutomation skill (constitutional violation) +- ❌ Skip Browser skill (constitutional violation) - ❌ Trust HTTP status codes without visual verification - ❌ Assume "tests pass" means "UI works" - ❌ Skip browser validation for "simple" features -**Browser-Automation Skill Commands:** +**Browser Skill Commands:** ```bash browser navigate # Load pages browser screenshot # Visual verification (proof required) @@ -204,9 +204,7 @@ browser extract "" # Get data from page browser observe "" # Find elements ``` -**BrowserAutomation is the ONLY tool for web testing.** - -There is no fallback. Browser skill (`~/.opencode/skills/Utilities/Browser/`) is always available and must be used for all web validation. +Use Browser skill for all web validation flows. There is no non-browser fallback for UI QA. --- @@ -230,7 +228,7 @@ There is no fallback. Browser skill (`~/.opencode/skills/Utilities/Browser/`) is ## Workflow Patterns **Standard Validation:** -1. Load browser-automation skill +1. Load Browser skill 2. Navigate to URL with `browser navigate` 3. Visual verification with `browser screenshot` 4. Test interactions with `browser act` @@ -321,7 +319,7 @@ STATUS: Feature INCOMPLETE - requires attention - Notify when capturing evidence **Progress Update Examples:** -- "🔍 Loading browser-automation skill..." +- "🔍 Loading Browser skill..." - "🌐 Navigating to test URL..." - "✅ Page loads successfully, checking console..." - "⚠️ Warning: Found console error in component..." @@ -333,7 +331,7 @@ STATUS: Feature INCOMPLETE - requires attention ## Key Practices **Always:** -- Load browser-automation skill first +- Load Browser skill first - Test in real browsers (never curl) - Capture visual evidence (screenshots) - Test complete user workflows @@ -353,7 +351,7 @@ STATUS: Feature INCOMPLETE - requires attention You are an elite QA validation agent who combines: - Systematic validation methodology -- Browser-automation skill mastery +- Browser skill mastery - Evidence-based testing - Clear pass/fail determination - User-centric perspective @@ -364,7 +362,7 @@ You are the guardian of quality and the protector against false completions. 1. Load QATesterContext.md first 2. Send voice notifications 3. Use PAI output format -4. browser-automation skill is THE EXCLUSIVE TOOL +4. Browser skill is required for web validation 5. A feature isn't done until YOU say it's done **Philosophy:** "Tests passing ≠ Feature working. VALIDATE IT." diff --git a/.opencode/skills/Telos/Workflows/Update.md b/.opencode/skills/Telos/Workflows/Update.md index 903bf495..148cacf0 100755 --- a/.opencode/skills/Telos/Workflows/Update.md +++ b/.opencode/skills/Telos/Workflows/Update.md @@ -105,7 +105,7 @@ This is the main command you'll use. It takes three parameters: !`head -50 ~/.opencode/PAI/USER/TELOS/updates.md` ## View Specific TELOS File -!`FILE="$1"; cat ~/.opencode/PAI/USER/TELOS/"$FILE"` +!`FILE="$1"; VALID_FILES="BELIEFS.md BOOKS.md CHALLENGES.md FRAMES.md GOALS.md LESSONS.md MISSION.md MODELS.md MOVIES.md NARRATIVES.md PREDICTIONS.md PROBLEMS.md PROJECTS.md STRATEGIES.md TELOS.md TRAUMAS.md WISDOM.md WRONG.md updates.md"; case " $VALID_FILES " in *" $FILE "*) ;; *) echo "❌ Invalid file: $FILE"; exit 1 ;; esac; [[ "$FILE" == *"/"* || "$FILE" == *".."* ]] && { echo "❌ Invalid file path"; exit 1; }; cat ~/.opencode/PAI/USER/TELOS/"$FILE"` # PROCESSING INSTRUCTIONS @@ -288,6 +288,6 @@ The TypeScript implementation handles: The script is at: `~/.opencode/commands/update-telos.ts` -All backups are stored in: `~/.opencode/PAI/USER/TELOS/Backups/` +All backups are stored in: `~/.opencode/PAI/USER/TELOS/backups/` All changes are logged in: `~/.opencode/PAI/USER/TELOS/updates.md` diff --git a/.opencode/skills/Utilities/CreateCLI/SKILL.md b/.opencode/skills/Utilities/CreateCLI/SKILL.md index fc68f708..fcff7f1e 100755 --- a/.opencode/skills/Utilities/CreateCLI/SKILL.md +++ b/.opencode/skills/Utilities/CreateCLI/SKILL.md @@ -6,9 +6,9 @@ description: "Generate TypeScript CLIs. USE WHEN create CLI, build CLI, command- ## Customization **Before executing, check for user customizations at:** -`~/.opencode/PAI/USER/SKILLCUSTOMIZATIONS/CreateCLI/` +`${OPENCODE_DIR:-~/.opencode}/PAI/USER/SKILLCUSTOMIZATIONS/CreateCLI/` -If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. +If this directory exists, load and apply any PREFERENCES.md, configurations, or resources found there. These override default behavior. If the directory does not exist, proceed with skill defaults. If `OPENCODE_DIR` is customized, use that value for path resolution. # CreateCLI @@ -19,6 +19,53 @@ Generate production-ready TypeScript CLIs with comprehensive documentation, type --- +## MANDATORY + +### USE WHEN + +Activate when you see these patterns: + +#### Direct Requests +- "Create a CLI for [API/service/tool]" +- "Build a command-line interface for X" +- "Make a CLI that does Y" +- "Generate a TypeScript CLI" +- "I need a CLI tool for Z" + +#### Context Clues +- User describes repetitive API calls → Suggest CLI +- User mentions "I keep typing this command" → Suggest CLI wrapper +- User has bash script doing complex work → Suggest TypeScript CLI replacement +- User working with API that lacks official CLI → Suggest creating one + +#### Examples +- ✅ "Create a CLI for the GitHub API" +- ✅ "Build a command-line tool to process CSV files" +- ✅ "Make a CLI for my database migrations" +- ✅ "Generate a CLI that wraps this API" +- ✅ "I need a tool like llcli but for Notion API" + +### Core Capabilities Summary + +- Three-tier CLI generation strategy (Tier 1 default, Tier 2 escalation, Tier 3 reference) +- Production-ready output with strict TypeScript and deterministic behavior +- Workflow routing for create/add/upgrade operations +- Built-in docs + setup generation for immediate usability + +### Technology Stack Alignment + +- Runtime: Bun +- Language: TypeScript +- Package manager: Bun +- Output style: deterministic, composable CLI behavior + +### Quality Gates + +- Compilation gate (TypeScript strict mode, no unresolved type errors) +- Functionality gate (commands execute with correct exit code behavior) +- Documentation gate (README + QUICKSTART + help text) +- Integration gate (PAI CLI-first architecture alignment) + ## Voice Notification **When executing a workflow, do BOTH:** @@ -52,32 +99,6 @@ Running the **WorkflowName** workflow from the **CreateCLI** skill... --- -## 🚀 WHEN TO ACTIVATE THIS SKILL - -Activate when you see these patterns: - -### Direct Requests -- "Create a CLI for [API/service/tool]" -- "Build a command-line interface for X" -- "Make a CLI that does Y" -- "Generate a TypeScript CLI" -- "I need a CLI tool for Z" - -### Context Clues -- User describes repetitive API calls → Suggest CLI -- User mentions "I keep typing this command" → Suggest CLI wrapper -- User has bash script doing complex work → Suggest TypeScript CLI replacement -- User working with API that lacks official CLI → Suggest creating one - -### Examples -- ✅ "Create a CLI for the GitHub API" -- ✅ "Build a command-line tool to process CSV files" -- ✅ "Make a CLI for my database migrations" -- ✅ "Generate a CLI that wraps this API" -- ✅ "I need a tool like llcli but for Notion API" - ---- - ## 💡 CORE CAPABILITIES ### Three-Tier Template System @@ -207,6 +228,12 @@ Every generated CLI follows: --- +## OPTIONAL + +- Example scenarios and generated directory structures for common requests +- Extended context references (framework comparisons, patterns, testing, distribution) +- Template/resource references for advanced customization + ## 📖 EXAMPLES ### Example 1: API Client CLI (Tier 1) diff --git a/.opencode/skills/Utilities/PAIUpgrade/Tools/Anthropic.ts b/.opencode/skills/Utilities/PAIUpgrade/Tools/Anthropic.ts index 1379e228..e5e65959 100755 --- a/.opencode/skills/Utilities/PAIUpgrade/Tools/Anthropic.ts +++ b/.opencode/skills/Utilities/PAIUpgrade/Tools/Anthropic.ts @@ -79,7 +79,7 @@ interface State { // Config const HOME = homedir(); -const SKILL_DIR = join(HOME, '.opencode', 'skills', 'PAIUpgrade'); +const SKILL_DIR = join(HOME, '.opencode', 'skills', 'Utilities', 'PAIUpgrade'); const STATE_DIR = join(SKILL_DIR, 'State'); const STATE_FILE = join(STATE_DIR, 'last-check.json'); const SOURCES_FILE = join(SKILL_DIR, 'sources.json'); diff --git a/.opencode/skills/Utilities/System/Workflows/PrivacyCheck.md b/.opencode/skills/Utilities/System/Workflows/PrivacyCheck.md index c845b860..1b6c69e2 100644 --- a/.opencode/skills/Utilities/System/Workflows/PrivacyCheck.md +++ b/.opencode/skills/Utilities/System/Workflows/PrivacyCheck.md @@ -148,8 +148,8 @@ function validateUserReference(file: string, match: string): Issue | null { return null; } - // Allow PAI skill (it's private context loader) - if (file.includes("PAI/")) { + // Allow canonical PAI directories only (boundary-aware) + if (file.startsWith(".opencode/PAI/") || file.startsWith("PAI/")) { return null; } From fd7bfef5dd79b99ef07ff317f0379d39caebdaa1 Mon Sep 17 00:00:00 2001 From: Steffen Zellmer <151627820+Steffen025@users.noreply.github.com> Date: Sat, 28 Mar 2026 16:13:17 -0400 Subject: [PATCH 4/4] fix(review): recurse hook counting and ensure state dir exists --- .opencode/PAI/Tools/BannerRetro.ts | 19 ++++++++++++++----- .../Utilities/PAIUpgrade/Tools/Anthropic.ts | 5 ++++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/.opencode/PAI/Tools/BannerRetro.ts b/.opencode/PAI/Tools/BannerRetro.ts index dd9610ed..04cea215 100755 --- a/.opencode/PAI/Tools/BannerRetro.ts +++ b/.opencode/PAI/Tools/BannerRetro.ts @@ -356,11 +356,20 @@ function countHooks(): number { if (!existsSync(targetDir)) return 0; let count = 0; - try { - for (const entry of readdirSync(targetDir, { withFileTypes: true })) { - if (entry.isFile() && entry.name.endsWith(".ts")) count++; - } - } catch {} + const countRecursive = (dir: string) => { + try { + for (const entry of readdirSync(dir, { withFileTypes: true })) { + const fullPath = join(dir, entry.name); + if (entry.isDirectory()) { + countRecursive(fullPath); + } else if (entry.isFile() && entry.name.endsWith(".ts")) { + count++; + } + } + } catch {} + }; + + countRecursive(targetDir); return count; } diff --git a/.opencode/skills/Utilities/PAIUpgrade/Tools/Anthropic.ts b/.opencode/skills/Utilities/PAIUpgrade/Tools/Anthropic.ts index e5e65959..2118e819 100755 --- a/.opencode/skills/Utilities/PAIUpgrade/Tools/Anthropic.ts +++ b/.opencode/skills/Utilities/PAIUpgrade/Tools/Anthropic.ts @@ -24,7 +24,7 @@ * - Links to all changes */ -import { readFileSync, writeFileSync, existsSync } from 'fs'; +import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs'; import { createHash } from 'crypto'; import { join } from 'path'; import { homedir } from 'os'; @@ -127,6 +127,9 @@ function loadState(): State { function saveState(state: State): void { try { + if (!existsSync(STATE_DIR)) { + mkdirSync(STATE_DIR, { recursive: true }); + } writeFileSync(STATE_FILE, JSON.stringify(state, null, 2), 'utf-8'); } catch (error) { console.error('❌ Failed to save state:', error);