Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 16 additions & 3 deletions pkg/skill/reserved-names.txt
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# Dojo Skill Marketplace — Reserved Names
# Generated: 2026-10-01 (Official section regenerated from plugins/)
# Generated: 2026-10-02 (Official section regenerated from plugins/)
# Purpose: Prevent slopsquatting (AI-hallucinated name pre-registration)
# Review: Quarterly regeneration recommended
#
# Categories:
# [official] - Current Dojo Platform skills (89)
# [official] - Current Dojo Platform skills (102)
# [platform] - Dojo Platform infrastructure names
# [infra] - Third-party platform/service names
# [slopsquat] - AI-hallucinated names (generated corpus)

# === Official Skills (89) ===
# === Official Skills (102) ===
adversarial-reviewer
agent-dispatch-playbook
agent-performance-report
Expand Down Expand Up @@ -44,6 +44,19 @@ hooks-reference
implementation-prompt
ingest-system-prompt
iterative-scouting
kata-ai-celebration-pack
kata-ai-decompose-goal
kata-ai-draft-goal
kata-ai-draft-routine
kata-ai-goal-ladder
kata-ai-optimize-project
kata-ai-sprint-intention
kata-ai-task-chain
kata-ai-tasks-from-goal
kata-ai-triage-brain-dump
kata-ai-unstick-breakdown
kata-overwhelm
kata-roll-seed
maestro-orchestration
mcp-builder
mcp-cloudflare-builder
Expand Down
36 changes: 36 additions & 0 deletions plugins/kata/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# kata — first-party plugin

The prompts behind Kata's AI features (ADHD / executive-function scaffolding, DojoGenesis). There are 13 hidden, structured-output skills, one per operation of the `kata-ai/v1` contract:

| Skill | Output envelope |
|---|---|
| `kata-ai-decompose-goal` | `{milestones}` |
| `kata-ai-draft-goal` | `{goal}` |
| `kata-ai-tasks-from-goal` | `{tasks}` |
| `kata-ai-task-chain` | `{tasks}` |
| `kata-ai-goal-ladder` | `{order}` |
| `kata-ai-unstick-breakdown` | `{steps}` |
| `kata-ai-sprint-intention` | `{intention}` |
| `kata-ai-optimize-project` | `{suggestions}` |
| `kata-ai-celebration-pack` | `{pack, celebrations}` |
| `kata-ai-draft-routine` | `{routine, tasks}` |
| `kata-ai-triage-brain-dump` | `{items}` |
| `kata-overwhelm` | `{steps}` |
| `kata-roll-seed` | `{seed}` |

Each `SKILL.md` body is the system prompt, sent verbatim. The user message is the op's input JSON. The model answers by calling a single function, `emit_result`, whose parameters are the op's output schema.

## Contract

The schemas are owned by Kata at `Kata/contracts/kata-ai/v1/` (input + output JSON Schema per op, plus golden fixtures). `plugins/kata/contracts/` is a vendored copy; the integrator syncs it, so don't edit it here. Each skill's `input_schema` / `output_schema` frontmatter points into that copy.

## These prompts are product copy

Shame-aware wording is Kata's product, and it lives in these files. Every change is reviewed against Kata's brand voice and non-negotiables (`Kata/CLAUDE.md`). Read every line the model could produce and ask: would a user in the middle of overwhelm feel shamed by this? Bans that apply to every prompt: exclamation marks, the brand-voice banned phrases, streak or guilt framing, and medical or diagnostic language. User-supplied text is always treated as data, never as instructions.

## Versioning

- **Wording change** (same output shape): bump the skill's `version:` by a patch or minor step, e.g. `1.0.0` → `1.0.1` for a fix or `1.1.0` for a reworked prompt.
- **Output shape change** (a field added, removed, renamed, or retyped): it's a new contract version (`kata-ai/v2`) with new schemas in Kata, and v1 keeps being served for binaries already shipped. Never change a v1 shape in place.

