diff --git a/artifacts/audits/phase1-architecture/capability-reconciliation.json b/artifacts/audits/phase1-architecture/capability-reconciliation.json index 7951563..7e98ca4 100644 --- a/artifacts/audits/phase1-architecture/capability-reconciliation.json +++ b/artifacts/audits/phase1-architecture/capability-reconciliation.json @@ -32,6 +32,9 @@ "skills/design/rams/SKILL.md": "skills/design/rams/capability.json", "skills/design/review-animations/SKILL.md": "skills/design/review-animations/capability.json", "skills/design/ui-design-brain/SKILL.md": "skills/design/ui-design-brain/capability.json", + "skills/engineering/david-brain-to-docs/SKILL.md": "skills/engineering/david-brain-to-docs/capability.json", + "skills/engineering/david-create-readonly-db-role/SKILL.md": "skills/engineering/david-create-readonly-db-role/capability.json", + "skills/engineering/david-prompt-me/SKILL.md": "skills/engineering/david-prompt-me/capability.json", "skills/engineering/fix-sentry-issues/SKILL.md": "skills/engineering/fix-sentry-issues/capability.json", "skills/engineering/gemini-review/SKILL.md": "skills/engineering/gemini-review/capability.json", "skills/engineering/hermes-native-patch-migration/SKILL.md": "skills/engineering/hermes-native-patch-migration/capability.json", @@ -40,35 +43,18 @@ "skills/engineering/simplify/SKILL.md": "skills/engineering/simplify/capability.json", "skills/engineering/tdd/SKILL.md": "skills/engineering/tdd/capability.json", "skills/imported/benjitaylor/stageshow/SKILL.md": "skills/imported/benjitaylor/stageshow/capability.json", - "skills/imported/david/david-agent-self-scheduling/SKILL.md": "skills/imported/david/david-agent-self-scheduling/capability.json", "skills/imported/david/david-anti-sleep/SKILL.md": "skills/imported/david/david-anti-sleep/capability.json", - "skills/imported/david/david-brain-to-docs/SKILL.md": "skills/imported/david/david-brain-to-docs/capability.json", "skills/imported/david/david-browser-harness/SKILL.md": "skills/imported/david/david-browser-harness/capability.json", "skills/imported/david/david-cmux/SKILL.md": "skills/imported/david/david-cmux/capability.json", "skills/imported/david/david-codex-subagent/SKILL.md": "skills/imported/david/david-codex-subagent/capability.json", - "skills/imported/david/david-create-readonly-db-role/SKILL.md": "skills/imported/david/david-create-readonly-db-role/capability.json", - "skills/imported/david/david-cyber-audit/SKILL.md": "skills/imported/david/david-cyber-audit/capability.json", "skills/imported/david/david-deep-research/SKILL.md": "skills/imported/david/david-deep-research/capability.json", "skills/imported/david/david-deepapi/SKILL.md": "skills/imported/david/david-deepapi/capability.json", - "skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md": "skills/imported/david/david-distribute-skill-to-all-agents/capability.json", "skills/imported/david/david-effective-agent-skills/SKILL.md": "skills/imported/david/david-effective-agent-skills/capability.json", "skills/imported/david/david-fable-safe-prompt/SKILL.md": "skills/imported/david/david-fable-safe-prompt/capability.json", - "skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md": "skills/imported/david/david-folder-specific-claude-and-agents-md/capability.json", "skills/imported/david/david-goal-loop/SKILL.md": "skills/imported/david/david-goal-loop/capability.json", - "skills/imported/david/david-google-safe-browsing/SKILL.md": "skills/imported/david/david-google-safe-browsing/capability.json", "skills/imported/david/david-handoff/SKILL.md": "skills/imported/david/david-handoff/capability.json", - "skills/imported/david/david-level-up/SKILL.md": "skills/imported/david/david-level-up/capability.json", - "skills/imported/david/david-pi-custom-model/SKILL.md": "skills/imported/david/david-pi-custom-model/capability.json", - "skills/imported/david/david-pi-web-search/SKILL.md": "skills/imported/david/david-pi-web-search/capability.json", - "skills/imported/david/david-prompt-me/SKILL.md": "skills/imported/david/david-prompt-me/capability.json", - "skills/imported/david/david-push-skill-to-github/SKILL.md": "skills/imported/david/david-push-skill-to-github/capability.json", "skills/imported/david/david-read-all-adrs/SKILL.md": "skills/imported/david/david-read-all-adrs/capability.json", - "skills/imported/david/david-research-prompt/SKILL.md": "skills/imported/david/david-research-prompt/capability.json", - "skills/imported/david/david-run-deep-swe/SKILL.md": "skills/imported/david/david-run-deep-swe/capability.json", "skills/imported/david/david-setup-help/SKILL.md": "skills/imported/david/david-setup-help/capability.json", - "skills/imported/david/david-short/SKILL.md": "skills/imported/david/david-short/capability.json", - "skills/imported/david/david-teach/SKILL.md": "skills/imported/david/david-teach/capability.json", - "skills/imported/david/david-youtube-transcript/SKILL.md": "skills/imported/david/david-youtube-transcript/capability.json", "skills/imported/emil/emil-animate-expo/SKILL.md": "skills/imported/emil/emil-animate-expo/capability.json", "skills/imported/emil/emil-animate/SKILL.md": "skills/imported/emil/emil-animate/capability.json", "skills/imported/emil/emil-animation-performance/SKILL.md": "skills/imported/emil/emil-animation-performance/capability.json", @@ -119,7 +105,6 @@ "skills/imported/matt/matt-improve-codebase-architecture/SKILL.md": "skills/imported/matt/matt-improve-codebase-architecture/capability.json", "skills/imported/matt/matt-prototype/SKILL.md": "skills/imported/matt/matt-prototype/capability.json", "skills/imported/matt/matt-research/SKILL.md": "skills/imported/matt/matt-research/capability.json", - "skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md": "skills/imported/matt/matt-resolving-merge-conflicts/capability.json", "skills/imported/matt/matt-setup-matt-pocock-skills/SKILL.md": "skills/imported/matt/matt-setup-matt-pocock-skills/capability.json", "skills/imported/matt/matt-tdd/SKILL.md": "skills/imported/matt/matt-tdd/capability.json", "skills/imported/matt/matt-teach/SKILL.md": "skills/imported/matt/matt-teach/capability.json", @@ -152,20 +137,27 @@ "skills/imported/ui/fixing-metadata/SKILL.md": "skills/imported/ui/fixing-metadata/capability.json", "skills/imported/ui/fixing-motion-performance/SKILL.md": "skills/imported/ui/fixing-motion-performance/capability.json", "skills/imported/ui/transitions-dev-motion/SKILL.md": "skills/imported/ui/transitions-dev-motion/capability.json", + "skills/knowledge/david-research-prompt/SKILL.md": "skills/knowledge/david-research-prompt/capability.json", + "skills/knowledge/david-youtube-transcript/SKILL.md": "skills/knowledge/david-youtube-transcript/capability.json", "skills/knowledge/field-theory-bookmark-synthesis/SKILL.md": "skills/knowledge/field-theory-bookmark-synthesis/capability.json", "skills/knowledge/fieldbook-source-split/SKILL.md": "skills/knowledge/fieldbook-source-split/capability.json", "skills/knowledge/muller-brockmann-grid-systems/SKILL.md": "skills/knowledge/muller-brockmann-grid-systems/capability.json", "skills/knowledge/userinterface-wiki/SKILL.md": "skills/knowledge/userinterface-wiki/capability.json", + "skills/orchestration/david-agent-self-scheduling/SKILL.md": "skills/orchestration/david-agent-self-scheduling/capability.json", "skills/orchestration/goal-validation-threads/SKILL.md": "skills/orchestration/goal-validation-threads/capability.json", "skills/orchestration/goal/SKILL.md": "skills/orchestration/goal/capability.json", "skills/orchestration/handoff/SKILL.md": "skills/orchestration/handoff/capability.json", "skills/orchestration/parallel-goals/SKILL.md": "skills/orchestration/parallel-goals/capability.json", + "skills/planning/matt-resolving-merge-conflicts/SKILL.md": "skills/planning/matt-resolving-merge-conflicts/capability.json", + "skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md": "skills/platform/david-folder-specific-claude-and-agents-md/capability.json", "skills/platform/local-tracker-dashboard/SKILL.md": "skills/platform/local-tracker-dashboard/capability.json", "skills/platform/reclaude/SKILL.md": "skills/platform/reclaude/capability.json", "skills/product/compatibility/ideate/SKILL.md": "skills/product/compatibility/ideate/capability.json", "skills/product/cpo/SKILL.md": "skills/product/cpo/capability.json", "skills/qa/live-site-health-check/SKILL.md": "skills/qa/live-site-health-check/capability.json", "skills/review/agent-verification-ladder/SKILL.md": "skills/review/agent-verification-ladder/capability.json", + "skills/review/david-cyber-audit/SKILL.md": "skills/review/david-cyber-audit/capability.json", + "skills/review/david-google-safe-browsing/SKILL.md": "skills/review/david-google-safe-browsing/capability.json", "skills/review/scratch-eval-promotion-gate/SKILL.md": "skills/review/scratch-eval-promotion-gate/capability.json" }, "discovered": [ @@ -193,6 +185,9 @@ "skills/design/rams/SKILL.md", "skills/design/review-animations/SKILL.md", "skills/design/ui-design-brain/SKILL.md", + "skills/engineering/david-brain-to-docs/SKILL.md", + "skills/engineering/david-create-readonly-db-role/SKILL.md", + "skills/engineering/david-prompt-me/SKILL.md", "skills/engineering/fix-sentry-issues/SKILL.md", "skills/engineering/gemini-review/SKILL.md", "skills/engineering/hermes-native-patch-migration/SKILL.md", @@ -201,35 +196,18 @@ "skills/engineering/simplify/SKILL.md", "skills/engineering/tdd/SKILL.md", "skills/imported/benjitaylor/stageshow/SKILL.md", - "skills/imported/david/david-agent-self-scheduling/SKILL.md", "skills/imported/david/david-anti-sleep/SKILL.md", - "skills/imported/david/david-brain-to-docs/SKILL.md", "skills/imported/david/david-browser-harness/SKILL.md", "skills/imported/david/david-cmux/SKILL.md", "skills/imported/david/david-codex-subagent/SKILL.md", - "skills/imported/david/david-create-readonly-db-role/SKILL.md", - "skills/imported/david/david-cyber-audit/SKILL.md", "skills/imported/david/david-deep-research/SKILL.md", "skills/imported/david/david-deepapi/SKILL.md", - "skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md", "skills/imported/david/david-effective-agent-skills/SKILL.md", "skills/imported/david/david-fable-safe-prompt/SKILL.md", - "skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md", "skills/imported/david/david-goal-loop/SKILL.md", - "skills/imported/david/david-google-safe-browsing/SKILL.md", "skills/imported/david/david-handoff/SKILL.md", - "skills/imported/david/david-level-up/SKILL.md", - "skills/imported/david/david-pi-custom-model/SKILL.md", - "skills/imported/david/david-pi-web-search/SKILL.md", - "skills/imported/david/david-prompt-me/SKILL.md", - "skills/imported/david/david-push-skill-to-github/SKILL.md", "skills/imported/david/david-read-all-adrs/SKILL.md", - "skills/imported/david/david-research-prompt/SKILL.md", - "skills/imported/david/david-run-deep-swe/SKILL.md", "skills/imported/david/david-setup-help/SKILL.md", - "skills/imported/david/david-short/SKILL.md", - "skills/imported/david/david-teach/SKILL.md", - "skills/imported/david/david-youtube-transcript/SKILL.md", "skills/imported/emil/emil-animate-expo/SKILL.md", "skills/imported/emil/emil-animate/SKILL.md", "skills/imported/emil/emil-animation-performance/SKILL.md", @@ -280,7 +258,6 @@ "skills/imported/matt/matt-improve-codebase-architecture/SKILL.md", "skills/imported/matt/matt-prototype/SKILL.md", "skills/imported/matt/matt-research/SKILL.md", - "skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md", "skills/imported/matt/matt-setup-matt-pocock-skills/SKILL.md", "skills/imported/matt/matt-tdd/SKILL.md", "skills/imported/matt/matt-teach/SKILL.md", @@ -313,27 +290,34 @@ "skills/imported/ui/fixing-metadata/SKILL.md", "skills/imported/ui/fixing-motion-performance/SKILL.md", "skills/imported/ui/transitions-dev-motion/SKILL.md", + "skills/knowledge/david-research-prompt/SKILL.md", + "skills/knowledge/david-youtube-transcript/SKILL.md", "skills/knowledge/field-theory-bookmark-synthesis/SKILL.md", "skills/knowledge/fieldbook-source-split/SKILL.md", "skills/knowledge/muller-brockmann-grid-systems/SKILL.md", "skills/knowledge/userinterface-wiki/SKILL.md", + "skills/orchestration/david-agent-self-scheduling/SKILL.md", "skills/orchestration/goal-validation-threads/SKILL.md", "skills/orchestration/goal/SKILL.md", "skills/orchestration/handoff/SKILL.md", "skills/orchestration/parallel-goals/SKILL.md", + "skills/planning/matt-resolving-merge-conflicts/SKILL.md", + "skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md", "skills/platform/local-tracker-dashboard/SKILL.md", "skills/platform/reclaude/SKILL.md", "skills/product/compatibility/ideate/SKILL.md", "skills/product/cpo/SKILL.md", "skills/qa/live-site-health-check/SKILL.md", "skills/review/agent-verification-ladder/SKILL.md", + "skills/review/david-cyber-audit/SKILL.md", + "skills/review/david-google-safe-browsing/SKILL.md", "skills/review/scratch-eval-promotion-gate/SKILL.md" ], "missing": [] }, "counts": { - "callable_skills": 159, - "manifests": 159, + "callable_skills": 151, + "manifests": 151, "package_exports": 20, "private_declarations": 1, "unclassified": 0 diff --git a/config/runtime-targets.json b/config/runtime-targets.json index 6bdeeba..8922284 100644 --- a/config/runtime-targets.json +++ b/config/runtime-targets.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "catalog_digest": "f5aea9cb9218e379ee2b5c03a9b0967dd7701c840e5a5cdd48bddfe7c6ec9a8a", + "catalog_digest": "3bb864f353cac156603490a1ff0d930971861c5e81b1727b2411f24c830ae09a", "targets": [ { "name": "claude", diff --git a/config/stack-maintenance.json b/config/stack-maintenance.json index f3aaa63..3202422 100644 --- a/config/stack-maintenance.json +++ b/config/stack-maintenance.json @@ -10,6 +10,7 @@ "stack-codex-bundle", "matt-skills", "david-skills", + "stack-owned-imports", "impeccable", "emil-design-eng", "review-animations", diff --git a/docs/stack-maintenance.md b/docs/stack-maintenance.md index 22c94ad..5d2490a 100644 --- a/docs/stack-maintenance.md +++ b/docs/stack-maintenance.md @@ -219,6 +219,49 @@ support files keep their individual inspected commits across later provider updates. The materializer reads both legacy grouped Markdown provenance and per-file Markdown/JSON provenance, and rejects malformed retained-file records. +### Retired and Stack-owned former imports (2026-11-13) + +Retention keeps a removed upstream skill at its last reviewed bytes until the +owner decides. On 2026-11-13 every retained David and Matt skill was decided. +None is a retained target any more. + +Retired, because each only works in its author's own setup or adds nothing +Stack lacks. Git history at the parent of the retiring commit is the rollback +reference. + +| Skill | Reason | +| --- | --- | +| `david-pi-web-search` | Pi agent only; other runtimes have their own web tools. | +| `david-pi-custom-model` | Pi agent model registry (`~/.pi/agent`). | +| `david-push-skill-to-github` | Pushes the author's private `~/.agents` repo through cmux. | +| `david-distribute-skill-to-all-agents` | The author's four-folder symlink layout; Stack's installer owns distribution. | +| `david-run-deep-swe` | Model benchmark using the author's OpenRouter key from `~/.zshrc`. | +| `david-level-up` | Writes `notes/learning/david-knowledge.md` and is tuned to the author. | +| `david-short` | A one-line "make it shorter" prompt. | +| `david-teach` | An older fork of `matt-teach`, which Stack keeps. | + +Stack-owned, so the lane no longer tracks upstream. Each skill keeps its +canonical name, family and command, and moved out of `skills/imported/` +into its family root. `references/source.md` keeps the origin path, the last +inspected commit and the MIT notice. The `stack-owned-imports` source row +records them as `repository-owned-capability`, which puts them outside the +maintenance diff allowlist. + +| Skill | Stack path | Origin | +| --- | --- | --- | +| `david-youtube-transcript` | `skills/knowledge/` | `davidondrej/skills` research-and-web | +| `david-research-prompt` | `skills/knowledge/` | `davidondrej/skills` research-and-web | +| `david-google-safe-browsing` | `skills/review/` | `davidondrej/skills` ops-and-setup | +| `david-cyber-audit` | `skills/review/` | `davidondrej/skills` ops-and-setup | +| `david-create-readonly-db-role` | `skills/engineering/` | `davidondrej/skills` ops-and-setup | +| `david-prompt-me` | `skills/engineering/` | `davidondrej/skills` thinking-and-docs | +| `david-brain-to-docs` | `skills/engineering/` | `davidondrej/skills` thinking-and-docs | +| `david-agent-self-scheduling` | `skills/orchestration/` | `davidondrej/skills` agent-orchestration | +| `david-folder-specific-claude-and-agents-md` | `skills/platform/` | `davidondrej/skills` skill-authoring | +| `matt-resolving-merge-conflicts` | `skills/planning/` | `mattpocock/skills` engineering; upstream removed the skill (CHANGELOG, PR 1120) and keeps only an archived docs page | + +The David skills that still exist upstream stay on the maintenance lane. + `prepare` creates a disposable candidate clone outside the caller checkout from that recorded `origin/main` SHA. Only explicit policy-allowlisted files with receipt-bound manifest hashes can be proposed, and candidate content is diff --git a/registry/capabilities.json b/registry/capabilities.json index 009a997..ad5adda 100644 --- a/registry/capabilities.json +++ b/registry/capabilities.json @@ -1685,16 +1685,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-agent-self-scheduling/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/orchestration/david-agent-self-scheduling/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-agent-self-scheduling" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-agent-self-scheduling" }, - "purpose": "Namespaced import of David Ondrej agent skills: Make an AI agent run", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Make an AI agent run", "role": "workflow", "runtimes": { "publish_targets": [ @@ -1708,7 +1708,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-agent-self-scheduling/SKILL.md" + "skill_path": "skills/orchestration/david-agent-self-scheduling/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -1811,16 +1811,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-brain-to-docs/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-brain-to-docs/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-brain-to-docs" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-brain-to-docs" }, - "purpose": "Namespaced import of David Ondrej agent skills: Use when the user wants", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Use when the user wants", "role": "leaf", "runtimes": { "publish_targets": [ @@ -1834,7 +1834,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-brain-to-docs/SKILL.md" + "skill_path": "skills/engineering/david-brain-to-docs/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -1870,524 +1870,20 @@ "status": "keep" }, "domain": "qa", - "family": "qa", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-browser-harness/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-browser-harness" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Direct browser control", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-browser-harness/SKILL.md" - }, - "trust_class": "read-only", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" - }, - { - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-cmux", - "commands": [ - "stack.orchestrate" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "orchestration", - "family": "orchestration", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-cmux/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-cmux" - }, - "purpose": "Namespaced import of David Ondrej agent skills: MUST be read ANY time", - "role": "workflow", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-cmux/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" - }, - { - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-codex-subagent", - "commands": [ - "stack.orchestrate" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "orchestration", - "family": "orchestration", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-codex-subagent/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-codex-subagent" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Launch OpenAI Codex", - "role": "workflow", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-codex-subagent/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" - }, - { - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-create-readonly-db-role", - "commands": [ - "stack.build" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "engineering", - "family": "engineering", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-create-readonly-db-role/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-create-readonly-db-role" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Provision a hardened", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-create-readonly-db-role/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" - }, - { - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-cyber-audit", - "commands": [ - "stack.review" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "review", - "family": "review", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-cyber-audit/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-cyber-audit" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Read-only exposure audit", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-cyber-audit/SKILL.md" - }, - "trust_class": "read-only", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" - }, - { - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-deep-research", - "commands": [ - "stack.learn" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "knowledge", - "family": "knowledge", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-deep-research/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-deep-research" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Run a deep, source-backed", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-deep-research/SKILL.md" - }, - "trust_class": "read-only", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" - }, - { - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-deepapi", - "commands": [ - "stack.build" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "engineering", - "family": "engineering", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-deepapi/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-deepapi" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Use DeepAPI for scraping", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-deepapi/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" - }, - { - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-distribute-skill-to-all-agents", - "commands": [ - "stack.maintain" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "platform", - "family": "platform", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-distribute-skill-to-all-agents" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Distribute a skill across", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" - }, - { - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-effective-agent-skills", - "commands": [ - "stack.maintain" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "platform", - "family": "platform", + "family": "qa", "lifecycle": "active", "overlaps": [], "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-effective-agent-skills/SKILL.md" + "source_path": "skills/imported/david/david-browser-harness/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-effective-agent-skills" + "source_identity": "upstream:skills/david-browser-harness" }, - "purpose": "Namespaced import of David Ondrej agent skills: How to write effective", + "purpose": "Namespaced import of David Ondrej agent skills: Direct browser control", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2401,9 +1897,9 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-effective-agent-skills/SKILL.md" + "skill_path": "skills/imported/david/david-browser-harness/SKILL.md" }, - "trust_class": "local-mutation", + "trust_class": "read-only", "validation": { "evidence": [ "reviewed-estate-refactor", @@ -2418,9 +1914,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-fable-safe-prompt", + "canonical_name": "david-cmux", "commands": [ - "stack.build" + "stack.orchestrate" ], "context": { "inputs": [ @@ -2436,22 +1932,22 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "engineering", - "family": "engineering", + "domain": "orchestration", + "family": "orchestration", "lifecycle": "active", "overlaps": [], "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-fable-safe-prompt/SKILL.md" + "source_path": "skills/imported/david/david-cmux/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-fable-safe-prompt" + "source_identity": "upstream:skills/david-cmux" }, - "purpose": "Namespaced import of David Ondrej agent skills: Rewrite a user''s prompt", - "role": "leaf", + "purpose": "Namespaced import of David Ondrej agent skills: MUST be read ANY time", + "role": "workflow", "runtimes": { "publish_targets": [ "claude", @@ -2464,7 +1960,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-fable-safe-prompt/SKILL.md" + "skill_path": "skills/imported/david/david-cmux/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2481,9 +1977,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-folder-specific-claude-and-agents-md", + "canonical_name": "david-codex-subagent", "commands": [ - "stack.maintain" + "stack.orchestrate" ], "context": { "inputs": [ @@ -2499,22 +1995,22 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "platform", - "family": "platform", + "domain": "orchestration", + "family": "orchestration", "lifecycle": "active", "overlaps": [], "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md" + "source_path": "skills/imported/david/david-codex-subagent/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-folder-specific-claude-and-agents-md" + "source_identity": "upstream:skills/david-codex-subagent" }, - "purpose": "Namespaced import of David Ondrej agent skills: Create a specialized", - "role": "leaf", + "purpose": "Namespaced import of David Ondrej agent skills: Launch OpenAI Codex", + "role": "workflow", "runtimes": { "publish_targets": [ "claude", @@ -2527,7 +2023,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md" + "skill_path": "skills/imported/david/david-codex-subagent/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2544,9 +2040,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-goal-loop", + "canonical_name": "david-create-readonly-db-role", "commands": [ - "stack.orchestrate" + "stack.build" ], "context": { "inputs": [ @@ -2562,22 +2058,22 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "orchestration", - "family": "orchestration", + "domain": "engineering", + "family": "engineering", "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-goal-loop/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-create-readonly-db-role/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-goal-loop" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-create-readonly-db-role" }, - "purpose": "Namespaced import of David Ondrej agent skills: Explain and write effective", - "role": "workflow", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Provision a hardened", + "role": "leaf", "runtimes": { "publish_targets": [ "claude", @@ -2590,7 +2086,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-goal-loop/SKILL.md" + "skill_path": "skills/engineering/david-create-readonly-db-role/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2607,7 +2103,7 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-google-safe-browsing", + "canonical_name": "david-cyber-audit", "commands": [ "stack.review" ], @@ -2630,16 +2126,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-google-safe-browsing/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/review/david-cyber-audit/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-google-safe-browsing" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-cyber-audit" }, - "purpose": "Namespaced import of David Ondrej agent skills: Prevent and fix Google", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Read-only exposure audit", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2653,7 +2149,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-google-safe-browsing/SKILL.md" + "skill_path": "skills/review/david-cyber-audit/SKILL.md" }, "trust_class": "read-only", "validation": { @@ -2670,9 +2166,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-handoff", + "canonical_name": "david-deep-research", "commands": [ - "stack.orchestrate" + "stack.learn" ], "context": { "inputs": [ @@ -2688,22 +2184,22 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "orchestration", - "family": "orchestration", + "domain": "knowledge", + "family": "knowledge", "lifecycle": "active", "overlaps": [], "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-handoff/SKILL.md" + "source_path": "skills/imported/david/david-deep-research/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-handoff" + "source_identity": "upstream:skills/david-deep-research" }, - "purpose": "Namespaced import of David Ondrej agent skills: Compact the current", - "role": "workflow", + "purpose": "Namespaced import of David Ondrej agent skills: Run a deep, source-backed", + "role": "leaf", "runtimes": { "publish_targets": [ "claude", @@ -2716,9 +2212,9 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-handoff/SKILL.md" + "skill_path": "skills/imported/david/david-deep-research/SKILL.md" }, - "trust_class": "local-mutation", + "trust_class": "read-only", "validation": { "evidence": [ "reviewed-estate-refactor", @@ -2733,7 +2229,7 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-level-up", + "canonical_name": "david-deepapi", "commands": [ "stack.build" ], @@ -2758,14 +2254,14 @@ "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-level-up/SKILL.md" + "source_path": "skills/imported/david/david-deepapi/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-level-up" + "source_identity": "upstream:skills/david-deepapi" }, - "purpose": "Namespaced import of David Ondrej agent skills: Gauge the user''s technical", + "purpose": "Namespaced import of David Ondrej agent skills: Use DeepAPI for scraping", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2779,7 +2275,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-level-up/SKILL.md" + "skill_path": "skills/imported/david/david-deepapi/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2796,7 +2292,7 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-pi-custom-model", + "canonical_name": "david-effective-agent-skills", "commands": [ "stack.maintain" ], @@ -2821,14 +2317,14 @@ "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-pi-custom-model/SKILL.md" + "source_path": "skills/imported/david/david-effective-agent-skills/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-pi-custom-model" + "source_identity": "upstream:skills/david-effective-agent-skills" }, - "purpose": "Namespaced import of David Ondrej agent skills: Register a custom or", + "purpose": "Namespaced import of David Ondrej agent skills: How to write effective", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2842,7 +2338,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-pi-custom-model/SKILL.md" + "skill_path": "skills/imported/david/david-effective-agent-skills/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2859,7 +2355,7 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-pi-web-search", + "canonical_name": "david-fable-safe-prompt", "commands": [ "stack.build" ], @@ -2884,14 +2380,14 @@ "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-pi-web-search/SKILL.md" + "source_path": "skills/imported/david/david-fable-safe-prompt/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-pi-web-search" + "source_identity": "upstream:skills/david-fable-safe-prompt" }, - "purpose": "Namespaced import of David Ondrej agent skills: ONLY for Pi Agents \u2014", + "purpose": "Namespaced import of David Ondrej agent skills: Rewrite a user''s prompt", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2905,7 +2401,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-pi-web-search/SKILL.md" + "skill_path": "skills/imported/david/david-fable-safe-prompt/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2922,9 +2418,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-prompt-me", + "canonical_name": "david-folder-specific-claude-and-agents-md", "commands": [ - "stack.build" + "stack.maintain" ], "context": { "inputs": [ @@ -2940,21 +2436,21 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "engineering", - "family": "engineering", + "domain": "platform", + "family": "platform", "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-prompt-me/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-prompt-me" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-folder-specific-claude-and-agents-md" }, - "purpose": "Namespaced import of David Ondrej agent skills: Prompt the user with", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Create a specialized", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2968,7 +2464,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-prompt-me/SKILL.md" + "skill_path": "skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2985,9 +2481,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-push-skill-to-github", + "canonical_name": "david-goal-loop", "commands": [ - "stack.ship" + "stack.orchestrate" ], "context": { "inputs": [ @@ -3003,21 +2499,21 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "delivery", - "family": "delivery", + "domain": "orchestration", + "family": "orchestration", "lifecycle": "active", "overlaps": [], "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-push-skill-to-github/SKILL.md" + "source_path": "skills/imported/david/david-goal-loop/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-push-skill-to-github" + "source_identity": "upstream:skills/david-goal-loop" }, - "purpose": "Namespaced import of David Ondrej agent skills: Commit and push agent-skill", + "purpose": "Namespaced import of David Ondrej agent skills: Explain and write effective", "role": "workflow", "runtimes": { "publish_targets": [ @@ -3031,9 +2527,9 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-push-skill-to-github/SKILL.md" + "skill_path": "skills/imported/david/david-goal-loop/SKILL.md" }, - "trust_class": "external-mutation", + "trust_class": "local-mutation", "validation": { "evidence": [ "reviewed-estate-refactor", @@ -3042,15 +2538,15 @@ ], "status": "validated" }, - "validation_class": "high-risk", + "validation_class": "representative-route", "visibility": "extended" }, { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-read-all-adrs", + "canonical_name": "david-google-safe-browsing", "commands": [ - "stack.build" + "stack.review" ], "context": { "inputs": [ @@ -3066,21 +2562,21 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "engineering", - "family": "engineering", + "domain": "review", + "family": "review", "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-read-all-adrs/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/review/david-google-safe-browsing/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-read-all-adrs" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-google-safe-browsing" }, - "purpose": "Namespaced import of David Ondrej agent skills: Read every ADR markdown", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Prevent and fix Google", "role": "leaf", "runtimes": { "publish_targets": [ @@ -3094,9 +2590,9 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-read-all-adrs/SKILL.md" + "skill_path": "skills/review/david-google-safe-browsing/SKILL.md" }, - "trust_class": "local-mutation", + "trust_class": "read-only", "validation": { "evidence": [ "reviewed-estate-refactor", @@ -3111,9 +2607,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-research-prompt", + "canonical_name": "david-handoff", "commands": [ - "stack.learn" + "stack.orchestrate" ], "context": { "inputs": [ @@ -3129,22 +2625,22 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "knowledge", - "family": "knowledge", + "domain": "orchestration", + "family": "orchestration", "lifecycle": "active", "overlaps": [], "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-research-prompt/SKILL.md" + "source_path": "skills/imported/david/david-handoff/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-research-prompt" + "source_identity": "upstream:skills/david-handoff" }, - "purpose": "Namespaced import of David Ondrej agent skills: Write a single-paragraph", - "role": "leaf", + "purpose": "Namespaced import of David Ondrej agent skills: Compact the current", + "role": "workflow", "runtimes": { "publish_targets": [ "claude", @@ -3157,9 +2653,9 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-research-prompt/SKILL.md" + "skill_path": "skills/imported/david/david-handoff/SKILL.md" }, - "trust_class": "read-only", + "trust_class": "local-mutation", "validation": { "evidence": [ "reviewed-estate-refactor", @@ -3174,9 +2670,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-run-deep-swe", + "canonical_name": "david-prompt-me", "commands": [ - "stack.orchestrate" + "stack.build" ], "context": { "inputs": [ @@ -3192,22 +2688,22 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "orchestration", - "family": "orchestration", + "domain": "engineering", + "family": "engineering", "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-run-deep-swe/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-prompt-me/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-run-deep-swe" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-prompt-me" }, - "purpose": "Namespaced import of David Ondrej agent skills: Score any AI model on", - "role": "workflow", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Prompt the user with", + "role": "leaf", "runtimes": { "publish_targets": [ "claude", @@ -3220,7 +2716,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-run-deep-swe/SKILL.md" + "skill_path": "skills/engineering/david-prompt-me/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -3237,9 +2733,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-setup-help", + "canonical_name": "david-read-all-adrs", "commands": [ - "stack.maintain" + "stack.build" ], "context": { "inputs": [ @@ -3255,21 +2751,21 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "platform", - "family": "platform", + "domain": "engineering", + "family": "engineering", "lifecycle": "active", "overlaps": [], "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-setup-help/SKILL.md" + "source_path": "skills/imported/david/david-read-all-adrs/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-setup-help" + "source_identity": "upstream:skills/david-read-all-adrs" }, - "purpose": "Namespaced import of David Ondrej agent skills: Walk the user through", + "purpose": "Namespaced import of David Ondrej agent skills: Read every ADR markdown", "role": "leaf", "runtimes": { "publish_targets": [ @@ -3283,7 +2779,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-setup-help/SKILL.md" + "skill_path": "skills/imported/david/david-read-all-adrs/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -3300,9 +2796,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-short", + "canonical_name": "david-research-prompt", "commands": [ - "stack.build" + "stack.learn" ], "context": { "inputs": [ @@ -3318,21 +2814,21 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "engineering", - "family": "engineering", + "domain": "knowledge", + "family": "knowledge", "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-short/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/knowledge/david-research-prompt/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-short" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-research-prompt" }, - "purpose": "Namespaced import of David Ondrej agent skills: Manually-invoked skill", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Write a single-paragraph", "role": "leaf", "runtimes": { "publish_targets": [ @@ -3346,9 +2842,9 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-short/SKILL.md" + "skill_path": "skills/knowledge/david-research-prompt/SKILL.md" }, - "trust_class": "local-mutation", + "trust_class": "read-only", "validation": { "evidence": [ "reviewed-estate-refactor", @@ -3363,9 +2859,9 @@ { "artifact_type": "skill", "audit_status": "reviewed", - "canonical_name": "david-teach", + "canonical_name": "david-setup-help", "commands": [ - "stack.build" + "stack.maintain" ], "context": { "inputs": [ @@ -3381,21 +2877,21 @@ "next_review_trigger": "Reassess on source, export, or runtime-target change.", "status": "keep" }, - "domain": "engineering", - "family": "engineering", + "domain": "platform", + "family": "platform", "lifecycle": "active", "overlaps": [], "ownership": { "package": "imported-skills", "provider": "david", - "source_path": "skills/imported/david/david-teach/SKILL.md" + "source_path": "skills/imported/david/david-setup-help/SKILL.md" }, "provenance": { "license": "unknown", "posture": "imported-upstream", - "source_identity": "upstream:skills/david-teach" + "source_identity": "upstream:skills/david-setup-help" }, - "purpose": "Namespaced import of David Ondrej agent skills: Teach the user a new", + "purpose": "Namespaced import of David Ondrej agent skills: Walk the user through", "role": "leaf", "runtimes": { "publish_targets": [ @@ -3409,7 +2905,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-teach/SKILL.md" + "skill_path": "skills/imported/david/david-setup-help/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -3449,16 +2945,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-youtube-transcript/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/knowledge/david-youtube-transcript/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-youtube-transcript" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-youtube-transcript" }, - "purpose": "Namespaced import of David Ondrej agent skills: Use whenever the user", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Use whenever the user", "role": "leaf", "runtimes": { "publish_targets": [ @@ -3472,7 +2968,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-youtube-transcript/SKILL.md" + "skill_path": "skills/knowledge/david-youtube-transcript/SKILL.md" }, "trust_class": "read-only", "validation": { @@ -7108,16 +6604,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "matt", - "source_path": "skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/planning/matt-resolving-merge-conflicts/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/matt-resolving-merge-conflicts" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/matt-resolving-merge-conflicts" }, - "purpose": "Namespaced import of Matt Pocock engineering/productivity skills: Use", + "purpose": "Stack-owned, adapted from Matt Pocock engineering/productivity skills: Use", "role": "workflow", "runtimes": { "publish_targets": [ @@ -7131,7 +6627,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md" + "skill_path": "skills/planning/matt-resolving-merge-conflicts/SKILL.md" }, "trust_class": "read-only", "validation": { @@ -10067,7 +9563,7 @@ "catalog_kind": "stack-capability-catalog", "schema_version": 1, "summary": { - "callable_entrypoint_count": 159, - "capability_count": 159 + "callable_entrypoint_count": 151, + "capability_count": 151 } } diff --git a/registry/maintenance-imports.json b/registry/maintenance-imports.json index 71b01ca..a43c645 100644 --- a/registry/maintenance-imports.json +++ b/registry/maintenance-imports.json @@ -14,11 +14,6 @@ "source": "skills/productivity/writing-great-skills", "target": "skills/imported/matt/matt-writing-great-skills", "pin": "391a2701dd948f94f56a39f7533f8eea9a859c87" - }, - { - "source": "skills/engineering/resolving-merge-conflicts", - "target": "skills/imported/matt/matt-resolving-merge-conflicts", - "pin": "391a2701dd948f94f56a39f7533f8eea9a859c87" } ], "retained_files": ["CONTEXT-FORMAT.md"] @@ -31,78 +26,7 @@ "mapping": "existing-source-markdown", "source_metadata": "references/source.md", "license": "MIT", - "retained_targets": [ - { - "source": "skills/ops-and-setup/cyber-audit", - "target": "skills/imported/david/david-cyber-audit", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/agent-orchestration/agent-self-scheduling", - "target": "skills/imported/david/david-agent-self-scheduling", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/thinking-and-docs/brain-to-docs", - "target": "skills/imported/david/david-brain-to-docs", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/skill-authoring/folder-specific-claude-and-agents-md", - "target": "skills/imported/david/david-folder-specific-claude-and-agents-md", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/ops-and-setup/google-safe-browsing", - "target": "skills/imported/david/david-google-safe-browsing", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/thinking-and-docs/level-up", - "target": "skills/imported/david/david-level-up", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/ops-and-setup/pi-custom-model", - "target": "skills/imported/david/david-pi-custom-model", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/research-and-web/pi-web-search", - "target": "skills/imported/david/david-pi-web-search", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/thinking-and-docs/prompt-me", - "target": "skills/imported/david/david-prompt-me", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/skill-authoring/push-skill-to-github", - "target": "skills/imported/david/david-push-skill-to-github", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/research-and-web/research-prompt", - "target": "skills/imported/david/david-research-prompt", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/agent-orchestration/run-deep-swe", - "target": "skills/imported/david/david-run-deep-swe", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/thinking-and-docs/short", - "target": "skills/imported/david/david-short", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - }, - { - "source": "skills/research-and-web/youtube-transcript", - "target": "skills/imported/david/david-youtube-transcript", - "pin": "5c99080334072075eb9e0a17837f7d24e4f3e6ae" - } - ], + "retained_targets": [], "retained_files": ["agents/openai.yaml"] }, { diff --git a/registry/maintenance-sources.json b/registry/maintenance-sources.json index d08834b..196b7f0 100644 --- a/registry/maintenance-sources.json +++ b/registry/maintenance-sources.json @@ -92,6 +92,16 @@ "target_paths": ["skills/imported/david"], "required_exports": ["david-handoff", "david-goal-loop", "david-read-all-adrs"] }, + { + "id": "stack-owned-imports", + "target": "Former David and Matt imports now owned by Stack", + "disposition": "repository-owned-capability", + "provider_ref": "thecolormaroun/stack", + "pin_source": "repository source", + "provider_id": null, + "target_paths": ["skills/engineering/david-brain-to-docs", "skills/engineering/david-create-readonly-db-role", "skills/engineering/david-prompt-me", "skills/knowledge/david-research-prompt", "skills/knowledge/david-youtube-transcript", "skills/orchestration/david-agent-self-scheduling", "skills/planning/matt-resolving-merge-conflicts", "skills/platform/david-folder-specific-claude-and-agents-md", "skills/review/david-cyber-audit", "skills/review/david-google-safe-browsing"], + "required_exports": [] + }, { "id": "impeccable", "target": "Stack Impeccable capabilities", diff --git a/registry/migrations/2026-07-23-skill-layout.json b/registry/migrations/2026-07-23-skill-layout.json index f1c99eb..c24021c 100644 --- a/registry/migrations/2026-07-23-skill-layout.json +++ b/registry/migrations/2026-07-23-skill-layout.json @@ -133,7 +133,7 @@ }, { "canonical_name": "david-agent-self-scheduling", - "destination": "skills/imported/david/david-agent-self-scheduling/SKILL.md", + "destination": "skills/orchestration/david-agent-self-scheduling/SKILL.md", "source": "skills/david-agent-self-scheduling/SKILL.md" }, { @@ -143,7 +143,7 @@ }, { "canonical_name": "david-brain-to-docs", - "destination": "skills/imported/david/david-brain-to-docs/SKILL.md", + "destination": "skills/engineering/david-brain-to-docs/SKILL.md", "source": "skills/david-brain-to-docs/SKILL.md" }, { @@ -163,12 +163,12 @@ }, { "canonical_name": "david-create-readonly-db-role", - "destination": "skills/imported/david/david-create-readonly-db-role/SKILL.md", + "destination": "skills/engineering/david-create-readonly-db-role/SKILL.md", "source": "skills/david-create-readonly-db-role/SKILL.md" }, { "canonical_name": "david-cyber-audit", - "destination": "skills/imported/david/david-cyber-audit/SKILL.md", + "destination": "skills/review/david-cyber-audit/SKILL.md", "source": "skills/david-cyber-audit/SKILL.md" }, { @@ -181,11 +181,6 @@ "destination": "skills/imported/david/david-deepapi/SKILL.md", "source": "skills/david-deepapi/SKILL.md" }, - { - "canonical_name": "david-distribute-skill-to-all-agents", - "destination": "skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md", - "source": "skills/david-distribute-skill-to-all-agents/SKILL.md" - }, { "canonical_name": "david-effective-agent-skills", "destination": "skills/imported/david/david-effective-agent-skills/SKILL.md", @@ -198,7 +193,7 @@ }, { "canonical_name": "david-folder-specific-claude-and-agents-md", - "destination": "skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md", + "destination": "skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md", "source": "skills/david-folder-specific-claude-and-agents-md/SKILL.md" }, { @@ -208,7 +203,7 @@ }, { "canonical_name": "david-google-safe-browsing", - "destination": "skills/imported/david/david-google-safe-browsing/SKILL.md", + "destination": "skills/review/david-google-safe-browsing/SKILL.md", "source": "skills/david-google-safe-browsing/SKILL.md" }, { @@ -216,31 +211,11 @@ "destination": "skills/imported/david/david-handoff/SKILL.md", "source": "skills/david-handoff/SKILL.md" }, - { - "canonical_name": "david-level-up", - "destination": "skills/imported/david/david-level-up/SKILL.md", - "source": "skills/david-level-up/SKILL.md" - }, - { - "canonical_name": "david-pi-custom-model", - "destination": "skills/imported/david/david-pi-custom-model/SKILL.md", - "source": "skills/david-pi-custom-model/SKILL.md" - }, - { - "canonical_name": "david-pi-web-search", - "destination": "skills/imported/david/david-pi-web-search/SKILL.md", - "source": "skills/david-pi-web-search/SKILL.md" - }, { "canonical_name": "david-prompt-me", - "destination": "skills/imported/david/david-prompt-me/SKILL.md", + "destination": "skills/engineering/david-prompt-me/SKILL.md", "source": "skills/david-prompt-me/SKILL.md" }, - { - "canonical_name": "david-push-skill-to-github", - "destination": "skills/imported/david/david-push-skill-to-github/SKILL.md", - "source": "skills/david-push-skill-to-github/SKILL.md" - }, { "canonical_name": "david-read-all-adrs", "destination": "skills/imported/david/david-read-all-adrs/SKILL.md", @@ -248,32 +223,17 @@ }, { "canonical_name": "david-research-prompt", - "destination": "skills/imported/david/david-research-prompt/SKILL.md", + "destination": "skills/knowledge/david-research-prompt/SKILL.md", "source": "skills/david-research-prompt/SKILL.md" }, - { - "canonical_name": "david-run-deep-swe", - "destination": "skills/imported/david/david-run-deep-swe/SKILL.md", - "source": "skills/david-run-deep-swe/SKILL.md" - }, { "canonical_name": "david-setup-help", "destination": "skills/imported/david/david-setup-help/SKILL.md", "source": "skills/david-setup-help/SKILL.md" }, - { - "canonical_name": "david-short", - "destination": "skills/imported/david/david-short/SKILL.md", - "source": "skills/david-short/SKILL.md" - }, - { - "canonical_name": "david-teach", - "destination": "skills/imported/david/david-teach/SKILL.md", - "source": "skills/david-teach/SKILL.md" - }, { "canonical_name": "david-youtube-transcript", - "destination": "skills/imported/david/david-youtube-transcript/SKILL.md", + "destination": "skills/knowledge/david-youtube-transcript/SKILL.md", "source": "skills/david-youtube-transcript/SKILL.md" }, { @@ -563,7 +523,7 @@ }, { "canonical_name": "matt-resolving-merge-conflicts", - "destination": "skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md", + "destination": "skills/planning/matt-resolving-merge-conflicts/SKILL.md", "source": "skills/matt-resolving-merge-conflicts/SKILL.md" }, { diff --git a/scripts/classify-capabilities.py b/scripts/classify-capabilities.py index 43c8d27..b68d5f0 100644 --- a/scripts/classify-capabilities.py +++ b/scripts/classify-capabilities.py @@ -54,6 +54,8 @@ "departments": "Deprecated compatibility alias for the canonical Stack planning run.", "ideate": "Deprecated compatibility alias for canonical Stack exploration.", } +# Import providers this classifier has family rules for; see hand_curated(). +CLASSIFIED_IMPORT_PROVIDERS = ("matt", "david", "impeccable", "studio", "ui", "emil", "stewdio", "taste-skill-suite", "other") PRIMARY_TARGETS = { "claude": ".claude/skills/stack", "codex": ".codex/skills/stack", @@ -64,8 +66,19 @@ def canonical_json(value: Any) -> str: return json.dumps(value, indent=2, sort_keys=True, ensure_ascii=True) + "\n" +def hand_curated(path: str) -> bool: + """An import from a provider this classifier has no rules for keeps its reviewed manifest. + + Such manifests (for example benjitaylor/stageshow) carry their own reviewed + family, context and validation evidence; reclassifying them would overwrite + that review and make a rerun non-idempotent. + """ + parts = path.split("/") + return len(parts) > 3 and parts[:2] == ["skills", "imported"] and parts[2] not in CLASSIFIED_IMPORT_PROVIDERS + + def provider_for(path: str) -> tuple[str, str]: - for provider in ("matt", "david", "impeccable", "studio", "ui", "emil", "stewdio", "taste-skill-suite", "other"): + for provider in CLASSIFIED_IMPORT_PROVIDERS: if path.startswith(f"skills/imported/{provider}/"): return provider, "imported-skills" for prefix, provider in (("skills/matt-", "matt"), ("skills/david-", "david"), ("skills/impeccable/", "impeccable"), ("skills/studio/", "studio"), ("skills/ui-skills/", "ui"), ("skills/emil-", "emil"), ("skills/taste-skill-suite/", "impeccable")): @@ -80,23 +93,23 @@ def family_for(name: str, path: str) -> str: return family if name in {"agent-operating-stack", "mega-workflow", "departments"}: return "core" - if path.startswith("skills/orchestration/") or name in {"goal-validation-threads", "david-codex-subagent", "david-cmux", "david-handoff", "david-goal-loop", "david-agent-self-scheduling", "matt-handoff", "david-run-deep-swe"}: + if path.startswith("skills/orchestration/") or name in {"goal-validation-threads", "david-codex-subagent", "david-cmux", "david-handoff", "david-goal-loop", "matt-handoff"}: return "orchestration" if path.startswith("skills/studio/product/") or name in {"cpo", "ideate", "matt-to-spec", "matt-to-tickets", "matt-triage", "matt-wayfinder"}: return "product" - if path.startswith("skills/studio/research/") or name in {"field-theory-bookmark-synthesis", "fieldbook-source-split", "david-deep-research", "david-research-prompt", "david-youtube-transcript", "matt-research", "muller-brockmann-grid-systems", "userinterface-wiki"}: + if path.startswith("skills/studio/research/") or name in {"field-theory-bookmark-synthesis", "fieldbook-source-split", "david-deep-research", "matt-research", "muller-brockmann-grid-systems", "userinterface-wiki"}: return "knowledge" if path.startswith(("skills/studio/design/", "skills/impeccable/", "skills/ui-skills/", "skills/cdo/")) or name in {"cdo", "emil-design-eng", "illo", "better-icons", "review-animations", "ui-design-brain", "make-interfaces-feel-better", "design-intelligence", "rams", "deslop", "taste-skill-suite-soft-skill", "taste-skill-suite-redesign-skill", "cdo-taste-skill"} or name in PINNED_DESIGN_IMPORTS: return "design" if name in {"tdd", "matt-tdd", "matt-implement", "matt-prototype", "matt-diagnosing-bugs", "matt-codebase-design", "matt-domain-modeling", "matt-improve-codebase-architecture", "matt-ask-matt", "react-doctor", "simplify", "knip", "fix-sentry-issues", "gemini-review"}: return "engineering" - if name in {"matt-code-review", "david-cyber-audit", "david-google-safe-browsing", "scratch-eval-promotion-gate", "agent-verification-ladder"}: + if name in {"matt-code-review", "scratch-eval-promotion-gate", "agent-verification-ladder"}: return "review" if name in {"emil-break-ui", "david-browser-harness", "live-site-health-check", "review-animations", "fixing-accessibility", "fixing-metadata", "fixing-motion-performance"} or "accessibility" in name: return "qa" - if path.startswith("skills/studio/ship/") or name in {"stack-refresh-pr-mode", "david-push-skill-to-github"}: + if path.startswith("skills/studio/ship/") or name in {"stack-refresh-pr-mode"}: return "delivery" - if name in {"local-tracker-dashboard", "reclaude", "david-setup-help", "david-effective-agent-skills", "david-distribute-skill-to-all-agents", "david-folder-specific-claude-and-agents-md", "david-pi-custom-model"}: + if name in {"local-tracker-dashboard", "reclaude", "david-setup-help", "david-effective-agent-skills"}: return "platform" return "planning" if name.startswith("matt-") else "engineering" @@ -163,6 +176,8 @@ def classify(root: Path) -> dict[str, Any]: value = json.loads(manifest_path.read_text(encoding="utf-8")) source_path = value["source"].get("skill_path", manifest_path.parent.relative_to(root).as_posix() + "/SKILL.md") name = value["canonical_name"] + if hand_curated(source_path): + continue family = family_for(name, source_path) provider, package = provider_for(source_path) alias_target = ALIASES.get(name) diff --git a/skills/core/compatibility/agent-operating-stack/references/imported-skills.md b/skills/core/compatibility/agent-operating-stack/references/imported-skills.md index d24b2f8..68e6701 100644 --- a/skills/core/compatibility/agent-operating-stack/references/imported-skills.md +++ b/skills/core/compatibility/agent-operating-stack/references/imported-skills.md @@ -16,7 +16,6 @@ These are the concrete namespaced imports added from the Meng To recommendation. | `$matt-improve-codebase-architecture` | `improve-codebase-architecture` | `skills/engineering/improve-codebase-architecture` | | `$matt-prototype` | `prototype` | `skills/engineering/prototype` | | `$matt-research` | `research` | `skills/engineering/research` | -| `$matt-resolving-merge-conflicts` | `resolving-merge-conflicts` | `skills/engineering/resolving-merge-conflicts` | | `$matt-setup-matt-pocock-skills` | `setup-matt-pocock-skills` | `skills/engineering/setup-matt-pocock-skills` | | `$matt-tdd` | `tdd` | `skills/engineering/tdd` | | `$matt-to-spec` | `to-spec` | `skills/engineering/to-spec` | @@ -33,36 +32,37 @@ These are the concrete namespaced imports added from the Meng To recommendation. | Local skill | Upstream skill | Upstream path | | --- | --- | --- | -| `$david-agent-self-scheduling` | `agent-self-scheduling` | `skills/agent-orchestration/agent-self-scheduling` | | `$david-cmux` | `cmux` | `skills/agent-orchestration/cmux` | | `$david-codex-subagent` | `codex-subagent` | `skills/agent-orchestration/codex-subagent` | | `$david-fable-safe-prompt` | `fable-safe-prompt` | `skills/agent-orchestration/fable-safe-prompt` | | `$david-goal-loop` | `goal-loop` | `skills/agent-orchestration/goal-loop` | | `$david-handoff` | `handoff` | `skills/agent-orchestration/handoff` | -| `$david-run-deep-swe` | `run-deep-swe` | `skills/agent-orchestration/run-deep-swe` | | `$david-anti-sleep` | `anti-sleep` | `skills/ops-and-setup/anti-sleep` | -| `$david-create-readonly-db-role` | `create-readonly-db-role` | `skills/ops-and-setup/create-readonly-db-role` | -| `$david-cyber-audit` | `cyber-audit` | `skills/ops-and-setup/cyber-audit` | -| `$david-google-safe-browsing` | `google-safe-browsing` | `skills/ops-and-setup/google-safe-browsing` | -| `$david-pi-custom-model` | `pi-custom-model` | `skills/ops-and-setup/pi-custom-model` | | `$david-setup-help` | `setup-help` | `skills/ops-and-setup/setup-help` | | `$david-browser-harness` | `browser-harness` | `skills/research-and-web/browser-harness` | | `$david-deep-research` | `deep-research` | `skills/research-and-web/deep-research` | | `$david-deepapi` | `deepapi` | `skills/research-and-web/deepapi` | -| `$david-online-shopping` | `online-shopping` | `skills/research-and-web/online-shopping` | -| `$david-pi-web-search` | `pi-web-search` | `skills/research-and-web/pi-web-search` | +| `$david-effective-agent-skills` | `effective-agent-skills` | `skills/skill-authoring/effective-agent-skills` | +| `$david-read-all-adrs` | `read-all-adrs` | `skills/thinking-and-docs/read-all-adrs` | + +## Stack-owned Former Imports + +These started as imports but their upstream copies were removed or moved. Stack owns them as of 2026-11-13 and no longer tracks upstream; each keeps its origin and MIT notice in `references/source.md`. + +| Local skill | Origin skill | Origin path | +| --- | --- | --- | +| `$matt-resolving-merge-conflicts` | `resolving-merge-conflicts` | `skills/engineering/resolving-merge-conflicts` | +| `$david-agent-self-scheduling` | `agent-self-scheduling` | `skills/agent-orchestration/agent-self-scheduling` | +| `$david-create-readonly-db-role` | `create-readonly-db-role` | `skills/ops-and-setup/create-readonly-db-role` | +| `$david-cyber-audit` | `cyber-audit` | `skills/ops-and-setup/cyber-audit` | +| `$david-google-safe-browsing` | `google-safe-browsing` | `skills/ops-and-setup/google-safe-browsing` | | `$david-research-prompt` | `research-prompt` | `skills/research-and-web/research-prompt` | | `$david-youtube-transcript` | `youtube-transcript` | `skills/research-and-web/youtube-transcript` | -| `$david-distribute-skill-to-all-agents` | `distribute-skill-to-all-agents` | `skills/skill-authoring/distribute-skill-to-all-agents` | -| `$david-effective-agent-skills` | `effective-agent-skills` | `skills/skill-authoring/effective-agent-skills` | | `$david-folder-specific-claude-and-agents-md` | `folder-specific-claude-and-agents-md` | `skills/skill-authoring/folder-specific-claude-and-agents-md` | -| `$david-push-skill-to-github` | `push-skill-to-github` | `skills/skill-authoring/push-skill-to-github` | | `$david-brain-to-docs` | `brain-to-docs` | `skills/thinking-and-docs/brain-to-docs` | -| `$david-level-up` | `level-up` | `skills/thinking-and-docs/level-up` | | `$david-prompt-me` | `prompt-me` | `skills/thinking-and-docs/prompt-me` | -| `$david-read-all-adrs` | `read-all-adrs` | `skills/thinking-and-docs/read-all-adrs` | -| `$david-short` | `short` | `skills/thinking-and-docs/short` | -| `$david-teach` | `teach` | `skills/thinking-and-docs/teach` | + +Retired on 2026-11-13 (reasons in `docs/stack-maintenance.md`): `david-pi-web-search`, `david-pi-custom-model`, `david-push-skill-to-github`, `david-distribute-skill-to-all-agents`, `david-run-deep-swe`, `david-level-up`, `david-short`, `david-teach`. ## Source Pins diff --git a/skills/imported/david/david-brain-to-docs/SKILL.md b/skills/engineering/david-brain-to-docs/SKILL.md similarity index 82% rename from skills/imported/david/david-brain-to-docs/SKILL.md rename to skills/engineering/david-brain-to-docs/SKILL.md index 1d7d05c..ca0f5bc 100644 --- a/skills/imported/david/david-brain-to-docs/SKILL.md +++ b/skills/engineering/david-brain-to-docs/SKILL.md @@ -1,17 +1,17 @@ --- name: david-brain-to-docs -description: 'Namespaced import of David Ondrej agent skills: Use when the user wants +description: 'Stack-owned, adapted from David Ondrej agent skills: Use when the user wants to extract project vision, decisions, and preferences from his head into clear documentation (README + ADRs) through a back-and-forth Q&A loop. Triggers on "brain-to-docs", "build out the docs", "extract the vision", "let''s document this project".. Use - via $david-brain-to-docs when this upstream workflow is needed inside Maroun''s + via $david-brain-to-docs when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-brain-to-docs`. -- Upstream name: `brain-to-docs`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-brain-to-docs`. +- Adapted from David Ondrej's `brain-to-docs` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/david/david-brain-to-docs/agents/openai.yaml b/skills/engineering/david-brain-to-docs/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-brain-to-docs/agents/openai.yaml rename to skills/engineering/david-brain-to-docs/agents/openai.yaml diff --git a/skills/imported/david/david-brain-to-docs/capability.json b/skills/engineering/david-brain-to-docs/capability.json similarity index 71% rename from skills/imported/david/david-brain-to-docs/capability.json rename to skills/engineering/david-brain-to-docs/capability.json index c19a318..b3d45f1 100644 --- a/skills/imported/david/david-brain-to-docs/capability.json +++ b/skills/engineering/david-brain-to-docs/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-brain-to-docs/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-brain-to-docs/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-brain-to-docs" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-brain-to-docs" }, - "purpose": "Namespaced import of David Ondrej agent skills: Use when the user wants", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Use when the user wants", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-brain-to-docs/SKILL.md" + "skill_path": "skills/engineering/david-brain-to-docs/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/imported/david/david-agent-self-scheduling/references/source.md b/skills/engineering/david-brain-to-docs/references/source.md similarity index 77% rename from skills/imported/david/david-agent-self-scheduling/references/source.md rename to skills/engineering/david-brain-to-docs/references/source.md index e3b04d4..6ca57db 100644 --- a/skills/imported/david/david-agent-self-scheduling/references/source.md +++ b/skills/engineering/david-brain-to-docs/references/source.md @@ -1,10 +1,10 @@ -# Source Metadata +# Origin -- Imported skill: `$david-agent-self-scheduling` -- Upstream skill name: `agent-self-scheduling` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/agent-orchestration/agent-self-scheduling` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- Stack-owned skill: `$david-brain-to-docs` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `brain-to-docs` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/thinking-and-docs/brain-to-docs` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` - License: MIT ## License Notice diff --git a/skills/imported/david/david-create-readonly-db-role/SKILL.md b/skills/engineering/david-create-readonly-db-role/SKILL.md similarity index 92% rename from skills/imported/david/david-create-readonly-db-role/SKILL.md rename to skills/engineering/david-create-readonly-db-role/SKILL.md index 09fbcb9..92e8c63 100644 --- a/skills/imported/david/david-create-readonly-db-role/SKILL.md +++ b/skills/engineering/david-create-readonly-db-role/SKILL.md @@ -1,19 +1,19 @@ --- name: david-create-readonly-db-role -description: 'Namespaced import of David Ondrej agent skills: Provision a hardened +description: 'Stack-owned, adapted from David Ondrej agent skills: Provision a hardened SELECT-only Postgres role so AI agents can safely read a production database. Works on Supabase and any Postgres. Use when the user wants agents to query prod data, says "read-only role", "safe prod DB access for agents", or is tired of running SQL by hand for agents. Differentiator: this skill CREATES the role and wiring; day-to-day querying belongs in a project-local skill.. Use via $david-create-readonly-db-role - when this upstream workflow is needed inside Maroun''s Stack or Hermes-safe operating + when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-create-readonly-db-role`. -- Upstream name: `create-readonly-db-role`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-create-readonly-db-role`. +- Adapted from David Ondrej's `create-readonly-db-role` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/david/david-create-readonly-db-role/agents/openai.yaml b/skills/engineering/david-create-readonly-db-role/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-create-readonly-db-role/agents/openai.yaml rename to skills/engineering/david-create-readonly-db-role/agents/openai.yaml diff --git a/skills/imported/david/david-create-readonly-db-role/capability.json b/skills/engineering/david-create-readonly-db-role/capability.json similarity index 70% rename from skills/imported/david/david-create-readonly-db-role/capability.json rename to skills/engineering/david-create-readonly-db-role/capability.json index 0c4df38..5ee46f9 100644 --- a/skills/imported/david/david-create-readonly-db-role/capability.json +++ b/skills/engineering/david-create-readonly-db-role/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-create-readonly-db-role/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-create-readonly-db-role/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-create-readonly-db-role" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-create-readonly-db-role" }, - "purpose": "Namespaced import of David Ondrej agent skills: Provision a hardened", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Provision a hardened", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-create-readonly-db-role/SKILL.md" + "skill_path": "skills/engineering/david-create-readonly-db-role/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/engineering/david-create-readonly-db-role/references/source.md b/skills/engineering/david-create-readonly-db-role/references/source.md new file mode 100644 index 0000000..e6595f0 --- /dev/null +++ b/skills/engineering/david-create-readonly-db-role/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-create-readonly-db-role` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `create-readonly-db-role` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/ops-and-setup/create-readonly-db-role` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- License: MIT + +## License Notice + +```text +MIT License + +Copyright (c) 2026 David Ondrej + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/skills/imported/david/david-prompt-me/SKILL.md b/skills/engineering/david-prompt-me/SKILL.md similarity index 68% rename from skills/imported/david/david-prompt-me/SKILL.md rename to skills/engineering/david-prompt-me/SKILL.md index fb2a7ba..01fcac0 100644 --- a/skills/imported/david/david-prompt-me/SKILL.md +++ b/skills/engineering/david-prompt-me/SKILL.md @@ -1,17 +1,17 @@ --- name: david-prompt-me -description: 'Namespaced import of David Ondrej agent skills: Prompt the user with +description: 'Stack-owned, adapted from David Ondrej agent skills: Prompt the user with pointed questions to extract what is in his head about a project — remaining work, what is being avoided, what really matters, what does not. Use when the user says "prompt me", "ask me questions", or wants the agent to figure out priorities by - questioning him.. Use via $david-prompt-me when this upstream workflow is needed + questioning him.. Use via $david-prompt-me when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-prompt-me`. -- Upstream name: `prompt-me`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-prompt-me`. +- Adapted from David Ondrej's `prompt-me` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/david/david-prompt-me/agents/openai.yaml b/skills/engineering/david-prompt-me/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-prompt-me/agents/openai.yaml rename to skills/engineering/david-prompt-me/agents/openai.yaml diff --git a/skills/imported/david/david-prompt-me/capability.json b/skills/engineering/david-prompt-me/capability.json similarity index 72% rename from skills/imported/david/david-prompt-me/capability.json rename to skills/engineering/david-prompt-me/capability.json index aaea3b1..2194a12 100644 --- a/skills/imported/david/david-prompt-me/capability.json +++ b/skills/engineering/david-prompt-me/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-prompt-me/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-prompt-me/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-prompt-me" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-prompt-me" }, - "purpose": "Namespaced import of David Ondrej agent skills: Prompt the user with", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Prompt the user with", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-prompt-me/SKILL.md" + "skill_path": "skills/engineering/david-prompt-me/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/imported/david/david-brain-to-docs/references/source.md b/skills/engineering/david-prompt-me/references/source.md similarity index 78% rename from skills/imported/david/david-brain-to-docs/references/source.md rename to skills/engineering/david-prompt-me/references/source.md index 69bbd97..225d30a 100644 --- a/skills/imported/david/david-brain-to-docs/references/source.md +++ b/skills/engineering/david-prompt-me/references/source.md @@ -1,10 +1,10 @@ -# Source Metadata +# Origin -- Imported skill: `$david-brain-to-docs` -- Upstream skill name: `brain-to-docs` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/thinking-and-docs/brain-to-docs` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- Stack-owned skill: `$david-prompt-me` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `prompt-me` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/thinking-and-docs/prompt-me` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` - License: MIT ## License Notice diff --git a/skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md b/skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md deleted file mode 100644 index 9f60cbe..0000000 --- a/skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -name: david-distribute-skill-to-all-agents -description: 'Namespaced import of David Ondrej agent skills: Distribute a skill across - the 4 agent skill folders (Codex, Claude Code, Pi, Hermes) so all agents see it. - Use when the user says "distribute this skill", "sync skills across agents", or - after creating/updating a skill that should be global. Covers the symlink layout - and the ~/.pi/agent/skills trap.. Use via $david-distribute-skill-to-all-agents - when this upstream workflow is needed inside Maroun''s Stack or Hermes-safe operating - loop.' ---- -## Stack Import - -- Invoke this imported skill as `$david-distribute-skill-to-all-agents`. -- Upstream name: `distribute-skill-to-all-agents`. -- Source metadata and license notice: [references/source.md](references/source.md). -- For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. - - -# Distribute a Skill Across All Agents - -The user has 4 agent skill locations on their machine. A skill must exist in each (or via symlink) to be discoverable by every agent. - -## The 4 Canonical Locations - -| Agent | Skills Folder | Notes | -|---|---|---| -| Codex / OpenAI Agents | `~/.agents/skills/` | **Canonical** — author skills here first | -| Claude Code | `~/.claude/skills/` | **Symlink → `~/.agents/skills/`** — writing to `.agents/skills` automatically covers Claude | -| Pi Agent | `~/.pi/agent/skills/` | **Symlink → `~/.agents/skills/`** — auto-covered. (Path is `/agent/` nested — NOT `~/.pi/skills/`) | -| Hermes Agent | `~/.hermes/skills/` | Independent copy — the only one needing a manual copy | - -## Workflow - -1. **Author the skill in `~/.agents/skills//SKILL.md`** (canonical). Follow `effective-agent-skills` SKILL.md guidance. -2. **Verify the `.claude` symlink is intact** (one-time check): - ```bash - ls -la ~/.claude/skills - # Expect: ~/.claude/skills -> ~/.agents/skills - ``` - If it's a real directory instead of a symlink, the user has diverged copies — ask before touching. -3. **Copy to `.hermes` only** (`.claude` and `.pi` are symlinks — already covered): - ```bash - SKILL= - cp -r ~/.agents/skills/$SKILL ~/.hermes/skills/ - ``` -4. **Verify all 4 locations** show identical byte counts: - ```bash - for p in ~/.agents/skills/$SKILL ~/.claude/skills/$SKILL ~/.pi/agent/skills/$SKILL ~/.hermes/skills/$SKILL; do - echo "$p: $(wc -c < $p/SKILL.md) bytes" - done - ``` - All four numbers must match. If `.claude` or `.pi` shows a different byte count, that symlink is broken — investigate before proceeding. - -## Updating an Existing Distributed Skill - -Same flow — re-copy from `~/.agents/skills/` to `.hermes/skills/`. The `.claude` and `.pi` symlinks update automatically. `cp -r` overwrites by default; use `rsync -a --delete` if the skill folder has nested files that may have been removed: - -```bash -rsync -a --delete ~/.agents/skills/$SKILL/ ~/.hermes/skills/$SKILL/ -``` - -## Pitfalls - -- **`~/.pi/skills/` is the wrong location.** Pi Agent loads from `~/.pi/agent/skills/` only. A skill placed in `~/.pi/skills/` is invisible. If you find skills already there, they're orphans — confirm with the user before deleting. -- **`~/.claude/skills` is a symlink, not a folder.** `cp -r ~/.agents/skills/foo ~/.claude/skills/` will error with "are identical". Skip the explicit Claude copy. -- **Project-local skills exist too** — `./.pi/agent/skills/` (or `.pi/skills/`) inside a repo overrides the global one on collision (later-discovered wins). This skill only handles GLOBAL distribution. -- **`.pi/agent/skills` is a symlink → `.agents/skills`.** Don't `cp` into it (errors "are identical"); it auto-syncs. Only `.hermes/skills` is an independent copy — don't unilaterally consolidate Hermes into a symlink unless the user asks. -- **Hermes snapshots skills at session start.** A newly-distributed skill won't appear inside a running Hermes session until restart (it works fine for future sessions and for the other 3 agents immediately). -- **Filename casing matters on case-sensitive volumes.** `SKILL.md` must be uppercase. - -## When NOT to Use This Skill - -- Skill is project-specific → put it in `./.claude/skills/`, `./.pi/agent/skills/`, etc. inside the repo, not globally. -- Editing one agent's skill only (e.g. a Hermes-only workflow) → patch that file directly, don't propagate. -- Removing a skill globally → `rm -rf` from `~/.agents/skills/` (covers `.claude` + `.pi` symlinks) and from `~/.hermes/skills/` (and confirm with the user first; deletion is destructive). diff --git a/skills/imported/david/david-distribute-skill-to-all-agents/agents/openai.yaml b/skills/imported/david/david-distribute-skill-to-all-agents/agents/openai.yaml deleted file mode 100644 index ca4b6b2..0000000 --- a/skills/imported/david/david-distribute-skill-to-all-agents/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "David Distribute Skill To All Agents" - short_description: "Distribute a skill across the 4 agent skill folders (Codex,..." - default_prompt: "Use $david-distribute-skill-to-all-agents to distribute a skill across the 4 agent skill folders (Codex, Claude Code, Pi, Hermes) so all agents see it. Use when the user says \"distribute this skill\", \"sync skills across agents\", or after creating/updating a skill that should be global. Covers the symlink layout and the ~/.pi/agent/skills trap." diff --git a/skills/imported/david/david-distribute-skill-to-all-agents/capability.json b/skills/imported/david/david-distribute-skill-to-all-agents/capability.json deleted file mode 100644 index 3b95ea1..0000000 --- a/skills/imported/david/david-distribute-skill-to-all-agents/capability.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-distribute-skill-to-all-agents", - "commands": [ - "stack.maintain" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "platform", - "family": "platform", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-distribute-skill-to-all-agents" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Distribute a skill across", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-distribute-skill-to-all-agents/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" -} diff --git a/skills/imported/david/david-distribute-skill-to-all-agents/references/source.md b/skills/imported/david/david-distribute-skill-to-all-agents/references/source.md deleted file mode 100644 index aa80ada..0000000 --- a/skills/imported/david/david-distribute-skill-to-all-agents/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-distribute-skill-to-all-agents` -- Upstream skill name: `distribute-skill-to-all-agents` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/skill-authoring/distribute-skill-to-all-agents` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-folder-specific-claude-and-agents-md/references/source.md b/skills/imported/david/david-folder-specific-claude-and-agents-md/references/source.md deleted file mode 100644 index e49d6ca..0000000 --- a/skills/imported/david/david-folder-specific-claude-and-agents-md/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-folder-specific-claude-and-agents-md` -- Upstream skill name: `folder-specific-claude-and-agents-md` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/skill-authoring/folder-specific-claude-and-agents-md` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-google-safe-browsing/references/source.md b/skills/imported/david/david-google-safe-browsing/references/source.md deleted file mode 100644 index a11ec26..0000000 --- a/skills/imported/david/david-google-safe-browsing/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-google-safe-browsing` -- Upstream skill name: `google-safe-browsing` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/ops-and-setup/google-safe-browsing` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-level-up/SKILL.md b/skills/imported/david/david-level-up/SKILL.md deleted file mode 100644 index 75b8c01..0000000 --- a/skills/imported/david/david-level-up/SKILL.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -name: david-level-up -description: 'Namespaced import of David Ondrej agent skills: Gauge the user''s technical - + product knowledge through 7 adaptive questions, log verbatim answers with honest - ratings, and grow a learning plan from the gaps found. Use when the user says "level - up", "level-up session", "quiz me", "gauge my knowledge", or wants a new assessment - round. Differentiator: this finds and maps gaps; the `teach` skill delivers lessons - on them.. Use via $david-level-up when this upstream workflow is needed inside Maroun''s - Stack or Hermes-safe operating loop.' -disable-model-invocation: true ---- -## Stack Import - -- Invoke this imported skill as `$david-level-up`. -- Upstream name: `level-up`. -- Source metadata and license notice: [references/source.md](references/source.md). -- For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. - - -# Level Up - -Run a 7-question adaptive assessment to map what the user knows and doesn't, relevant to the current project. The output is two files future agents rely on. - -## Files (repo-relative) - -- `notes/learning/david-knowledge.md` — verbatim Q&A pairs + ratings, one section per question, rounds appended. -- `notes/learning/LEARNING-PLAN.md` — one concise bullet per genuine gap found. - -State-check first: read both files in full if they exist. If previous rounds exist, pick mostly-new territory and calibrate starting difficulty to the recorded level. If missing, create the folder and both files (plan starts as just a header). - -## Question rules - -- 7 questions, strictly one at a time, plain text — never the questions UI. -- Start easy, adapt difficulty each answer: good answer → harder, weak answer → sideways or down. -- Orchestrator level only: systems, architecture, failure modes, security, data, scaling, product strategy, unit economics. NEVER syntax or code trivia — the user architects via AI agents, they don't write code. -- Anchor questions in the current project's real stack and features. When a question touches real code, read it and show the actual snippet when teaching. -- Cover different territory across rounds (e.g. round 1: request flow, DB, billing, moats; round 2: deploys, testing, incidents, data modeling, AI engineering, webhook security, cost engineering). - -## After every single answer - -1. Rate honestly 1-10. No flattery — the user wants calibration, not comfort. -2. Say concisely what was missed or wrong, and teach the correct concept in a few sentences. -3. Immediately save the verbatim answer + rating + gap notes to `david-knowledge.md`. -4. If a genuine gap surfaced, append one concise bullet to `LEARNING-PLAN.md`. Skip minor misses. -5. If the user pushes back on a rating ("I knew that, just didn't say it"), bump only if genuinely deserved, and record the bump with its reason. -6. When the user says he has since learned a plan item, mark its bullet: strikethrough + `✓ learned YYYY-MM-DD`. - -## After question 7 - -Append a final summary to `david-knowledge.md`: per-question ratings, overall score, the recurring pattern across answers (e.g. "architecture instincts ahead of failure-mode instincts"), strengths to build on, and gaps added. Give the user the same summary in chat, concise. diff --git a/skills/imported/david/david-level-up/agents/openai.yaml b/skills/imported/david/david-level-up/agents/openai.yaml deleted file mode 100644 index 14f01ee..0000000 --- a/skills/imported/david/david-level-up/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "David Level Up" - short_description: "Gauge the user's technical + product knowledge through 7..." - default_prompt: "Use $david-level-up to gauge the user's technical + product knowledge through 7 adaptive questions, log verbatim answers with honest ratings, and grow a learning plan from the gaps found. Use when the user says \"level up\", \"level-up session\", \"quiz me\", \"gauge my knowledge\", or wants a new assessment round. Differentiator: this finds and maps gaps; the `teach` skill delivers lessons on them." diff --git a/skills/imported/david/david-level-up/capability.json b/skills/imported/david/david-level-up/capability.json deleted file mode 100644 index 0f8553b..0000000 --- a/skills/imported/david/david-level-up/capability.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-level-up", - "commands": [ - "stack.build" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "engineering", - "family": "engineering", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-level-up/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-level-up" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Gauge the user''s technical", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-level-up/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" -} diff --git a/skills/imported/david/david-level-up/references/source.md b/skills/imported/david/david-level-up/references/source.md deleted file mode 100644 index 57aac26..0000000 --- a/skills/imported/david/david-level-up/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-level-up` -- Upstream skill name: `level-up` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/thinking-and-docs/level-up` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-pi-custom-model/SKILL.md b/skills/imported/david/david-pi-custom-model/SKILL.md deleted file mode 100644 index 4dde489..0000000 --- a/skills/imported/david/david-pi-custom-model/SKILL.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -name: david-pi-custom-model -description: 'Namespaced import of David Ondrej agent skills: Register a custom or - variant model (e.g. an OpenRouter ":nitro" / ":floor" / ":exacto" slug) in the Pi - Agent so it can be set as the global default. Use when Pi silently falls back to - a different model (e.g. moonshotai/kimi-k2.6) after setting defaultModel, or when - a model slug isn''t in Pi''s bundled list. Triggers on "Pi reset my model", "Pi - won''t use this model", "add a model to Pi", "Pi default keeps reverting".. Use - via $david-pi-custom-model when this upstream workflow is needed inside Maroun''s - Stack or Hermes-safe operating loop.' -disable-model-invocation: true ---- -## Stack Import - -- Invoke this imported skill as `$david-pi-custom-model`. -- Upstream name: `pi-custom-model`. -- Source metadata and license notice: [references/source.md](references/source.md). -- For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. - - -# Pi custom / variant model - -## When to use -Pi's saved default only loads if the exact `provider/id` exists in its model registry. Pi ships a static bundled list per provider — so OpenRouter **routing-shortcut variants** (`:nitro` = sort by throughput, `:floor` = cheapest, `:exacto` = quality tool-use) and any brand-new slug are NOT in it. When the default doesn't resolve, Pi silently falls through to its built-in per-provider default (for openrouter that's `moonshotai/kimi-k2.6`) — looking like Pi "reset" your model. Fix = register the slug as a custom model so `find(provider, id)` matches. - -## Files (global) -- `~/.pi/agent/settings.json` — `defaultProvider`, `defaultModel`, `defaultThinkingLevel` -- `~/.pi/agent/models.json` — custom models, keyed by provider -- `~/.pi/agent/auth.json` — provider credentials (check the provider key exists) - -## Steps -1. **Confirm the slug is real** before adding it (e.g. check the OpenRouter model/variant exists). A typo'd id also silently falls back. -2. **Confirm auth.** The provider must have a key in `auth.json` (or an env var like `OPENROUTER_API_KEY`). No auth → the model is registered but unavailable → still falls back. -3. **Add the model to `models.json`** under `providers..models`. For a **built-in provider** (openrouter, anthropic, etc.) you only supply metadata — `api`, `baseUrl`, and auth are inherited from the bundled defaults. Example: - ```json - { - "providers": { - "openrouter": { - "models": [ - { - "id": "z-ai/glm-5.2:nitro", - "name": "Z.ai: GLM 5.2 (nitro)", - "reasoning": true, - "thinkingLevelMap": { "xhigh": "xhigh" }, - "input": ["text"], - "cost": { "input": 0.95, "output": 3, "cacheRead": 0.18, "cacheWrite": 0 }, - "contextWindow": 1048576, - "maxTokens": 32768, - "compat": { "supportsDeveloperRole": false, "thinkingFormat": "openrouter" } - } - ] - } - } - } - ``` - Copy `cost`/`contextWindow`/`compat` from the base model (the variant shares them) — find the bundled entry in `/node_modules/@earendil-works/pi-ai/dist/providers/.models.js`. Don't hardcode generic 128k/16k if the real model is bigger. -4. **Set the default** in `settings.json`: `defaultProvider` + `defaultModel` = the exact id. Leave `defaultThinkingLevel` as the user has it. -5. **Verify:** `pi --list-models | grep ` shows it, and JSON parses. Optionally smoke-test: `pi --provider

--model "" "which model are you?"`. - -## Quirks -- **Exact match only.** `find()` is exact `provider`+`id` — no fuzzy/colon-stripping for the *saved default* path. The slug in `settings.json` and `models.json` must be byte-identical. -- **Silent fallback.** Pi prints no error when the default doesn't resolve; it just shows a different model in the footer. That's the tell. -- **Don't edit `settings.json` alone.** Setting `defaultModel` to an unregistered slug does nothing — `models.json` is the actual fix. -- **`enabledModels`** (optional) pins the model picker so Ctrl+P cycling can't drift back: `"enabledModels": ["/:"]`. -- **Project override.** A repo's `.pi/settings.json` overrides global. If a default reverts only inside one project, check that file first. -- Restart Pi fully — the registry loads at startup. diff --git a/skills/imported/david/david-pi-custom-model/agents/openai.yaml b/skills/imported/david/david-pi-custom-model/agents/openai.yaml deleted file mode 100644 index 6c49c2b..0000000 --- a/skills/imported/david/david-pi-custom-model/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "David Pi Custom Model" - short_description: "Register a custom or variant model (e.g. an OpenRouter..." - default_prompt: "Use $david-pi-custom-model to register a custom or variant model (e.g. an OpenRouter \":nitro\" / \":floor\" / \":exacto\" slug) in the Pi Agent so it can be set as the global default. Use when Pi silently falls back to a different model (e.g. moonshotai/kimi-k2.6) after setting defaultModel, or when a model slug isn't in Pi's bundled list. Triggers on \"Pi reset my model\", \"Pi won't use this model\", \"add a model to Pi\", \"Pi default keeps reverting\"." diff --git a/skills/imported/david/david-pi-custom-model/capability.json b/skills/imported/david/david-pi-custom-model/capability.json deleted file mode 100644 index 65dc2f4..0000000 --- a/skills/imported/david/david-pi-custom-model/capability.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-pi-custom-model", - "commands": [ - "stack.maintain" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "platform", - "family": "platform", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-pi-custom-model/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-pi-custom-model" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Register a custom or", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-pi-custom-model/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" -} diff --git a/skills/imported/david/david-pi-custom-model/references/source.md b/skills/imported/david/david-pi-custom-model/references/source.md deleted file mode 100644 index ce52b69..0000000 --- a/skills/imported/david/david-pi-custom-model/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-pi-custom-model` -- Upstream skill name: `pi-custom-model` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/ops-and-setup/pi-custom-model` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-pi-web-search/SKILL.md b/skills/imported/david/david-pi-web-search/SKILL.md deleted file mode 100644 index b6be507..0000000 --- a/skills/imported/david/david-pi-web-search/SKILL.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -name: david-pi-web-search -description: 'Namespaced import of David Ondrej agent skills: ONLY for Pi Agents — - all other agents have their own web tools. How Pi accesses the web via the pi-web-access - package — search, fetch URLs/PDFs/YouTube/GitHub. Use whenever a Pi task needs current - info, docs, news, prices, or content from a specific URL.. Use via $david-pi-web-search - when this upstream workflow is needed inside Maroun''s Stack or Hermes-safe operating - loop.' ---- -## Stack Import - -- Invoke this imported skill as `$david-pi-web-search`. -- Upstream name: `pi-web-search`. -- Source metadata and license notice: [references/source.md](references/source.md). -- For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. - - -# Web Search - -The `pi-web-access` package is installed globally. Zero-config via Exa MCP (no API key), with fallback Exa → Perplexity → Gemini. - -## CRITICAL: always pass `workflow: "none"` - -Every `web_search` call MUST include `workflow: "none"`. This skips the interactive browser curator popup (the user does not want it opening). No exceptions — single query or batched `queries`, always set `workflow: "none"`. - -``` -web_search({ queries: ["query 1", "query 2"], workflow: "none" }) -``` - -## Tools - -- `web_search` — search the web; returns synthesized answers with citations. Can be called many times per turn. **Always pass `workflow: "none"`.** -- `code_search` — zero-key Exa code-context. Use for library/API/code lookups instead of generic `web_search`. -- `fetch_content` — fetch URL(s) → markdown; handles PDFs, YouTube, GitHub. -- `get_search_content` — big pages (>30k chars) are truncated in responses but stored in full; call this to pull the rest on demand so they don't blow context. - -## fetch_content specifics - -- **GitHub URLs are cloned, not scraped** — you get real files + a local path to explore with `read`/`bash` (private repos need the `gh` CLI). Use this for dev work. -- **PDFs** → auto-extracted to markdown in `~/Downloads/`, readable in sections (text-only, no OCR). -- **YouTube/video** → full raw transcripts + frame extraction. Needs a `GEMINI_API_KEY` (not zero-config); frame extraction also needs `ffmpeg`/`yt-dlp`. - -## Routing — match the user's phrasing - -Always use the `web_search` tool. These counts are HARD MINIMUMS — count your queries before answering and do not stop short: - -- **"web search"** → **at least 2** queries, varied keywords/angles, then synthesize. -- **"extensive web research"** → **at least 4** queries, totally different keywords and angles. -- **"deep research"** → **at least 8** queries, totally different keywords and angles, run across 2–3 successive batches (refine angles after each batch), to learn as much as possible about the topic. - -A single batched `web_search` call counts each query in `queries[]` toward the total. If your first batch is under the minimum, fire another batch before synthesizing. - -## Fallback / alternative: DeepAPI web search - -If the Exa → Perplexity → Gemini chain fails, or you need ranked results with URLs: - -```bash -KEY=${DEEPAPI_API_KEY:-$(rg -o 'DEEPAPI_API_KEY=\S+' ~/.zshrc | head -1 | cut -d= -f2)} -curl -s --max-time 60 "https://deepapi.co/v1/search/web" \ - -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \ - -H "Idempotency-Key: $(uuidgen)" \ - -d '{"query": "your search terms", "maxResults": 5, "maxCostUsd": "0.05"}' -``` - -Results are in `.output` (title, url, snippet per item). Query under 500 chars. Full details: `deepapi` skill. diff --git a/skills/imported/david/david-pi-web-search/agents/openai.yaml b/skills/imported/david/david-pi-web-search/agents/openai.yaml deleted file mode 100644 index 34fffdf..0000000 --- a/skills/imported/david/david-pi-web-search/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "David Pi Web Search" - short_description: "ONLY for Pi Agents — all other agents have their own web..." - default_prompt: "Use $david-pi-web-search to oNLY for Pi Agents — all other agents have their own web tools. How Pi accesses the web via the pi-web-access package — search, fetch URLs/PDFs/YouTube/GitHub. Use whenever a Pi task needs current info, docs, news, prices, or content from a specific URL." diff --git a/skills/imported/david/david-pi-web-search/capability.json b/skills/imported/david/david-pi-web-search/capability.json deleted file mode 100644 index e57d717..0000000 --- a/skills/imported/david/david-pi-web-search/capability.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-pi-web-search", - "commands": [ - "stack.build" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "engineering", - "family": "engineering", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-pi-web-search/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-pi-web-search" - }, - "purpose": "Namespaced import of David Ondrej agent skills: ONLY for Pi Agents \u2014", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-pi-web-search/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" -} diff --git a/skills/imported/david/david-pi-web-search/references/source.md b/skills/imported/david/david-pi-web-search/references/source.md deleted file mode 100644 index f4999a9..0000000 --- a/skills/imported/david/david-pi-web-search/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-pi-web-search` -- Upstream skill name: `pi-web-search` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/research-and-web/pi-web-search` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-prompt-me/references/source.md b/skills/imported/david/david-prompt-me/references/source.md deleted file mode 100644 index 596d2fd..0000000 --- a/skills/imported/david/david-prompt-me/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-prompt-me` -- Upstream skill name: `prompt-me` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/thinking-and-docs/prompt-me` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-push-skill-to-github/SKILL.md b/skills/imported/david/david-push-skill-to-github/SKILL.md deleted file mode 100644 index e5f6eac..0000000 --- a/skills/imported/david/david-push-skill-to-github/SKILL.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -name: david-push-skill-to-github -description: 'Namespaced import of David Ondrej agent skills: Commit and push agent-skill - changes to the user''s private skills GitHub repo (rooted at ~/.agents). Use after - creating or updating any skill, when the user says "push the skill", "push skills - to github", "save the skill to my repo", or "update the skills repo". Handles staging, - committing, pushing, and cleaning up the cmux pane used to do it.. Use via $david-push-skill-to-github - when this upstream workflow is needed inside Maroun''s Stack or Hermes-safe operating - loop.' ---- -## Stack Import - -- Invoke this imported skill as `$david-push-skill-to-github`. -- Upstream name: `push-skill-to-github`. -- Source metadata and license notice: [references/source.md](references/source.md). -- For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. - - -# Push Skills to GitHub - -For committing any skill change to the user's private skills repo, git root **`~/.agents`** (this is also the canonical skill folder; `.claude` and `.pi/agent/skills` symlink to `~/.agents/skills`). Pushes here auto-publish a sanitized public mirror to `davidondrej/skills` — never push directly to that public repo. - -Use this after creating or editing a skill. If the skill is distributed to all agents, do that first (`distribute-skill-to-all-agents`), then run this to push the canonical copy. - -## Steps - -**Not in cmux?** (no `$CMUX_WORKSPACE_ID`): skip the cmux pane steps — just run the git commands from step 2 directly in any available terminal, then verify the push output. - -1. **Open a fresh cmux pane** in the current workspace, no focus steal: - ```bash - cmux new-pane --type terminal --direction right --workspace "$CMUX_WORKSPACE_ID" --focus false - cmux list-panes --workspace "$CMUX_WORKSPACE_ID" # note the NEW pane + its surface ref - ``` -2. **Stage, commit, push** in `~/.agents` (send to the new pane's surface): - ```bash - cmux send --surface surface:NEW 'cd ~/.agents && git add -A && git commit -m "" && git push' - cmux send-key --surface surface:NEW enter - ``` -3. **Verify** the push landed: - ```bash - sleep 2 - cmux read-screen --surface surface:NEW | tail -15 # expect "main -> main" - ``` -4. **Close the pane** once confirmed: - ```bash - cmux close-surface --surface surface:NEW - cmux list-panes --workspace "$CMUX_WORKSPACE_ID" # confirm the pane is gone - ``` - -## Notes -- Always run git from `~/.agents` (the repo root), not `~/.agents/skills`. -- Write a concise, specific commit message describing the skill change. -- Only push to GitHub when the user asks. Don't push speculatively. diff --git a/skills/imported/david/david-push-skill-to-github/agents/openai.yaml b/skills/imported/david/david-push-skill-to-github/agents/openai.yaml deleted file mode 100644 index d7415ac..0000000 --- a/skills/imported/david/david-push-skill-to-github/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "David Push Skill To Github" - short_description: "Commit and push agent-skill changes to the user's private..." - default_prompt: "Use $david-push-skill-to-github to commit and push agent-skill changes to the user's private skills GitHub repo (rooted at ~/.agents). Use after creating or updating any skill, when the user says \"push the skill\", \"push skills to github\", \"save the skill to my repo\", or \"update the skills repo\". Handles staging, committing, pushing, and cleaning up the cmux pane used to do it." diff --git a/skills/imported/david/david-push-skill-to-github/capability.json b/skills/imported/david/david-push-skill-to-github/capability.json deleted file mode 100644 index 4102190..0000000 --- a/skills/imported/david/david-push-skill-to-github/capability.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-push-skill-to-github", - "commands": [ - "stack.ship" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "delivery", - "family": "delivery", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-push-skill-to-github/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-push-skill-to-github" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Commit and push agent-skill", - "role": "workflow", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-push-skill-to-github/SKILL.md" - }, - "trust_class": "external-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "high-risk", - "visibility": "extended" -} diff --git a/skills/imported/david/david-push-skill-to-github/references/source.md b/skills/imported/david/david-push-skill-to-github/references/source.md deleted file mode 100644 index 1729c35..0000000 --- a/skills/imported/david/david-push-skill-to-github/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-push-skill-to-github` -- Upstream skill name: `push-skill-to-github` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/skill-authoring/push-skill-to-github` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-research-prompt/references/source.md b/skills/imported/david/david-research-prompt/references/source.md deleted file mode 100644 index 6b8e15d..0000000 --- a/skills/imported/david/david-research-prompt/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-research-prompt` -- Upstream skill name: `research-prompt` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/research-and-web/research-prompt` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-run-deep-swe/SKILL.md b/skills/imported/david/david-run-deep-swe/SKILL.md deleted file mode 100644 index 3577713..0000000 --- a/skills/imported/david/david-run-deep-swe/SKILL.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -name: david-run-deep-swe -description: 'Namespaced import of David Ondrej agent skills: Score any AI model on - the DeepSWE coding-agent benchmark via the OpenRouter API. Use when the user wants - an independent, reproducible coding-agent eval — "run DeepSWE", "benchmark this - model on DeepSWE", "score model X on the coding benchmark", "test a model via OpenRouter - on DeepSWE", or to verify vendor-reported coding scores. Covers setup, the OpenRouter - wiring for mini-swe-agent, single-task / subset / full 113-task runs, and leaderboard - submission.. Use via $david-run-deep-swe when this upstream workflow is needed inside - Maroun''s Stack or Hermes-safe operating loop.' -disable-model-invocation: true ---- -## Stack Import - -- Invoke this imported skill as `$david-run-deep-swe`. -- Upstream name: `run-deep-swe`. -- Source metadata and license notice: [references/source.md](references/source.md). -- For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. - - -# Run DeepSWE via OpenRouter - -DeepSWE (deepswe.datacurve.ai) is a 113-task Harbor-compatible coding-agent benchmark. It runs via **Pier** (Harbor fork) driving **mini-swe-agent** (model-agnostic). Any model reachable through OpenRouter can be scored. - -## Prerequisites — state-check first - -```bash -which uv git docker || echo "MISSING: install uv, git, docker" -docker info >/dev/null 2>&1 || echo "MISSING: Docker daemon not running (Pier's default sandbox)" -echo "OPENROUTER_API_KEY set? ${OPENROUTER_API_KEY:+YES}" -``` - -**Docker must be running** — Pier sandboxes each task in Docker by default (`--env modal` for cloud instead). - -The user has a dedicated OpenRouter key for this benchmark exported globally in `~/.zshrc` (weekly hard spend limit set as a safeguard). A fresh shell already has `OPENROUTER_API_KEY` available. If it's somehow not set, re-source the shell: - -```bash -source ~/.zshrc && echo "key loaded? ${OPENROUTER_API_KEY:+YES}" -``` - -If still unset, ask the user — never invent a key. - -## Setup - -```bash -git clone https://github.com/datacurve-ai/deep-swe && cd deep-swe -uv tool install datacurve-pier # PyPI (preferred) -# or: uv tool install git+https://github.com/datacurve-ai/pier -# pier bundles mini-swe-agent as the --agent driver -``` - -Run all `pier` commands from inside `deep-swe/`, using relative `-p tasks/...`. - -## OpenRouter wiring (the part the docs don't spell out) - -mini-swe-agent has a native OpenRouter model class. Both routes below use `OPENROUTER_API_KEY` and the OpenRouter slug (`vendor/model`, e.g. `minimax/minimax-m3`): - -**Route A — native OpenRouter class (preferred, hits openrouter.ai/api/v1 directly):** -```bash -pier run -p deep-swe/tasks --agent mini-swe-agent \ - --model minimax/minimax-m3 --model-class openrouter -``` - -**Route B — LiteLLM provider prefix (fallback; same key):** -```bash -pier run -p deep-swe/tasks --agent mini-swe-agent \ - --model openrouter/minimax/minimax-m3 -``` - -Notes: -- Slug = the exact OpenRouter slug. Verify it at openrouter.ai/models before running. -- Free/zero-cost models: OpenRouter cost tracking can error. Set `export MSWEA_COST_TRACKING=ignore_errors`. -- Flag spelling can vary by version — confirm with `pier run --help` and `mini --help`. - -## Smoke test FIRST (1 task — do this before any full run) - -Always validate end-to-end wiring on a single task before spending tokens on the corpus: - -```bash -pier run -p deep-swe/tasks/ --agent mini-swe-agent \ - --model minimax/minimax-m3 --model-class openrouter -# list available task ids: -ls deep-swe/tasks -``` - -Pass criteria: run completes, model returns actions (not auth/format errors), a score/trajectory is emitted. If it 401s → key wrong. If "provider not provided"/"model not mapped" → fix slug or switch route. - -## Subset run (deterministic sample) - -```bash -pier run -p deep-swe/tasks --agent mini-swe-agent \ - --model minimax/minimax-m3 --model-class openrouter \ - --n-tasks 10 --sample-seed 0 -``` - -## Full 113-task corpus (costs tokens + time — confirm with user first) - -```bash -pier run -p deep-swe/tasks --agent mini-swe-agent \ - --model minimax/minimax-m3 --model-class openrouter -# add `--env modal` to run in parallel Modal sandboxes (needs Modal configured) -``` - -## Output & leaderboard - -- Trials land in `jobs///`. Inspect with `pier view jobs/`, `pier analyze jobs/`, or `pier critique run jobs/`. -- Report: the exact command used, pass/fail, score, and any blockers. -- Submit results for the official leaderboard to: **** - -## Failure modes - -| Symptom | Cause | Fix | -|---|---|---| -| HTTP 401 | bad/missing key | re-export `OPENROUTER_API_KEY` | -| "LLM Provider NOT provided" | missing slug prefix | use Route B `openrouter/...` or Route A with `--model-class openrouter` | -| "model isn't mapped"/cost error | unknown cost for model | `export MSWEA_COST_TRACKING=ignore_errors` | -| unknown flag | version drift | check `pier run --help` | diff --git a/skills/imported/david/david-run-deep-swe/agents/openai.yaml b/skills/imported/david/david-run-deep-swe/agents/openai.yaml deleted file mode 100644 index 619c391..0000000 --- a/skills/imported/david/david-run-deep-swe/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "David Run Deep Swe" - short_description: "Score any AI model on the DeepSWE coding-agent benchmark via..." - default_prompt: "Use $david-run-deep-swe to score any AI model on the DeepSWE coding-agent benchmark via the OpenRouter API. Use when the user wants an independent, reproducible coding-agent eval — \"run DeepSWE\", \"benchmark this model on DeepSWE\", \"score model X on the coding benchmark\", \"test a model via OpenRouter on DeepSWE\", or to verify vendor-reported coding scores. Covers setup, the OpenRouter wiring for mini-swe-agent, single-task / subset / full 113-task runs, and leaderboard submission." diff --git a/skills/imported/david/david-run-deep-swe/capability.json b/skills/imported/david/david-run-deep-swe/capability.json deleted file mode 100644 index 8f33554..0000000 --- a/skills/imported/david/david-run-deep-swe/capability.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-run-deep-swe", - "commands": [ - "stack.orchestrate" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "orchestration", - "family": "orchestration", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-run-deep-swe/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-run-deep-swe" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Score any AI model on", - "role": "workflow", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-run-deep-swe/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" -} diff --git a/skills/imported/david/david-run-deep-swe/references/source.md b/skills/imported/david/david-run-deep-swe/references/source.md deleted file mode 100644 index 7966337..0000000 --- a/skills/imported/david/david-run-deep-swe/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-run-deep-swe` -- Upstream skill name: `run-deep-swe` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/agent-orchestration/run-deep-swe` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-short/SKILL.md b/skills/imported/david/david-short/SKILL.md deleted file mode 100644 index 3174b95..0000000 --- a/skills/imported/david/david-short/SKILL.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -name: david-short -description: 'Namespaced import of David Ondrej agent skills: Manually-invoked skill - that forces the agent to compress its current answer — strip filler, simplify wording, - and cut length while keeping the substance. Use when the user says "short", "shorter", - "simpler", "too long", "tl;dr", or wants a more concise version of the previous - response.. Use via $david-short when this upstream workflow is needed inside Maroun''s - Stack or Hermes-safe operating loop.' -disable-model-invocation: true ---- -## Stack Import - -- Invoke this imported skill as `$david-short`. -- Upstream name: `short`. -- Source metadata and license notice: [references/source.md](references/source.md). -- For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. - - -rewrite your last response to be simpler & shorter. do not do anything else. diff --git a/skills/imported/david/david-short/agents/openai.yaml b/skills/imported/david/david-short/agents/openai.yaml deleted file mode 100644 index 1e5fa9e..0000000 --- a/skills/imported/david/david-short/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "David Short" - short_description: "Manually-invoked skill that forces the agent to compress its..." - default_prompt: "Use $david-short to manually-invoked skill that forces the agent to compress its current answer — strip filler, simplify wording, and cut length while keeping the substance. Use when the user says \"short\", \"shorter\", \"simpler\", \"too long\", \"tl;dr\", or wants a more concise version of the previous response." diff --git a/skills/imported/david/david-short/capability.json b/skills/imported/david/david-short/capability.json deleted file mode 100644 index 458af9b..0000000 --- a/skills/imported/david/david-short/capability.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-short", - "commands": [ - "stack.build" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "engineering", - "family": "engineering", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-short/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-short" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Manually-invoked skill", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-short/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" -} diff --git a/skills/imported/david/david-short/references/source.md b/skills/imported/david/david-short/references/source.md deleted file mode 100644 index b4fb053..0000000 --- a/skills/imported/david/david-short/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-short` -- Upstream skill name: `short` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/thinking-and-docs/short` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-teach/GLOSSARY-FORMAT.md b/skills/imported/david/david-teach/GLOSSARY-FORMAT.md deleted file mode 100644 index 9cae84c..0000000 --- a/skills/imported/david/david-teach/GLOSSARY-FORMAT.md +++ /dev/null @@ -1,35 +0,0 @@ -# GLOSSARY.md Format - -`GLOSSARY.md` is the canonical language for this teaching workspace. All explainers, exercises, and learning records should adhere to its terminology. Building it is itself part of learning: compressing a concept into a tight definition is evidence the user understands it. - -## Structure - -```md -# {Topic} Glossary - -{One or two sentence description of the topic this glossary covers.} - -## Terms - -**Hypertrophy**: -Muscle growth driven by mechanical tension and metabolic stress over repeated training sessions. -_Avoid_: Bulking, getting big - -**Progressive overload**: -Systematically increasing the demand on a muscle over time — via load, volume, or intensity. -_Avoid_: Pushing harder, levelling up - -**RPE (Rate of Perceived Exertion)**: -A 1–10 self-rating of how hard a set felt, where 10 is failure and 8 means two reps left in the tank. -_Avoid_: Effort score, intensity rating -``` - -## Rules - -- **Add a term only when the user understands it.** The glossary is a record of compressed knowledge, not a dictionary the user reads to learn. If the user has just been introduced to a concept, wait until they can use it correctly before promoting it here. -- **Be opinionated.** When several words exist for the same concept, pick the best one and list the rest as aliases to avoid. This is how language compresses. -- **Keep definitions tight.** One or two sentences. Define what the term IS, not what it does or how to do it. -- **Use the glossary's own terms inside definitions.** Once a term is in the glossary, prefer it everywhere — including inside other definitions. This is what makes complex terms easier to grasp later. -- **Group under subheadings** when natural clusters emerge (e.g. `## Anatomy`, `## Programming`). A flat list is fine when terms cohere. -- **Flag ambiguities explicitly.** If a term is used loosely in the wider field, note the resolution: "In this workspace, 'set' always means a working set — warm-ups are tracked separately." -- **Revise as understanding deepens.** A definition the user wrote in week one may be wrong by week six. Update in place; do not leave stale entries. diff --git a/skills/imported/david/david-teach/LEARNING-RECORD-FORMAT.md b/skills/imported/david/david-teach/LEARNING-RECORD-FORMAT.md deleted file mode 100644 index 2faa7c9..0000000 --- a/skills/imported/david/david-teach/LEARNING-RECORD-FORMAT.md +++ /dev/null @@ -1,46 +0,0 @@ -# Learning Record Format - -Learning records live in `./learning-records/` and use sequential numbering: `0001-slug.md`, `0002-slug.md`, etc. Create the directory lazily — only when the first record is written. - -They are the teaching equivalent of ADRs: they capture non-obvious lessons, key insights, and stated prior knowledge that will steer future sessions. They are used to calculate the zone of proximal development. - -## Template - -```md -# {Short title of what was learned or established} - -{1-3 sentences: what was learned (or what prior knowledge was established), and why it matters for future sessions.} -``` - -That is the whole format. A learning record can be a single paragraph. The value is recording _that_ this is now known and _why_ it changes what to teach next — not in filling out sections. - -## Optional sections - -Only include these when they add genuine value. Most records won't need them. - -- **Status** frontmatter (`active | superseded by LR-NNNN`) — useful when an earlier understanding turns out to be wrong and is replaced. -- **Evidence** — how the user demonstrated the understanding (a question answered, an exercise completed, prior experience cited). Useful when the claim might be revisited. -- **Implications** — what this unlocks or rules out for future sessions. Worth recording when non-obvious. - -## Numbering - -Scan `./learning-records/` for the highest existing number and increment by one. - -## When to write a learning record - -Write one when any of these is true: - -1. **The user demonstrated genuine understanding of something non-trivial** — not just exposure, but evidence they can use the concept correctly. This sets a new floor for what to teach next. -2. **The user disclosed prior knowledge** — "I already know X." Record it so future sessions don't re-teach it. Also record the _depth_ claimed. -3. **A misconception was corrected** — the user previously believed something wrong and now sees why. These are high-value: they predict future stumbling blocks for related topics. -4. **The mission shifted in response to learning** — the user discovered they cared about something different than they thought. Cross-link to [[MISSION.md]] and update it. - -### What does _not_ qualify - -- Material that was merely covered. Coverage is not learning. Wait for evidence. -- Anything already captured tersely in [[GLOSSARY.md]] as a term definition. Don't duplicate. -- Session-by-session activity logs. Learning records are not a journal — they are decision-grade insights. - -## Supersession - -When a later record contradicts an earlier one (the user's understanding deepened or corrected), mark the old record `Status: superseded by LR-NNNN` rather than deleting it. The history of how understanding evolved is itself useful signal. diff --git a/skills/imported/david/david-teach/MISSION-FORMAT.md b/skills/imported/david/david-teach/MISSION-FORMAT.md deleted file mode 100644 index 5dac184..0000000 --- a/skills/imported/david/david-teach/MISSION-FORMAT.md +++ /dev/null @@ -1,31 +0,0 @@ -# MISSION.md Format - -`MISSION.md` lives at the workspace root. It captures the _reason_ the user is learning this topic. Every teaching decision — what to teach next, which resources to surface, which exercises to design — should trace back to this document. - -## Template - -```md -# Mission: {Topic} - -## Why -{1-3 sentences. The concrete real-world goal the user is chasing. What changes in their life or work when they have this skill? Avoid abstract framings like "to understand X" — push for the underlying outcome.} - -## Success looks like -- {A specific, observable thing the user will be able to do} -- {Another specific thing} -- {…} - -## Constraints -- {Time, budget, prior commitments, learning preferences, anything that bounds the approach} - -## Out of scope -- {Adjacent topics the user explicitly does not want to chase right now — protects the zone of proximal development} -``` - -## Rules - -- **One mission per workspace.** If the user wants to learn two unrelated things, that is two workspaces. -- **Concrete over abstract.** "Run a half marathon by October" beats "get fitter." "Ship a Rust CLI to my team" beats "learn Rust." -- **Push back on vagueness.** If the user cannot articulate why, interview them before writing anything. A bad mission is worse than no mission. -- **Revise when reality shifts.** Missions change. When the user's goal moves, update this file — don't leave a stale mission steering future sessions. -- **Keep it short.** If `MISSION.md` runs past a screen, it has stopped being a compass and started being a plan. diff --git a/skills/imported/david/david-teach/RESOURCES-FORMAT.md b/skills/imported/david/david-teach/RESOURCES-FORMAT.md deleted file mode 100644 index c94aac6..0000000 --- a/skills/imported/david/david-teach/RESOURCES-FORMAT.md +++ /dev/null @@ -1,32 +0,0 @@ -# RESOURCES.md Format - -`RESOURCES.md` is the curated set of trusted sources for this topic. Knowledge for explainers should be drawn from here, not from parametric guesses. Wisdom comes from the communities listed here. - -## Structure - -```md -# {Topic} Resources - -## Knowledge - -- [Book: _The Science and Practice of Strength Training_ — Zatsiorsky & Kraemer](https://example.com) - Foundational text on programming and adaptation. Use for: anything to do with periodisation, recovery, intensity zones. -- [Article: "How Much Should I Train?" — Greg Nuckols (Stronger By Science)](https://example.com) - Evidence-based review of volume landmarks. Use for: weekly set targets per muscle group. - -## Wisdom (Communities) - -- [r/weightroom](https://reddit.com/r/weightroom) - High-signal subreddit, moderated against bro-science. Use for: programme critique, plateau troubleshooting. -- Local: Tuesday strength class at {gym name} - Use for: real-time coaching feedback on lifts. -``` - -## Rules - -- **High-trust only.** Prefer primary sources, recognised experts, peer-reviewed work, and communities with strong moderation. If a resource is marketing dressed as education, leave it out. -- **Annotate every entry.** A bare link is useless in three months. Add one line: what it covers and when to reach for it. -- **Group by Knowledge / Wisdom.** Mirrors the philosophy in [SKILL.md](./SKILL.md). It is fine for a resource to appear in only one group. -- **Surface gaps explicitly.** If no good resource exists for an area the mission needs, write a `## Gaps` section listing what is missing. This drives future search. -- **Prune ruthlessly.** A resource that turned out to be wrong, shallow, or off-mission should be removed, not buried. Better five sharp sources than thirty mediocre ones. -- **Record community preferences.** If the user has opted out of joining communities, note it here so future sessions don't keep proposing them. diff --git a/skills/imported/david/david-teach/SKILL.md b/skills/imported/david/david-teach/SKILL.md deleted file mode 100644 index 4a39eb1..0000000 --- a/skills/imported/david/david-teach/SKILL.md +++ /dev/null @@ -1,148 +0,0 @@ ---- -name: david-teach -description: 'Namespaced import of David Ondrej agent skills: Teach the user a new - skill or concept, within this workspace.. Use via $david-teach when this upstream - workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' -disable-model-invocation: true -argument-hint: What would you like to learn about? ---- -## Stack Import - -- Invoke this imported skill as `$david-teach`. -- Upstream name: `teach`. -- Source metadata and license notice: [references/source.md](references/source.md). -- For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. - - -The user has asked you to teach them something. This is a stateful request - they intend to learn the topic over multiple sessions. - -## Be Very Concise - -When answering the user or writing any text response to them, be **very concise**. The teaching happens in the lessons and reference documents — not in long chat replies. Keep every message short, direct, and free of filler. State what you did, what's next, and the single most important thing for the user to do — nothing more. Lengthy explanations belong in lessons, not the conversation. - -## Teaching Workspace - -Treat the current directory as a teaching workspace. The state of their learning is captured in this directory in several files: - -- `MISSION.md`: A document capturing the _reason_ the user is interested in the topic. This should be used to ground all teaching. Use the format in [MISSION-FORMAT.md](./MISSION-FORMAT.md). -- `./reference/*.html`: A directory of reference materials. These are the compressed learnings from the lessons - cheat sheets, reference algorithms, syntax, yoga poses, glossaries. They are the raw units of learning. They should be beautiful documents which print out well, and are designed for quick reference. -- `RESOURCES.md`: A list of resources which can be explored to ground your teaching in contextual knowledge, or to acquire knowledge and wisdom. Use the format in [RESOURCES-FORMAT.md](./RESOURCES-FORMAT.md). -- `./learning-records/*.md`: A directory of learning records, which capture what the user has learned. These are loosely equivalent to architectural decision records in software development - they capture non-obvious lessons and key insights that may need to be revised later, or drive future sessions. These should be used to calculate the zone of proximal development. They are titled `0001-.md`, where the number increments each time. Use the format in [LEARNING-RECORD-FORMAT.md](./LEARNING-RECORD-FORMAT.md). -- `./lessons/*.html`: A directory of lessons. A **lesson** is a single, self-contained HTML output that teaches one tightly-scoped thing tied to the mission. This is the primary unit of teaching in this workspace. -- `NOTES.md`: A scratchpad for you to jot down user preferences, or working notes. - -## Philosophy - -To learn at a deep level, the user needs three things: - -- **Knowledge**, captured from high-quality, high-trust resources -- **Skills**, acquired through highly-relevant interactive lessons devised by you, based on the knowledge -- **Wisdom**, which comes from interacting with other learners and practitioners - -Before the `RESOURCES.md` is well-populated, your focus should be to find high-quality resources which will help the user acquire knowledge. Never trust your parametric knowledge. - -Some topics may require more skills than knowledge. Learning more about theoretical physics might be more knowledge-based. For yoga, more skills-based. - -### Fluency vs Storage Strength - -You should be careful to split between two types of learning: - -- **Fluency strength**: in-the-moment retrieval of knowledge -- **Storage strength**: long-term retention of knowledge - -Fluency can give the user an illusory sense of mastery, but storage strength is the real goal. Try to design lessons which build long-term retention by desirable difficulty: - -- Using retrieval practice (recall from memory) -- Spacing (distributing practice over time) -- Interleaving (mixing up different but related topics in practice - for skills practice only) - -## Lessons - -A lesson is the main thing you produce — the unit in which knowledge and skills reach the user. Each lesson is one self-contained HTML file, saved to `./lessons/` and titled `0001-.html` where the number increments each time. - -A lesson should be **beautiful** — clean, readable typography and layout — since the user will return to these later to review. Think Tufte. - -The lesson should be short, and completable very quickly. Learners' working memory is very small, and we need to stay within it. But each lesson should give the user a single tangible win that they can build on. It should be directly tied to the mission, and should be in the user's zone of proximal development. - -If possible, open the lesson file for the user by running a CLI command. - -Each lesson should link via HTML anchors to other lessons and reference documents. - -Each lesson should recommend a primary source for the user to read or watch. This should be the most high-quality, high-trust resource you found on the topic. - -Each lesson should contain a reminder to ask followup questions to the agent. The agent is their teacher, and can assist with anything that's unclear. - -## The Mission - -Every lesson should be tied into the mission - the reason that the user is interested in learning about the topic. - -If the user is unclear about the mission, or the `MISSION.md` is not populated, your first job should be to question the user on why they want to learn this. - -Failing to understand the mission will mean knowledge acquisition is not grounded in real-world goals. Lessons will feel too abstract. You will have no way of judging what the user should do next. - -Missions may change as the user develops more skills and knowledge. This is normal - make sure to update the `MISSION.md` and add a learning record to capture the change. Confirm with the user before changing the mission. - -## Zone Of Proximal Development - -Each lesson, the user should always feel as if they are being challenged 'just enough'. - -The user may specify an exact thing they want to learn. If they don't, figure out their zone of proximal development by: - -- Reading their `learning-records` -- Figuring out the right thing to teach them based on their mission -- Teach the most relevant thing that fits in their zone of proximal development - -## Knowledge - -Lessons should be designed around a skill the user is going to learn. The knowledge in the lesson should be only what's required to acquire that skill. You teach the knowledge first, then get the user to practice the skills via an interactive feedback loop. - -Knowledge should first be gathered from trusted resources. Use `RESOURCES.md` to keep track of them. Lessons should be littered with citations - links to external resources to back up any claim made. This increases the trustworthiness of the lesson. - -For acquiring knowledge, difficulty is the enemy. It eats working memory you need for understanding. - -## Skills - -If knowledge is all about acquisition, skills are about durability and flexibility. Make the knowledge stick. - -For skill acquisition, difficulty is the tool. Effortful retrieval is what builds storage strength. Skills should be taught through interactive lessons. There are several tools at your disposal: - -- Interactive lessons, using quizzes and light in-browser tasks -- Lessons which guide the user through a list of real-world steps to take (for instance, yoga poses) - -Each of these should be based on a **feedback loop**, where the user receives feedback on their performance. This feedback loop should be as tight as possible, giving feedback immediately - and ideally automatically. - -For quizzes, each answer should be exactly the same number of words (and characters, if possible). Don't give the user any clues about the answer through formatting. - -## Acquiring Wisdom - -Wisdom comes from true real-world interaction - testing your skills outside the learning environment. - -When the user asks a question that appears to require wisdom, your default posture should be to attempt to answer - but to ultimately delegate to a **community**. - -A community is a place (online or offline) where the user can test their skills in the real world. This might be a forum, a subreddit, a real-world class (budget permitting) or a local interest group. - -You should attempt to find high-reputation communities the user can join. If the user expresses a preference that they don't want to join a community, respect it. - -## Reference Documents - -While creating lessons, you should also create reference documents. Lessons can reference these documents - they are useful for tracking raw units of knowledge useful across lessons. - -Lessons will rarely be revisited later - reference documents will be. They should be the compressed essence of the lesson, in a format designed for quick reference. - -Some learning topics lend themselves to reference: - -- Syntax and code snippets for programming -- Algorithms and flowcharts for processes -- Yoga poses and sequences for yoga -- Exercises and routines for fitness -- Glossaries for any topic with its own nomenclature - -Glossaries, in particular, are an essential reference. Once one is created, it should be adhered to in every lesson. - -## `NOTES.md` - -The user will sometimes express preferences of how they want to be taught, or things you should keep in mind. This is the place to record those preferences, so you can refer back to them when designing lessons or working with the user. - -## Credit - -Original version created by [Matt Pocock](https://github.com/mattpocock/skills). diff --git a/skills/imported/david/david-teach/agents/openai.yaml b/skills/imported/david/david-teach/agents/openai.yaml deleted file mode 100644 index 5df51ed..0000000 --- a/skills/imported/david/david-teach/agents/openai.yaml +++ /dev/null @@ -1,4 +0,0 @@ -interface: - display_name: "David Teach" - short_description: "Teach the user a new skill or concept, within this workspace." - default_prompt: "Use $david-teach to teach the user a new skill or concept, within this workspace." diff --git a/skills/imported/david/david-teach/capability.json b/skills/imported/david/david-teach/capability.json deleted file mode 100644 index 53f7d9f..0000000 --- a/skills/imported/david/david-teach/capability.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "artifact_type": "skill", - "audit_status": "reviewed", - "canonical_name": "david-teach", - "commands": [ - "stack.build" - ], - "context": { - "inputs": [ - "request", - "workspace-context" - ], - "outputs": [ - "capability-result" - ] - }, - "disposition": { - "evidence_gap": null, - "next_review_trigger": "Reassess on source, export, or runtime-target change.", - "status": "keep" - }, - "domain": "engineering", - "family": "engineering", - "lifecycle": "active", - "overlaps": [], - "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-teach/SKILL.md" - }, - "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-teach" - }, - "purpose": "Namespaced import of David Ondrej agent skills: Teach the user a new", - "role": "leaf", - "runtimes": { - "publish_targets": [ - "claude", - "codex" - ], - "supported": [ - "claude", - "codex" - ] - }, - "schema_version": 1, - "source": { - "skill_path": "skills/imported/david/david-teach/SKILL.md" - }, - "trust_class": "local-mutation", - "validation": { - "evidence": [ - "reviewed-estate-refactor", - "structural-classification", - "primary-runtime-parity" - ], - "status": "validated" - }, - "validation_class": "representative-route", - "visibility": "extended" -} diff --git a/skills/imported/david/david-teach/references/source.md b/skills/imported/david/david-teach/references/source.md deleted file mode 100644 index 782351d..0000000 --- a/skills/imported/david/david-teach/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-teach` -- Upstream skill name: `teach` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/thinking-and-docs/teach` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-youtube-transcript/references/source.md b/skills/imported/david/david-youtube-transcript/references/source.md deleted file mode 100644 index cdc5068..0000000 --- a/skills/imported/david/david-youtube-transcript/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-youtube-transcript` -- Upstream skill name: `youtube-transcript` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/research-and-web/youtube-transcript` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` -- License: MIT - -## License Notice - -```text -MIT License - -Copyright (c) 2026 David Ondrej - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. -``` diff --git a/skills/imported/david/david-research-prompt/SKILL.md b/skills/knowledge/david-research-prompt/SKILL.md similarity index 91% rename from skills/imported/david/david-research-prompt/SKILL.md rename to skills/knowledge/david-research-prompt/SKILL.md index 39cf479..9eda0da 100644 --- a/skills/imported/david/david-research-prompt/SKILL.md +++ b/skills/knowledge/david-research-prompt/SKILL.md @@ -1,18 +1,18 @@ --- name: david-research-prompt -description: 'Namespaced import of David Ondrej agent skills: Write a single-paragraph +description: 'Stack-owned, adapted from David Ondrej agent skills: Write a single-paragraph Deep Research prompt to hand to a human researcher (or a deep-research AI). Use when the user wants a research brief, a "deep research prompt", a one-paragraph task for a researcher, or asks "what should our researcher look for". Produces ONE tight paragraph with full context, numbered sub-questions, and per-finding output - format.. Use via $david-research-prompt when this upstream workflow is needed inside + format.. Use via $david-research-prompt when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-research-prompt`. -- Upstream name: `research-prompt`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-research-prompt`. +- Adapted from David Ondrej's `research-prompt` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/david/david-research-prompt/agents/openai.yaml b/skills/knowledge/david-research-prompt/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-research-prompt/agents/openai.yaml rename to skills/knowledge/david-research-prompt/agents/openai.yaml diff --git a/skills/imported/david/david-research-prompt/capability.json b/skills/knowledge/david-research-prompt/capability.json similarity index 71% rename from skills/imported/david/david-research-prompt/capability.json rename to skills/knowledge/david-research-prompt/capability.json index 812e7e3..d3713ba 100644 --- a/skills/imported/david/david-research-prompt/capability.json +++ b/skills/knowledge/david-research-prompt/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-research-prompt/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/knowledge/david-research-prompt/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-research-prompt" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-research-prompt" }, - "purpose": "Namespaced import of David Ondrej agent skills: Write a single-paragraph", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Write a single-paragraph", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-research-prompt/SKILL.md" + "skill_path": "skills/knowledge/david-research-prompt/SKILL.md" }, "trust_class": "read-only", "validation": { diff --git a/skills/imported/david/david-cyber-audit/references/source.md b/skills/knowledge/david-research-prompt/references/source.md similarity index 77% rename from skills/imported/david/david-cyber-audit/references/source.md rename to skills/knowledge/david-research-prompt/references/source.md index ab9f7b3..0a5bc9a 100644 --- a/skills/imported/david/david-cyber-audit/references/source.md +++ b/skills/knowledge/david-research-prompt/references/source.md @@ -1,10 +1,10 @@ -# Source Metadata +# Origin -- Imported skill: `$david-cyber-audit` -- Upstream skill name: `cyber-audit` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/ops-and-setup/cyber-audit` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- Stack-owned skill: `$david-research-prompt` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `research-prompt` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/research-and-web/research-prompt` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` - License: MIT ## License Notice diff --git a/skills/imported/david/david-youtube-transcript/SKILL.md b/skills/knowledge/david-youtube-transcript/SKILL.md similarity index 91% rename from skills/imported/david/david-youtube-transcript/SKILL.md rename to skills/knowledge/david-youtube-transcript/SKILL.md index c6f5b0d..daf8393 100644 --- a/skills/imported/david/david-youtube-transcript/SKILL.md +++ b/skills/knowledge/david-youtube-transcript/SKILL.md @@ -1,19 +1,19 @@ --- name: david-youtube-transcript -description: 'Namespaced import of David Ondrej agent skills: Use whenever the user +description: 'Stack-owned, adapted from David Ondrej agent skills: Use whenever the user needs the transcript of a YouTube video — fetching, extracting, downloading, or pulling captions/subtitles/transcript text from a YouTube URL. Triggers on "get the transcript", "transcript of this video", "pull the captions", "download subtitles", "what does this YouTube video say". Primary path is DeepAPI (go to deepapi.co to get an API key); yt-dlp is the local fallback.. Use via $david-youtube-transcript - when this upstream workflow is needed inside Maroun''s Stack or Hermes-safe operating + when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-youtube-transcript`. -- Upstream name: `youtube-transcript`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-youtube-transcript`. +- Adapted from David Ondrej's `youtube-transcript` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/david/david-youtube-transcript/agents/openai.yaml b/skills/knowledge/david-youtube-transcript/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-youtube-transcript/agents/openai.yaml rename to skills/knowledge/david-youtube-transcript/agents/openai.yaml diff --git a/skills/imported/david/david-youtube-transcript/capability.json b/skills/knowledge/david-youtube-transcript/capability.json similarity index 71% rename from skills/imported/david/david-youtube-transcript/capability.json rename to skills/knowledge/david-youtube-transcript/capability.json index 8414100..4904408 100644 --- a/skills/imported/david/david-youtube-transcript/capability.json +++ b/skills/knowledge/david-youtube-transcript/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-youtube-transcript/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/knowledge/david-youtube-transcript/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-youtube-transcript" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-youtube-transcript" }, - "purpose": "Namespaced import of David Ondrej agent skills: Use whenever the user", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Use whenever the user", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-youtube-transcript/SKILL.md" + "skill_path": "skills/knowledge/david-youtube-transcript/SKILL.md" }, "trust_class": "read-only", "validation": { diff --git a/skills/knowledge/david-youtube-transcript/references/source.md b/skills/knowledge/david-youtube-transcript/references/source.md new file mode 100644 index 0000000..9db6b32 --- /dev/null +++ b/skills/knowledge/david-youtube-transcript/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-youtube-transcript` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `youtube-transcript` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/research-and-web/youtube-transcript` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- License: MIT + +## License Notice + +```text +MIT License + +Copyright (c) 2026 David Ondrej + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/skills/imported/david/david-agent-self-scheduling/SKILL.md b/skills/orchestration/david-agent-self-scheduling/SKILL.md similarity index 91% rename from skills/imported/david/david-agent-self-scheduling/SKILL.md rename to skills/orchestration/david-agent-self-scheduling/SKILL.md index 1a0d746..5574201 100644 --- a/skills/imported/david/david-agent-self-scheduling/SKILL.md +++ b/skills/orchestration/david-agent-self-scheduling/SKILL.md @@ -1,17 +1,17 @@ --- name: david-agent-self-scheduling -description: 'Namespaced import of David Ondrej agent skills: Make an AI agent run +description: 'Stack-owned, adapted from David Ondrej agent skills: Make an AI agent run on a schedule, loop, or interval — cron, heartbeats, recurring autonomous checks. Use for "run every N minutes", "schedule a task", "run on a loop", "heartbeat". Covers external clocks (Claude Code, Codex, Pi) vs Hermes'' built-in scheduler.. - Use via $david-agent-self-scheduling when this upstream workflow is needed inside + Use via $david-agent-self-scheduling when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-agent-self-scheduling`. -- Upstream name: `agent-self-scheduling`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-agent-self-scheduling`. +- Adapted from David Ondrej's `agent-self-scheduling` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/david/david-agent-self-scheduling/agents/openai.yaml b/skills/orchestration/david-agent-self-scheduling/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-agent-self-scheduling/agents/openai.yaml rename to skills/orchestration/david-agent-self-scheduling/agents/openai.yaml diff --git a/skills/imported/david/david-agent-self-scheduling/capability.json b/skills/orchestration/david-agent-self-scheduling/capability.json similarity index 72% rename from skills/imported/david/david-agent-self-scheduling/capability.json rename to skills/orchestration/david-agent-self-scheduling/capability.json index 6a86022..da18645 100644 --- a/skills/imported/david/david-agent-self-scheduling/capability.json +++ b/skills/orchestration/david-agent-self-scheduling/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-agent-self-scheduling/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/orchestration/david-agent-self-scheduling/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-agent-self-scheduling" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-agent-self-scheduling" }, - "purpose": "Namespaced import of David Ondrej agent skills: Make an AI agent run", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Make an AI agent run", "role": "workflow", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-agent-self-scheduling/SKILL.md" + "skill_path": "skills/orchestration/david-agent-self-scheduling/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/orchestration/david-agent-self-scheduling/references/source.md b/skills/orchestration/david-agent-self-scheduling/references/source.md new file mode 100644 index 0000000..d4cfc45 --- /dev/null +++ b/skills/orchestration/david-agent-self-scheduling/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-agent-self-scheduling` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `agent-self-scheduling` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/agent-orchestration/agent-self-scheduling` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- License: MIT + +## License Notice + +```text +MIT License + +Copyright (c) 2026 David Ondrej + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md b/skills/planning/matt-resolving-merge-conflicts/SKILL.md similarity index 71% rename from skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md rename to skills/planning/matt-resolving-merge-conflicts/SKILL.md index b7a1474..6342d53 100644 --- a/skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md +++ b/skills/planning/matt-resolving-merge-conflicts/SKILL.md @@ -1,15 +1,15 @@ --- name: matt-resolving-merge-conflicts -description: 'Namespaced import of Matt Pocock engineering/productivity skills: Use +description: 'Stack-owned, adapted from Matt Pocock engineering/productivity skills: Use when you need to resolve an in-progress git merge/rebase conflict.. Use via $matt-resolving-merge-conflicts - when this upstream workflow is needed inside Maroun''s Stack or Hermes-safe operating + when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$matt-resolving-merge-conflicts`. -- Upstream name: `resolving-merge-conflicts`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$matt-resolving-merge-conflicts`. +- Adapted from Matt Pocock's `resolving-merge-conflicts` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/matt/matt-resolving-merge-conflicts/agents/openai.yaml b/skills/planning/matt-resolving-merge-conflicts/agents/openai.yaml similarity index 100% rename from skills/imported/matt/matt-resolving-merge-conflicts/agents/openai.yaml rename to skills/planning/matt-resolving-merge-conflicts/agents/openai.yaml diff --git a/skills/imported/matt/matt-resolving-merge-conflicts/capability.json b/skills/planning/matt-resolving-merge-conflicts/capability.json similarity index 70% rename from skills/imported/matt/matt-resolving-merge-conflicts/capability.json rename to skills/planning/matt-resolving-merge-conflicts/capability.json index e77f26e..71c5afc 100644 --- a/skills/imported/matt/matt-resolving-merge-conflicts/capability.json +++ b/skills/planning/matt-resolving-merge-conflicts/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "matt", - "source_path": "skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/planning/matt-resolving-merge-conflicts/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/matt-resolving-merge-conflicts" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/matt-resolving-merge-conflicts" }, - "purpose": "Namespaced import of Matt Pocock engineering/productivity skills: Use", + "purpose": "Stack-owned, adapted from Matt Pocock engineering/productivity skills: Use", "role": "workflow", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/matt/matt-resolving-merge-conflicts/SKILL.md" + "skill_path": "skills/planning/matt-resolving-merge-conflicts/SKILL.md" }, "trust_class": "read-only", "validation": { diff --git a/skills/imported/matt/matt-resolving-merge-conflicts/references/source.md b/skills/planning/matt-resolving-merge-conflicts/references/source.md similarity index 76% rename from skills/imported/matt/matt-resolving-merge-conflicts/references/source.md rename to skills/planning/matt-resolving-merge-conflicts/references/source.md index 5dfe6b6..8bdf662 100644 --- a/skills/imported/matt/matt-resolving-merge-conflicts/references/source.md +++ b/skills/planning/matt-resolving-merge-conflicts/references/source.md @@ -1,10 +1,10 @@ -# Source Metadata +# Origin -- Imported skill: `$matt-resolving-merge-conflicts` -- Upstream skill name: `resolving-merge-conflicts` -- Upstream repo: https://github.com/mattpocock/skills -- Upstream path: `skills/engineering/resolving-merge-conflicts` -- Inspected commit: `391a2701dd948f94f56a39f7533f8eea9a859c87` +- Stack-owned skill: `$matt-resolving-merge-conflicts` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `resolving-merge-conflicts` +- Origin repo: https://github.com/mattpocock/skills +- Origin path: `skills/engineering/resolving-merge-conflicts` +- Last inspected commit: `391a2701dd948f94f56a39f7533f8eea9a859c87` - License: MIT ## License Notice diff --git a/skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md b/skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md similarity index 92% rename from skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md rename to skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md index 5f9ea53..6305b7f 100644 --- a/skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md +++ b/skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md @@ -1,18 +1,18 @@ --- name: david-folder-specific-claude-and-agents-md -description: 'Namespaced import of David Ondrej agent skills: Create a specialized +description: 'Stack-owned, adapted from David Ondrej agent skills: Create a specialized CLAUDE.md (+ AGENTS.md symlink) inside a specific folder to give future agents folder-scoped context. Use when the user asks to create a CLAUDE.md for a folder, write folder instructions, or add agent context to a directory.. Use via $david-folder-specific-claude-and-agents-md - when this upstream workflow is needed inside Maroun''s Stack or Hermes-safe operating + when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' user-invocable: true --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-folder-specific-claude-and-agents-md`. -- Upstream name: `folder-specific-claude-and-agents-md`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-folder-specific-claude-and-agents-md`. +- Adapted from David Ondrej's `folder-specific-claude-and-agents-md` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/david/david-folder-specific-claude-and-agents-md/agents/openai.yaml b/skills/platform/david-folder-specific-claude-and-agents-md/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-folder-specific-claude-and-agents-md/agents/openai.yaml rename to skills/platform/david-folder-specific-claude-and-agents-md/agents/openai.yaml diff --git a/skills/imported/david/david-folder-specific-claude-and-agents-md/capability.json b/skills/platform/david-folder-specific-claude-and-agents-md/capability.json similarity index 69% rename from skills/imported/david/david-folder-specific-claude-and-agents-md/capability.json rename to skills/platform/david-folder-specific-claude-and-agents-md/capability.json index 90f0967..c416567 100644 --- a/skills/imported/david/david-folder-specific-claude-and-agents-md/capability.json +++ b/skills/platform/david-folder-specific-claude-and-agents-md/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-folder-specific-claude-and-agents-md" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-folder-specific-claude-and-agents-md" }, - "purpose": "Namespaced import of David Ondrej agent skills: Create a specialized", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Create a specialized", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-folder-specific-claude-and-agents-md/SKILL.md" + "skill_path": "skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/platform/david-folder-specific-claude-and-agents-md/references/source.md b/skills/platform/david-folder-specific-claude-and-agents-md/references/source.md new file mode 100644 index 0000000..79bcafb --- /dev/null +++ b/skills/platform/david-folder-specific-claude-and-agents-md/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-folder-specific-claude-and-agents-md` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `folder-specific-claude-and-agents-md` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/skill-authoring/folder-specific-claude-and-agents-md` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- License: MIT + +## License Notice + +```text +MIT License + +Copyright (c) 2026 David Ondrej + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/skills/imported/david/david-cyber-audit/SKILL.md b/skills/review/david-cyber-audit/SKILL.md similarity index 92% rename from skills/imported/david/david-cyber-audit/SKILL.md rename to skills/review/david-cyber-audit/SKILL.md index 1abf2dd..e0ad7a8 100644 --- a/skills/imported/david/david-cyber-audit/SKILL.md +++ b/skills/review/david-cyber-audit/SKILL.md @@ -1,21 +1,21 @@ --- name: david-cyber-audit -description: 'Namespaced import of David Ondrej agent skills: Read-only exposure audit +description: 'Stack-owned, adapted from David Ondrej agent skills: Read-only exposure audit of the user''s Mac (and ~/Documents/code projects) for a CVE, breach, malicious package, or other security advisory, then write a structured report to ~/Documents/security-audits/. Use when the user shares a breach/CVE/malware/supply-chain advisory and asks if they''re affected, says "scan my system for X", "are we affected by Y", "check if I''m vulnerable to Z", or requests any hack/breach/cyber/vulnerability audit on this Mac. Output matches the existing audit format in ~/Documents/security-audits/.. - Use via $david-cyber-audit when this upstream workflow is needed inside Maroun''s + Use via $david-cyber-audit when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' disable-model-invocation: true --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-cyber-audit`. -- Upstream name: `cyber-audit`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-cyber-audit`. +- Adapted from David Ondrej's `cyber-audit` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/david/david-cyber-audit/agents/openai.yaml b/skills/review/david-cyber-audit/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-cyber-audit/agents/openai.yaml rename to skills/review/david-cyber-audit/agents/openai.yaml diff --git a/skills/imported/david/david-cyber-audit/capability.json b/skills/review/david-cyber-audit/capability.json similarity index 71% rename from skills/imported/david/david-cyber-audit/capability.json rename to skills/review/david-cyber-audit/capability.json index 7aa9cba..5c7ba53 100644 --- a/skills/imported/david/david-cyber-audit/capability.json +++ b/skills/review/david-cyber-audit/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-cyber-audit/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/review/david-cyber-audit/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-cyber-audit" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-cyber-audit" }, - "purpose": "Namespaced import of David Ondrej agent skills: Read-only exposure audit", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Read-only exposure audit", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-cyber-audit/SKILL.md" + "skill_path": "skills/review/david-cyber-audit/SKILL.md" }, "trust_class": "read-only", "validation": { diff --git a/skills/imported/david/david-create-readonly-db-role/references/source.md b/skills/review/david-cyber-audit/references/source.md similarity index 78% rename from skills/imported/david/david-create-readonly-db-role/references/source.md rename to skills/review/david-cyber-audit/references/source.md index 4c44ba4..d521ccb 100644 --- a/skills/imported/david/david-create-readonly-db-role/references/source.md +++ b/skills/review/david-cyber-audit/references/source.md @@ -1,10 +1,10 @@ -# Source Metadata +# Origin -- Imported skill: `$david-create-readonly-db-role` -- Upstream skill name: `create-readonly-db-role` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/ops-and-setup/create-readonly-db-role` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- Stack-owned skill: `$david-cyber-audit` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `cyber-audit` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/ops-and-setup/cyber-audit` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` - License: MIT ## License Notice diff --git a/skills/imported/david/david-google-safe-browsing/SKILL.md b/skills/review/david-google-safe-browsing/SKILL.md similarity index 91% rename from skills/imported/david/david-google-safe-browsing/SKILL.md rename to skills/review/david-google-safe-browsing/SKILL.md index 725f609..fc3010a 100644 --- a/skills/imported/david/david-google-safe-browsing/SKILL.md +++ b/skills/review/david-google-safe-browsing/SKILL.md @@ -1,18 +1,17 @@ --- name: david-google-safe-browsing -description: 'Namespaced import of David Ondrej agent skills: Prevent and fix Google +description: 'Stack-owned, adapted from David Ondrej agent skills: Prevent and fix Google Safe Browsing "Dangerous site" flags. Use when launching a public web app, buying/picking a domain, building a login or signup page, or when any site shows a red "Dangerous site" / "Deceptive site" warning in Chrome, Brave, Safari, Firefox, or Edge. Triggers on "dangerous site", "deceptive site", "site blocked", "safe browsing", "phishing - flag", "red warning screen".. Use via $david-google-safe-browsing when this upstream - workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' + flag", "red warning screen".. Use via $david-google-safe-browsing when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-google-safe-browsing`. -- Upstream name: `google-safe-browsing`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-google-safe-browsing`. +- Adapted from David Ondrej's `google-safe-browsing` skill (MIT). Stack owns this copy and no longer tracks upstream. +- Origin and license notice: [references/source.md](references/source.md). - For broad routing, Hermes/Mookie safety boundaries, or verification choice, start with `$agent-operating-stack` and then use this skill as the focused workflow. diff --git a/skills/imported/david/david-google-safe-browsing/agents/openai.yaml b/skills/review/david-google-safe-browsing/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-google-safe-browsing/agents/openai.yaml rename to skills/review/david-google-safe-browsing/agents/openai.yaml diff --git a/skills/imported/david/david-google-safe-browsing/capability.json b/skills/review/david-google-safe-browsing/capability.json similarity index 70% rename from skills/imported/david/david-google-safe-browsing/capability.json rename to skills/review/david-google-safe-browsing/capability.json index 8331bcb..c6d7874 100644 --- a/skills/imported/david/david-google-safe-browsing/capability.json +++ b/skills/review/david-google-safe-browsing/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-google-safe-browsing/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/review/david-google-safe-browsing/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-google-safe-browsing" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-google-safe-browsing" }, - "purpose": "Namespaced import of David Ondrej agent skills: Prevent and fix Google", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Prevent and fix Google", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-google-safe-browsing/SKILL.md" + "skill_path": "skills/review/david-google-safe-browsing/SKILL.md" }, "trust_class": "read-only", "validation": { diff --git a/skills/review/david-google-safe-browsing/references/source.md b/skills/review/david-google-safe-browsing/references/source.md new file mode 100644 index 0000000..a437c99 --- /dev/null +++ b/skills/review/david-google-safe-browsing/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-google-safe-browsing` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `google-safe-browsing` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/ops-and-setup/google-safe-browsing` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- License: MIT + +## License Notice + +```text +MIT License + +Copyright (c) 2026 David Ondrej + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/tests/test_stack_owned_imports.py b/tests/test_stack_owned_imports.py new file mode 100644 index 0000000..0e8a444 --- /dev/null +++ b/tests/test_stack_owned_imports.py @@ -0,0 +1,145 @@ +"""Contracts for the 2026-11-13 David/Matt import cleanup. + +Eight David imports were retired. Ten David/Matt imports whose upstream copies +were removed or moved became Stack-owned and left the maintenance lane. +""" +from __future__ import annotations + +import importlib.util +import json +import shutil +import subprocess +import tempfile +import unittest +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] + +RETIRED = ( + "david-pi-web-search", + "david-pi-custom-model", + "david-push-skill-to-github", + "david-distribute-skill-to-all-agents", + "david-run-deep-swe", + "david-level-up", + "david-short", + "david-teach", +) +CONVERTED = { + "david-youtube-transcript": "skills/knowledge/david-youtube-transcript", + "david-research-prompt": "skills/knowledge/david-research-prompt", + "david-google-safe-browsing": "skills/review/david-google-safe-browsing", + "david-cyber-audit": "skills/review/david-cyber-audit", + "david-create-readonly-db-role": "skills/engineering/david-create-readonly-db-role", + "david-prompt-me": "skills/engineering/david-prompt-me", + "david-brain-to-docs": "skills/engineering/david-brain-to-docs", + "david-agent-self-scheduling": "skills/orchestration/david-agent-self-scheduling", + "david-folder-specific-claude-and-agents-md": "skills/platform/david-folder-specific-claude-and-agents-md", + "matt-resolving-merge-conflicts": "skills/planning/matt-resolving-merge-conflicts", +} + + +def read(relative: str) -> dict: + return json.loads((ROOT / relative).read_text(encoding="utf-8")) + + +def catalog() -> dict[str, dict]: + return {row["canonical_name"]: row for row in read("registry/capabilities.json")["capabilities"]} + + +class RetiredImportTests(unittest.TestCase): + def test_retired_skills_are_gone_from_the_tree_catalog_and_records(self) -> None: + names = catalog() + moves = {move["canonical_name"] for move in read("registry/migrations/2026-07-23-skill-layout.json")["moves"]} + retained = { + Path(row["target"]).name + for rule in read("registry/maintenance-imports.json")["providers"] + for row in rule.get("retained_targets", []) + } + classifier = (ROOT / "scripts/classify-capabilities.py").read_text(encoding="utf-8") + for name in RETIRED: + with self.subTest(name=name): + self.assertEqual(list((ROOT / "skills").glob(f"**/{name}")), []) + self.assertNotIn(name, names) + self.assertNotIn(name, moves) + self.assertNotIn(name, retained) + self.assertNotIn(f'"{name}"', classifier) + + +class StackOwnedImportTests(unittest.TestCase): + def test_converted_skills_are_stack_owned_with_origin_and_license_kept(self) -> None: + names = catalog() + for name, path in CONVERTED.items(): + with self.subTest(name=name): + row = names[name] + self.assertEqual(row["source"]["skill_path"], f"{path}/SKILL.md") + self.assertEqual(row["ownership"], {"package": "stack", "provider": "stack", "source_path": f"{path}/SKILL.md"}) + self.assertEqual(row["provenance"], {"license": "MIT", "posture": "repository-local", "source_identity": f"stack:skills/{name}"}) + self.assertEqual(row["lifecycle"], "active") + self.assertTrue(row["purpose"].startswith("Stack-owned, adapted from ")) + skill = (ROOT / path / "SKILL.md").read_text(encoding="utf-8") + self.assertIn("## Stack-owned\n", skill) + self.assertNotIn("Upstream name:", skill) + self.assertNotIn("upstream workflow", skill) + source = (ROOT / path / "references/source.md").read_text(encoding="utf-8") + self.assertIn(f"- Stack-owned skill: `${name}`", source) + self.assertRegex(source, r"- Last inspected commit: `[a-f0-9]{40}`") + self.assertIn("MIT License", source) + self.assertIn("Permission is hereby granted", source) + + def test_converted_skills_are_outside_the_maintenance_lane(self) -> None: + imports = read("registry/maintenance-imports.json")["providers"] + policy = read("config/stack-maintenance.json") + sources = {row["id"]: row for row in read("registry/maintenance-sources.json")["sources"]} + row = sources["stack-owned-imports"] + self.assertEqual(row["disposition"], "repository-owned-capability") + self.assertIsNone(row["provider_id"]) + self.assertEqual(row["target_paths"], sorted(CONVERTED.values())) + self.assertIn("stack-owned-imports", policy["legacy_target_ids"]) + retained = {target["target"] for rule in imports for target in rule.get("retained_targets", [])} + for name, path in CONVERTED.items(): + with self.subTest(name=name): + self.assertFalse(path.startswith("skills/imported/")) + self.assertFalse(any(path.startswith(rule["target_root"].rstrip("/") + "/") for rule in imports if rule["target_root"] != ".")) + self.assertFalse(any(path.startswith(entry) for entry in policy["diff_allowlist"] if entry.endswith("/"))) + self.assertNotIn(path, retained) + self.assertFalse(any(target.get("target") == path for rule in imports for target in rule.get("targets", []))) + + +class ClassifierIdempotencyTests(unittest.TestCase): + def test_classifier_rerun_leaves_every_manifest_and_the_reconciliation_unchanged(self) -> None: + spec = importlib.util.spec_from_file_location("classify_rerun", ROOT / "scripts/classify-capabilities.py") + assert spec and spec.loader + classifier = importlib.util.module_from_spec(spec) + spec.loader.exec_module(classifier) + inputs = ["config/runtime-targets.json", "registry/inventory-sources.json"] + try: + listed = subprocess.run( + ["git", "-C", str(ROOT), "ls-files", "-z", "--", "skills", "packages"], + check=True, capture_output=True, + ).stdout.split(b"\0") + files = [item.decode("utf-8") for item in listed if item] + inputs + except (OSError, subprocess.CalledProcessError): + files = [path.relative_to(ROOT).as_posix() for base in ("skills", "packages") for path in (ROOT / base).rglob("*") if path.is_file()] + inputs + with tempfile.TemporaryDirectory() as temporary: + copy = Path(temporary) / "stack" + for relative in files: + source = ROOT / relative + if source.is_symlink() or not source.is_file(): + continue + destination = copy / relative + destination.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(source, destination) + before = {path.relative_to(copy).as_posix(): path.read_bytes() for path in (copy / "skills").rglob("capability.json")} + reconciliation = classifier.classify(copy) + after = {path.relative_to(copy).as_posix(): path.read_bytes() for path in (copy / "skills").rglob("capability.json")} + self.assertEqual(sorted(after), sorted(before)) + changed = sorted(path for path in before if before[path] != after[path]) + self.assertEqual(changed, []) + recorded = (ROOT / "artifacts/audits/phase1-architecture/capability-reconciliation.json").read_text(encoding="utf-8") + self.assertEqual(json.loads(recorded)["callable_skills"], reconciliation["callable_skills"]) + + +if __name__ == "__main__": + unittest.main()