diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index cd90271c3..b0ef25452 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -145,8 +145,8 @@ jobs:
runs-on: ubuntu-latest
strategy:
fail-fast: false
- # 9-cell matrix: 4 marketplace (claude/cursor/copilot/codex) + 5 flat
- # (+opencode, which is flat-only). Mirrors the CLI golden snapshot matrix.
+ # 10-cell matrix: 4 marketplace (claude/cursor/copilot/codex) + 6 flat
+ # (+opencode and kilo, which are flat-only). Mirrors the CLI golden snapshot matrix.
matrix:
include:
- { tool: claude, mode: marketplace, flag: "" }
@@ -158,6 +158,7 @@ jobs:
- { tool: copilot, mode: flat, flag: "--flat" }
- { tool: codex, mode: flat, flag: "--flat" }
- { tool: opencode, mode: flat, flag: "--flat" }
+ - { tool: kilo, mode: flat, flag: "--flat" }
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
diff --git a/README.md b/README.md
index b286b4623..4c3111741 100644
--- a/README.md
+++ b/README.md
@@ -37,7 +37,7 @@ Why not just write your own commands? → [FAQ](docs/FAQ.md#-why-aidd-instead-of
## ✅ Prerequisites
-- **An AI coding tool** — Claude Code (native), or Cursor / Copilot / Codex / OpenCode (see [Compatibility](#-compatibility)).
+- **An AI coding tool** — Claude Code (native), or Cursor / Copilot / Codex / OpenCode / Kilo Code (see [Compatibility](#-compatibility)).
- **[Node](https://nodejs.org)** on your `PATH` — for the plugin that ships hooks ([what they do](docs/ARCHITECTURE.md#-bundled-hooks)).
## 🔌 Compatibility
@@ -49,6 +49,7 @@ Why not just write your own commands? → [FAQ](docs/FAQ.md#-why-aidd-instead-of
| **GitHub Copilot** | ✅ Supported | Marketplace · Flat |
| **Codex** | ✅ Supported | Marketplace · Flat |
| **OpenCode** | ✅ Supported | Flat |
+| **Kilo Code** | ✅ Supported | Flat |
| **Gemini · Mistral** | 🚧 In progress | — |
**Marketplace** = installed and updated through your tool's plugin manager. **Flat** = files copied directly into your project, no plugin manager involved. Install steps per tool → [Other tools](#other-tools).
@@ -176,6 +177,16 @@ codex plugin add aidd-context@aidd-framework # per plugin
+
+Kilo Code — Flat only
+
+1. Unzip the `kilo-flat` archive, then copy its contents into your project root → `.kilo/` and `kilo.json`.
+2. Start a new Kilo session, or run `/reload` in an existing session.
+
+[Docs](https://kilo.ai/docs/customize/skills)
+
+
+
## 🚀 Quick start
Three ways in — pick one:
diff --git a/cli/README.md b/cli/README.md
index b6b221937..aa199e096 100644
--- a/cli/README.md
+++ b/cli/README.md
@@ -2,7 +2,7 @@
The **AIDD CLI** (`@ai-driven-dev/cli`) installs AI tool runtime configs, IDE integrations, and plugins from the [AIDD marketplace](https://github.com/ai-driven-dev/framework) across AI coding assistants. Runtime configs are bundled in the CLI binary; memory and context files are provided by the `aidd-context` plugin, not the binary. Plugins are fetched from the marketplace on demand. Every installed file is hash-tracked in a manifest for drift detection.
-**Supported tools:** Claude Code · Cursor · GitHub Copilot · OpenCode · Codex · VS Code (IDE integration)
+**Supported tools:** Claude Code · Cursor · GitHub Copilot · OpenCode · Kilo Code · Codex · VS Code (IDE integration)
---
@@ -405,6 +405,7 @@ Marketplace registration and plugin enable state are written to per-tool setting
| GitHub Copilot | `.github/copilot/settings.json` |
| Codex | `.codex/config.json` |
| OpenCode | `opencode.json` (project root) |
+| Kilo Code | `kilo.json` (project root) |
> **GitHub Copilot — workspace recommendations only.** Per [VS Code docs](https://code.visualstudio.com/docs/copilot/customization/agent-plugins), `.github/copilot/settings.json` registers marketplaces as **team recommendations**, not auto-activated. On first chat in the workspace VS Code shows a notification — the user must accept it (or filter Extensions by `@agentPlugins @recommended` and enable manually) before plugins load. To skip the per-project click, add the marketplace to the user-level setting `chat.plugins.marketplaces` (application-scoped, not writable from workspace). See [End-to-end: distribute a framework to Copilot](#end-to-end-distribute-a-framework-to-copilot-marketplace) for the full flow.
@@ -423,7 +424,7 @@ aidd framework build \
| Flag | Required | Description |
|---|---|---|
| `--source` | yes | Path to a framework root with `plugins//.claude-plugin/plugin.json` entries |
-| `--target` | yes | `claude`, `cursor`, `copilot`, `codex`, or `opencode` |
+| `--target` | yes | `claude`, `cursor`, `copilot`, `codex`, `opencode`, or `kilo` |
| `--out` | yes | Output directory. Marketplace mode: dist root (auto-wiped + recreated). Flat mode: the project root to materialize into |
| `--flat` | no | Materialize directly into a project workspace, bypassing the marketplace layer |
| `--force` | no | Overwrite existing files at canonical paths. **Flat mode only** (rejected without `--flat`) |
@@ -435,7 +436,7 @@ aidd framework build \
#### Per-tool / per-mode matrix
-`opencode` is **flat-only** (no native marketplace). The other four support both modes.
+`opencode` and `kilo` are **flat-only** (no native marketplace). The other four support both modes.
| Target | Marketplace layout (`/`) | Plugin-root token | Flat layout (`/`) |
|---|---|---|---|
@@ -444,6 +445,7 @@ aidd framework build \
| `copilot` | `.plugin/marketplace.json` · `plugins//.plugin/plugin.json` (OpenPlugin spec) · `agents/*.md` | `${PLUGIN_ROOT}` | `.github/` (+ `.vscode/`) |
| `codex` | `.claude-plugin/marketplace.json` · `plugins//.codex-plugin/plugin.json` · `codex-agents/*.toml` | `${PLUGIN_ROOT}` | `.codex/` |
| `opencode` | — (flat-only) | — | `.opencode/` (+ `opencode.json` for MCP) |
+| `kilo` | — (flat-only) | — | `.kilo/` (+ `kilo.json` for MCP) |
Copilot uses the [OpenPlugin spec](https://github.com/vercel/open-plugin-spec) (`.plugin/plugin.json`, `${PLUGIN_ROOT}`) — the only layout where Copilot's editor + CLI resolve the plugin-root token at runtime. Codex requires the manifest `skills` field as a **string** (`"./skills"`), and project subagents (`.codex/agents/*.toml`) load only when the project is **trusted**.
@@ -476,7 +478,7 @@ To skip the per-project notification, add the dist path to the user-level `chat.
The CLI cannot write this setting programmatically (VS Code enforces application scope on it).
-#### Flat materialization (e.g. opencode)
+#### Flat materialization (e.g. OpenCode or Kilo Code)
```bash
# Materialize the framework straight into a project workspace
@@ -487,6 +489,8 @@ aidd framework build --source ./framework --target opencode --out ./my-project -
Flat mode writes directly under the project's tool directory — no `aidd marketplace add` / `aidd plugin install` step. opencode hooks are skipped (its runtime is JS modules, not declarative `hooks.json`).
+For Kilo Code, replace `opencode` with `kilo`; the build writes `.kilo/` and `kilo.json`.
+
#### Build every target for a release
```bash
@@ -494,6 +498,7 @@ for t in claude cursor copilot codex; do
aidd framework build --source ./framework --target "$t" --out "./dist/aidd-framework-$t"
done
aidd framework build --source ./framework --target opencode --out ./dist/aidd-framework-opencode-flat --flat
+aidd framework build --source ./framework --target kilo --out ./dist/aidd-framework-kilo-flat --flat
```
### Manifest schema upgrades
diff --git a/cli/assets/configs/kilo/kilo.json b/cli/assets/configs/kilo/kilo.json
new file mode 100644
index 000000000..9f2bb73a0
--- /dev/null
+++ b/cli/assets/configs/kilo/kilo.json
@@ -0,0 +1,4 @@
+{
+ "$schema": "https://app.kilo.ai/config.json",
+ "instructions": [".kilo/rules/**/*.md"]
+}
diff --git a/cli/package.json b/cli/package.json
index 579d5d9ec..fc88ec520 100644
--- a/cli/package.json
+++ b/cli/package.json
@@ -11,6 +11,7 @@
"github-copilot",
"codex",
"opencode",
+ "kilo-code",
"developer-tools",
"ai-coding-assistant"
],
diff --git a/cli/src/application/commands/ai.ts b/cli/src/application/commands/ai.ts
index bc29bb513..66a64ce95 100644
--- a/cli/src/application/commands/ai.ts
+++ b/cli/src/application/commands/ai.ts
@@ -19,7 +19,7 @@ function assertAiToolId(toolId: string): asserts toolId is AiToolId {
export function registerAiCommand(program: Command): void {
const ai = program
.command("ai")
- .description("Manage AI tools (claude, cursor, copilot, codex, opencode)");
+ .description("Manage AI tools (claude, cursor, copilot, codex, opencode, kilo)");
ai.action(async () => {
if (!process.stdout.isTTY) {
diff --git a/cli/src/application/commands/framework.ts b/cli/src/application/commands/framework.ts
index 9c0eba7a0..41bea54c0 100644
--- a/cli/src/application/commands/framework.ts
+++ b/cli/src/application/commands/framework.ts
@@ -20,7 +20,10 @@ export function registerFrameworkCommand(program: Command): void {
"Build a Claude-format framework into a target-native plugin marketplace tree or project workspace"
)
.requiredOption("--source ", "Path to the source framework directory")
- .requiredOption("--target ", "Build target (claude, cursor, copilot, codex, opencode)")
+ .requiredOption(
+ "--target ",
+ "Build target (claude, cursor, copilot, codex, opencode, kilo)"
+ )
.requiredOption("--out ", "Output directory (marketplace dist or project root)")
.option("--flat", "Materialize directly into project workspace, bypass marketplace")
.option("--force", "Overwrite existing files at canonical paths (flat mode only)")
diff --git a/cli/src/application/use-cases/framework/strategies/tool-contracts.ts b/cli/src/application/use-cases/framework/strategies/tool-contracts.ts
index dfbc49ddf..ca7a86587 100644
--- a/cli/src/application/use-cases/framework/strategies/tool-contracts.ts
+++ b/cli/src/application/use-cases/framework/strategies/tool-contracts.ts
@@ -818,3 +818,78 @@ export function buildOpencodeFlatContract(): ToolBuildContract {
},
};
}
+
+// ── Kilo flat contract ────────────────────────────────────────────────────────
+
+function kiloFlatAgentPath(plugin: string, rel: string): string {
+ return genericFlatAgentPath(".kilo/agents/", plugin, rel.replace(/^agents\//, ""), ".md");
+}
+
+function kiloFlatSkillPath(plugin: string, rel: string): string {
+ return genericFlatSkillPath(".kilo/skills/", plugin, rel.replace(/^skills\//, ""));
+}
+
+function kiloFlatResolveTarget(plugin: string, rel: string): string {
+ if (rel.startsWith("agents/")) return kiloFlatAgentPath(plugin, rel);
+ if (rel.startsWith("skills/")) return kiloFlatSkillPath(plugin, rel);
+ return rel;
+}
+
+function transformKiloFlatAgent(content: string, plugin: string, outName: string): string {
+ const { frontmatter, body } = parseFrontmatter(content);
+ const flatRelPath = kiloFlatAgentPath(plugin, `agents/${outName}`);
+ const rewrittenBody = rewriteRelativeLinks(body, {
+ currentFilePluginRelative: flatRelPath,
+ resolveTargetPath: (rel) => kiloFlatResolveTarget(plugin, rel),
+ });
+ const prefixedName = `${plugin}-${outName.replace(/\.md$/, "")}`;
+ return serializeFrontmatter(
+ { ...frontmatter, name: prefixedName, mode: "subagent" },
+ rewrittenBody
+ );
+}
+
+async function resolveKiloJsonPath(outDir: string, fs: FsType): Promise {
+ const jsoncExists = await fs.fileExists(`${outDir}/kilo.jsonc`);
+ if (jsoncExists) return `${outDir}/kilo.jsonc`;
+ return `${outDir}/kilo.json`;
+}
+
+export function buildKiloFlatContract(): ToolBuildContract {
+ return {
+ manifestDir: null,
+ marketplaceRelative: null,
+ manifestFileRelative: null,
+ synthesizeManifest: null,
+ manifestSchemaName: null,
+ artifacts: {
+ skills: {
+ supported: true,
+ source: { kind: "fullTree", srcDir: "skills" },
+ path: kiloFlatSkillPath,
+ rewriteSkillName: true,
+ },
+ agents: {
+ supported: true,
+ source: { kind: "filteredTree", srcDir: "agents", inputExt: ".md" },
+ path: kiloFlatAgentPath,
+ transform: transformKiloFlatAgent,
+ },
+ mcp: { supported: false },
+ hooks: { supported: false },
+ rules: { supported: false },
+ commands: { supported: false },
+ },
+ buildMarketplaceCatalog: null,
+ buildMarketplaceEntry: null,
+ emitConfigArtifact: async (builtPlugins, outDir, sourceDir, fs, _validator, assetProvider) => {
+ const configPath = await resolveKiloJsonPath(outDir, fs);
+ const existing = (await fs.fileExists(configPath)) ? await fs.readFile(configPath) : null;
+ const incoming = await collectOpencodeMcp(builtPlugins, sourceDir, fs);
+ const baseAsset = assetProvider.loadConfigAsset("kilo", "kilo.json");
+ const base = typeof baseAsset === "string" ? baseAsset : JSON.stringify(baseAsset);
+ await fs.writeFile(configPath, buildOpencodeFlatConfig(base, existing, incoming));
+ return 1;
+ },
+ };
+}
diff --git a/cli/src/application/use-cases/install/install-runtime-config-use-case.ts b/cli/src/application/use-cases/install/install-runtime-config-use-case.ts
index a4739db15..4b5f15328 100644
--- a/cli/src/application/use-cases/install/install-runtime-config-use-case.ts
+++ b/cli/src/application/use-cases/install/install-runtime-config-use-case.ts
@@ -1,5 +1,6 @@
import { join } from "node:path";
import { SettingsCapability } from "../../../domain/capabilities/settings-capability.js";
+import { KiloDualConfigError } from "../../../domain/errors.js";
import { InstallationFile } from "../../../domain/models/file.js";
import type { Manifest } from "../../../domain/models/manifest.js";
import { extractMergeEntries, type MergeFileEntry } from "../../../domain/models/merge.js";
@@ -77,7 +78,13 @@ export class InstallRuntimeConfigUseCase {
const toolConfig = getToolConfig(options.toolId);
if (!isAiTool(toolConfig) || !toolConfig.configOutputPaths) return [];
const files: InstallationFile[] = [];
- for (const [fileName, outputPath] of Object.entries(toolConfig.configOutputPaths)) {
+ for (const [fileName, configuredOutputPath] of Object.entries(toolConfig.configOutputPaths)) {
+ const outputPath = await this.resolveConfigOutputPath(
+ options.toolId,
+ fileName,
+ configuredOutputPath,
+ options.projectRoot
+ );
const asset = this.assets.loadConfigAsset(options.toolId, fileName);
const content = typeof asset === "string" ? asset : JSON.stringify(asset, null, 2);
if (await this.isUserOwned(outputPath, options)) continue;
@@ -88,6 +95,21 @@ export class InstallRuntimeConfigUseCase {
return files;
}
+ private async resolveConfigOutputPath(
+ toolId: AiToolId,
+ fileName: string,
+ configuredOutputPath: string,
+ projectRoot: string
+ ): Promise {
+ if (toolId !== "kilo" || fileName !== "kilo.json") return configuredOutputPath;
+ const jsonPath = join(projectRoot, "kilo.json");
+ const jsoncPath = join(projectRoot, "kilo.jsonc");
+ const jsonExists = await this.fs.fileExists(jsonPath);
+ const jsoncExists = await this.fs.fileExists(jsoncPath);
+ if (jsonExists && jsoncExists) throw new KiloDualConfigError();
+ return jsoncExists ? "kilo.jsonc" : configuredOutputPath;
+ }
+
private buildStaticSettingsFiles(options: InstallRuntimeConfigOptions): InstallationFile[] {
const toolConfig = getToolConfig(options.toolId);
if (!isAiTool(toolConfig)) return [];
diff --git a/cli/src/application/use-cases/plugin/translator/built-tree-materialization-translator.ts b/cli/src/application/use-cases/plugin/translator/built-tree-materialization-translator.ts
index 0c4fadfad..f30339c56 100644
--- a/cli/src/application/use-cases/plugin/translator/built-tree-materialization-translator.ts
+++ b/cli/src/application/use-cases/plugin/translator/built-tree-materialization-translator.ts
@@ -1,17 +1,27 @@
import { join } from "node:path";
+import type { McpCapability } from "../../../../domain/capabilities/mcp-capability.js";
+import { mergeOpencodeMcp } from "../../../../domain/formats/opencode-mcp-merge.js";
import { InstallationFile } from "../../../../domain/models/file.js";
import type { Manifest } from "../../../../domain/models/manifest.js";
import { Plugin } from "../../../../domain/models/plugin.js";
import type { PluginDistribution } from "../../../../domain/models/plugin-distribution.js";
import type { PluginSource } from "../../../../domain/models/plugin-source.js";
-import type { ReadonlySkipList } from "../../../../domain/models/plugin-translation-skip.js";
+import type {
+ PluginTranslationSkip,
+ ReadonlySkipList,
+} from "../../../../domain/models/plugin-translation-skip.js";
import type { AiToolId } from "../../../../domain/models/tool-ids.js";
import type { FileReader } from "../../../../domain/ports/file-reader.js";
import type { FileWriter } from "../../../../domain/ports/file-writer.js";
import type { Hasher } from "../../../../domain/ports/hasher.js";
import type { MarketplaceRegistry } from "../../../../domain/ports/marketplace-registry.js";
+import { getToolConfig, isAiTool } from "../../../../domain/tools/registry.js";
import type { EnsureBuiltMarketplaceUseCase } from "../../shared/ensure-built-marketplace-use-case.js";
-import { isPluginFileAtDesiredState, resolvePluginBaseDir } from "../plugin-helpers.js";
+import {
+ isPluginFileAtDesiredState,
+ qualifiesForOpencodeMcpMerge,
+ resolvePluginBaseDir,
+} from "../plugin-helpers.js";
import { ModeBFlatMaterializationTranslator } from "./mode-b-flat-materialization-translator.js";
import type { PluginTranslator } from "./plugin-translator.js";
@@ -59,7 +69,7 @@ export class BuiltTreeMaterializationTranslator implements PluginTranslator {
previousMcpEntries
);
}
- const mode = toolId === "opencode" ? "flat" : "marketplace";
+ const mode = toolId === "opencode" || toolId === "kilo" ? "flat" : "marketplace";
const { builtDir } = await this.ensureBuilt.execute({
projectRoot,
marketplace: resolved,
@@ -68,7 +78,7 @@ export class BuiltTreeMaterializationTranslator implements PluginTranslator {
});
const files =
mode === "flat"
- ? await this.readFlatFiles(builtDir, dist.manifest.name)
+ ? await this.readFlatFiles(builtDir, dist.manifest.name, toolId)
: await this.readBuiltFiles(
join(builtDir, "plugins", dist.manifest.name),
dist.manifest.name
@@ -76,11 +86,17 @@ export class BuiltTreeMaterializationTranslator implements PluginTranslator {
const baseDir =
mode === "flat" ? projectRoot : resolvePluginBaseDir(toolId, projectRoot, this.homedir);
const written = await this.writeChangedFiles(files, baseDir);
+ const { entries: mcpEntries, skipped: mcpSkipped } = await this.mergeFlatMcp(
+ dist,
+ toolId,
+ projectRoot,
+ previousMcpEntries
+ );
manifest.addPlugin(
toolId,
- Plugin.fromDistribution(dist, source, files, new Map(), marketplace)
+ Plugin.fromDistributionWithMcp(dist, source, files, mcpEntries, new Map(), marketplace)
);
- return { skipped: [], written };
+ return { skipped: mcpSkipped, written };
}
// Verbatim-copies the built subtree, but skips files already matching the built
@@ -117,12 +133,16 @@ export class BuiltTreeMaterializationTranslator implements PluginTranslator {
// Flat build emits the whole marketplace into one workspace, namespaced by
// .opencode//-/...; install copies only this plugin's files.
- private async readFlatFiles(builtDir: string, name: string): Promise {
+ private async readFlatFiles(
+ builtDir: string,
+ name: string,
+ toolId: AiToolId
+ ): Promise {
const absPaths = await this.fs.listFilesRecursive(builtDir);
const files: InstallationFile[] = [];
for (const abs of absPaths) {
const rel = abs.slice(builtDir.length + 1);
- if (!this.belongsToPlugin(rel, name)) continue;
+ if (!this.belongsToPlugin(rel, name, toolId)) continue;
const content = await this.fs.readFile(abs);
files.push(
new InstallationFile({ relativePath: rel, content, hash: this.hasher.hash(content) })
@@ -131,11 +151,57 @@ export class BuiltTreeMaterializationTranslator implements PluginTranslator {
return files;
}
- private belongsToPlugin(rel: string, name: string): boolean {
+ private belongsToPlugin(rel: string, name: string, toolId: AiToolId): boolean {
const segments = rel.split("/");
- return (
- segments[0] === ".opencode" && segments.length >= 3 && segments[2].startsWith(`${name}-`)
+ const root = toolId === "kilo" ? ".kilo" : ".opencode";
+ return segments[0] === root && segments.length >= 3 && segments[2].startsWith(`${name}-`);
+ }
+
+ private async mergeFlatMcp(
+ dist: PluginDistribution,
+ toolId: AiToolId,
+ projectRoot: string,
+ previousEntries: ReadonlyMap
+ ): Promise<{ entries: ReadonlyMap; skipped: ReadonlySkipList }> {
+ const toolConfig = getToolConfig(toolId);
+ if (!isAiTool(toolConfig) || dist.components.mcp.length === 0) {
+ return { entries: new Map(), skipped: [] };
+ }
+ const caps = toolConfig.capabilities as Record;
+ if (!qualifiesForOpencodeMcpMerge(caps)) return { entries: new Map(), skipped: [] };
+ const mcpCap = caps.mcp as McpCapability;
+ const outputPath = join(projectRoot, await mcpCap.resolveOutput(projectRoot, this.fs));
+ const existing = await this.readExistingJson(outputPath);
+ const transformed = mcpCap.transform(dist.components.mcp[0].content);
+ const { mergedContent, contributedEntries, collisions } = mergeOpencodeMcp(
+ existing,
+ transformed,
+ previousEntries,
+ this.hasher
);
+ if (contributedEntries.size > 0 || previousEntries.size > 0) {
+ await this.fs.writeFile(outputPath, mergedContent);
+ }
+ return {
+ entries: contributedEntries,
+ skipped: collisions.map(
+ (reason): PluginTranslationSkip => ({
+ pluginName: dist.manifest.name,
+ component: "mcp",
+ toolId,
+ reason,
+ })
+ ),
+ };
+ }
+
+ private async readExistingJson(path: string): Promise {
+ try {
+ return await this.fs.readFile(path);
+ } catch (err) {
+ if ((err as NodeJS.ErrnoException).code === "ENOENT") return null;
+ throw err;
+ }
}
private async findMarketplace(name: string, projectRoot: string) {
diff --git a/cli/src/domain/errors.ts b/cli/src/domain/errors.ts
index d84c9ffda..6c7b0d384 100644
--- a/cli/src/domain/errors.ts
+++ b/cli/src/domain/errors.ts
@@ -137,6 +137,13 @@ export class OpencodeDualConfigError extends Error {
}
}
+export class KiloDualConfigError extends Error {
+ constructor() {
+ super("Both kilo.json and kilo.jsonc exist. Remove one.");
+ this.name = "KiloDualConfigError";
+ }
+}
+
export class PackageManagerDetectionError extends Error {
constructor(commands: readonly string[]) {
super(`Could not detect package manager. Run manually:\n ${commands.join("\n ")}`);
diff --git a/cli/src/domain/formats/opencode-marketplace.ts b/cli/src/domain/formats/opencode-marketplace.ts
index 2f3071f40..250315cab 100644
--- a/cli/src/domain/formats/opencode-marketplace.ts
+++ b/cli/src/domain/formats/opencode-marketplace.ts
@@ -20,59 +20,83 @@
*/
import { ForeignSchemaValidationError } from "../errors.js";
-import type { NormalizedCatalog, NormalizedPlugin } from "../models/normalized-plugin.js";
+import type {
+ ForeignMarketplaceSource,
+ NormalizedCatalog,
+ NormalizedPlugin,
+} from "../models/normalized-plugin.js";
const SOURCE = "opencode";
export function parseOpencodeMarketplace(rawJson: string): NormalizedCatalog {
- const parsed = parseJson(rawJson);
- const plugins = extractPlugins(parsed);
- return { source: SOURCE, plugins };
+ return parseCompatibleMarketplace(rawJson, SOURCE, "opencode.json");
}
-function parseJson(rawJson: string): unknown {
+export function parseKiloMarketplace(rawJson: string): NormalizedCatalog {
+ return parseCompatibleMarketplace(rawJson, "kilo", "kilo.json");
+}
+
+function parseCompatibleMarketplace(
+ rawJson: string,
+ source: ForeignMarketplaceSource,
+ fileName: string
+): NormalizedCatalog {
+ const parsed = parseJson(rawJson, source, fileName);
+ const plugins = extractPlugins(parsed, source, fileName);
+ return { source, plugins };
+}
+
+function parseJson(rawJson: string, source: ForeignMarketplaceSource, fileName: string): unknown {
try {
return JSON.parse(rawJson);
} catch {
- throw new ForeignSchemaValidationError(SOURCE, "opencode.json is not valid JSON");
+ throw new ForeignSchemaValidationError(source, `${fileName} is not valid JSON`);
}
}
-function extractPlugins(parsed: unknown): readonly NormalizedPlugin[] {
+function extractPlugins(
+ parsed: unknown,
+ source: ForeignMarketplaceSource,
+ fileName: string
+): readonly NormalizedPlugin[] {
if (parsed === null || typeof parsed !== "object" || Array.isArray(parsed)) {
- throw new ForeignSchemaValidationError(SOURCE, "opencode.json must be a JSON object");
+ throw new ForeignSchemaValidationError(source, `${fileName} must be a JSON object`);
}
const obj = parsed as Record;
if (!("plugin" in obj) || obj.plugin === undefined) {
return [];
}
if (!Array.isArray(obj.plugin)) {
- throw new ForeignSchemaValidationError(SOURCE, '"plugin" must be an array');
+ throw new ForeignSchemaValidationError(source, '"plugin" must be an array');
}
- return obj.plugin.map((entry, i) => parseEntry(entry, i));
+ return obj.plugin.map((entry, i) => parseEntry(entry, i, source));
}
-function parseEntry(raw: unknown, index: number): NormalizedPlugin {
- const spec = extractSpec(raw, index);
+function parseEntry(
+ raw: unknown,
+ index: number,
+ source: ForeignMarketplaceSource
+): NormalizedPlugin {
+ const spec = extractSpec(raw, index, source);
if (typeof spec !== "string" || spec.length === 0) {
throw new ForeignSchemaValidationError(
- SOURCE,
+ source,
`plugin[${index}] specifier must be a non-empty string`
);
}
- return { name: spec, source: SOURCE };
+ return { name: spec, source };
}
-function extractSpec(raw: unknown, index: number): unknown {
+function extractSpec(raw: unknown, index: number, source: ForeignMarketplaceSource): unknown {
if (typeof raw === "string") return raw;
if (Array.isArray(raw)) {
if (raw.length === 0) {
- throw new ForeignSchemaValidationError(SOURCE, `plugin[${index}] tuple must not be empty`);
+ throw new ForeignSchemaValidationError(source, `plugin[${index}] tuple must not be empty`);
}
return raw[0];
}
throw new ForeignSchemaValidationError(
- SOURCE,
+ source,
`plugin[${index}] must be a string or [string, options] tuple`
);
}
diff --git a/cli/src/domain/models/framework-build.ts b/cli/src/domain/models/framework-build.ts
index 0d06ab2b0..85b4aa0d6 100644
--- a/cli/src/domain/models/framework-build.ts
+++ b/cli/src/domain/models/framework-build.ts
@@ -1,7 +1,7 @@
import { COPILOT_VSCODE_MCP_PATH, COPILOT_WORKSPACE_DIR } from "../tools/ai/copilot-paths.js";
/** Build target: supported tool identifiers for framework build. */
-export type FrameworkBuildTarget = "claude" | "cursor" | "copilot" | "codex" | "opencode";
+export type FrameworkBuildTarget = "claude" | "cursor" | "copilot" | "codex" | "opencode" | "kilo";
/** Output layout discriminant: marketplace dist (Mode A) vs direct workspace inject (Mode B flat). */
export type FrameworkBuildMode = "marketplace" | "flat";
@@ -26,6 +26,7 @@ export const FRAMEWORK_BUILD_TARGET_MODES: readonly FrameworkBuildTargetMode[] =
{ target: "codex", mode: "marketplace" },
{ target: "codex", mode: "flat" },
{ target: "opencode", mode: "flat" },
+ { target: "kilo", mode: "flat" },
];
/** Every target with at least one supported build mode, derived from FRAMEWORK_BUILD_TARGET_MODES. */
diff --git a/cli/src/domain/models/normalized-plugin.ts b/cli/src/domain/models/normalized-plugin.ts
index 9149be11d..25ed6f875 100644
--- a/cli/src/domain/models/normalized-plugin.ts
+++ b/cli/src/domain/models/normalized-plugin.ts
@@ -12,7 +12,7 @@
* NOT versioned — internal type only, no schema versioning.
*/
-export type ForeignMarketplaceSource = "cursor" | "copilot" | "codex" | "opencode";
+export type ForeignMarketplaceSource = "cursor" | "copilot" | "codex" | "opencode" | "kilo";
export interface NormalizedPlugin {
readonly name: string;
diff --git a/cli/src/domain/models/plugin-format.ts b/cli/src/domain/models/plugin-format.ts
index 77d8a569f..0b9cca9d4 100644
--- a/cli/src/domain/models/plugin-format.ts
+++ b/cli/src/domain/models/plugin-format.ts
@@ -1,4 +1,4 @@
-export type PluginFormat = "claude" | "cursor" | "codex" | "copilot" | "opencode";
+export type PluginFormat = "claude" | "cursor" | "codex" | "copilot" | "opencode" | "kilo";
export const PLUGIN_MANIFEST_PROBES: readonly { format: PluginFormat; relativePath: string }[] = [
{ format: "claude", relativePath: ".claude-plugin/plugin.json" },
@@ -15,4 +15,5 @@ export const MARKETPLACE_PROBES: readonly { format: PluginFormat; relativePath:
{ format: "codex", relativePath: ".agents/plugins/marketplace.json" },
{ format: "copilot", relativePath: ".github/plugin/plugin.json" },
{ format: "opencode", relativePath: "opencode.json" },
+ { format: "kilo", relativePath: "kilo.json" },
];
diff --git a/cli/src/domain/models/tool-ids.ts b/cli/src/domain/models/tool-ids.ts
index 050afa33c..555102fa8 100644
--- a/cli/src/domain/models/tool-ids.ts
+++ b/cli/src/domain/models/tool-ids.ts
@@ -1,6 +1,6 @@
import { UnknownAiToolIdError } from "../errors.js";
-export type AiToolId = "claude" | "cursor" | "copilot" | "opencode" | "codex";
+export type AiToolId = "claude" | "cursor" | "copilot" | "opencode" | "kilo" | "codex";
export type IdeToolId = "vscode";
export type ToolId = AiToolId | IdeToolId;
export type ToolCategory = "ai" | "ide";
@@ -10,6 +10,7 @@ export const AI_TOOL_IDS: readonly AiToolId[] = [
"cursor",
"copilot",
"opencode",
+ "kilo",
"codex",
];
export const IDE_TOOL_IDS: readonly IdeToolId[] = ["vscode"];
diff --git a/cli/src/domain/tools/ai/kilo.ts b/cli/src/domain/tools/ai/kilo.ts
new file mode 100644
index 000000000..28eb96d4e
--- /dev/null
+++ b/cli/src/domain/tools/ai/kilo.ts
@@ -0,0 +1,120 @@
+import { join } from "node:path";
+import { AgentsCapability } from "../../capabilities/agents-capability.js";
+import { CommandsCapability } from "../../capabilities/commands-capability.js";
+import { McpCapability } from "../../capabilities/mcp-capability.js";
+import { PluginsCapability } from "../../capabilities/plugins-capability.js";
+import { RulesCapability } from "../../capabilities/rules-capability.js";
+import { SkillsCapability } from "../../capabilities/skills-capability.js";
+import { KiloDualConfigError } from "../../errors.js";
+import {
+ buildAiddCommandFilePath,
+ convertCommandFrontmatterNoHint,
+ detectSectionKeyFromPrefixes,
+ reverseConvertCommandFrontmatterNoHint,
+ stripToolSuffix,
+} from "../../formats/command.js";
+import { baseReverseRewriteContent, baseRewriteContent } from "../../formats/placeholders.js";
+import { CONFIG_MCP } from "../../models/framework.js";
+import type {
+ AiTool,
+ HasAgents,
+ HasCommands,
+ HasMcp,
+ HasPlugins,
+ HasRules,
+ HasSkills,
+ UserFileSectionKey,
+} from "../contracts.js";
+import { registerTool } from "../registry.js";
+import { transformMcpToOpencode } from "./opencode.js";
+
+const DIRECTORY = ".kilo/";
+const TOOL_SUFFIX = ".kilo.md";
+
+export const kilo: AiTool = {
+ kind: "ai",
+ toolId: "kilo",
+ directory: DIRECTORY,
+ toolSuffix: TOOL_SUFFIX,
+ signalDir: ".kilo/commands",
+ configOutputPaths: { "kilo.json": "kilo.json" },
+
+ capabilities: {
+ agents: new AgentsCapability({
+ directory: DIRECTORY,
+ toolSuffix: TOOL_SUFFIX,
+ format: "markdown",
+ convertFrontmatter: (fm) => ({ description: fm.description, mode: "subagent" }),
+ reverseConvertFrontmatter: (fm) => ({ description: fm.description }),
+ }),
+ skills: new SkillsCapability({
+ directory: DIRECTORY,
+ toolSuffix: TOOL_SUFFIX,
+ buildInstallPath: (fileName) =>
+ `${DIRECTORY}skills/${stripToolSuffix(TOOL_SUFFIX, fileName)}`,
+ convertFrontmatter: (fm) => fm,
+ reverseConvertFrontmatter: (fm) => fm,
+ }),
+ commands: new CommandsCapability({
+ directory: DIRECTORY,
+ toolSuffix: TOOL_SUFFIX,
+ buildInstallPath: (fileName) => buildAiddCommandFilePath(DIRECTORY, fileName),
+ convertFrontmatter: (fm, relativeFileName) =>
+ convertCommandFrontmatterNoHint(fm, relativeFileName),
+ reverseConvertFrontmatter: (fm) => reverseConvertCommandFrontmatterNoHint(fm),
+ }),
+ rules: new RulesCapability({
+ directory: DIRECTORY,
+ toolSuffix: TOOL_SUFFIX,
+ buildInstallPath: (fileName) => `${DIRECTORY}rules/${stripToolSuffix(TOOL_SUFFIX, fileName)}`,
+ convertFrontmatter: (fm) => {
+ if (fm.alwaysApply === false && fm.description !== undefined) {
+ return { description: fm.description };
+ }
+ return {};
+ },
+ reverseConvertFrontmatter: () => ({}),
+ }),
+ mcp: new McpCapability({
+ outputPath: "kilo.json",
+ format: "json",
+ entrySection: "mcp",
+ mergeStrategy: "framework-prime",
+ transformContent: transformMcpToOpencode,
+ consumes: [CONFIG_MCP],
+ resolveOutputPath: async (projectRoot, fs) => {
+ const jsonExists = await fs.fileExists(join(projectRoot, "kilo.json"));
+ const jsoncExists = await fs.fileExists(join(projectRoot, "kilo.jsonc"));
+ if (jsonExists && jsoncExists) throw new KiloDualConfigError();
+ if (jsoncExists) return "kilo.jsonc";
+ return "kilo.json";
+ },
+ }),
+ plugins: new PluginsCapability({
+ mode: "flat",
+ flatNamespacePrefix: "aidd-",
+ }),
+ },
+
+ rewriteContent(content: string, docsDir: string): string {
+ return baseRewriteContent(content, DIRECTORY, docsDir).replace(
+ /(@?)\.kilo\/commands\/(\d+)[_-][^/]+\/([^\s]+)/g,
+ "$1.kilo/commands/aidd/$2/$3"
+ );
+ },
+
+ reverseRewriteContent(content: string, docsDir: string): string {
+ return baseReverseRewriteContent(content, DIRECTORY, docsDir);
+ },
+
+ detectUserFileSectionKey(relativePath: string): UserFileSectionKey | null {
+ return detectSectionKeyFromPrefixes(relativePath, [
+ [`${DIRECTORY}agents/`, "agents"],
+ [`${DIRECTORY}commands/aidd/`, "commands"],
+ [`${DIRECTORY}rules/`, "rules"],
+ [`${DIRECTORY}skills/`, "skills"],
+ ]);
+ },
+};
+
+registerTool(kilo);
diff --git a/cli/src/domain/tools/ai/opencode.ts b/cli/src/domain/tools/ai/opencode.ts
index d8b15f2db..f4d8d9879 100644
--- a/cli/src/domain/tools/ai/opencode.ts
+++ b/cli/src/domain/tools/ai/opencode.ts
@@ -36,7 +36,11 @@ const TOOL_SUFFIX = ".opencode.md";
type RawServer =
| { command: string; args?: string[]; env?: Record; disabled?: boolean }
- | { url: string; disabled?: boolean };
+ | {
+ url: string;
+ headers?: Record;
+ disabled?: boolean;
+ };
interface OpencodeMcpLocalServer {
type: "local";
@@ -49,6 +53,7 @@ interface OpencodeMcpRemoteServer {
type: "remote";
url: string;
enabled: boolean;
+ headers?: Record;
}
type OpencodeMcpServer = OpencodeMcpLocalServer | OpencodeMcpRemoteServer;
@@ -62,7 +67,9 @@ function convertRawServer(name: string, server: RawServer): OpencodeMcpServer {
return local;
}
if ("url" in server) {
- return { type: "remote", url: server.url, enabled };
+ const remote: OpencodeMcpRemoteServer = { type: "remote", url: server.url, enabled };
+ if (server.headers && Object.keys(server.headers).length > 0) remote.headers = server.headers;
+ return remote;
}
throw new InvalidMcpServerConfigError(name);
}
diff --git a/cli/src/infrastructure/adapters/plugin-catalog-repository-adapter.ts b/cli/src/infrastructure/adapters/plugin-catalog-repository-adapter.ts
index bf3690839..f7f0e4617 100644
--- a/cli/src/infrastructure/adapters/plugin-catalog-repository-adapter.ts
+++ b/cli/src/infrastructure/adapters/plugin-catalog-repository-adapter.ts
@@ -4,7 +4,10 @@ import { parseCodexMarketplace } from "../../domain/formats/codex-marketplace.js
import { parseCopilotMarketplace } from "../../domain/formats/copilot-marketplace.js";
import { parseCopilotMarketplaceCatalog } from "../../domain/formats/copilot-marketplace-catalog.js";
import { parseCursorMarketplace } from "../../domain/formats/cursor-marketplace.js";
-import { parseOpencodeMarketplace } from "../../domain/formats/opencode-marketplace.js";
+import {
+ parseKiloMarketplace,
+ parseOpencodeMarketplace,
+} from "../../domain/formats/opencode-marketplace.js";
import type { NormalizedPlugin } from "../../domain/models/normalized-plugin.js";
import { MARKETPLACE_CACHE_SUBDIR } from "../../domain/models/paths.js";
import { type PluginCatalog, parsePluginCatalog } from "../../domain/models/plugin-catalog.js";
@@ -42,6 +45,7 @@ export class PluginCatalogRepositoryAdapter implements PluginCatalogRepository {
if (probe.format === "codex") return this.readCodexCatalog(fullPath);
if (probe.format === "copilot") return this.readCopilotCatalog(fullPath);
if (probe.format === "opencode") return this.readOpencodeCatalog(fullPath);
+ if (probe.format === "kilo") return this.readKiloCatalog(fullPath);
}
return [];
}
@@ -103,6 +107,11 @@ export class PluginCatalogRepositoryAdapter implements PluginCatalogRepository {
return [...parseOpencodeMarketplace(raw).plugins];
}
+ private async readKiloCatalog(fullPath: string): Promise {
+ const raw = await this.fs.readFile(fullPath);
+ return [...parseKiloMarketplace(raw).plugins];
+ }
+
private resolveLocalPaths(catalog: PluginCatalog, frameworkPath: string): PluginCatalog {
const plugins = catalog.plugins.map((entry) => ({
...entry,
diff --git a/cli/src/infrastructure/assets/asset-loader.ts b/cli/src/infrastructure/assets/asset-loader.ts
index d3eb1d0ae..581f66da6 100644
--- a/cli/src/infrastructure/assets/asset-loader.ts
+++ b/cli/src/infrastructure/assets/asset-loader.ts
@@ -6,6 +6,7 @@ import copilotVscodeSettings from "../../../assets/configs/copilot/vscode-settin
type: "json",
};
import cursorSettings from "../../../assets/configs/cursor/settings.json" with { type: "json" };
+import kiloJson from "../../../assets/configs/kilo/kilo.json" with { type: "json" };
import opencodeJson from "../../../assets/configs/opencode/opencode.json" with { type: "json" };
import vscodeExtensions from "../../../assets/configs/vscode/extensions.json" with { type: "json" };
import vscodeKeybindings from "../../../assets/configs/vscode/keybindings.json" with {
@@ -35,6 +36,7 @@ const CONFIG_ASSETS: Readonly = {
d.logger
)
),
+ "kilo:flat": (deps, ctx) =>
+ buildFrameworkUseCase(
+ deps,
+ (d, av) =>
+ new FlatBuildStrategy(
+ d.fs,
+ av,
+ d.assetProvider,
+ buildKiloFlatContract(),
+ ctx.force,
+ ctx.outDir,
+ isDirectory,
+ d.logger
+ )
+ ),
};
export function createFrameworkBuildUseCase(
diff --git a/cli/tests/application/use-cases/install-runtime-config-use-case.unit.test.ts b/cli/tests/application/use-cases/install-runtime-config-use-case.unit.test.ts
index 5b7897e6e..797f8cc5e 100644
--- a/cli/tests/application/use-cases/install-runtime-config-use-case.unit.test.ts
+++ b/cli/tests/application/use-cases/install-runtime-config-use-case.unit.test.ts
@@ -116,6 +116,24 @@ describe("InstallRuntimeConfigUseCase", () => {
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining(".claude/settings.json"));
});
+ it("does not create kilo.json next to an existing kilo.jsonc", async () => {
+ const deps = await buildUnitDeps(PROJECT_ROOT);
+ await initProject(deps, PROJECT_ROOT);
+ await deps.fs.writeFile(join(PROJECT_ROOT, "kilo.jsonc"), '{ "model": "kilo/default" }');
+
+ const manifest = (await deps.manifestRepo.load()) ?? Manifest.create();
+ await buildUseCase(deps).execute({
+ toolId: "kilo",
+ projectRoot: PROJECT_ROOT,
+ manifest,
+ force: false,
+ version: "1.0.0",
+ });
+
+ expect(deps.fs.has(join(PROJECT_ROOT, "kilo.json"))).toBe(false);
+ expect(deps.fs.getFile(join(PROJECT_ROOT, "kilo.jsonc"))).toContain("kilo/default");
+ });
+
describe("copilot requiresTool gate", () => {
it("does not create .vscode/settings.json when vscode is not installed", async () => {
const deps = await buildUnitDeps(PROJECT_ROOT);
diff --git a/cli/tests/application/use-cases/plugin/translator/built-tree-opencode-materialization.integration.test.ts b/cli/tests/application/use-cases/plugin/translator/built-tree-opencode-materialization.integration.test.ts
index b2d01ae11..001058f79 100644
--- a/cli/tests/application/use-cases/plugin/translator/built-tree-opencode-materialization.integration.test.ts
+++ b/cli/tests/application/use-cases/plugin/translator/built-tree-opencode-materialization.integration.test.ts
@@ -1,4 +1,6 @@
import "../../../../../src/domain/tools/ai/opencode.js";
+import "../../../../../src/domain/tools/ai/kilo.js";
+import { join } from "node:path";
import { describe, expect, it } from "vitest";
import { BuiltTreeMaterializationTranslator } from "../../../../../src/application/use-cases/plugin/translator/built-tree-materialization-translator.js";
import { Manifest } from "../../../../../src/domain/models/manifest.js";
@@ -12,12 +14,19 @@ import { InMemoryMarketplaceRegistry } from "../../../../helpers/ports/in-memory
const PROJECT_ROOT = "/proj";
const BUILT = "/built/opencode";
-function dist(): PluginDistribution {
+function dist(mcpContent?: string): PluginDistribution {
return new PluginDistribution({
manifest: { name: "aidd-vcs", version: "1.0.0" },
format: "claude",
files: [],
- components: { commands: [], agents: [], rules: [], skills: [], hooks: [], mcp: [] },
+ components: {
+ commands: [],
+ agents: [],
+ rules: [],
+ skills: [],
+ hooks: [],
+ mcp: mcpContent === undefined ? [] : [{ relativePath: ".mcp.json", content: mcpContent }],
+ },
});
}
@@ -65,12 +74,56 @@ describe("BuiltTreeMaterializationTranslator — opencode (integration)", () =>
"docs"
);
- expect(fs.getFile(`${PROJECT_ROOT}/.opencode/skills/aidd-vcs-01-commit/SKILL.md`)).toBe(skill);
- expect(fs.getFile(`${PROJECT_ROOT}/.opencode/agents/aidd-vcs-helper.md`)).toBe("agent body");
+ expect(fs.getFile(join(PROJECT_ROOT, ".opencode/skills/aidd-vcs-01-commit/SKILL.md"))).toBe(
+ skill
+ );
+ expect(fs.getFile(join(PROJECT_ROOT, ".opencode/agents/aidd-vcs-helper.md"))).toBe(
+ "agent body"
+ );
// Other plugin's files and the sentinel are NOT installed.
- expect(fs.has(`${PROJECT_ROOT}/.opencode/skills/aidd-dev-00-sdlc/SKILL.md`)).toBe(false);
- expect(fs.has(`${PROJECT_ROOT}/.build-version`)).toBe(false);
+ expect(fs.has(join(PROJECT_ROOT, ".opencode/skills/aidd-dev-00-sdlc/SKILL.md"))).toBe(false);
+ expect(fs.has(join(PROJECT_ROOT, ".build-version"))).toBe(false);
const installed = manifest.getPlugins("opencode").find((p) => p.name === "aidd-vcs");
expect(installed?.files.size).toBe(2);
});
+
+ it("merges Kilo MCP entries and records them for removal", async () => {
+ const fs = new InMemoryFileAdapter();
+ fs.setFile(
+ `${BUILT.replace("opencode", "kilo")}/.kilo/skills/aidd-vcs-01-commit/SKILL.md`,
+ "skill"
+ );
+ const manifest = Manifest.create();
+ manifest.addTool("kilo", "test", []);
+ const translator = new BuiltTreeMaterializationTranslator(
+ fs,
+ new DeterministicHasher(),
+ () => "/home/u",
+ fakeEnsureBuiltMarketplace(),
+ await makeRegistry()
+ );
+ const mcpContent = JSON.stringify({
+ mcpServers: { github: { url: "https://mcp.github.example" } },
+ });
+
+ await translator.addPlugin(
+ dist(mcpContent),
+ "kilo",
+ { kind: "local", path: "/plugin-source" },
+ PROJECT_ROOT,
+ manifest,
+ "aidd-framework",
+ "docs"
+ );
+
+ expect(JSON.parse(fs.getFile(join(PROJECT_ROOT, "kilo.json")) ?? "{}")).toEqual({
+ mcp: { github: { type: "remote", url: "https://mcp.github.example", enabled: true } },
+ });
+ expect(
+ manifest
+ .getPlugins("kilo")
+ .find((p) => p.name === "aidd-vcs")
+ ?.mcpEntries.has("github")
+ ).toBe(true);
+ });
});
diff --git a/cli/tests/domain/formats/opencode-marketplace.unit.test.ts b/cli/tests/domain/formats/opencode-marketplace.unit.test.ts
index d5b7d1224..b31c77ffc 100644
--- a/cli/tests/domain/formats/opencode-marketplace.unit.test.ts
+++ b/cli/tests/domain/formats/opencode-marketplace.unit.test.ts
@@ -1,6 +1,9 @@
import { describe, expect, it } from "vitest";
import { ForeignSchemaValidationError } from "../../../src/domain/errors.js";
-import { parseOpencodeMarketplace } from "../../../src/domain/formats/opencode-marketplace.js";
+import {
+ parseKiloMarketplace,
+ parseOpencodeMarketplace,
+} from "../../../src/domain/formats/opencode-marketplace.js";
const VALID_JSON = JSON.stringify({
$schema: "https://opencode.ai/config.json",
@@ -8,6 +11,20 @@ const VALID_JSON = JSON.stringify({
plugin: ["opencode-dev-tools", "@my-org/opencode-testing", ["opencode-minimal", { debug: true }]],
});
+describe("parseKiloMarketplace", () => {
+ it("parses Kilo's OpenCode-compatible plugin array with Kilo provenance", () => {
+ const catalog = parseKiloMarketplace(JSON.stringify({ plugin: ["@example/kilo-plugin"] }));
+ expect(catalog).toEqual({
+ source: "kilo",
+ plugins: [{ name: "@example/kilo-plugin", source: "kilo" }],
+ });
+ });
+
+ it("reports kilo.json for malformed Kilo configuration", () => {
+ expect(() => parseKiloMarketplace("not json")).toThrow(/kilo\.json is not valid JSON/);
+ });
+});
+
describe("parseOpencodeMarketplace", () => {
describe("happy path", () => {
it("returns a NormalizedCatalog with source opencode", () => {
diff --git a/cli/tests/domain/models/tool-config.unit.test.ts b/cli/tests/domain/models/tool-config.unit.test.ts
index 7982107f0..21a30c55d 100644
--- a/cli/tests/domain/models/tool-config.unit.test.ts
+++ b/cli/tests/domain/models/tool-config.unit.test.ts
@@ -25,8 +25,16 @@ const makeStubConfig = (toolId: AiToolId, toolSuffix: string): AiTool =
});
describe("VALID_TOOL_IDS", () => {
- it("contains exactly claude, cursor, copilot, opencode, codex, vscode", () => {
- expect(VALID_TOOL_IDS).toEqual(["claude", "cursor", "copilot", "opencode", "codex", "vscode"]);
+ it("contains every supported AI and IDE tool", () => {
+ expect(VALID_TOOL_IDS).toEqual([
+ "claude",
+ "cursor",
+ "copilot",
+ "opencode",
+ "kilo",
+ "codex",
+ "vscode",
+ ]);
});
});
@@ -52,7 +60,14 @@ describe("stripToolSuffix()", () => {
describe("toolIdsForCategory()", () => {
it("returns AI tool IDs for 'ai'", () => {
- expect(toolIdsForCategory("ai")).toEqual(["claude", "cursor", "copilot", "opencode", "codex"]);
+ expect(toolIdsForCategory("ai")).toEqual([
+ "claude",
+ "cursor",
+ "copilot",
+ "opencode",
+ "kilo",
+ "codex",
+ ]);
});
it("returns IDE tool IDs for 'ide'", () => {
diff --git a/cli/tests/domain/models/tool-ids.unit.test.ts b/cli/tests/domain/models/tool-ids.unit.test.ts
index d1a8e8f87..fa098c566 100644
--- a/cli/tests/domain/models/tool-ids.unit.test.ts
+++ b/cli/tests/domain/models/tool-ids.unit.test.ts
@@ -12,6 +12,7 @@ describe("isAiToolId", () => {
expect(isAiToolId("cursor")).toBe(true);
expect(isAiToolId("copilot")).toBe(true);
expect(isAiToolId("opencode")).toBe(true);
+ expect(isAiToolId("kilo")).toBe(true);
expect(isAiToolId("codex")).toBe(true);
});
diff --git a/cli/tests/domain/tools/ai/kilo.unit.test.ts b/cli/tests/domain/tools/ai/kilo.unit.test.ts
new file mode 100644
index 000000000..5390f09f3
--- /dev/null
+++ b/cli/tests/domain/tools/ai/kilo.unit.test.ts
@@ -0,0 +1,61 @@
+import { describe, expect, it } from "vitest";
+import { KiloDualConfigError } from "../../../../src/domain/errors.js";
+import type { FileReader } from "../../../../src/domain/ports/file-reader.js";
+import { kilo } from "../../../../src/domain/tools/ai/kilo.js";
+
+function makeFs(existingPaths: string[]): FileReader {
+ return {
+ fileExists: async (path: string) => existingPaths.some((p) => path.endsWith(p)),
+ } as unknown as FileReader;
+}
+
+describe("kilo", () => {
+ it("installs native skills, agents, commands, and rules under .kilo", () => {
+ expect(kilo.capabilities.skills.buildInstallPath("my-skill/SKILL.md")).toBe(
+ ".kilo/skills/my-skill/SKILL.md"
+ );
+ expect(kilo.capabilities.agents.buildInstallPath("reviewer.kilo.md")).toBe(
+ ".kilo/agents/reviewer.md"
+ );
+ expect(kilo.capabilities.commands?.buildInstallPath("04_code/implement.md")).toBe(
+ ".kilo/commands/aidd/04/implement.md"
+ );
+ expect(kilo.capabilities.rules?.buildInstallPath("01-standards/naming.md")).toBe(
+ ".kilo/rules/01-standards/naming.md"
+ );
+ });
+
+ it("uses Kilo-compatible subagent frontmatter", () => {
+ expect(
+ kilo.capabilities.agents.convertFrontmatter({
+ name: "reviewer",
+ description: "Review code",
+ })
+ ).toEqual({ description: "Review code", mode: "subagent" });
+ });
+
+ it("writes MCP configuration to kilo.json and preserves JSONC ownership", async () => {
+ expect(kilo.capabilities.mcp.params.outputPath).toBe("kilo.json");
+ expect(await kilo.capabilities.mcp.resolveOutput("/project", makeFs([]))).toBe("kilo.json");
+ expect(await kilo.capabilities.mcp.resolveOutput("/project", makeFs(["kilo.jsonc"]))).toBe(
+ "kilo.jsonc"
+ );
+ });
+
+ it("rejects ambiguous kilo.json and kilo.jsonc configuration", async () => {
+ await expect(
+ kilo.capabilities.mcp.resolveOutput("/project", makeFs(["kilo.json", "kilo.jsonc"]))
+ ).rejects.toThrow(KiloDualConfigError);
+ });
+
+ it("detects Kilo user-file sections", () => {
+ expect(kilo.detectUserFileSectionKey(".kilo/skills/my-skill/SKILL.md")).toEqual({
+ section: "skills",
+ key: "my-skill/SKILL.md",
+ });
+ expect(kilo.detectUserFileSectionKey(".kilo/agents/reviewer.md")).toEqual({
+ section: "agents",
+ key: "reviewer.md",
+ });
+ });
+});
diff --git a/cli/tests/domain/tools/ai/opencode.unit.test.ts b/cli/tests/domain/tools/ai/opencode.unit.test.ts
index 8b211bf35..4e49f63ed 100644
--- a/cli/tests/domain/tools/ai/opencode.unit.test.ts
+++ b/cli/tests/domain/tools/ai/opencode.unit.test.ts
@@ -212,6 +212,27 @@ describe("opencode", () => {
});
});
+ it("preserves remote authentication headers and OAuth settings", () => {
+ const input = JSON.stringify({
+ mcpServers: {
+ protected: {
+ url: "https://mcp.example.com",
+ headers: { Authorization: "Bearer $" + "{MCP_TOKEN}" },
+ },
+ },
+ });
+ expect(JSON.parse(transform("mcp", input))).toEqual({
+ mcp: {
+ protected: {
+ type: "remote",
+ url: "https://mcp.example.com",
+ headers: { Authorization: "Bearer $" + "{MCP_TOKEN}" },
+ enabled: true,
+ },
+ },
+ });
+ });
+
it("handles mixed local and remote servers in the same config", () => {
const input = JSON.stringify({
mcpServers: {
diff --git a/cli/tests/domain/tools/registry-conformance.unit.test.ts b/cli/tests/domain/tools/registry-conformance.unit.test.ts
index 4eab75ba7..a5d6febbc 100644
--- a/cli/tests/domain/tools/registry-conformance.unit.test.ts
+++ b/cli/tests/domain/tools/registry-conformance.unit.test.ts
@@ -5,6 +5,7 @@ import "../../../src/domain/tools/ai/claude.js";
import "../../../src/domain/tools/ai/codex.js";
import "../../../src/domain/tools/ai/copilot.js";
import "../../../src/domain/tools/ai/cursor.js";
+import "../../../src/domain/tools/ai/kilo.js";
import "../../../src/domain/tools/ai/opencode.js";
import { FRAMEWORK_BUILD_TARGET_MODES } from "../../../src/domain/models/framework-build.js";
import {
diff --git a/cli/tests/golden/framework-build-golden.e2e.test.ts b/cli/tests/golden/framework-build-golden.e2e.test.ts
index 50e72f4fe..e058aeac6 100644
--- a/cli/tests/golden/framework-build-golden.e2e.test.ts
+++ b/cli/tests/golden/framework-build-golden.e2e.test.ts
@@ -13,7 +13,7 @@
* FROZEN CELLS (marketplace baseline, never regenerate casually):
* claude — re-baselined once in the agents-manifest-fix pass (see below), still frozen since.
* RE-BASELINED CELLS (flat-discovery-fix pass: bare paths, no plugin segment):
- * claude:flat, cursor:flat, copilot:flat, codex:flat, opencode:flat
+ * claude:flat, cursor:flat, copilot:flat, codex:flat, opencode:flat, kilo:flat
* RE-BASELINED CELLS (agents-manifest-fix pass: `agents` is now a list of
* ./agents/*.md file paths instead of the invalid `["./agents"]` dir form):
* claude, cursor, copilot (marketplace)
@@ -40,7 +40,7 @@ type GoldenSnapshot = Record; // key → files
/** All marketplace targets */
const MARKETPLACE_TARGETS = ["copilot", "codex", "claude", "cursor"] as const;
/** All flat targets (including opencode which is flat-only) */
-const FLAT_TARGETS = ["claude", "cursor", "copilot", "codex", "opencode"] as const;
+const FLAT_TARGETS = ["claude", "cursor", "copilot", "codex", "opencode", "kilo"] as const;
/**
* Frozen marketplace cell: its fresh build is byte-compared to the stored hash on
@@ -112,7 +112,7 @@ async function captureAllCells(
return captured;
}
-describe.concurrent("Framework build golden — 9-cell matrix", () => {
+describe.concurrent("Framework build golden — 10-cell matrix", () => {
it("snapshot is deterministic (two captures of each target are byte-identical)", async () => {
const env1 = await createTestEnv("fb-golden-det-1");
const env2 = await createTestEnv("fb-golden-det-2");
@@ -157,7 +157,7 @@ describe.concurrent("Framework build golden — 9-cell matrix", () => {
}
});
- it("stored golden baseline covers all 9 cells and the frozen claude cell is byte-identical (AC #1)", async () => {
+ it("stored golden baseline covers all 10 cells and the frozen claude cell is byte-identical (AC #1)", async () => {
const { tempDir, projectDir, fakeHome, cleanup } = await createTestEnv("fb-golden-baseline");
try {
const captured = await captureAllCells(projectDir, fakeHome, tempDir);
@@ -171,7 +171,7 @@ describe.concurrent("Framework build golden — 9-cell matrix", () => {
const stored = JSON.parse(await readFile(SNAPSHOT_FILE, "utf-8")) as GoldenSnapshot;
- // Assert all 9 cells exist in stored
+ // Assert all 10 cells exist in stored
const expectedCells = [...MARKETPLACE_TARGETS, ...FLAT_TARGETS.map((t) => `${t}:flat`)];
for (const key of expectedCells) {
expect(stored[key], `stored snapshot missing cell: ${key}`).toBeDefined();
@@ -192,7 +192,7 @@ describe.concurrent("Framework build golden — 9-cell matrix", () => {
}
});
- it("all 9 cells are non-empty", async () => {
+ it("all 10 cells are non-empty", async () => {
const stored = JSON.parse(await readFile(SNAPSHOT_FILE, "utf-8")) as GoldenSnapshot;
const expectedCells = [...MARKETPLACE_TARGETS, ...FLAT_TARGETS.map((t) => `${t}:flat`)];
for (const key of expectedCells) {
diff --git a/cli/tests/golden/snapshots/framework-build/golden.json b/cli/tests/golden/snapshots/framework-build/golden.json
index 1de3fda93..a372a001b 100644
--- a/cli/tests/golden/snapshots/framework-build/golden.json
+++ b/cli/tests/golden/snapshots/framework-build/golden.json
@@ -11,10 +11,10 @@
"plugins/aidd-vcs/skills/03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
"plugins/aidd-vcs/skills/02-pull-request/SKILL.md": "cea82673d19b5a77d2fbbb60c6961802b3cd3c04fd098da0ab32ed6ef5e596d7",
"plugins/aidd-vcs/skills/02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
- "plugins/aidd-vcs/skills/02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
- "plugins/aidd-vcs/skills/02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
"plugins/aidd-vcs/skills/02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ "plugins/aidd-vcs/skills/02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
"plugins/aidd-vcs/skills/02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ "plugins/aidd-vcs/skills/02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
"plugins/aidd-vcs/skills/02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
"plugins/aidd-vcs/skills/01-commit/SKILL.md": "9d4fb8c3091dbc72e77bb8be77e8842d1204add3589e8dffccebb36ec5e5d680",
"plugins/aidd-vcs/skills/01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
@@ -130,17 +130,17 @@
"plugins/aidd-context/skills/02-project-init/SKILL.md": "771551e0929afbf631088e98e4d0ddc267b1ef87e393381e493171c599a50762",
"plugins/aidd-context/skills/02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
"plugins/aidd-context/skills/02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ "plugins/aidd-context/skills/02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
"plugins/aidd-context/skills/02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
"plugins/aidd-context/skills/02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
- "plugins/aidd-context/skills/02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
"plugins/aidd-context/skills/02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
"plugins/aidd-context/skills/02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
- "plugins/aidd-context/skills/02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ "plugins/aidd-context/skills/02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
@@ -200,36 +200,36 @@
".plugin/marketplace.json": "fda47ddacff304f5bc06b1807f5c1c1be3f787995ed2f26cc8791c0c38ee3d19"
},
"codex": {
- "plugins/aidd-vcs/skills/04-issue-create/SKILL.md": "41fb7f904c88a07eb3ab94c6137c130166fa44069ed76322fc6eb78b81a7b5a4",
+ "plugins/aidd-vcs/skills/04-issue-create/SKILL.md": "0cf1a20e837f7afaf874c0827f345f51a82bab1cec44e4e68130483a919ea686",
"plugins/aidd-vcs/skills/04-issue-create/evals/scenarios.json": "d113c62aae4867e425737948c39c9f687f56c3d37234eca345a2f65f1a234c30",
"plugins/aidd-vcs/skills/04-issue-create/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
"plugins/aidd-vcs/skills/04-issue-create/assets/issue-template.md": "66b4ef6090208512205fce0bb16edbbcf0ffb19009eae76dc317d738c7a10cdc",
"plugins/aidd-vcs/skills/04-issue-create/actions/01-issue-create.md": "e3f60414fa3ce2d78583e5cb118dad8df956927aa86e2f6e802031a7d742d7ed",
- "plugins/aidd-vcs/skills/03-release-tag/SKILL.md": "8f95bd82f55c0e0a1362f2cc0fbd536b94717191f0eeb8d5f724d922704c9e5b",
+ "plugins/aidd-vcs/skills/03-release-tag/SKILL.md": "58fd2a7c23c989e09eeeefcb0db18e44ecec2e1c50285216149d9c29ed9a085b",
"plugins/aidd-vcs/skills/03-release-tag/evals/scenarios.json": "fdba5d61f815b956512f84baf712cde92be651593282b43ac173b2459ee9eca3",
"plugins/aidd-vcs/skills/03-release-tag/assets/release-template.md": "bce05178ae5ea7da6c356849ba69eebd249ba344c94a3c571d7d40be9d4e9e27",
"plugins/aidd-vcs/skills/03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
- "plugins/aidd-vcs/skills/02-pull-request/SKILL.md": "cea82673d19b5a77d2fbbb60c6961802b3cd3c04fd098da0ab32ed6ef5e596d7",
+ "plugins/aidd-vcs/skills/02-pull-request/SKILL.md": "9a4258f4b2206b7502469191b628f4dccf70ef194cbec839c8992fd08bf74d2f",
"plugins/aidd-vcs/skills/02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
- "plugins/aidd-vcs/skills/02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
- "plugins/aidd-vcs/skills/02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
"plugins/aidd-vcs/skills/02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ "plugins/aidd-vcs/skills/02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
"plugins/aidd-vcs/skills/02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ "plugins/aidd-vcs/skills/02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
"plugins/aidd-vcs/skills/02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
- "plugins/aidd-vcs/skills/01-commit/SKILL.md": "9d4fb8c3091dbc72e77bb8be77e8842d1204add3589e8dffccebb36ec5e5d680",
+ "plugins/aidd-vcs/skills/01-commit/SKILL.md": "613de1c46477fa90b18b12145cb032bb481b6d75afbc55020129643351a6ee47",
"plugins/aidd-vcs/skills/01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
"plugins/aidd-vcs/skills/01-commit/assets/commit-template.md": "b3c392c5c3faecc903bf80eb2bd287d2a02e42d4c3896490a5745d66fca60bf2",
"plugins/aidd-vcs/skills/01-commit/actions/01-commit.md": "06ded7f8c23e950b3b1a76b0bb89c219d1ca161cb8f9a02e04e8083ad7061dc0",
"plugins/aidd-vcs/.codex-plugin/plugin.json": "6dc4af8e3d409bddb934a6ff4a6a6505ac6a858add78518e38131547d1f12b89",
- "plugins/aidd-refine/skills/03-condense/SKILL.md": "8dd2e967d5c18e8e14194bbd96d79333a005410cf20fcb48735f0ff09a70b9e9",
+ "plugins/aidd-refine/skills/03-condense/SKILL.md": "1289ba9010aa3ff1e56adc4511ba1400215ca5da88d6a20173fcc41d428e4d80",
"plugins/aidd-refine/skills/03-condense/references/intensity-levels.md": "8e6aa26fc675a2d30dbb4df13e68d0ce6d2844c88bafd39e0ea3f2945e3276f1",
"plugins/aidd-refine/skills/03-condense/evals/scenarios.json": "c03016b5e98c5a9a8b6680035bf8ee0f2a75edc5ce33e33cf1e1430cd91f55ec",
"plugins/aidd-refine/skills/03-condense/actions/01-condense.md": "bffb26d5a306bc90f40614b29ca21e9a2151dc5ba82880c857e29c39486a16fd",
- "plugins/aidd-refine/skills/02-challenge/SKILL.md": "040fed9ffad13d0fa13b1ad5222b5996bbf6dfa8ed1552aa17da22ad30bd1186",
+ "plugins/aidd-refine/skills/02-challenge/SKILL.md": "ba43da6ed877866a39c6024a2f228a0c1b3bf7f78b7fef831d5afc8e99562ded",
"plugins/aidd-refine/skills/02-challenge/references/confidence-rubric.md": "714f1bfd0c33f2adf911c93e9bb2f113be9fd29bad07d83e54be293fc44de823",
"plugins/aidd-refine/skills/02-challenge/evals/scenarios.json": "332403843b5b5d99a9dcb3464f298ca3b7274edbd1b5c337407a4dd977bc19a5",
"plugins/aidd-refine/skills/02-challenge/actions/01-challenge.md": "6f47920ccec8682708789e07583e32698695f1274bf883757ab13fca6f3e76c0",
- "plugins/aidd-refine/skills/01-brainstorm/SKILL.md": "accc6503b13159031ab9a135b9b5591bd15b6aea13f3ded52b2f0a1b0f062687",
+ "plugins/aidd-refine/skills/01-brainstorm/SKILL.md": "d2e5e7af93ded94141f961cd0b7df3c0abcffc61dce3e56dd0ed28a0f8d6a938",
"plugins/aidd-refine/skills/01-brainstorm/references/ambiguity-detection.md": "c869338af0d8e0bdde5915000ce44980fef750cc40d070d4055bcba4c1334e0f",
"plugins/aidd-refine/skills/01-brainstorm/evals/scenarios.json": "c6858f3b6b8efa666e2c7f21f4325f5e57297e3fdfc475b836f3ce5de9d635bf",
"plugins/aidd-refine/skills/01-brainstorm/assets/question-templates.md": "bd744429e69f26caf37359e2b1d1c38dc4faba1a2c54dfaa99bfde48da0dc3c8",
@@ -240,51 +240,51 @@
"plugins/aidd-refine/skills/01-brainstorm/actions/05-confirm-approval.md": "3c6c8184910a210bb6698c2c010aebec88a28313b31bbed0ef9c1189530cd6fe",
"plugins/aidd-refine/.codex-plugin/plugin.json": "465c87f116263a0e985cab09f2b009edcd3ea0673e7d0e6410eee6fdccee4d1f",
"plugins/aidd-pm/.mcp.json": "3da12ff20b463bcabbb0493a72b8d214977c542c71d173913484937f7d7bd555",
- "plugins/aidd-pm/skills/05-spec/SKILL.md": "4312ad75dcca0603aa7f3237ee1caa989c41f366c6fe8d795e62b16821e06465",
+ "plugins/aidd-pm/skills/05-spec/SKILL.md": "7a53f639bae11eb9ed45292f7df9bf63674606ef4316cd2de9ab56053f3ead71",
"plugins/aidd-pm/skills/05-spec/assets/spec-template.md": "2f7e446c4ec58d05a471212e9ab3ba64395bdd059943620d02bf1bf5c98777c2",
"plugins/aidd-pm/skills/05-spec/assets/spec-validator.yml": "2358c6f0baa5656ddcff9410149cf8261d54199d8722f77769f76ca0d7c8cf18",
- "plugins/aidd-pm/skills/04-clarity/SKILL.md": "51b800be6dd3c252ebc965d191e0a09eac3642da5e01cd70780bcf8201da9d3a",
- "plugins/aidd-pm/skills/03-prd/SKILL.md": "860269fc27c4c876a636143d7ab89690256e5b9e8d1c42627f9540f24d6d343e",
+ "plugins/aidd-pm/skills/04-clarity/SKILL.md": "78c7ab0c5f81b0a214a1788c365091d72eeecc5482a5e19bdc49da7ab6b18a36",
+ "plugins/aidd-pm/skills/03-prd/SKILL.md": "3178498abc049e3ab9888c101002b57634f6f9d6ef387d566d2dc122bc616960",
"plugins/aidd-pm/skills/03-prd/assets/prd-template.md": "af01423720e8c9527ff12a2e9ad1de39c6e63c6569359be08defd0a059aabea9",
"plugins/aidd-pm/skills/03-prd/assets/task-template.md": "c0069ed2ecce4742629dccd6be709d4e5a71f3db3821310c381c054aeb479289",
"plugins/aidd-pm/skills/03-prd/actions/01-prd.md": "c0da6597f8c465ad50a17a07543152f53de1fbccc28cd906763d439004084a22",
- "plugins/aidd-pm/skills/02-user-stories-create/SKILL.md": "9f41d257b48aa2e74d62ec2574d2f29270e158f51483ca36dc9d9583eca71e41",
+ "plugins/aidd-pm/skills/02-user-stories-create/SKILL.md": "405e21b32748ea8394fbd2dfaec39c8a6346dd6c5177cd4cd39ae1dbdeeace31",
"plugins/aidd-pm/skills/02-user-stories-create/assets/user-story-template.md": "59ecd98d00057313414a74a94c19c0f2d167957e1080b880ee68a69a31948320",
"plugins/aidd-pm/skills/02-user-stories-create/actions/01-create-user-stories.md": "6fad8968a1e787c197764c4a8c09b17c521ae5ea2286a5082addc717bd72b1e6",
- "plugins/aidd-pm/skills/01-ticket-info/SKILL.md": "1fe8a382df62e590582f2dd0e771741370fe785cc96f1a9570f08790e140ed0c",
+ "plugins/aidd-pm/skills/01-ticket-info/SKILL.md": "63a627d468fc9bc81e897912d15cce667a4b5dba8f5a34efa57d5028696921ed",
"plugins/aidd-pm/skills/01-ticket-info/actions/01-ticket-info.md": "f075ea6ff626534dbe0826d06b67fae93b6488ec4c5c7a3d857f1d05f73d0630",
"plugins/aidd-pm/.codex-plugin/plugin.json": "807bc7690f264bcf9dafc0869ec18945a973c951688b213c93383571f72df0ca",
"plugins/aidd-dev/.mcp.json": "39d66899223270ca6dd92d874f819d8d357472566657dec87592b7ec8c7bd92c",
- "plugins/aidd-dev/skills/08-for-sure/SKILL.md": "d05c9108d6899abc82778671a7a1c9ef6fd5781c6ebc9136e43b783274d00318",
+ "plugins/aidd-dev/skills/08-for-sure/SKILL.md": "f4b0c1e1249fa0634e40473c4f3621d8c4a03f1094fd9ca162a466e2e33e9d25",
"plugins/aidd-dev/skills/08-for-sure/actions/01-init-tracking.md": "3ce6bb19135e5d31c4d2ad1c2151c1563886a611f2399b47624368268a79dcdf",
"plugins/aidd-dev/skills/08-for-sure/actions/02-auto-accept.md": "235818118c772c0f499ea0668bfbc7bd00c2aae34e6bbd8b13b912fddfa79705",
"plugins/aidd-dev/skills/08-for-sure/actions/03-autonomous-loop.md": "b19d4520ad716def3c2a4611c37725cba9af713cd4bcb668c237e874e1e43843",
- "plugins/aidd-dev/skills/07-debug/SKILL.md": "ed8dba0f337bb0776c598a2721effef7ca8d2904e36b2b3cb33cc02afc464152",
+ "plugins/aidd-dev/skills/07-debug/SKILL.md": "bb7dde02a41123d298faf803a9de37cf91bf017c414e21959550f7a39e6b3865",
"plugins/aidd-dev/skills/07-debug/references/mermaid-conventions.md": "85826285744909dd4c4706b82f0dbeff4f88a8f191cb22d538aa12c3c96365eb",
"plugins/aidd-dev/skills/07-debug/assets/task-template.md": "c0069ed2ecce4742629dccd6be709d4e5a71f3db3821310c381c054aeb479289",
"plugins/aidd-dev/skills/07-debug/actions/01-reproduce.md": "7e902e5aadc9162b444b341deb33f2a683000c1cc4722ad856496f9d740ec17d",
"plugins/aidd-dev/skills/07-debug/actions/02-debug.md": "dc3900ce6fb76074b88034d7b7316f4051d78a1828caa3acef9786e8ea582b18",
"plugins/aidd-dev/skills/07-debug/actions/03-reflect-issue.md": "3d5f18634618737870da4c783c7525cee25e09d942faee80125dd7536978ce12",
- "plugins/aidd-dev/skills/06-refactor/SKILL.md": "15c79a4fd40abea83ad5b52460aeafc777674de48950755b83d0e30935647923",
+ "plugins/aidd-dev/skills/06-refactor/SKILL.md": "b0405a301999e336ceaf2df8468235243c5ede80e03c127553d7483d645abf70",
"plugins/aidd-dev/skills/06-refactor/actions/01-performance.md": "1f7d500967de58875aeb14b732a1af377b17edff8654f4365b3f29743debb3c7",
"plugins/aidd-dev/skills/06-refactor/actions/02-security.md": "db55b81ab824d81b765189296deb1ce31fdb134edac186baf22a2c3bb1cde938",
- "plugins/aidd-dev/skills/05-test/SKILL.md": "073a4c14cff464001a026e13d9f8b122cc2370a76b11424697a4fbcab39b0da3",
+ "plugins/aidd-dev/skills/05-test/SKILL.md": "88d68332405c0009cfe33ee8fa3a9e622296bc61c7804e1d8078b8a0091e12d2",
"plugins/aidd-dev/skills/05-test/actions/01-test.md": "f6db9653cd29729c51653df7afe473fae4ae45bb126a694a367bfd84fa1785a4",
"plugins/aidd-dev/skills/05-test/actions/02-test-journey.md": "1eeb85da69abc3f1fc3e5671e83962f44fcb5686d9ca5972eeb2ba4cab31306d",
- "plugins/aidd-dev/skills/04-review/SKILL.md": "b98bbc1e330927fda3b1b26c38eff1348804a83545d75543ef50d5da8ea8d3c5",
+ "plugins/aidd-dev/skills/04-review/SKILL.md": "5731bda90accd77dfcd790189d1e65b74e78e2553a16df452d44e9aab96f4b71",
"plugins/aidd-dev/skills/04-review/assets/code-review-template.md": "e270c4b6b8c69e4fbbbcc08c2f91cc9a09fc8ad155b6f52cec3e3d34a262324d",
"plugins/aidd-dev/skills/04-review/assets/review-functional-template.md": "a84b48347caf4d09d84994b07329e4d05c8053d45630b37d47ca3ccb386e3146",
"plugins/aidd-dev/skills/04-review/assets/review-template.md": "b0ad0ab703e4d9ed960bd324bc37efe5f682cbcd40ed6293791d9074f174201c",
"plugins/aidd-dev/skills/04-review/actions/01-review-code.md": "8d5e4fc6c9243a83025961ae40146f1d96f321d9ff4d93ab74c370bbc53c18ed",
"plugins/aidd-dev/skills/04-review/actions/02-review-functional.md": "9e5d837715f5610a42f1c294b0fa71277538e2629dc47cf09675487dcfa98324",
- "plugins/aidd-dev/skills/03-audit/SKILL.md": "37b9318c81624142326588fb8e5b602fd449927b990fe2745919f706db402ca7",
+ "plugins/aidd-dev/skills/03-audit/SKILL.md": "994cdeb0e16071e5a92a27956cea25c9bb04bd68c1392243fa0bebe0038cd01e",
"plugins/aidd-dev/skills/03-audit/actions/01-audit.md": "0371ae3d0c9a383f8b90657f3381717f323742bad922df2c1c508f6db013267e",
- "plugins/aidd-dev/skills/02-assert/SKILL.md": "c32f74b1d60837ca92d095b3547e615f25cf31faa348a78441012a30805418a3",
+ "plugins/aidd-dev/skills/02-assert/SKILL.md": "3abe857a8279243fccc21bcfa4bdfcc622aaff636ec21e0751a433afaa02c06e",
"plugins/aidd-dev/skills/02-assert/assets/task-template.md": "c0069ed2ecce4742629dccd6be709d4e5a71f3db3821310c381c054aeb479289",
"plugins/aidd-dev/skills/02-assert/actions/01-assert.md": "b8a9680e7cf956f2e1ff7720f755586e2523d6951c35ec686ded659f7fa3a4b1",
"plugins/aidd-dev/skills/02-assert/actions/02-assert-architecture.md": "e5d7effa39f33c045e4d605ed909d46ddf7562e2a0199eb2e39fcc8f3fc92620",
"plugins/aidd-dev/skills/02-assert/actions/03-assert-frontend.md": "ed9751b32580c7fd3fbe02a8205cbb5d85a8e7bc38f982b5130b810950bbd091",
- "plugins/aidd-dev/skills/01-plan/SKILL.md": "fc0bdfe637e61fc2fd1f430e6840340c3843813a32510e61f4d597172af4379a",
+ "plugins/aidd-dev/skills/01-plan/SKILL.md": "97e0a7c794c420d6244b1eca50c37190297b370e6ea6f1e32344a486bb4982cb",
"plugins/aidd-dev/skills/01-plan/references/mermaid-conventions.md": "85826285744909dd4c4706b82f0dbeff4f88a8f191cb22d538aa12c3c96365eb",
"plugins/aidd-dev/skills/01-plan/assets/master-plan-template.md": "f793f2bc8fad34f056e824def49527552f50cf12e43f0929731d64278376b822",
"plugins/aidd-dev/skills/01-plan/assets/plan-template.md": "cf462e831d994230c811c71eaa72a8f9880536ba3b657b70342083dee00ab254",
@@ -292,21 +292,21 @@
"plugins/aidd-dev/skills/01-plan/actions/01-plan.md": "c480fc1cffe39f117003b5aeea23e10f808952a0eeea067dbc0ab44c0af992ff",
"plugins/aidd-dev/skills/01-plan/actions/02-components-behavior.md": "cacb673334d8947c3c252feaaf0ef50c269c06c5cf8f51b45663cbd42402e094",
"plugins/aidd-dev/skills/01-plan/actions/03-image-extract-details.md": "6f6cddd0893888c71b0aed5ecfe48217afe0eef10feec6415db433bfcc69f8e3",
- "plugins/aidd-dev/skills/00-sdlc/SKILL.md": "19bd4a8cf8c6531a6db232c31855e39475c71e2b58c91b439832d813ff594b78",
+ "plugins/aidd-dev/skills/00-sdlc/SKILL.md": "e961d919f13d1650d7c47dc0fa118f8cdce7d434c2ae31aa9c30a203463c86f4",
"plugins/aidd-dev/codex-agents/implementer.toml": "d6b2739193ecc12b546f17a994af4e2949ccbea3f2560139b3bf7693fca9604d",
"plugins/aidd-dev/codex-agents/planner.toml": "347e72e5beb8d0b493618c2d03f37d765c10e407f3404539fa5dc822fd2fecad",
"plugins/aidd-dev/codex-agents/reviewer.toml": "9dd3b9e0420601fc35c287636a6553ef5e404689347313d05e53ec99f034011a",
"plugins/aidd-dev/.codex-plugin/plugin.json": "20aed94921aed1aaa0dfcd83528601273582558f72ed33f23077605197dba94d",
- "plugins/aidd-context/skills/06-discovery/SKILL.md": "28f82e034ed5707ad6e59b012680a94ff5935bc7f8a0b5407caeea20ccb2667a",
+ "plugins/aidd-context/skills/06-discovery/SKILL.md": "e057466afc4603a1fcac65db17f36d4d03c8403c6b2ed8b49abdcec43bc69aaf",
"plugins/aidd-context/skills/06-discovery/actions/01-find-skill.md": "600caf7822017bfe75d40773e1673ada784227b98f5b88d4ba98a57822fa0dcf",
- "plugins/aidd-context/skills/05-learn/SKILL.md": "a1628b6311634de75b8260df3ab1271713dcb06136c6e66bad1e290594f81339",
+ "plugins/aidd-context/skills/05-learn/SKILL.md": "5e9a8b4ddaa35de78239891a9a0f54e91963f9e68779206b9d02f756204c0cdf",
"plugins/aidd-context/skills/05-learn/assets/adr-template.md": "1f9feb18109b178226885ab7edabc3d1c4dd2a77dd1fa7345be856643107ac16",
"plugins/aidd-context/skills/05-learn/assets/decision-template.md": "1e6229157fd0a07c090ce0bd159336a13554975e146966b306bf25665a179938",
"plugins/aidd-context/skills/05-learn/actions/01-learn.md": "92400bfcc2cdfe9f0bad8f2feadd7d28dce882240fe58971d25dfa880521d8bb",
- "plugins/aidd-context/skills/04-mermaid/SKILL.md": "1be61dff15ba6f1a7686c5577517985f59266f0aee774fc3d67fe2a5aa5a558a",
+ "plugins/aidd-context/skills/04-mermaid/SKILL.md": "67418c9e759e3b39f95e3260269070f0f0f5c87c4b4b85ec8100aa1693464a86",
"plugins/aidd-context/skills/04-mermaid/references/mermaid-conventions.md": "85826285744909dd4c4706b82f0dbeff4f88a8f191cb22d538aa12c3c96365eb",
"plugins/aidd-context/skills/04-mermaid/actions/01-mermaid.md": "f70b18f429701d0c3b46a4c6e75153c732ee9e06a16aa01efec05e810ac7a6dd",
- "plugins/aidd-context/skills/03-context-generate/SKILL.md": "94b9151a75e80d07de56418eb476641c7f50608834ac7f01e5a0b7526c755975",
+ "plugins/aidd-context/skills/03-context-generate/SKILL.md": "bbb19f88272463d15ffbd41a7ff27ed72fd207386af5ba21c4472ada65afd426",
"plugins/aidd-context/skills/03-context-generate/references/agents-coordination.md": "eaaa31ed554a53f7870151307853e1add7e3ddd1de8e442b8d5e7c5698ab0098",
"plugins/aidd-context/skills/03-context-generate/references/ai-mapping.md": "4ad192b5ae53c7ceadff165a1cef8c3f24949498375bedc0cc359194dea3117e",
"plugins/aidd-context/skills/03-context-generate/references/naming-conventions.md": "fd39d00b1449f0770ee89aad9f6e84d21e1fee2efc0ff547a240b0e18f648cd8",
@@ -327,20 +327,20 @@
"plugins/aidd-context/skills/03-context-generate/actions/skills/06-validate.md": "658c1077b03c461bb0c3fa17db047e4d2fbc3874f4d4fbd2e3dc5df606aa03ee",
"plugins/aidd-context/skills/03-context-generate/actions/rules/01-generate-rules.md": "855b9adf65b0b0cc31ca15c68b8ac37da6a816c9a6416fbc3aea424cffa238c3",
"plugins/aidd-context/skills/03-context-generate/actions/agents/01-generate-agent.md": "3dce30335eba1d60c5a62d43184d133eed621bbc344e9277ab0f05ead443e0ba",
- "plugins/aidd-context/skills/02-project-init/SKILL.md": "771551e0929afbf631088e98e4d0ddc267b1ef87e393381e493171c599a50762",
+ "plugins/aidd-context/skills/02-project-init/SKILL.md": "f957b5662aaa85b206916067d8a91dba7dac6660df1bb6f1f8772530726bfa08",
"plugins/aidd-context/skills/02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
"plugins/aidd-context/skills/02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ "plugins/aidd-context/skills/02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
"plugins/aidd-context/skills/02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
"plugins/aidd-context/skills/02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
- "plugins/aidd-context/skills/02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
"plugins/aidd-context/skills/02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
"plugins/aidd-context/skills/02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
- "plugins/aidd-context/skills/02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ "plugins/aidd-context/skills/02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
@@ -355,7 +355,7 @@
"plugins/aidd-context/skills/02-project-init/actions/04-review-memory.md": "211ad0ad0d7c4925acbd8a41f775a16b09de51b85d9f3fc6f972170ac63fd353",
"plugins/aidd-context/skills/02-project-init/actions/05-init-rules-skeleton.md": "12924f4535c083e114a5a4a4ef148e4aa2c8c4c436d23c8f50e152f869e3be2c",
"plugins/aidd-context/skills/02-project-init/actions/06-sync-memory.md": "3f6825c8d230cea72f729aee15cf6136b613b7a9b07ddec237b91fe5ad3be59b",
- "plugins/aidd-context/skills/01-bootstrap/SKILL.md": "73685c32640bd6a7ebb77e36464ddbb1ab2c254bc4e02dfe923e53aac858a1cc",
+ "plugins/aidd-context/skills/01-bootstrap/SKILL.md": "cff89e30857b72b6c4870da67ec4adf97b0d238acdeff857ecd422e8aec4b926",
"plugins/aidd-context/skills/01-bootstrap/references/stack-heuristics.md": "17f7c0df7b19090f42c26ddf70df1049897b3973d9c1bf8df358b87a1cc9985a",
"plugins/aidd-context/skills/01-bootstrap/evals/scenarios.json": "c5998a91c584d561618dbabe66f21bd8f446260731778de4f467a70a6da21784",
"plugins/aidd-context/skills/01-bootstrap/assets/checklist.md": "64b84a7712ca78bc1901d2c78c183310336a4abe1b5890a689c3cf166b026d21",
@@ -368,14 +368,14 @@
"plugins/aidd-context/hooks/hooks.json": "fb9534241deca3ad28f23c1f364d444d6f0e83a1aa2328796a295aa2ebbe65f6",
"plugins/aidd-context/hooks/update_memory.js": "140d7db788452f5f4c32316d522f595a36e06638b19a42d32e42a1a7324b7149",
"plugins/aidd-context/.codex-plugin/plugin.json": "e0e25ec3ca27ca2bcf49fd4d2b32587efbf1237280d732c9477de2c178109c3b",
- "plugins/aidd-async-dev/skills/03-review/SKILL.md": "e5ad0469954cfc92de1f95e3cb53e70b9f682e35491430aeba1d3c5511a41c06",
+ "plugins/aidd-async-dev/skills/03-review/SKILL.md": "883d7cd780d121e6a39e3a9fcde2b3a1799485601a76ce4c1073a82556df319e",
"plugins/aidd-async-dev/skills/03-review/references/stop-conditions.md": "47280ec7ebb0bd2d25bb7bf7dd716f5ef41a0ad8163653fa139981b5283e7ba0",
"plugins/aidd-async-dev/skills/03-review/evals/scenarios.json": "562d462eedcb589487585a6840d3077a8cce760ea4ecd5e416a8a01b8472d995",
"plugins/aidd-async-dev/skills/03-review/actions/skills/01-collect-comments.md": "a7494fcd9ec705cf76d36ed9b7ce59b2d9ed6e82ce64084e2ed935d52ab57527",
"plugins/aidd-async-dev/skills/03-review/actions/skills/02-detect-stop.md": "b5d40992028d2e0a1d59f31dd699237005ebb51d9c70a648aca7f757f7449659",
"plugins/aidd-async-dev/skills/03-review/actions/skills/03-fix-iteration.md": "a3133409542ed6fc8e9b814658be68504e646cc44ed58ca749251c6b6dd45f25",
"plugins/aidd-async-dev/skills/03-review/actions/skills/04-finalize.md": "bf01c103e3940fda6fd07092bd35f44993f24cdd25ec7ff5c52004b20a37cb17",
- "plugins/aidd-async-dev/skills/02-run/SKILL.md": "ebd6bfaa5c75066b57f65148aae514eb660bb93460897d37272b260b5e2348a0",
+ "plugins/aidd-async-dev/skills/02-run/SKILL.md": "15c134c0d1a8b5566fdab2272d30a5ed6162395248d6a90a71bc0b481e529656",
"plugins/aidd-async-dev/skills/02-run/evals/scenarios.json": "cf78e4c46ac988912a7de98b1a1143c439d3c744bef234d7294f17b4836a84d0",
"plugins/aidd-async-dev/skills/02-run/actions/skills/01-poll-ready.md": "38b0767d080c60149fc4dd1b04395c72b6cda204bd2152d2f9be54db814626fd",
"plugins/aidd-async-dev/skills/02-run/actions/skills/02-resolve-deps.md": "9ede89ff3396287bde2ed9fed6e8068a8411b9190dc446ec392badaf31a52a5f",
@@ -384,7 +384,7 @@
"plugins/aidd-async-dev/skills/02-run/actions/skills/05-delegate-sdlc.md": "3142a7d2ee15d1871fecc1b4977ff3fb43b9a343f25913a54cc943d9fab31a7c",
"plugins/aidd-async-dev/skills/02-run/actions/skills/06-write-audit.md": "3cfbabf8f6c6e267994afcf189d17234eac4c3bb35ab68408776f1acb644b6ba",
"plugins/aidd-async-dev/skills/02-run/actions/skills/07-emit-webhook.md": "4c8fe76bdf265386247a636dafc9365946114afa54c479ef13abfd929d7af3db",
- "plugins/aidd-async-dev/skills/01-setup/SKILL.md": "5be35bde964ef4cc7b05be341984d478bfdb66ff5c30ff806a7e3715fb3bb900",
+ "plugins/aidd-async-dev/skills/01-setup/SKILL.md": "a0164200c439431091bd4a682440b8f3e2bf4bbb97081548a25f3e463a8405bc",
"plugins/aidd-async-dev/skills/01-setup/references/auth-modes.md": "4122f895e4b210fce0e8f4cac81a79f6711eca56edac02ac43235359a77c2f62",
"plugins/aidd-async-dev/skills/01-setup/evals/scenarios.json": "79b49984a0999a3f34348bedbf8e7fe815ebdddf825701fabfedbe39f7a1ede2",
"plugins/aidd-async-dev/skills/01-setup/assets/config-template.json": "d47d1d93014157d525f48f3c96626472d940fafffc0deb106af2371db97b4e83",
@@ -411,10 +411,10 @@
"plugins/aidd-vcs/skills/03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
"plugins/aidd-vcs/skills/02-pull-request/SKILL.md": "cea82673d19b5a77d2fbbb60c6961802b3cd3c04fd098da0ab32ed6ef5e596d7",
"plugins/aidd-vcs/skills/02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
- "plugins/aidd-vcs/skills/02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
- "plugins/aidd-vcs/skills/02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
"plugins/aidd-vcs/skills/02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ "plugins/aidd-vcs/skills/02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
"plugins/aidd-vcs/skills/02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ "plugins/aidd-vcs/skills/02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
"plugins/aidd-vcs/skills/02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
"plugins/aidd-vcs/skills/01-commit/SKILL.md": "9d4fb8c3091dbc72e77bb8be77e8842d1204add3589e8dffccebb36ec5e5d680",
"plugins/aidd-vcs/skills/01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
@@ -530,17 +530,17 @@
"plugins/aidd-context/skills/02-project-init/SKILL.md": "771551e0929afbf631088e98e4d0ddc267b1ef87e393381e493171c599a50762",
"plugins/aidd-context/skills/02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
"plugins/aidd-context/skills/02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ "plugins/aidd-context/skills/02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
"plugins/aidd-context/skills/02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
"plugins/aidd-context/skills/02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
- "plugins/aidd-context/skills/02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
"plugins/aidd-context/skills/02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
"plugins/aidd-context/skills/02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
- "plugins/aidd-context/skills/02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ "plugins/aidd-context/skills/02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
@@ -611,10 +611,10 @@
"plugins/aidd-vcs/skills/03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
"plugins/aidd-vcs/skills/02-pull-request/SKILL.md": "cea82673d19b5a77d2fbbb60c6961802b3cd3c04fd098da0ab32ed6ef5e596d7",
"plugins/aidd-vcs/skills/02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
- "plugins/aidd-vcs/skills/02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
- "plugins/aidd-vcs/skills/02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
"plugins/aidd-vcs/skills/02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ "plugins/aidd-vcs/skills/02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
"plugins/aidd-vcs/skills/02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ "plugins/aidd-vcs/skills/02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
"plugins/aidd-vcs/skills/02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
"plugins/aidd-vcs/skills/01-commit/SKILL.md": "9d4fb8c3091dbc72e77bb8be77e8842d1204add3589e8dffccebb36ec5e5d680",
"plugins/aidd-vcs/skills/01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
@@ -730,17 +730,17 @@
"plugins/aidd-context/skills/02-project-init/SKILL.md": "771551e0929afbf631088e98e4d0ddc267b1ef87e393381e493171c599a50762",
"plugins/aidd-context/skills/02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
"plugins/aidd-context/skills/02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ "plugins/aidd-context/skills/02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
"plugins/aidd-context/skills/02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
"plugins/aidd-context/skills/02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
- "plugins/aidd-context/skills/02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
"plugins/aidd-context/skills/02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
"plugins/aidd-context/skills/02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
- "plugins/aidd-context/skills/02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ "plugins/aidd-context/skills/02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
"plugins/aidd-context/skills/02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
@@ -813,10 +813,10 @@
".claude/skills/aidd-vcs-03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
".claude/skills/aidd-vcs-02-pull-request/SKILL.md": "80c8d4f2dc28e4d1b67d418c12a865ba74ffc8b57720eb05bdf1e1fca3b82a6a",
".claude/skills/aidd-vcs-02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
- ".claude/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
- ".claude/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".claude/skills/aidd-vcs-02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ ".claude/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
".claude/skills/aidd-vcs-02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ ".claude/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".claude/skills/aidd-vcs-02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
".claude/skills/aidd-vcs-01-commit/SKILL.md": "1825b3994a89c0394271c3437a772e74892e4bfb5fac9c2dbc90739544404585",
".claude/skills/aidd-vcs-01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
@@ -923,17 +923,17 @@
".claude/skills/aidd-context-02-project-init/SKILL.md": "4bd40beb8290018b6fa58b651d3681e13465b39b84c3e4c0c39964aefcc52002",
".claude/skills/aidd-context-02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
".claude/skills/aidd-context-02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ ".claude/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".claude/skills/aidd-context-02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
".claude/skills/aidd-context-02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
- ".claude/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".claude/skills/aidd-context-02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
".claude/skills/aidd-context-02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
- ".claude/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".claude/skills/aidd-context-02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
".claude/skills/aidd-context-02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
".claude/skills/aidd-context-02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
".claude/skills/aidd-context-02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
".claude/skills/aidd-context-02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ ".claude/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".claude/skills/aidd-context-02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
".claude/skills/aidd-context-02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
".claude/skills/aidd-context-02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
@@ -1004,10 +1004,10 @@
".cursor/skills/aidd-vcs-03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
".cursor/skills/aidd-vcs-02-pull-request/SKILL.md": "80c8d4f2dc28e4d1b67d418c12a865ba74ffc8b57720eb05bdf1e1fca3b82a6a",
".cursor/skills/aidd-vcs-02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
- ".cursor/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
- ".cursor/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".cursor/skills/aidd-vcs-02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ ".cursor/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
".cursor/skills/aidd-vcs-02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ ".cursor/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".cursor/skills/aidd-vcs-02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
".cursor/skills/aidd-vcs-01-commit/SKILL.md": "1825b3994a89c0394271c3437a772e74892e4bfb5fac9c2dbc90739544404585",
".cursor/skills/aidd-vcs-01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
@@ -1114,17 +1114,17 @@
".cursor/skills/aidd-context-02-project-init/SKILL.md": "4bd40beb8290018b6fa58b651d3681e13465b39b84c3e4c0c39964aefcc52002",
".cursor/skills/aidd-context-02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
".cursor/skills/aidd-context-02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ ".cursor/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".cursor/skills/aidd-context-02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
".cursor/skills/aidd-context-02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
- ".cursor/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".cursor/skills/aidd-context-02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
".cursor/skills/aidd-context-02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
- ".cursor/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".cursor/skills/aidd-context-02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
".cursor/skills/aidd-context-02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
".cursor/skills/aidd-context-02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
".cursor/skills/aidd-context-02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
".cursor/skills/aidd-context-02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ ".cursor/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".cursor/skills/aidd-context-02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
".cursor/skills/aidd-context-02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
".cursor/skills/aidd-context-02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
@@ -1194,10 +1194,10 @@
".github/skills/aidd-vcs-03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
".github/skills/aidd-vcs-02-pull-request/SKILL.md": "80c8d4f2dc28e4d1b67d418c12a865ba74ffc8b57720eb05bdf1e1fca3b82a6a",
".github/skills/aidd-vcs-02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
- ".github/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
- ".github/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".github/skills/aidd-vcs-02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ ".github/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
".github/skills/aidd-vcs-02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ ".github/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".github/skills/aidd-vcs-02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
".github/skills/aidd-vcs-01-commit/SKILL.md": "1825b3994a89c0394271c3437a772e74892e4bfb5fac9c2dbc90739544404585",
".github/skills/aidd-vcs-01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
@@ -1304,17 +1304,17 @@
".github/skills/aidd-context-02-project-init/SKILL.md": "4bd40beb8290018b6fa58b651d3681e13465b39b84c3e4c0c39964aefcc52002",
".github/skills/aidd-context-02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
".github/skills/aidd-context-02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ ".github/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".github/skills/aidd-context-02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
".github/skills/aidd-context-02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
- ".github/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".github/skills/aidd-context-02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
".github/skills/aidd-context-02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
- ".github/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".github/skills/aidd-context-02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
".github/skills/aidd-context-02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
".github/skills/aidd-context-02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
".github/skills/aidd-context-02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
".github/skills/aidd-context-02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ ".github/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".github/skills/aidd-context-02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
".github/skills/aidd-context-02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
".github/skills/aidd-context-02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
@@ -1365,8 +1365,8 @@
".github/skills/aidd-async-dev-01-setup/actions/skills/03-generate-workflow.md": "11f7ec6c03284d0524179f71337691301a6362cf77bf3aa666fe41686b4df40b",
".github/skills/aidd-async-dev-01-setup/actions/skills/04-write-config.md": "eb7ecb812e8bdaaeba2e56c71c77bf8c14fce0a2c44311ff7985444617635dd5",
".github/skills/aidd-async-dev-01-setup/actions/skills/05-bootstrap-labels.md": "f53177ce1c58767f1bdfcfa3e72f7d4cc5e3d4fd782c35c3998815317be108b1",
- ".github/hooks/aidd-async-dev.hooks.json": "ca3d163bab055381827226140568f3bef7eaac187cebd76878e0b63e9e442356",
- ".github/hooks/aidd-context.hooks.json": "c4ad80f5e74910c21c5eff56753759e6fd619415e5302a4e6a9830d95ad46824",
+ ".github/hooks/aidd-async-dev.hooks.json": "4b8894d57dfa621e534ef4eb25263e8f00254cbcb4327f1f98796314ac279dde",
+ ".github/hooks/aidd-context.hooks.json": "35e484606fe0c4a0e8b6f6a106b91fc1bf02dae266efac762446f2d5f8a66da9",
".github/hooks/aidd-context/update_memory.js": "140d7db788452f5f4c32316d522f595a36e06638b19a42d32e42a1a7324b7149",
".github/agents/aidd-async-dev-async-orchestrator.agent.md": "5ca31d8117dcc4800265ab04093432090485fdda1de8a867b29c3d3e55d30e3d",
".github/agents/aidd-dev-implementer.agent.md": "3447d0684155742c21a8692cf95057dd4f90019298e9e5cb6c4e613993393365",
@@ -1374,7 +1374,7 @@
".github/agents/aidd-dev-reviewer.agent.md": "7d501f19569f48a2bfa04e134b26323645ab08987f88ae8a59ed6e65992a9d3d"
},
"codex:flat": {
- ".codex/config.toml": "9dff38fa8a3a275e73c3a3ee8b8632a6313e6a52f9c43eb79523cb8477191e4e",
+ ".codex/config.toml": "0ff7327daa069f076fa664ab373dc04730f68692f7f3a8f008ef00479fca382e",
".codex/hooks.json": "f85805f8ed17f990b1d7a2e2f966cb47f46f9bdd21bc8911325df190b7784ea9",
".codex/hooks/aidd-context/update_memory.js": "140d7db788452f5f4c32316d522f595a36e06638b19a42d32e42a1a7324b7149",
".codex/agents/aidd-async-dev-async-orchestrator.toml": "8212b724fdacd2a20f35a2c11782c7d50b717b742f59f1a9ae08c0d831e42b4a",
@@ -1392,10 +1392,10 @@
".agents/skills/aidd-vcs-03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
".agents/skills/aidd-vcs-02-pull-request/SKILL.md": "80c8d4f2dc28e4d1b67d418c12a865ba74ffc8b57720eb05bdf1e1fca3b82a6a",
".agents/skills/aidd-vcs-02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
- ".agents/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
- ".agents/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".agents/skills/aidd-vcs-02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ ".agents/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
".agents/skills/aidd-vcs-02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ ".agents/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".agents/skills/aidd-vcs-02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
".agents/skills/aidd-vcs-01-commit/SKILL.md": "1825b3994a89c0394271c3437a772e74892e4bfb5fac9c2dbc90739544404585",
".agents/skills/aidd-vcs-01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
@@ -1502,17 +1502,17 @@
".agents/skills/aidd-context-02-project-init/SKILL.md": "4bd40beb8290018b6fa58b651d3681e13465b39b84c3e4c0c39964aefcc52002",
".agents/skills/aidd-context-02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
".agents/skills/aidd-context-02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ ".agents/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".agents/skills/aidd-context-02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
".agents/skills/aidd-context-02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
- ".agents/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".agents/skills/aidd-context-02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
".agents/skills/aidd-context-02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
- ".agents/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".agents/skills/aidd-context-02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
".agents/skills/aidd-context-02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
".agents/skills/aidd-context-02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
".agents/skills/aidd-context-02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
".agents/skills/aidd-context-02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ ".agents/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".agents/skills/aidd-context-02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
".agents/skills/aidd-context-02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
".agents/skills/aidd-context-02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
@@ -1577,10 +1577,10 @@
".opencode/skills/aidd-vcs-03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
".opencode/skills/aidd-vcs-02-pull-request/SKILL.md": "80c8d4f2dc28e4d1b67d418c12a865ba74ffc8b57720eb05bdf1e1fca3b82a6a",
".opencode/skills/aidd-vcs-02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
- ".opencode/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
- ".opencode/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".opencode/skills/aidd-vcs-02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ ".opencode/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
".opencode/skills/aidd-vcs-02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ ".opencode/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
".opencode/skills/aidd-vcs-02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
".opencode/skills/aidd-vcs-01-commit/SKILL.md": "1825b3994a89c0394271c3437a772e74892e4bfb5fac9c2dbc90739544404585",
".opencode/skills/aidd-vcs-01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
@@ -1687,17 +1687,17 @@
".opencode/skills/aidd-context-02-project-init/SKILL.md": "4bd40beb8290018b6fa58b651d3681e13465b39b84c3e4c0c39964aefcc52002",
".opencode/skills/aidd-context-02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
".opencode/skills/aidd-context-02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ ".opencode/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".opencode/skills/aidd-context-02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
".opencode/skills/aidd-context-02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
- ".opencode/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
".opencode/skills/aidd-context-02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
".opencode/skills/aidd-context-02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
- ".opencode/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".opencode/skills/aidd-context-02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
".opencode/skills/aidd-context-02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
".opencode/skills/aidd-context-02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
".opencode/skills/aidd-context-02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
".opencode/skills/aidd-context-02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ ".opencode/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
".opencode/skills/aidd-context-02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
".opencode/skills/aidd-context-02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
".opencode/skills/aidd-context-02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
@@ -1752,5 +1752,194 @@
".opencode/agents/aidd-dev-implementer.md": "4b4fe709e0ed56b097b697a49f6adfc200cccaad36a0e978a12e4f062a3a5e38",
".opencode/agents/aidd-dev-planner.md": "c83648c34068b6fa762fdc6b073e31cb3e9dfe5bd5bf2fd7e2cb4ad3e865feee",
".opencode/agents/aidd-dev-reviewer.md": "30e2dbb93309d23fc99cbce36a4fcfd0b6d76e49c3425979827727327ba697a6"
+ },
+ "kilo:flat": {
+ "kilo.json": "2a0f1462f19fb169d4258eb3934e64e48a0a5c54dd5ad64ae903ca01b9de6588",
+ ".kilo/skills/aidd-vcs-04-issue-create/SKILL.md": "3983ed1c71124786fdf737ec5447637a31b1cc146eff43003978cec50c2ddc67",
+ ".kilo/skills/aidd-vcs-04-issue-create/evals/scenarios.json": "d113c62aae4867e425737948c39c9f687f56c3d37234eca345a2f65f1a234c30",
+ ".kilo/skills/aidd-vcs-04-issue-create/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
+ ".kilo/skills/aidd-vcs-04-issue-create/assets/issue-template.md": "66b4ef6090208512205fce0bb16edbbcf0ffb19009eae76dc317d738c7a10cdc",
+ ".kilo/skills/aidd-vcs-04-issue-create/actions/01-issue-create.md": "e3f60414fa3ce2d78583e5cb118dad8df956927aa86e2f6e802031a7d742d7ed",
+ ".kilo/skills/aidd-vcs-03-release-tag/SKILL.md": "0052405cdf2deeb07b123e8f94ee47a2b4ecea6031641315ce71fc6cff3faabb",
+ ".kilo/skills/aidd-vcs-03-release-tag/evals/scenarios.json": "fdba5d61f815b956512f84baf712cde92be651593282b43ac173b2459ee9eca3",
+ ".kilo/skills/aidd-vcs-03-release-tag/assets/release-template.md": "bce05178ae5ea7da6c356849ba69eebd249ba344c94a3c571d7d40be9d4e9e27",
+ ".kilo/skills/aidd-vcs-03-release-tag/actions/01-release-tag.md": "b2f6c6cce5f7c83f83e4b2fd84c7aae3888bdfcd29f1be3d3e2bc362b18eae6b",
+ ".kilo/skills/aidd-vcs-02-pull-request/SKILL.md": "80c8d4f2dc28e4d1b67d418c12a865ba74ffc8b57720eb05bdf1e1fca3b82a6a",
+ ".kilo/skills/aidd-vcs-02-pull-request/evals/scenarios.json": "63f63e6b13038672fbe325509deb32a9b25a50a996b687c001dfc74815a0dccd",
+ ".kilo/skills/aidd-vcs-02-pull-request/assets/branch.md": "92880244478c3e48c4f105e3ab2f9c09850778f84f1e44108ff8e912ccb0bea3",
+ ".kilo/skills/aidd-vcs-02-pull-request/assets/CONTRIBUTING.md": "1372c7512c02c26e21643ae523a98d7c90ff92c03633532a8c417b4ca8d9e75f",
+ ".kilo/skills/aidd-vcs-02-pull-request/assets/pull_request.md": "66939eaae42c729f3b05f8dcc2546a1e4227441d9d156d692fc7ced89d07a11f",
+ ".kilo/skills/aidd-vcs-02-pull-request/assets/README.md": "fb774bb7e5a19a39b21619879ee5045d7b3a0952be3f4b61aea524b93e9c9086",
+ ".kilo/skills/aidd-vcs-02-pull-request/actions/01-pull-request.md": "3c3753569b5f336e6c53ac8312ba6f9538ccc711e16fb7847ca1ebf04250a790",
+ ".kilo/skills/aidd-vcs-01-commit/SKILL.md": "1825b3994a89c0394271c3437a772e74892e4bfb5fac9c2dbc90739544404585",
+ ".kilo/skills/aidd-vcs-01-commit/evals/scenarios.json": "bdefba21f63f7ef737ff3431077278cc45b722e85ba4b66e3a4adf4d34e0b2ff",
+ ".kilo/skills/aidd-vcs-01-commit/assets/commit-template.md": "b3c392c5c3faecc903bf80eb2bd287d2a02e42d4c3896490a5745d66fca60bf2",
+ ".kilo/skills/aidd-vcs-01-commit/actions/01-commit.md": "06ded7f8c23e950b3b1a76b0bb89c219d1ca161cb8f9a02e04e8083ad7061dc0",
+ ".kilo/skills/aidd-refine-03-condense/SKILL.md": "2d6db1071f826db1cf030fb8a34aeaf0adc79884a29750efa9fe378ab12d8593",
+ ".kilo/skills/aidd-refine-03-condense/references/intensity-levels.md": "8e6aa26fc675a2d30dbb4df13e68d0ce6d2844c88bafd39e0ea3f2945e3276f1",
+ ".kilo/skills/aidd-refine-03-condense/evals/scenarios.json": "c03016b5e98c5a9a8b6680035bf8ee0f2a75edc5ce33e33cf1e1430cd91f55ec",
+ ".kilo/skills/aidd-refine-03-condense/actions/01-condense.md": "bffb26d5a306bc90f40614b29ca21e9a2151dc5ba82880c857e29c39486a16fd",
+ ".kilo/skills/aidd-refine-02-challenge/SKILL.md": "0e05299821bb3e41834cd8ff97ffa23f48342974b4e20c1e9ea59ce83255eed8",
+ ".kilo/skills/aidd-refine-02-challenge/references/confidence-rubric.md": "714f1bfd0c33f2adf911c93e9bb2f113be9fd29bad07d83e54be293fc44de823",
+ ".kilo/skills/aidd-refine-02-challenge/evals/scenarios.json": "332403843b5b5d99a9dcb3464f298ca3b7274edbd1b5c337407a4dd977bc19a5",
+ ".kilo/skills/aidd-refine-02-challenge/actions/01-challenge.md": "6f47920ccec8682708789e07583e32698695f1274bf883757ab13fca6f3e76c0",
+ ".kilo/skills/aidd-refine-01-brainstorm/SKILL.md": "e29675b330838d6bd843f40c227fd64ae46e9162c3c3b5db4d8695d9f6b38f17",
+ ".kilo/skills/aidd-refine-01-brainstorm/references/ambiguity-detection.md": "c869338af0d8e0bdde5915000ce44980fef750cc40d070d4055bcba4c1334e0f",
+ ".kilo/skills/aidd-refine-01-brainstorm/evals/scenarios.json": "c6858f3b6b8efa666e2c7f21f4325f5e57297e3fdfc475b836f3ce5de9d635bf",
+ ".kilo/skills/aidd-refine-01-brainstorm/assets/question-templates.md": "bd744429e69f26caf37359e2b1d1c38dc4faba1a2c54dfaa99bfde48da0dc3c8",
+ ".kilo/skills/aidd-refine-01-brainstorm/actions/01-capture-request.md": "bc133963be4eeb68d6653a65f88f2e1820d711d6d7bf74b79a6225fff7b8e6c8",
+ ".kilo/skills/aidd-refine-01-brainstorm/actions/02-ask-probing-questions.md": "d8a25b7e2c0861bc4bce878e7d10dcda279855fa0db06d1997ad84f3e5682d54",
+ ".kilo/skills/aidd-refine-01-brainstorm/actions/03-integrate-answers.md": "b6f2c34f4f03cca48e83ed6fff5936e8ddbecae5fef1f597e99fd764e13f32cd",
+ ".kilo/skills/aidd-refine-01-brainstorm/actions/04-refine-and-validate.md": "4a6368a3e189c3022f133050f996eda3d9195281a3e4bbabdd120f5b8b414c3c",
+ ".kilo/skills/aidd-refine-01-brainstorm/actions/05-confirm-approval.md": "3c6c8184910a210bb6698c2c010aebec88a28313b31bbed0ef9c1189530cd6fe",
+ ".kilo/skills/aidd-pm-05-spec/SKILL.md": "32a14c6e9b275630363a0cca29ebd3c6c35271fa38be9eb79cc0e41e8e6e478b",
+ ".kilo/skills/aidd-pm-05-spec/assets/spec-template.md": "2f7e446c4ec58d05a471212e9ab3ba64395bdd059943620d02bf1bf5c98777c2",
+ ".kilo/skills/aidd-pm-05-spec/assets/spec-validator.yml": "2358c6f0baa5656ddcff9410149cf8261d54199d8722f77769f76ca0d7c8cf18",
+ ".kilo/skills/aidd-pm-04-clarity/SKILL.md": "5f50dcfdf1c96f1ce71eed10dd791e1a2945eb9e761e8d42beca3519370ba55b",
+ ".kilo/skills/aidd-pm-03-prd/SKILL.md": "b3ac6ea89c9642651135cb9f7dea8bdf47fb3bc4ea777216d2f65b5459dd0c6b",
+ ".kilo/skills/aidd-pm-03-prd/assets/prd-template.md": "af01423720e8c9527ff12a2e9ad1de39c6e63c6569359be08defd0a059aabea9",
+ ".kilo/skills/aidd-pm-03-prd/assets/task-template.md": "c0069ed2ecce4742629dccd6be709d4e5a71f3db3821310c381c054aeb479289",
+ ".kilo/skills/aidd-pm-03-prd/actions/01-prd.md": "c0da6597f8c465ad50a17a07543152f53de1fbccc28cd906763d439004084a22",
+ ".kilo/skills/aidd-pm-02-user-stories-create/SKILL.md": "d95bad3cfd000c1e8dba905a152384320a177f5891bdaa218819ffe55f6ad710",
+ ".kilo/skills/aidd-pm-02-user-stories-create/assets/user-story-template.md": "59ecd98d00057313414a74a94c19c0f2d167957e1080b880ee68a69a31948320",
+ ".kilo/skills/aidd-pm-02-user-stories-create/actions/01-create-user-stories.md": "6fad8968a1e787c197764c4a8c09b17c521ae5ea2286a5082addc717bd72b1e6",
+ ".kilo/skills/aidd-pm-01-ticket-info/SKILL.md": "26e0491f8527a073f6685ffe7c3e15a22f230a22837aea92694d34a7a2f2f29d",
+ ".kilo/skills/aidd-pm-01-ticket-info/actions/01-ticket-info.md": "f075ea6ff626534dbe0826d06b67fae93b6488ec4c5c7a3d857f1d05f73d0630",
+ ".kilo/skills/aidd-dev-08-for-sure/SKILL.md": "07a94d0a975a8b6f4e2be89b3fd9d68b9b71bd9843836c76e1aa074685cc4376",
+ ".kilo/skills/aidd-dev-08-for-sure/actions/01-init-tracking.md": "3ce6bb19135e5d31c4d2ad1c2151c1563886a611f2399b47624368268a79dcdf",
+ ".kilo/skills/aidd-dev-08-for-sure/actions/02-auto-accept.md": "235818118c772c0f499ea0668bfbc7bd00c2aae34e6bbd8b13b912fddfa79705",
+ ".kilo/skills/aidd-dev-08-for-sure/actions/03-autonomous-loop.md": "b19d4520ad716def3c2a4611c37725cba9af713cd4bcb668c237e874e1e43843",
+ ".kilo/skills/aidd-dev-07-debug/SKILL.md": "860f4137ca48a43470d52f76ae8e631204e5fd7dd82a661905d40bd583bf56fc",
+ ".kilo/skills/aidd-dev-07-debug/references/mermaid-conventions.md": "85826285744909dd4c4706b82f0dbeff4f88a8f191cb22d538aa12c3c96365eb",
+ ".kilo/skills/aidd-dev-07-debug/assets/task-template.md": "c0069ed2ecce4742629dccd6be709d4e5a71f3db3821310c381c054aeb479289",
+ ".kilo/skills/aidd-dev-07-debug/actions/01-reproduce.md": "7e902e5aadc9162b444b341deb33f2a683000c1cc4722ad856496f9d740ec17d",
+ ".kilo/skills/aidd-dev-07-debug/actions/02-debug.md": "dc3900ce6fb76074b88034d7b7316f4051d78a1828caa3acef9786e8ea582b18",
+ ".kilo/skills/aidd-dev-07-debug/actions/03-reflect-issue.md": "3d5f18634618737870da4c783c7525cee25e09d942faee80125dd7536978ce12",
+ ".kilo/skills/aidd-dev-06-refactor/SKILL.md": "6fbf8c363728a11288c58f6967d36845aa4709a9a69a62bd6c6d9ca6d39135ba",
+ ".kilo/skills/aidd-dev-06-refactor/actions/01-performance.md": "1f7d500967de58875aeb14b732a1af377b17edff8654f4365b3f29743debb3c7",
+ ".kilo/skills/aidd-dev-06-refactor/actions/02-security.md": "db55b81ab824d81b765189296deb1ce31fdb134edac186baf22a2c3bb1cde938",
+ ".kilo/skills/aidd-dev-05-test/SKILL.md": "131c810499c0673ace51a2385640dc533203ca89560f72a381bef4a2abf9d388",
+ ".kilo/skills/aidd-dev-05-test/actions/01-test.md": "f6db9653cd29729c51653df7afe473fae4ae45bb126a694a367bfd84fa1785a4",
+ ".kilo/skills/aidd-dev-05-test/actions/02-test-journey.md": "1eeb85da69abc3f1fc3e5671e83962f44fcb5686d9ca5972eeb2ba4cab31306d",
+ ".kilo/skills/aidd-dev-04-review/SKILL.md": "87b2de872bd37fa19b12f458f6c30d60ca65de8ce2988dc63d0811cdec4720cc",
+ ".kilo/skills/aidd-dev-04-review/assets/code-review-template.md": "e270c4b6b8c69e4fbbbcc08c2f91cc9a09fc8ad155b6f52cec3e3d34a262324d",
+ ".kilo/skills/aidd-dev-04-review/assets/review-functional-template.md": "a84b48347caf4d09d84994b07329e4d05c8053d45630b37d47ca3ccb386e3146",
+ ".kilo/skills/aidd-dev-04-review/assets/review-template.md": "b0ad0ab703e4d9ed960bd324bc37efe5f682cbcd40ed6293791d9074f174201c",
+ ".kilo/skills/aidd-dev-04-review/actions/01-review-code.md": "8d5e4fc6c9243a83025961ae40146f1d96f321d9ff4d93ab74c370bbc53c18ed",
+ ".kilo/skills/aidd-dev-04-review/actions/02-review-functional.md": "9e5d837715f5610a42f1c294b0fa71277538e2629dc47cf09675487dcfa98324",
+ ".kilo/skills/aidd-dev-03-audit/SKILL.md": "da84a82a3446283034f26ad5a335d7f8a48ecd501c254af2f4ddaccd09cd4e0f",
+ ".kilo/skills/aidd-dev-03-audit/actions/01-audit.md": "0371ae3d0c9a383f8b90657f3381717f323742bad922df2c1c508f6db013267e",
+ ".kilo/skills/aidd-dev-02-assert/SKILL.md": "a75c5fe87f257fe476129d8eb5b89267df6563924e5c84bb4ea6c1d7215b14ad",
+ ".kilo/skills/aidd-dev-02-assert/assets/task-template.md": "c0069ed2ecce4742629dccd6be709d4e5a71f3db3821310c381c054aeb479289",
+ ".kilo/skills/aidd-dev-02-assert/actions/01-assert.md": "b8a9680e7cf956f2e1ff7720f755586e2523d6951c35ec686ded659f7fa3a4b1",
+ ".kilo/skills/aidd-dev-02-assert/actions/02-assert-architecture.md": "e5d7effa39f33c045e4d605ed909d46ddf7562e2a0199eb2e39fcc8f3fc92620",
+ ".kilo/skills/aidd-dev-02-assert/actions/03-assert-frontend.md": "ed9751b32580c7fd3fbe02a8205cbb5d85a8e7bc38f982b5130b810950bbd091",
+ ".kilo/skills/aidd-dev-01-plan/SKILL.md": "272aaa80349b438a1536c78e91d5c55c1ef26b65f942caa1c47edc062e0591c9",
+ ".kilo/skills/aidd-dev-01-plan/references/mermaid-conventions.md": "85826285744909dd4c4706b82f0dbeff4f88a8f191cb22d538aa12c3c96365eb",
+ ".kilo/skills/aidd-dev-01-plan/assets/master-plan-template.md": "f793f2bc8fad34f056e824def49527552f50cf12e43f0929731d64278376b822",
+ ".kilo/skills/aidd-dev-01-plan/assets/plan-template.md": "cf462e831d994230c811c71eaa72a8f9880536ba3b657b70342083dee00ab254",
+ ".kilo/skills/aidd-dev-01-plan/assets/tech-choice-template.md": "c9f16f9b598aded5953127b4bf2768b95d7abda0b75d937e0b31dfee9317c40a",
+ ".kilo/skills/aidd-dev-01-plan/actions/01-plan.md": "c480fc1cffe39f117003b5aeea23e10f808952a0eeea067dbc0ab44c0af992ff",
+ ".kilo/skills/aidd-dev-01-plan/actions/02-components-behavior.md": "cacb673334d8947c3c252feaaf0ef50c269c06c5cf8f51b45663cbd42402e094",
+ ".kilo/skills/aidd-dev-01-plan/actions/03-image-extract-details.md": "6f6cddd0893888c71b0aed5ecfe48217afe0eef10feec6415db433bfcc69f8e3",
+ ".kilo/skills/aidd-dev-00-sdlc/SKILL.md": "34964c02e338adbf393c25abc4f5862e28452f874c7640f85c950e170130c17c",
+ ".kilo/skills/aidd-context-06-discovery/SKILL.md": "45cf7373cddfe1614b6edba32b36a9411d9136b8eab29a3ae9b43dab7ee4e912",
+ ".kilo/skills/aidd-context-06-discovery/actions/01-find-skill.md": "600caf7822017bfe75d40773e1673ada784227b98f5b88d4ba98a57822fa0dcf",
+ ".kilo/skills/aidd-context-05-learn/SKILL.md": "9ca8b41c8a8fac66d943ad1658ae7a2f374373d13a8a2edd66e1f7fd058694de",
+ ".kilo/skills/aidd-context-05-learn/assets/adr-template.md": "1f9feb18109b178226885ab7edabc3d1c4dd2a77dd1fa7345be856643107ac16",
+ ".kilo/skills/aidd-context-05-learn/assets/decision-template.md": "1e6229157fd0a07c090ce0bd159336a13554975e146966b306bf25665a179938",
+ ".kilo/skills/aidd-context-05-learn/actions/01-learn.md": "92400bfcc2cdfe9f0bad8f2feadd7d28dce882240fe58971d25dfa880521d8bb",
+ ".kilo/skills/aidd-context-04-mermaid/SKILL.md": "d25ac37dc7e065a1bf6eafc5a49dfaef14af85cb947e26095d6b376a32c3b416",
+ ".kilo/skills/aidd-context-04-mermaid/references/mermaid-conventions.md": "85826285744909dd4c4706b82f0dbeff4f88a8f191cb22d538aa12c3c96365eb",
+ ".kilo/skills/aidd-context-04-mermaid/actions/01-mermaid.md": "f70b18f429701d0c3b46a4c6e75153c732ee9e06a16aa01efec05e810ac7a6dd",
+ ".kilo/skills/aidd-context-03-context-generate/SKILL.md": "e0f9b6c4a2eadc331c5611e1cc18c74d10633e94180bf56a6fee5aed6f984f07",
+ ".kilo/skills/aidd-context-03-context-generate/references/agents-coordination.md": "eaaa31ed554a53f7870151307853e1add7e3ddd1de8e442b8d5e7c5698ab0098",
+ ".kilo/skills/aidd-context-03-context-generate/references/ai-mapping.md": "4ad192b5ae53c7ceadff165a1cef8c3f24949498375bedc0cc359194dea3117e",
+ ".kilo/skills/aidd-context-03-context-generate/references/naming-conventions.md": "fd39d00b1449f0770ee89aad9f6e84d21e1fee2efc0ff547a240b0e18f648cd8",
+ ".kilo/skills/aidd-context-03-context-generate/references/rule-structure.md": "c8ce6eea6dbaae5309a77237d702db193a7748db5c581d0918f17db3989e414f",
+ ".kilo/skills/aidd-context-03-context-generate/references/rule-writing.md": "e4cddd88dca3162d576a1b616c419f5ff2f3b7681a09a569da68358f3713c9e6",
+ ".kilo/skills/aidd-context-03-context-generate/references/skill-structure.md": "2b6114ff8aa30f1a5d7bfd3bf0d7d87e429cb8d65ba13b369e6cdc9c8bec501c",
+ ".kilo/skills/aidd-context-03-context-generate/evals/scenarios.json": "db355f13f2ca3499f912f39ada136472f9bc993846564aeaeb6eab371d485520",
+ ".kilo/skills/aidd-context-03-context-generate/assets/skills/action-template.md": "8bd80e05dcbb10e24adb668778fd9dfb058c92193c52c6012e9f5cc11305103c",
+ ".kilo/skills/aidd-context-03-context-generate/assets/skills/evals-template.md": "c0468fe9869895b42f7a59b48f7613ca4ef3b1af93acb7c41dc063559964ff27",
+ ".kilo/skills/aidd-context-03-context-generate/assets/skills/skill-template.md": "f30bc5a47574cc85dc0daddfa1abd0d7f8bd8a39e201fbb3df5784506a61b13a",
+ ".kilo/skills/aidd-context-03-context-generate/assets/rules/rule-template.md": "200ec56d8ed43acd51b94df783f7de9236b00a6e5398a98a30640d02edb76ba1",
+ ".kilo/skills/aidd-context-03-context-generate/assets/agents/agent-template.md": "476802721ac4947d741b4bd17626860c4914037992a2ebf0ef282553f819aa25",
+ ".kilo/skills/aidd-context-03-context-generate/actions/skills/01-capture-intent.md": "850c9b7dab101eba66284950eb3b8b612aca3ad40a1b13fcdc5ac181d1f72069",
+ ".kilo/skills/aidd-context-03-context-generate/actions/skills/02-design-evals.md": "fc51fb2c85a7462fe27586ddc3cc5c2699214dcd059c28f7ab8daf26a6479ced",
+ ".kilo/skills/aidd-context-03-context-generate/actions/skills/03-decompose-actions.md": "8bf7ff1ac05d968fc7a3e9b6aa5de3df3be04b07e96517cbe06268baec4151fc",
+ ".kilo/skills/aidd-context-03-context-generate/actions/skills/04-draft-skill.md": "08946a56b720408bee9c63cd7141e6c869e6818610546f8a42628fe6d2e12514",
+ ".kilo/skills/aidd-context-03-context-generate/actions/skills/05-write-actions.md": "948ac436af5e9c9e897b8c4e44b12a278943bff2b93afc10b4ddaee587d58cc5",
+ ".kilo/skills/aidd-context-03-context-generate/actions/skills/06-validate.md": "658c1077b03c461bb0c3fa17db047e4d2fbc3874f4d4fbd2e3dc5df606aa03ee",
+ ".kilo/skills/aidd-context-03-context-generate/actions/rules/01-generate-rules.md": "855b9adf65b0b0cc31ca15c68b8ac37da6a816c9a6416fbc3aea424cffa238c3",
+ ".kilo/skills/aidd-context-03-context-generate/actions/agents/01-generate-agent.md": "3dce30335eba1d60c5a62d43184d133eed621bbc344e9277ab0f05ead443e0ba",
+ ".kilo/skills/aidd-context-02-project-init/SKILL.md": "4bd40beb8290018b6fa58b651d3681e13465b39b84c3e4c0c39964aefcc52002",
+ ".kilo/skills/aidd-context-02-project-init/references/mapping-ai-context-file.md": "cf251454634037d4affd1d27cee2593c555dfe29305b521d3bed4564f4cad273",
+ ".kilo/skills/aidd-context-02-project-init/assets/AGENTS.md": "8b3d349220e9f96b45dedf316eeb2b3418666d96d0a4f64d315cadfc9ef337ae",
+ ".kilo/skills/aidd-context-02-project-init/assets/golden-principles.md": "e83c582a9e1477a42531734deed90061f4e004ea28e1b1616bf714070856c888",
+ ".kilo/skills/aidd-context-02-project-init/assets/GUIDELINES.md": "bf41995402b46268ba53ceec41be00c455004603f69035349b6ff3bef14cc18a",
+ ".kilo/skills/aidd-context-02-project-init/assets/README.md": "575086cda27a386806a28c1bb4865cb5f974dc3fe6e39ca8bdd2c19764cf2059",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/workflows/README.md": "33d50760dfde22feb8878cf3e24d399a748eef8ed2df630f465d673d9f125a53",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/stack/README.md": "8dbccfc7d47424411b7725374247b50973a962fff777b272a23109b7e0f2a099",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/architecture.md": "f00c02db4135a43e99f5bdd7888f40f290e39dd4a65bb1539eca9a06c9873427",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/codebase-map.md": "5d1d184bc70c93e0073cb64312f4fa8d50fcf465b0da982f37bde25d624a5386",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/coding-assertions.md": "2e3d7b16f85e8af3cf9971c3b0c23409653e8d693c969ff11892c5a4f10bea90",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/deployment.md": "361e80ebbddda1f0497856530e7a5a35cd2c8ae56df2a6ef64268657de333d28",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/project-brief.md": "0240ee41e05c6091bd136b7c3b18f603731128941c987449917886b191e38e90",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/README.md": "66e6275cd7e7187ca520ad8f2f3c57ebecf967742901e00085c139fd9eea5892",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/testing.md": "760e58855270ee9210b20987b3f01b537b25f6108f8d164e2a88000f4cb278b7",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/vcs.md": "3eccc51898b8c0c17245a737c9fa540f30706676ea01ff771d6898f3861060f1",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/frontend/browsing.md": "f8ab234ba45571979a5dbc2181859a8f6859cd56c9d86371560516b3323dd8a1",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/frontend/design.md": "edcaa8ab125acd64d330a32abac102fa3d0b37b45ef03a9552c71c885c1ea847",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/frontend/forms.md": "662dd1b62a9d3fef587cf38f1c2f6fe3de2d0cb226a9ec50dd7b576bf824115b",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/backend/api-docs.md": "09b9633c1d8c3b5a11bf0d171abf148bf159836ae96223a78a52b9e56ffb52e8",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/backend/backend-communication.md": "87d548e12bed0fa2a2d7601fe1c36d810f40051abd713cc3d4462582319babde",
+ ".kilo/skills/aidd-context-02-project-init/assets/templates/memory/backend/database.md": "899ceb107598c8b9a1adc3ff7cf8b6217e4582553f5c27f3e22b9e7fb0f555b9",
+ ".kilo/skills/aidd-context-02-project-init/actions/01-init-context-file.md": "33c907084418ec22f8c22381fbefecfbf3d88c250781c852059bf611be0f2ae2",
+ ".kilo/skills/aidd-context-02-project-init/actions/02-scaffold-docs.md": "c07f175692241d477b029441a2a984c2fff6de0041ff6f47a6851d73900a1ac3",
+ ".kilo/skills/aidd-context-02-project-init/actions/03-generate-memory.md": "f7cde767985a1d7ca8c2d74c1ffcc11eac2232a97e26b46573533eefcdd5ac96",
+ ".kilo/skills/aidd-context-02-project-init/actions/04-review-memory.md": "211ad0ad0d7c4925acbd8a41f775a16b09de51b85d9f3fc6f972170ac63fd353",
+ ".kilo/skills/aidd-context-02-project-init/actions/05-init-rules-skeleton.md": "12924f4535c083e114a5a4a4ef148e4aa2c8c4c436d23c8f50e152f869e3be2c",
+ ".kilo/skills/aidd-context-02-project-init/actions/06-sync-memory.md": "3f6825c8d230cea72f729aee15cf6136b613b7a9b07ddec237b91fe5ad3be59b",
+ ".kilo/skills/aidd-context-01-bootstrap/SKILL.md": "be11990b997d32ff2acb7c49eba7d63899ffbe161827e4c25d330debace71805",
+ ".kilo/skills/aidd-context-01-bootstrap/references/stack-heuristics.md": "17f7c0df7b19090f42c26ddf70df1049897b3973d9c1bf8df358b87a1cc9985a",
+ ".kilo/skills/aidd-context-01-bootstrap/evals/scenarios.json": "c5998a91c584d561618dbabe66f21bd8f446260731778de4f467a70a6da21784",
+ ".kilo/skills/aidd-context-01-bootstrap/assets/checklist.md": "64b84a7712ca78bc1901d2c78c183310336a4abe1b5890a689c3cf166b026d21",
+ ".kilo/skills/aidd-context-01-bootstrap/assets/install-template.md": "cd67115a7b11fddea0258810b9cee1d35c3e12840f515c5364fa769cad9d6a60",
+ ".kilo/skills/aidd-context-01-bootstrap/actions/01-gather-needs.md": "b3251034285434b06775ab4a59ffe27259bb23cb97ac65927c946a4846ea946d",
+ ".kilo/skills/aidd-context-01-bootstrap/actions/02-propose-candidates.md": "57376071d9d0b011c5f19ba218a3ef28c3bf1fba1220a87260806a2d79e341d6",
+ ".kilo/skills/aidd-context-01-bootstrap/actions/03-audit-candidates.md": "def30caedeca0babb4500b2081fe46bdcaf72ee911e4ad94ae860b068c2ee0e0",
+ ".kilo/skills/aidd-context-01-bootstrap/actions/04-pick-and-design.md": "1444ede4a16e6df368792d7f214e0bb61912621a9c266205e031ec73151606e7",
+ ".kilo/skills/aidd-context-01-bootstrap/actions/05-write-install-md.md": "c94afb152683cc29f10d2d4451632265b7fdc763a8a41b69f8ddc2c00b81dfd0",
+ ".kilo/skills/aidd-async-dev-03-review/SKILL.md": "12577d34b7e03ac89407075bbeb998925e9d1043620913767d390d1153151e39",
+ ".kilo/skills/aidd-async-dev-03-review/references/stop-conditions.md": "47280ec7ebb0bd2d25bb7bf7dd716f5ef41a0ad8163653fa139981b5283e7ba0",
+ ".kilo/skills/aidd-async-dev-03-review/evals/scenarios.json": "562d462eedcb589487585a6840d3077a8cce760ea4ecd5e416a8a01b8472d995",
+ ".kilo/skills/aidd-async-dev-03-review/actions/skills/01-collect-comments.md": "a7494fcd9ec705cf76d36ed9b7ce59b2d9ed6e82ce64084e2ed935d52ab57527",
+ ".kilo/skills/aidd-async-dev-03-review/actions/skills/02-detect-stop.md": "b5d40992028d2e0a1d59f31dd699237005ebb51d9c70a648aca7f757f7449659",
+ ".kilo/skills/aidd-async-dev-03-review/actions/skills/03-fix-iteration.md": "a3133409542ed6fc8e9b814658be68504e646cc44ed58ca749251c6b6dd45f25",
+ ".kilo/skills/aidd-async-dev-03-review/actions/skills/04-finalize.md": "bf01c103e3940fda6fd07092bd35f44993f24cdd25ec7ff5c52004b20a37cb17",
+ ".kilo/skills/aidd-async-dev-02-run/SKILL.md": "63fa98e5a2e3baaa8a4b1e55fa894f4d98fe47e4dbdc0ae5be2c6c5d7f894e01",
+ ".kilo/skills/aidd-async-dev-02-run/evals/scenarios.json": "cf78e4c46ac988912a7de98b1a1143c439d3c744bef234d7294f17b4836a84d0",
+ ".kilo/skills/aidd-async-dev-02-run/actions/skills/01-poll-ready.md": "38b0767d080c60149fc4dd1b04395c72b6cda204bd2152d2f9be54db814626fd",
+ ".kilo/skills/aidd-async-dev-02-run/actions/skills/02-resolve-deps.md": "9ede89ff3396287bde2ed9fed6e8068a8411b9190dc446ec392badaf31a52a5f",
+ ".kilo/skills/aidd-async-dev-02-run/actions/skills/03-acquire-lock.md": "0a9b54f4bc9ebdb653932b57bd9d61e9ee7248d86104bc95841617beb4eeeee5",
+ ".kilo/skills/aidd-async-dev-02-run/actions/skills/04-check-sdlc.md": "1934b9f0fb5824736349070ceca67105892ef7e4f319ca95ae955f564e821633",
+ ".kilo/skills/aidd-async-dev-02-run/actions/skills/05-delegate-sdlc.md": "3142a7d2ee15d1871fecc1b4977ff3fb43b9a343f25913a54cc943d9fab31a7c",
+ ".kilo/skills/aidd-async-dev-02-run/actions/skills/06-write-audit.md": "3cfbabf8f6c6e267994afcf189d17234eac4c3bb35ab68408776f1acb644b6ba",
+ ".kilo/skills/aidd-async-dev-02-run/actions/skills/07-emit-webhook.md": "4c8fe76bdf265386247a636dafc9365946114afa54c479ef13abfd929d7af3db",
+ ".kilo/skills/aidd-async-dev-01-setup/SKILL.md": "ce55273c1d1109267f8725edfeb654df9ad4c84e9055998b0e29f9817c6befa3",
+ ".kilo/skills/aidd-async-dev-01-setup/references/auth-modes.md": "4122f895e4b210fce0e8f4cac81a79f6711eca56edac02ac43235359a77c2f62",
+ ".kilo/skills/aidd-async-dev-01-setup/evals/scenarios.json": "79b49984a0999a3f34348bedbf8e7fe815ebdddf825701fabfedbe39f7a1ede2",
+ ".kilo/skills/aidd-async-dev-01-setup/assets/config-template.json": "d47d1d93014157d525f48f3c96626472d940fafffc0deb106af2371db97b4e83",
+ ".kilo/skills/aidd-async-dev-01-setup/assets/workflow-template.yml": "203382209de920a9405b85cc89817ddf0f731a7604e8a465fc4fb3c32589d168",
+ ".kilo/skills/aidd-async-dev-01-setup/actions/skills/01-detect-context.md": "83f3ba3022dd75fa2597a872a55e8f75173762f932ed39ae73d8181c0b1b4536",
+ ".kilo/skills/aidd-async-dev-01-setup/actions/skills/02-ask-config.md": "986335d1e86a633d0083fe4488aae58266a82ec35d0cdb0b74f0bbcea70e6f4e",
+ ".kilo/skills/aidd-async-dev-01-setup/actions/skills/03-generate-workflow.md": "11f7ec6c03284d0524179f71337691301a6362cf77bf3aa666fe41686b4df40b",
+ ".kilo/skills/aidd-async-dev-01-setup/actions/skills/04-write-config.md": "eb7ecb812e8bdaaeba2e56c71c77bf8c14fce0a2c44311ff7985444617635dd5",
+ ".kilo/skills/aidd-async-dev-01-setup/actions/skills/05-bootstrap-labels.md": "f53177ce1c58767f1bdfcfa3e72f7d4cc5e3d4fd782c35c3998815317be108b1",
+ ".kilo/agents/aidd-async-dev-async-orchestrator.md": "3eb709fb7da8f6df7d4d76c7c69fce0a00b596d7b9522b5dcf3898c7a94d91cf",
+ ".kilo/agents/aidd-dev-implementer.md": "4b4fe709e0ed56b097b697a49f6adfc200cccaad36a0e978a12e4f062a3a5e38",
+ ".kilo/agents/aidd-dev-planner.md": "c83648c34068b6fa762fdc6b073e31cb3e9dfe5bd5bf2fd7e2cb4ad3e865feee",
+ ".kilo/agents/aidd-dev-reviewer.md": "30e2dbb93309d23fc99cbce36a4fcfd0b6d76e49c3425979827727327ba697a6"
}
}
diff --git a/cli/tests/helpers/ports/build-unit-deps.ts b/cli/tests/helpers/ports/build-unit-deps.ts
index 0f3b7f045..86c903cd7 100644
--- a/cli/tests/helpers/ports/build-unit-deps.ts
+++ b/cli/tests/helpers/ports/build-unit-deps.ts
@@ -4,6 +4,7 @@ import "../../../src/domain/tools/ai/claude.js";
import "../../../src/domain/tools/ai/codex.js";
import "../../../src/domain/tools/ai/copilot.js";
import "../../../src/domain/tools/ai/cursor.js";
+import "../../../src/domain/tools/ai/kilo.js";
import "../../../src/domain/tools/ai/opencode.js";
import "../../../src/domain/tools/ide/vscode.js";
import { CLIOutput } from "../../../src/application/output.js";
diff --git a/cli/tests/infrastructure/assets/asset-loader.unit.test.ts b/cli/tests/infrastructure/assets/asset-loader.unit.test.ts
index a4806078b..d0062f130 100644
--- a/cli/tests/infrastructure/assets/asset-loader.unit.test.ts
+++ b/cli/tests/infrastructure/assets/asset-loader.unit.test.ts
@@ -21,6 +21,14 @@ describe("BundledAssetProviderAdapter.loadConfigAsset", () => {
});
});
+ describe("kilo", () => {
+ it("returns parsed kilo.json with Kilo's schema and instructions", () => {
+ const asset = provider.loadConfigAsset("kilo", "kilo.json") as Record;
+ expect(asset).toHaveProperty("$schema", "https://app.kilo.ai/config.json");
+ expect(asset).toHaveProperty("instructions");
+ });
+ });
+
describe("codex", () => {
it("returns config.toml as raw string", () => {
const asset = provider.loadConfigAsset("codex", "config.toml");
diff --git a/cli/tests/infrastructure/framework-build-registry.unit.test.ts b/cli/tests/infrastructure/framework-build-registry.unit.test.ts
index 3a19d3731..3230df3dc 100644
--- a/cli/tests/infrastructure/framework-build-registry.unit.test.ts
+++ b/cli/tests/infrastructure/framework-build-registry.unit.test.ts
@@ -15,6 +15,7 @@ const ALL_TARGETS: readonly FrameworkBuildTarget[] = [
"copilot",
"codex",
"opencode",
+ "kilo",
];
const ALL_MODES: readonly FrameworkBuildMode[] = ["marketplace", "flat"];
diff --git a/docs/FAQ.md b/docs/FAQ.md
index 7cb6c08e6..f31d66ed8 100644
--- a/docs/FAQ.md
+++ b/docs/FAQ.md
@@ -4,14 +4,14 @@ Most "how do I…" answers live in the README; this page covers what isn't docum
## 🤔 Why AIDD instead of your own skills?
-You can write your own Claude Code skills — nothing stops you. AIDD exists because that setup is work every team repeats and re-debugs alone: the router/action split ([Skill](GLOSSARY.md#-skill) glossary entry), the plan → implement → review gating, the plugin packaging and versioning, the multi-tool support (Cursor, Copilot, Codex, OpenCode). AIDD ships that scaffolding pre-built and maintained, so you start from a working SDLC loop and only author the skill content specific to your project. If your workflow doesn't match the framework's shape, [`CREATE_PLUGIN.md`](CREATE_PLUGIN.md) shows how to build on the same scaffolding instead of replacing it.
+You can write your own Claude Code skills — nothing stops you. AIDD exists because that setup is work every team repeats and re-debugs alone: the router/action split ([Skill](GLOSSARY.md#-skill) glossary entry), the plan → implement → review gating, the plugin packaging and versioning, the multi-tool support (Cursor, Copilot, Codex, OpenCode, Kilo Code). AIDD ships that scaffolding pre-built and maintained, so you start from a working SDLC loop and only author the skill content specific to your project. If your workflow doesn't match the framework's shape, [`CREATE_PLUGIN.md`](CREATE_PLUGIN.md) shows how to build on the same scaffolding instead of replacing it.
## 📦 Install, update, other tools
- **Install / first run** → [Quick start](../README.md#-quick-start).
- **Update plugins** → `/plugin marketplace update aidd-framework`, or see [Versioning & updates](MARKETPLACE.md#-versioning--updates).
- **Private repo?** Yes — `/plugin marketplace add` just needs GitHub read access (via `gh auth login` or a PAT).
-- **Cursor / Copilot / Codex / OpenCode?** Each other tool installs via its own native mechanism (project files, local plugins, or a plugin command) from the [release](https://github.com/ai-driven-dev/framework/releases/latest) archives. Steps per tool → [Other tools](../README.md#other-tools).
+- **Cursor / Copilot / Codex / OpenCode / Kilo Code?** Each other tool installs via its own native mechanism (project files, local plugins, or a plugin command) from the [release](https://github.com/ai-driven-dev/framework/releases/latest) archives. Steps per tool → [Other tools](../README.md#other-tools).
## 💸 Cost and quotas
diff --git a/docs/MAINTAINERS.md b/docs/MAINTAINERS.md
index f7cf44786..4697d1bd6 100644
--- a/docs/MAINTAINERS.md
+++ b/docs/MAINTAINERS.md
@@ -68,7 +68,7 @@ release-please opens/updates a `chore: release main` PR on each push to `main`.
3. CI tags each bumped package, creates the GitHub Releases, and attaches the bundles:
- `aidd-framework-marketplace-X.Y.Z.zip` (`.claude-plugin/` + `plugins/`)
- `-vX.Y.Z.zip`
- - `aidd-framework---X.Y.Z.zip` - per-tool distributions (9 archives: 4 marketplace claude/cursor/copilot/codex + 5 flat incl. opencode), produced by the `build-per-tool` matrix job in `ci.yml` via `aidd-cli framework build`. **Pinned** to a specific `@ai-driven-dev/cli` version - bump it deliberately when adopting CLI build changes.
+ - `aidd-framework---X.Y.Z.zip` - per-tool distributions (10 archives: 4 marketplace claude/cursor/copilot/codex + 6 flat incl. opencode and kilo), produced by the `build-per-tool` matrix job in `ci.yml` via `aidd-cli framework build`. **Pinned** to a specific `@ai-driven-dev/cli` version - bump it deliberately when adopting CLI build changes.
Versions live in `.release-please-manifest.json`. Forcing a version / pre-release: `release-as` in `release-please-config.json` (remove it after the release ships).