Every skill name here is reserved (`reserved-names.txt`, ADR-020) and packages only in first-party mode.
55 changes: 55 additions & 0 deletions plugins/kata/contracts/kata-ai/v1/MANIFEST.sha256
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
7b73f864ad9a0db5bac26fc42683628117ec32c09900044a9726cc190d34f0db ./README.md
96a9c9efd98ceabf4f1b145a95137a15b64539261f9b5e180a0990ff5f24f6d6 ./_defs.schema.json
b79b4508b239a033c73ed16fcfd3eb9fdba766b4fc6c804ff5796d4016b07b38 ./kata-ai-celebration-pack/fixtures/01-low-energy-pack.json
186d7f70aeea7cd080b51036c581ce7d3cb2bc680762964c7cfacbd4916054e5 ./kata-ai-celebration-pack/fixtures/02-loud-pack.json
787e728e88f7b3e094fd299611d49b9f5770ef0f436c564c4fa24affd0689f02 ./kata-ai-celebration-pack/input.schema.json
1e51b44be761de01b85db8b8b2bd5512fcc64ed6b64ca21533506e47efdaaf72 ./kata-ai-celebration-pack/output.schema.json
d6c1598e6046cc9b4d199032a49f63832543100ba9c7f94167101a865b556114 ./kata-ai-decompose-goal/fixtures/01-renew-passport.json
ce9329db4076fbf53efc114b07b8f2bfc9ec2117163a127d0d35dddd8d59c07e ./kata-ai-decompose-goal/fixtures/02-clear-garage.json
b4a06ec6f6d7656b601895d5e7d8d1fbac52d1f742b50c2ed724bcc0c552b41f ./kata-ai-decompose-goal/input.schema.json
1a55679a890495a09c33bbb99581603d61e9678ae10200eff803709924aac1ef ./kata-ai-decompose-goal/output.schema.json
32d89526d2ad7f2a3b8b3e4f2dd32f111aa93c6397dc9605b1f69e93a64b47d4 ./kata-ai-draft-goal/fixtures/01-back-to-running.json
aa4de52a39f9ca7327c5489c48b75bd7fd35342f9ddaa4a8511a2fd4c8115b8b ./kata-ai-draft-goal/fixtures/02-portfolio-site.json
0f88901cf3c356f76e3b6e3450e7a624d0c74378347bce80a100bca7eb102213 ./kata-ai-draft-goal/input.schema.json
35fac2f13dcec117b4a01e37dff9a58902bc278c8c54fae77194937296ce4d7b ./kata-ai-draft-goal/output.schema.json
6e4c25084d2ad8ef61dc717ff51e2e82ee4b549d0bd76482179b6dd4fc6e02dd ./kata-ai-draft-routine/fixtures/01-morning-routine.json
d97a26c4757a0a45bd70a9c5ce26716b5e8df2315851a2c6ddb7b5755b6e4b10 ./kata-ai-draft-routine/fixtures/02-sunday-reset.json
fc67ea87afb03636874234a62b87012f730dcd2cc1689979386dc5086bed72bd ./kata-ai-draft-routine/input.schema.json
5fc14a4493650bbc3634df509afe3b87f0793590b6217fb69e265fdedc1e84e2 ./kata-ai-draft-routine/output.schema.json
ce79852566288470e094b1365d4c6ac1865d05259f22abe6da8c4fd6018fd906 ./kata-ai-goal-ladder/fixtures/01-four-task-ladder.json
f9ec2d161abc3e505ce4dab13b281d6b5afb776d0bf05f561fea02ede08e7996 ./kata-ai-goal-ladder/fixtures/02-two-task-ladder.json
58216341572dde7e4ea2bbcfab71a160baf5ca0097333bfdbdadd5d5db00bf8d ./kata-ai-goal-ladder/input.schema.json
c1e430447cd8ed69a4c7129f3a629b7c5c2f69d51ebcfff044fae56b99889a21 ./kata-ai-goal-ladder/output.schema.json
6e42ba39676e1771cbdc3d1a7878acc324478b9bfeda873bec7cb69bc04b7cb5 ./kata-ai-optimize-project/fixtures/01-site-redesign.json
2e341f2f42d54353cf40a3fea7540cf17e5d2b6903ad3e925fd5e1266d2e46f1 ./kata-ai-optimize-project/fixtures/02-small-project.json
5adfffc943e5bdf9a221810b2f387267d5cb685da3794afe39225637ed48f39d ./kata-ai-optimize-project/input.schema.json
650627be961d59c9551f577f6e814b679ca2b4be864ee55e8a3d8f2dcabe0bfe ./kata-ai-optimize-project/output.schema.json
d5970280052533877c3c888feef72809fd161954ead19d67ecb636d9b099d189 ./kata-ai-sprint-intention/fixtures/01-report-25.json
7b47ffd88408193bfd2278c5602a2c70ead637c6cb8899bf742c1762d57e8da9 ./kata-ai-sprint-intention/fixtures/02-inbox-15.json
d5d2aab979767059e29a60632b800bcbd397600b5448c8e78174d892c1473b86 ./kata-ai-sprint-intention/input.schema.json
7608608627ea86e9018c39eeb145e57609509a2282e9b2bd48f2599fac87b415 ./kata-ai-sprint-intention/output.schema.json
d8459b66bdd21fcb7bca0e3f673ac7ac08b4727ad69f2ad161b7dc04388efd0d ./kata-ai-task-chain/fixtures/01-tax-receipts.json
c977459a6cad9c4cab24de25c516810efde4cfb9e72ca1236748258703c50312 ./kata-ai-task-chain/fixtures/02-report-draft.json
aee0f057456dcd9b2ae084d8332507ee39b6eb27e41820e7281a61dfc605499e ./kata-ai-task-chain/input.schema.json
775395ff740cf4b56b958c96e011a9720c71423db172f26e3fd34b284252761d ./kata-ai-task-chain/output.schema.json
5cce4e83ca836bdc2ced721b88d7f3ca158f7945e6cc50ce2d497aac496c02c6 ./kata-ai-tasks-from-goal/fixtures/01-passport-tasks.json
45b70a8e73d7fce84046194b9e8b3dfbb88900ce4ae7e7054765d16553f5901f ./kata-ai-tasks-from-goal/fixtures/02-portfolio-tasks.json
f355c23822e0ceecd76cd4e97b554c6c3beff8b68dd5a55f255b9be1614557d6 ./kata-ai-tasks-from-goal/input.schema.json
b18230c5937404dbc47acf4a3e3f1431412778ad8b054fd54990c47ac852e0d8 ./kata-ai-tasks-from-goal/output.schema.json
c677528e4b9016009caab45599c9e97126686a4532650637185e1ba61c454ef4 ./kata-ai-triage-brain-dump/fixtures/01-three-items.json
131a6c19e372918e943439880ede03e6dd076502e777a7825ce46047321015a2 ./kata-ai-triage-brain-dump/fixtures/02-single-item.json
65cd1ba9f0d38ee536a28bf33e853b187dcae28894e869f43f7f5a9c3349a4c1 ./kata-ai-triage-brain-dump/input.schema.json
527b5c1c35e8c82b3b656fc037b69721df3e5576a661d6fd03f154efd75269e3 ./kata-ai-triage-brain-dump/output.schema.json
25290f5663dd71a212a1c2295d9094f86db288f6f0e48aaca68465c6472604e7 ./kata-ai-unstick-breakdown/fixtures/01-dreaded-email.json
657391ba781b2f802191f561fc285958e2e08a905daaec3b7ef3f2cc7a1aaec3 ./kata-ai-unstick-breakdown/fixtures/02-laundry.json
18fd63cbb4c8ea514dbdd851c6824c9b2eee35413ab986cbc231f502b767d383 ./kata-ai-unstick-breakdown/input.schema.json
6333b7a54bbec42465f4a6533b58fce87995f7ac767107cdd956b488bd571ac9 ./kata-ai-unstick-breakdown/output.schema.json
b2f54371cb084a3687646e13a406919f8f180ad96e6558812c247cb2a8960465 ./kata-overwhelm/fixtures/01-thesis-stuck.json
b655ce075478f02d3aa236345f12687d57fc0add5468c53021ffaf9266c2ba71 ./kata-overwhelm/fixtures/02-goal-only.json
cd37cb1c8a6b49dfa36aedb84a97157837720b8fa34738fe2bedfa4158645f0c ./kata-overwhelm/input.schema.json
69289ea7cd089d1598c098c2e7865038ff579242a10b8f91a1d1231ea5f48f04 ./kata-overwhelm/output.schema.json
8157cdb2c076d1b754fd0884f5f0cc06ffbf1cf9fc00d5388b5d16015b31b8af ./kata-roll-seed/fixtures/01-stuck-on-email.json
1ac3ac3ceeb82012f0de1feb751db5f4f4566be189fb42a7aa4de752a8f68653 ./kata-roll-seed/fixtures/02-nothing-stuck.json
1a4435ae4b1c485510845ca8a62f66150255bc117067f76f7f53e8c75ef8f379 ./kata-roll-seed/input.schema.json
5250fc5bba62d82409783449c6e2a1c8e637c73dea4dbee53953d7d2b6a8e9f6 ./kata-roll-seed/output.schema.json
70e6634249bb8f234dc6ab548b5d83d067b94abfb9c18153ebab72e8be8cd988 ./lint.json
39 changes: 39 additions & 0 deletions plugins/kata/contracts/kata-ai/v1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# kata-ai/v1

The contract between Kata (the app) and the DojoGenesis gateway for AI-backed skills. Defined by DGS-149; the ruling is in `specs/rollgoal-parity/05-ai-gateway-contract-scout.md` section 5.

13 skills: the 11 `kata-ai-*` ops plus the two existing skills `kata-overwhelm` and `kata-roll-seed`.

## Layout

```
_defs.schema.json shared fragments (enums, TaskDraft, Milestone); human source of truth
lint.json shame-aware voice lint rules
<skill-id>/input.schema.json
<skill-id>/output.schema.json
<skill-id>/fixtures/NN-<slug>.json
```

Fixture shape: `{ description, input, valid_output, invalid_outputs: [{ why, output }] }`. Each `why` starts with `schema:` (must fail the output schema) or `lint:` (must pass the schema but trip a lint rule). Every `valid_output` must pass its schema and trip no lint rule.

## Rules

- JSON Schema draft 2020-12. Outputs are always an object at the root, because the gateway uses the output schema verbatim as a function-tool `parameters` object.
- Output schemas inline the shared defs (no `$ref`, no `oneOf`/`anyOf`) so they work as tool parameters across providers. `_defs.schema.json` is the human source; if it changes, update every output that inlines the fragment. Input schemas `$ref` it.
- `additionalProperties: false` everywhere. Sizes are capped on purpose (steps 1-7, milestones 1-10, tasks 1-12, titles at 120 characters, steps at 200, intention at 160).
- `user_id` appears only in `kata-overwhelm` and `kata-roll-seed`. The 11 `kata-ai-*` ops get no user_id and no memory context in v1.
- Enums mirror `src/types/enums.ts` and `src/types/work.ts`. `priority` on a goal is the `GoalPriority` string enum, not a number.

## Gateway vendoring

The gateway keeps a copy of this directory and runs a CI check that the file hashes match Kata's. It validates every model response against the output schema, and the same fixtures drive Kata's parser contract tests.

## Lint rules

`lint.json` applies to every string value in an output, recursively. Patterns are RE2 compatible (Go `regexp`): no lookarounds. Rules:

no-exclamation, no-dont-worry, no-youve-got-this, no-you-should, no-you-didnt, no-you-failed, no-lazy, no-just-do-it, no-simply, no-medical-diagnos, no-medical-treat, no-medical-cure, no-medical-symptom.

## Versioning

A breaking change (removed or renamed key, narrowed enum, tighter bound that rejects previously valid output) goes in a new `v2/` directory. v1 stays frozen. Additive, backward-compatible loosening may land in v1.
5 changes: 5 additions & 0 deletions plugins/kata/contracts/kata-ai/v1/SOURCE
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
source: DojoGenesis/kata contracts/kata-ai/v1
commit: bde2add7be8d4adbb309db1f25cf87dd8f60c445
branch: feat/dgs-149-kata-ai-v1-contracts
vendored: 2026-10-02
rule: do not edit here; change in Kata, re-vendor, regenerate MANIFEST.sha256 (shasum -a 256 over every file except MANIFEST.sha256 and SOURCE)
184 changes: 184 additions & 0 deletions plugins/kata/contracts/kata-ai/v1/_defs.schema.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://contracts.dojogenesis.com/kata-ai/v1/_defs.schema.json",
"title": "kata-ai/v1 shared definitions",
"description": "Human source of truth for shared fragments. Mirrors src/types/enums.ts and src/types/work.ts. Output schemas inline these (no $ref) so they work as function-tool parameters; input schemas $ref them.",
"$defs": {
"EnergyLevel": {
"type": "string",
"enum": [
"low",
"medium",
"high"
]
},
"Urgency": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"must_do"
]
},
"Vibe": {
"type": "string",
"enum": [
"calm",
"creative",
"admin",
"deep_work",
"maintenance",
"social"
]
},
"TaskSize": {
"type": "string",
"enum": [
"tiny",
"small",
"medium",
"large"
]
},
"GoalPriority": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"critical"
]
},
"RoutineType": {
"type": "string",
"enum": [
"morning",
"evening",
"workout",
"chores",
"custom"
]
},
"CelebrationType": {
"type": "string",
"enum": [
"restorative",
"energizing",
"social",
"sensory"
]
},
"BrainDumpCategory": {
"type": "string",
"enum": [
"task",
"goal",
"routine",
"celebration",
"milestone",
"mixed"
]
},
"TaskStatus": {
"type": "string",
"enum": [
"active",
"completed",
"archived",
"blocked"
]
},
"TaskDraft": {
"type": "object",
"description": "A small, editable task suggestion. Only title is required.",
"properties": {
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"description": {
"type": "string",
"maxLength": 300
},
"time_needed": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 480,
"description": "Minutes."
},
"energy_required": {
"type": "string",
"enum": [
"low",
"medium",
"high"
]
},
"urgency": {
"type": "string",
"enum": [
"low",
"medium",
"high",
"must_do"
]
},
"vibe": {
"type": "string",
"enum": [
"calm",
"creative",
"admin",
"deep_work",
"maintenance",
"social"
]
},
"size": {
"type": "string",
"enum": [
"tiny",
"small",
"medium",
"large"
]
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40,
"minLength": 1
},
"minItems": 0,
"maxItems": 5
}
},
"required": [
"title"
],
"additionalProperties": false
},
"Milestone": {
"type": "object",
"description": "Draft milestone. The app adds completed:false when it persists.",
"properties": {
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"description": {
"type": "string",
"maxLength": 300
}
},
"required": [
"title"
],
"additionalProperties": false
}
}
}
Loading
Loading