diff --git a/config/CLAUDE.md b/AGENTS.md similarity index 61% rename from config/CLAUDE.md rename to AGENTS.md index aefe716..4d45411 100644 --- a/config/CLAUDE.md +++ b/AGENTS.md @@ -1,10 +1,49 @@ # Stack operating context +This file is the single source of agent instructions for this repository. +Codex reads `AGENTS.md`; Claude Code reads `CLAUDE.md`, which is a symlink to +this file. Edit this file, never the symlink. + Stack is a curated design-and-build capability system. Prefer skills and reference knowledge that improve planning, product work, interface design, implementation, review, verification, or shipping. Orchestration is in scope only when it directly supports a named design/build workflow. +## Shared agent context + +Claude and Codex keep three shared files in `docs/context/`: + +- `docs/context/state.md`: current state of `main`, open pull requests, + blockers and what is installed. Rewrite it whole each time. +- `docs/context/decisions.md`: one dated line per decision, with its pull + request link. Append only. To reverse a decision, add a new line. +- `docs/context/handoff.md`: the latest note for whichever agent comes next: + author (Claude or Codex), date, what was done, what is next. Rewrite it + whole each time. + +Rules: + +1. Every agent reads `docs/context/state.md` and `docs/context/handoff.md` + before starting work. +2. Before ending a session that changed anything (a commit, pull request, + merge or install), update `state.md` and `handoff.md`, and append to + `decisions.md` when a decision was made. Ship them in the same pull + request as the change. +3. No secrets or personal data in these files: no tokens, keys, passwords, + email addresses, private bookmark content or absolute home paths. Use + repository-relative or `~/` paths. They are published with the rest of + `docs/`. +4. Scheduled automations that run from a dedicated clean clone (for example + the weekly maintenance and design lanes) do not edit these files; their + receipts are the record. The next interactive session folds their results + into `state.md`. + +## Upstream skills + +A provider is tracked weekly only if it passes the admission rule in +`docs/upstream-policy.md`. Otherwise it is pick-only: import one reviewed +skill, which becomes Stack-owned and stops tracking upstream. + ## Source of truth and runtime boundary - `skills/**/capability.json` is the authoritative capability-local manifest. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file diff --git a/artifacts/audits/phase1-architecture/capability-reconciliation.json b/artifacts/audits/phase1-architecture/capability-reconciliation.json index 7e98ca4..aed503e 100644 --- a/artifacts/audits/phase1-architecture/capability-reconciliation.json +++ b/artifacts/audits/phase1-architecture/capability-reconciliation.json @@ -32,9 +32,13 @@ "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-anti-sleep/SKILL.md": "skills/engineering/david-anti-sleep/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-deepapi/SKILL.md": "skills/engineering/david-deepapi/capability.json", + "skills/engineering/david-fable-safe-prompt/SKILL.md": "skills/engineering/david-fable-safe-prompt/capability.json", "skills/engineering/david-prompt-me/SKILL.md": "skills/engineering/david-prompt-me/capability.json", + "skills/engineering/david-read-all-adrs/SKILL.md": "skills/engineering/david-read-all-adrs/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", @@ -43,18 +47,6 @@ "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-anti-sleep/SKILL.md": "skills/imported/david/david-anti-sleep/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-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-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-goal-loop/SKILL.md": "skills/imported/david/david-goal-loop/capability.json", - "skills/imported/david/david-handoff/SKILL.md": "skills/imported/david/david-handoff/capability.json", - "skills/imported/david/david-read-all-adrs/SKILL.md": "skills/imported/david/david-read-all-adrs/capability.json", - "skills/imported/david/david-setup-help/SKILL.md": "skills/imported/david/david-setup-help/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", @@ -137,6 +129,7 @@ "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-deep-research/SKILL.md": "skills/knowledge/david-deep-research/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", @@ -144,16 +137,23 @@ "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/david-cmux/SKILL.md": "skills/orchestration/david-cmux/capability.json", + "skills/orchestration/david-codex-subagent/SKILL.md": "skills/orchestration/david-codex-subagent/capability.json", + "skills/orchestration/david-goal-loop/SKILL.md": "skills/orchestration/david-goal-loop/capability.json", + "skills/orchestration/david-handoff/SKILL.md": "skills/orchestration/david-handoff/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-effective-agent-skills/SKILL.md": "skills/platform/david-effective-agent-skills/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/david-setup-help/SKILL.md": "skills/platform/david-setup-help/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/david-browser-harness/SKILL.md": "skills/qa/david-browser-harness/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", @@ -185,9 +185,13 @@ "skills/design/rams/SKILL.md", "skills/design/review-animations/SKILL.md", "skills/design/ui-design-brain/SKILL.md", + "skills/engineering/david-anti-sleep/SKILL.md", "skills/engineering/david-brain-to-docs/SKILL.md", "skills/engineering/david-create-readonly-db-role/SKILL.md", + "skills/engineering/david-deepapi/SKILL.md", + "skills/engineering/david-fable-safe-prompt/SKILL.md", "skills/engineering/david-prompt-me/SKILL.md", + "skills/engineering/david-read-all-adrs/SKILL.md", "skills/engineering/fix-sentry-issues/SKILL.md", "skills/engineering/gemini-review/SKILL.md", "skills/engineering/hermes-native-patch-migration/SKILL.md", @@ -196,18 +200,6 @@ "skills/engineering/simplify/SKILL.md", "skills/engineering/tdd/SKILL.md", "skills/imported/benjitaylor/stageshow/SKILL.md", - "skills/imported/david/david-anti-sleep/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-deep-research/SKILL.md", - "skills/imported/david/david-deepapi/SKILL.md", - "skills/imported/david/david-effective-agent-skills/SKILL.md", - "skills/imported/david/david-fable-safe-prompt/SKILL.md", - "skills/imported/david/david-goal-loop/SKILL.md", - "skills/imported/david/david-handoff/SKILL.md", - "skills/imported/david/david-read-all-adrs/SKILL.md", - "skills/imported/david/david-setup-help/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", @@ -290,6 +282,7 @@ "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-deep-research/SKILL.md", "skills/knowledge/david-research-prompt/SKILL.md", "skills/knowledge/david-youtube-transcript/SKILL.md", "skills/knowledge/field-theory-bookmark-synthesis/SKILL.md", @@ -297,16 +290,23 @@ "skills/knowledge/muller-brockmann-grid-systems/SKILL.md", "skills/knowledge/userinterface-wiki/SKILL.md", "skills/orchestration/david-agent-self-scheduling/SKILL.md", + "skills/orchestration/david-cmux/SKILL.md", + "skills/orchestration/david-codex-subagent/SKILL.md", + "skills/orchestration/david-goal-loop/SKILL.md", + "skills/orchestration/david-handoff/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-effective-agent-skills/SKILL.md", "skills/platform/david-folder-specific-claude-and-agents-md/SKILL.md", + "skills/platform/david-setup-help/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/david-browser-harness/SKILL.md", "skills/qa/live-site-health-check/SKILL.md", "skills/review/agent-verification-ladder/SKILL.md", "skills/review/david-cyber-audit/SKILL.md", diff --git a/config/runtime-targets.json b/config/runtime-targets.json index 8922284..25bf02b 100644 --- a/config/runtime-targets.json +++ b/config/runtime-targets.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "catalog_digest": "3bb864f353cac156603490a1ff0d930971861c5e81b1727b2411f24c830ae09a", + "catalog_digest": "8b3a9e992e2002cee9bc836813b873751f2d202ae5528ff900755324b24f52ef", "targets": [ { "name": "claude", diff --git a/config/stack-maintenance.json b/config/stack-maintenance.json index 3202422..c9d6320 100644 --- a/config/stack-maintenance.json +++ b/config/stack-maintenance.json @@ -103,7 +103,6 @@ "tests/test_fresh_clone.py", "registry/capabilities.json", "skills/imported/matt/", - "skills/imported/david/", "skills/imported/emil/", "skills/imported/stewdio/", "skills/design/review-animations/", diff --git a/docs/context/decisions.md b/docs/context/decisions.md new file mode 100644 index 0000000..f088cf7 --- /dev/null +++ b/docs/context/decisions.md @@ -0,0 +1,9 @@ +# Decisions + +Append only; see `AGENTS.md`. One line per decision: date, decision, pull +request. To reverse a decision, add a new line. + +- 2026-11-06: Publish the Claude runtime as the `stack@skills-dir` plugin, so skills load as `stack:`. [#46](https://github.com/thecolormaroun/stack/pull/46) +- 2026-11-10: Drop Twombly from micro-branch because it is a paid third-party product; the local board is the only canvas. [#52](https://github.com/thecolormaroun/stack/pull/52) +- 2026-11-13: Make davidondrej/skills pick-only; its remaining tracked skills become Stack-owned at their last inspected commit. [#56](https://github.com/thecolormaroun/stack/pull/56) +- 2026-11-13: Adopt the upstream admission rule in `docs/upstream-policy.md`: weekly tracking needs an OSI license file, publication for other users, no silent deletions or versioned releases, and general-purpose skills. [#56](https://github.com/thecolormaroun/stack/pull/56) diff --git a/docs/context/handoff.md b/docs/context/handoff.md new file mode 100644 index 0000000..de94bb2 --- /dev/null +++ b/docs/context/handoff.md @@ -0,0 +1,27 @@ +# Handoff + +Rewritten on every change; see `AGENTS.md`. + +- Author: Claude +- Date: 2026-11-13 + +## Done + +- [#55](https://github.com/thecolormaroun/stack/pull/55): retired 8 + David skills built for their author's setup, and made 10 David/Matt skills + whose upstream copies were removed Stack-owned. The classifier no longer + rewrites the stageshow manifest, so a rerun is a no-op. +- [#56](https://github.com/thecolormaroun/stack/pull/56), based on + #55: wrote the admission rule (`docs/upstream-policy.md`), added + `"tracking"` to every provider, made davidondrej/skills pick-only and its + 12 remaining skills Stack-owned, and added this shared context + (`AGENTS.md`, the `CLAUDE.md` symlink, `docs/context/`). + +## Next + +1. Owner review and merge: #55, then #56. Both are drafts. +2. Reinstall from `main` after both merge, then run `scripts/stack-doctor.py`. +3. Confirm the weekly `stack-upstream-sync` task skips `pick-only` providers + before Monday's run. +4. Decide on gstack and stewdio (they fail the admission rule but are still + `weekly`), and on refreshing the impeccable and taste-skill copies. diff --git a/docs/context/state.md b/docs/context/state.md new file mode 100644 index 0000000..ab347dc --- /dev/null +++ b/docs/context/state.md @@ -0,0 +1,52 @@ +# Stack state + +Rewritten on every change; see `AGENTS.md`. Last updated 2026-11-13 by Claude +in [#56](https://github.com/thecolormaroun/stack/pull/56). + +## Main + +- `origin/main` is `73136f9`, "Preserve approved imports during upstream + maintenance (#51)". +- On `main`, 29 David and 22 Matt skills still sit under `skills/imported/`. + #55 and #56 change that: no David skill stays tracked, and + davidondrej/skills becomes pick-only. + +## Installed + +- Claude `stack@skills-dir` and Codex `~/.codex/skills/stack` were published + from `73136f9` at 2026-11-13 17:35 UTC. +- Neither #55 nor #56 is installed. Reinstall from `main` after both + merge. + +## Open pull requests + +| PR | What | State | +| --- | --- | --- | +| [#55](https://github.com/thecolormaroun/stack/pull/55) | Retire 8 David skills; make 10 David/Matt skills Stack-owned | draft | +| [#56](https://github.com/thecolormaroun/stack/pull/56) | Admission rule, David pick-only, shared agent context; based on #55 | draft | +| [#54](https://github.com/thecolormaroun/stack/pull/54) | Import Emil's gestures and learn-taste skills | draft | +| [#48](https://github.com/thecolormaroun/stack/pull/48) | Stack critique and review, 2026-11-06 | draft | +| [#43](https://github.com/thecolormaroun/stack/pull/43) | Weekly knowledge intake and evidence | open since 2026-10-03 | +| [#23](https://github.com/thecolormaroun/stack/pull/23) | Sol High as the default Codex orchestrator | open since 2026-08-16 | + +A separate session is pinning ibelick/ui-skills as provider `ibelick`. Its row +in `registry/upstreams.json` needs `"tracking": "weekly"` (it passes the +admission rule). + +## Blockers + +- **Monday weekly maintenance** (`stack-upstream-sync`, 8am): davidondrej/skills + flattened every skill path on 2026-11-09, so the David lane fails until + #56 merges. #55 alone does not unblock it. +- The scheduled task must skip `pick-only` providers. A separate session owns + that change. +- Merge #55 before #56. If #54 or the ibelick change lands first, + rebase and regenerate the generated files; never hand-edit them. + +## Open owner decisions + +From the 2026-11-13 audit in `docs/upstream-policy.md`: + +- gstack and stewdio fail the admission rule but are still `weekly`. +- The impeccable and taste-skill copies no longer match upstream, which merged + them into single skills. diff --git a/docs/stack-maintenance.md b/docs/stack-maintenance.md index 5d2490a..9de5f74 100644 --- a/docs/stack-maintenance.md +++ b/docs/stack-maintenance.md @@ -260,7 +260,14 @@ maintenance diff allowlist. | `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. +Later the same day `davidondrej/skills` became `pick-only` under +`docs/upstream-policy.md`. Its 12 remaining skills (`david-anti-sleep`, +`david-browser-harness`, `david-cmux`, `david-codex-subagent`, +`david-deep-research`, `david-deepapi`, `david-effective-agent-skills`, +`david-fable-safe-prompt`, `david-goal-loop`, `david-handoff`, +`david-read-all-adrs`, `david-setup-help`) became Stack-owned the same way, at +their last inspected commit. David has no import rule and no allowlisted root. +The lane records the provider as `pick_only` and never observes or proposes it. `prepare` creates a disposable candidate clone outside the caller checkout from that recorded `origin/main` SHA. Only explicit policy-allowlisted files diff --git a/docs/upstream-policy.md b/docs/upstream-policy.md new file mode 100644 index 0000000..94046dc --- /dev/null +++ b/docs/upstream-policy.md @@ -0,0 +1,99 @@ +# Upstream admission policy + +Stack takes skills from other people's repositories in one of two modes. Each +provider in `registry/upstreams.json` records its mode in `"tracking"`. + +- **`weekly`** (tracked provider). The weekly maintenance lane observes the + provider's `HEAD`, re-materializes its mapped skills at the new commit, and + proposes the update as a pull request. +- **`pick-only`**. Stack imports one reviewed skill at a time. The copy becomes + Stack-owned the moment it lands: it lives in its family root (not under + `skills/imported/`), keeps its origin and license notice in + `references/source.md`, and never follows upstream again. + +## Admission rule + +A repository can be `weekly` only if all four hold. Anything else is +`pick-only`. + +1. **OSI license file.** The repository contains a license file (`LICENSE`, + `LICENSE.md`, `LICENSE.txt` or `COPYING`) with an OSI-approved license. A + license reported by GitHub without a file does not count. +2. **Published for other people.** A README written for users, skill paths that + stay put, and real commits. A mirror that pushes snapshot dumps from a + private repository fails, however good its content is. +3. **No silent deletions.** The maintainer has a record of announcing removals + and moves (changelog, release notes, deprecation), or the repository ships + versioned releases. +4. **General-purpose skills.** Nothing tied to the author's machine, accounts, + agents, private repositories or home-directory layout. + +## What code enforces + +- `scripts/stack-maintenance.py` rejects a provider whose `tracking` is not + `weekly` or `pick-only`, and never observes a pick-only provider. Its + observation row is `pick_only`, so it can never be proposed. +- `scripts/materialize-maintenance-proposal.py` and + `scripts/discover-upstream-updates.py` refuse any provider that is not + `weekly`. +- `scripts/import-pinned-skills.py` refuses a pick-only provider before any + network access. For a weekly provider it checks the machine-checkable part of + criterion 1 and 2 on the exact upstream checkout: an OSI license id, a license + file and a README. +- `tests/test_upstream_admission.py` pins these checks and requires every + provider to appear in the audit table below. + +Stable paths, the deletion record and general-purpose content (criteria 2 to 4) +need a person. Record that review in the audit table. + +## Changing a provider's mode + +Open a pull request that changes the provider's `tracking` value and its row in +the audit table, with the evidence. Moving a provider to `pick-only` also +converts each of its tracked skills to Stack-owned, removes its rule from +`registry/maintenance-imports.json` and its root from the +`config/stack-maintenance.json` diff allowlist, and adds the converted paths to +the `stack-owned-imports` row in `registry/maintenance-sources.json`. + +## Picking a skill from a pick-only provider + +1. Read the upstream skill at an exact commit and decide it is useful outside + its author's setup. +2. Copy it to `skills///` with a `capability.json` whose + provenance is `repository-local`, `stack:skills/` and the upstream + license. +3. Write `references/source.md` with the origin repository, path, inspected + commit and the full license notice. +4. Add the path to the `stack-owned-imports` row, then rebuild the generated + artifacts and run the full suite (see `docs/stack-maintenance.md`). + +## Provider audit, 2026-11-13 + +Audited at each repository's default-branch `HEAD`, looking back three months. +Only `david` changed mode. The others keep their current mode; a "pick-only" +verdict on a provider still marked `weekly` is an open decision for the owner. + +| Provider | Repository at audit | 1 License | 2 Published | 3 Deletions / releases | 4 General | Verdict | Mode now | +| --- | --- | --- | --- | --- | --- | --- | --- | +| matt | mattpocock/skills `5863806` | MIT file | Pass. Skills move between bucket folders when promoted, always announced | Pass. 10 releases; the merge-conflicts removal is in CHANGELOG 1.3.0 | Pass | Pass | weekly | +| emil | emilkowalski/skills `f8ff3b0` | MIT file | Pass | Pass. No releases, but no skill has ever been removed | Pass | Pass | weekly | +| stewdio | StewdioAI/blank-page `5ac1be1` | MIT file | Pass, provisional | Fail. Ten days old, no releases or tags | Pass | Pick-only (3) | weekly | +| gstack | garrytan/gstack `43c815b` | MIT file | Pass | Pass. 9 releases; removals in CHANGELOG | Fail. 63 of 71 SKILL.md files call `~/.claude/skills/gstack/bin` | Pick-only (4) | weekly | +| compound-engineering | EveryInc/compound-engineering-plugin `ee46dde` | MIT file | Pass | Pass. 242 releases; removals listed in PR 967 | Pass | Pass | weekly | +| stack-codex | thecolormaroun/stack (this repository) | Stack-owned | n/a | n/a | n/a | Stack-owned bundle | weekly | +| david | davidondrej/skills `482d888` | MIT file | Fail. Every commit is "Publish sanitized skills snapshot" from a private repo; paths flattened on 2026-11-09 | Fail. No releases; 18 skill names gone without notice; history rewritten | Fail. cmux, Pi agent, `~/.agents` hooks | Pick-only (2, 3, 4) | pick-only | +| impeccable | pbakaus/impeccable `c4cd192` | Apache-2.0 file | Pass | Pass. 107 releases; consolidation announced | Pass | Pass | Stack-owned copy, not a provider | +| taste-skill | Leonxlnx/taste-skill `f6b7657` | MIT file | Fail. Layout restructured four times in eight months | Pass. 9 releases | Pass | Pick-only (2) | Stack-owned copy, not a provider | +| ui | ibelick/ui-skills `ba966a3` | MIT file | Pass | Pass. 8 releases, no deletions since January | Pass | Pass | not yet a provider | + +Notes for the open decisions: + +- **gstack** fails only because each skill needs gstack's own public runtime + installed. If Stack accepts a provider-runtime dependency, it passes all four. +- **stewdio** should be re-audited after its first tagged release or in about + 90 days. +- **impeccable** upstream merged the 21 skills Stack carries into one + `impeccable` skill on 2026-04-10. Tracking it would mean tracking that single + skill, not the current copies. +- **taste-skill** upstream now ships one skill (`design-taste-frontend`). The + soft-skill copy moved to Leonxlnx/taste-skill-classics. diff --git a/registry/capabilities.json b/registry/capabilities.json index ad5adda..9b8a71f 100644 --- a/registry/capabilities.json +++ b/registry/capabilities.json @@ -1748,16 +1748,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-anti-sleep/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-anti-sleep/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-anti-sleep" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-anti-sleep" }, - "purpose": "Namespaced import of David Ondrej agent skills: Keep the user''s MacBook", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Keep the user''s MacBook", "role": "leaf", "runtimes": { "publish_targets": [ @@ -1771,7 +1771,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-anti-sleep/SKILL.md" + "skill_path": "skills/engineering/david-anti-sleep/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -1874,16 +1874,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-browser-harness/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/qa/david-browser-harness/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-browser-harness" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-browser-harness" }, - "purpose": "Namespaced import of David Ondrej agent skills: Direct browser control", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Direct browser control", "role": "leaf", "runtimes": { "publish_targets": [ @@ -1897,7 +1897,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-browser-harness/SKILL.md" + "skill_path": "skills/qa/david-browser-harness/SKILL.md" }, "trust_class": "read-only", "validation": { @@ -1937,16 +1937,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-cmux/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/orchestration/david-cmux/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-cmux" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-cmux" }, - "purpose": "Namespaced import of David Ondrej agent skills: MUST be read ANY time", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: MUST be read ANY time", "role": "workflow", "runtimes": { "publish_targets": [ @@ -1960,7 +1960,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-cmux/SKILL.md" + "skill_path": "skills/orchestration/david-cmux/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2000,16 +2000,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-codex-subagent/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/orchestration/david-codex-subagent/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-codex-subagent" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-codex-subagent" }, - "purpose": "Namespaced import of David Ondrej agent skills: Launch OpenAI Codex", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Launch OpenAI Codex", "role": "workflow", "runtimes": { "publish_targets": [ @@ -2023,7 +2023,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-codex-subagent/SKILL.md" + "skill_path": "skills/orchestration/david-codex-subagent/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2189,16 +2189,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-deep-research/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/knowledge/david-deep-research/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-deep-research" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-deep-research" }, - "purpose": "Namespaced import of David Ondrej agent skills: Run a deep, source-backed", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Run a deep, source-backed", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2212,7 +2212,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-deep-research/SKILL.md" + "skill_path": "skills/knowledge/david-deep-research/SKILL.md" }, "trust_class": "read-only", "validation": { @@ -2252,16 +2252,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-deepapi/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-deepapi/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-deepapi" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-deepapi" }, - "purpose": "Namespaced import of David Ondrej agent skills: Use DeepAPI for scraping", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Use DeepAPI for scraping", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2275,7 +2275,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-deepapi/SKILL.md" + "skill_path": "skills/engineering/david-deepapi/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2315,16 +2315,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-effective-agent-skills/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/platform/david-effective-agent-skills/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-effective-agent-skills" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-effective-agent-skills" }, - "purpose": "Namespaced import of David Ondrej agent skills: How to write effective", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: How to write effective", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2338,7 +2338,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-effective-agent-skills/SKILL.md" + "skill_path": "skills/platform/david-effective-agent-skills/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2378,16 +2378,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-fable-safe-prompt/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-fable-safe-prompt/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-fable-safe-prompt" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-fable-safe-prompt" }, - "purpose": "Namespaced import of David Ondrej agent skills: Rewrite a user''s prompt", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Rewrite a user''s prompt", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2401,7 +2401,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-fable-safe-prompt/SKILL.md" + "skill_path": "skills/engineering/david-fable-safe-prompt/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2504,16 +2504,16 @@ "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/orchestration/david-goal-loop/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-goal-loop" }, - "purpose": "Namespaced import of David Ondrej agent skills: Explain and write effective", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Explain and write effective", "role": "workflow", "runtimes": { "publish_targets": [ @@ -2527,7 +2527,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-goal-loop/SKILL.md" + "skill_path": "skills/orchestration/david-goal-loop/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2630,16 +2630,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-handoff/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/orchestration/david-handoff/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-handoff" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-handoff" }, - "purpose": "Namespaced import of David Ondrej agent skills: Compact the current", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Compact the current", "role": "workflow", "runtimes": { "publish_targets": [ @@ -2653,7 +2653,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-handoff/SKILL.md" + "skill_path": "skills/orchestration/david-handoff/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2756,16 +2756,16 @@ "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/engineering/david-read-all-adrs/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-read-all-adrs" }, - "purpose": "Namespaced import of David Ondrej agent skills: Read every ADR markdown", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Read every ADR markdown", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2779,7 +2779,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-read-all-adrs/SKILL.md" + "skill_path": "skills/engineering/david-read-all-adrs/SKILL.md" }, "trust_class": "local-mutation", "validation": { @@ -2882,16 +2882,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-setup-help/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/platform/david-setup-help/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-setup-help" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-setup-help" }, - "purpose": "Namespaced import of David Ondrej agent skills: Walk the user through", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Walk the user through", "role": "leaf", "runtimes": { "publish_targets": [ @@ -2905,7 +2905,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-setup-help/SKILL.md" + "skill_path": "skills/platform/david-setup-help/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/registry/maintenance-imports.json b/registry/maintenance-imports.json index a43c645..640853b 100644 --- a/registry/maintenance-imports.json +++ b/registry/maintenance-imports.json @@ -18,17 +18,6 @@ ], "retained_files": ["CONTEXT-FORMAT.md"] }, - { - "id": "david", - "display_name": "David Ondrej", - "target_root": "skills/imported/david", - "target_prefix": "david-", - "mapping": "existing-source-markdown", - "source_metadata": "references/source.md", - "license": "MIT", - "retained_targets": [], - "retained_files": ["agents/openai.yaml"] - }, { "id": "emil", "display_name": "Emil Kowalski", diff --git a/registry/maintenance-sources.json b/registry/maintenance-sources.json index 196b7f0..c13f341 100644 --- a/registry/maintenance-sources.json +++ b/registry/maintenance-sources.json @@ -84,12 +84,12 @@ }, { "id": "david-skills", - "target": "David Ondrej imported skill collection", + "target": "David Ondrej skill provider (pick-only; picked skills are Stack-owned)", "disposition": "catalog-managed-provider", "provider_ref": "davidondrej/skills", "pin_source": "registry/upstreams.json:david", "provider_id": "david", - "target_paths": ["skills/imported/david"], + "target_paths": [], "required_exports": ["david-handoff", "david-goal-loop", "david-read-all-adrs"] }, { @@ -99,7 +99,7 @@ "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"], + "target_paths": ["skills/engineering/david-anti-sleep", "skills/engineering/david-brain-to-docs", "skills/engineering/david-create-readonly-db-role", "skills/engineering/david-deepapi", "skills/engineering/david-fable-safe-prompt", "skills/engineering/david-prompt-me", "skills/engineering/david-read-all-adrs", "skills/knowledge/david-deep-research", "skills/knowledge/david-research-prompt", "skills/knowledge/david-youtube-transcript", "skills/orchestration/david-agent-self-scheduling", "skills/orchestration/david-cmux", "skills/orchestration/david-codex-subagent", "skills/orchestration/david-goal-loop", "skills/orchestration/david-handoff", "skills/planning/matt-resolving-merge-conflicts", "skills/platform/david-effective-agent-skills", "skills/platform/david-folder-specific-claude-and-agents-md", "skills/platform/david-setup-help", "skills/qa/david-browser-harness", "skills/review/david-cyber-audit", "skills/review/david-google-safe-browsing"], "required_exports": [] }, { diff --git a/registry/migrations/2026-07-23-skill-layout.json b/registry/migrations/2026-07-23-skill-layout.json index c24021c..394eb82 100644 --- a/registry/migrations/2026-07-23-skill-layout.json +++ b/registry/migrations/2026-07-23-skill-layout.json @@ -138,7 +138,7 @@ }, { "canonical_name": "david-anti-sleep", - "destination": "skills/imported/david/david-anti-sleep/SKILL.md", + "destination": "skills/engineering/david-anti-sleep/SKILL.md", "source": "skills/david-anti-sleep/SKILL.md" }, { @@ -148,17 +148,17 @@ }, { "canonical_name": "david-browser-harness", - "destination": "skills/imported/david/david-browser-harness/SKILL.md", + "destination": "skills/qa/david-browser-harness/SKILL.md", "source": "skills/david-browser-harness/SKILL.md" }, { "canonical_name": "david-cmux", - "destination": "skills/imported/david/david-cmux/SKILL.md", + "destination": "skills/orchestration/david-cmux/SKILL.md", "source": "skills/david-cmux/SKILL.md" }, { "canonical_name": "david-codex-subagent", - "destination": "skills/imported/david/david-codex-subagent/SKILL.md", + "destination": "skills/orchestration/david-codex-subagent/SKILL.md", "source": "skills/david-codex-subagent/SKILL.md" }, { @@ -173,22 +173,22 @@ }, { "canonical_name": "david-deep-research", - "destination": "skills/imported/david/david-deep-research/SKILL.md", + "destination": "skills/knowledge/david-deep-research/SKILL.md", "source": "skills/david-deep-research/SKILL.md" }, { "canonical_name": "david-deepapi", - "destination": "skills/imported/david/david-deepapi/SKILL.md", + "destination": "skills/engineering/david-deepapi/SKILL.md", "source": "skills/david-deepapi/SKILL.md" }, { "canonical_name": "david-effective-agent-skills", - "destination": "skills/imported/david/david-effective-agent-skills/SKILL.md", + "destination": "skills/platform/david-effective-agent-skills/SKILL.md", "source": "skills/david-effective-agent-skills/SKILL.md" }, { "canonical_name": "david-fable-safe-prompt", - "destination": "skills/imported/david/david-fable-safe-prompt/SKILL.md", + "destination": "skills/engineering/david-fable-safe-prompt/SKILL.md", "source": "skills/david-fable-safe-prompt/SKILL.md" }, { @@ -198,7 +198,7 @@ }, { "canonical_name": "david-goal-loop", - "destination": "skills/imported/david/david-goal-loop/SKILL.md", + "destination": "skills/orchestration/david-goal-loop/SKILL.md", "source": "skills/david-goal-loop/SKILL.md" }, { @@ -208,7 +208,7 @@ }, { "canonical_name": "david-handoff", - "destination": "skills/imported/david/david-handoff/SKILL.md", + "destination": "skills/orchestration/david-handoff/SKILL.md", "source": "skills/david-handoff/SKILL.md" }, { @@ -218,7 +218,7 @@ }, { "canonical_name": "david-read-all-adrs", - "destination": "skills/imported/david/david-read-all-adrs/SKILL.md", + "destination": "skills/engineering/david-read-all-adrs/SKILL.md", "source": "skills/david-read-all-adrs/SKILL.md" }, { @@ -228,7 +228,7 @@ }, { "canonical_name": "david-setup-help", - "destination": "skills/imported/david/david-setup-help/SKILL.md", + "destination": "skills/platform/david-setup-help/SKILL.md", "source": "skills/david-setup-help/SKILL.md" }, { diff --git a/registry/upstreams.json b/registry/upstreams.json index 1fe333d..27627a6 100644 --- a/registry/upstreams.json +++ b/registry/upstreams.json @@ -1,12 +1,12 @@ { "schema_version": 1, "providers": [ - {"id":"compound-engineering","kind":"package","canonical_source":"https://github.com/EveryInc/compound-engineering-plugin.git","pin":{"type":"git-commit","value":"1a7a4c1e844b55fe74f2aac79d9879cc136fbb5b"},"license":"MIT","license_sha256":"61d89de7646effdaba2d0a4ab7bd0eba60b4094b83efe5bc73c7940e43e93fc6","exports":["ce-plan","ce-brainstorm","ce-work","lfg","ce-worktree","ce-code-review","ce-commit"],"export_paths":{"ce-plan":"skills/ce-plan/SKILL.md","ce-brainstorm":"skills/ce-brainstorm/SKILL.md","ce-work":"skills/ce-work/SKILL.md","lfg":"skills/lfg/SKILL.md","ce-worktree":"skills/ce-worktree/SKILL.md","ce-code-review":"skills/ce-code-review/SKILL.md","ce-commit":"skills/ce-commit/SKILL.md"},"install":"pinned-git-checkout","adapters":["stack.plan","stack.build","stack.orchestrate","stack.review","stack.ship"],"compatibility":["tests/test_command_registry.py","tests/test_upstream_packages.py"],"last_known_good":{"pin":"1a7a4c1e844b55fe74f2aac79d9879cc136fbb5b","metadata_digest":"e6c58e2de5b77121fe929762b3316aff422f3330b93855d8a839be12183776e1"}}, - {"id":"gstack","kind":"package","canonical_source":"https://github.com/garrytan/gstack.git","pin":{"type":"git-commit","value":"7c9df1c568a9ea745508f679a329332b2c338063"},"license":"MIT","license_sha256":"e56fbb5b3d95756f3fa1cfefa24732ec79f18ece1ad08a4e79e00df57e8b198c","exports":["office-hours","qa","canary","land-and-deploy","retro"],"export_paths":{"office-hours":"office-hours/SKILL.md","qa":"qa/SKILL.md","canary":"canary/SKILL.md","land-and-deploy":"land-and-deploy/SKILL.md","retro":"retro/SKILL.md"},"install":"pinned-git-checkout","adapters":["stack.explore","stack.qa","stack.ship","stack.learn"],"compatibility":["tests/test_command_registry.py","tests/test_upstream_packages.py"],"last_known_good":{"pin":"7c9df1c568a9ea745508f679a329332b2c338063","metadata_digest":"35a2a7838b545dfe6e69d41a402a459f54d2f6c7cb64b7f849cf8a4b680cb479"}}, - {"id":"stack-codex","kind":"repository-package","canonical_source":"https://github.com/thecolormaroun/stack.git","pin":{"type":"sha256","value":"b773ec2e1f6353693184d7bda47bec9ca90663b5526c4c6690fec7e6cdf49595"},"license":"Stack-owned repository content","exports":["orchestrate-parallel-goals","stack-gemini-review","stack-ideate","stack-lfg","stack-mega","stack-review","stack-ship","stack-sync"],"install":"repository-bundle","bundle_path":"packages/stack-codex/content","adapters":["stack.explore","stack.build","stack.orchestrate","stack.review","stack.ship","stack.maintain","stack.run"],"compatibility":["tests/test_command_registry.py","tests/test_upstream_packages.py"],"last_known_good":{"pin":"b773ec2e1f6353693184d7bda47bec9ca90663b5526c4c6690fec7e6cdf49595","metadata_digest":"b773ec2e1f6353693184d7bda47bec9ca90663b5526c4c6690fec7e6cdf49595"}}, - {"id":"matt","kind":"imported-collection","canonical_source":"https://github.com/mattpocock/skills.git","pin":{"type":"git-commit","value":"391a2701dd948f94f56a39f7533f8eea9a859c87"},"license":"MIT","license_sha256":"0e7ac423bf2c6e223b7c5b156f8cf72da49d748e56a1641402c31f22ad07dbb5","exports":["matt-code-review","matt-implement","matt-tdd"],"install":"pinned-import","adapters":["stack.build","stack.review"],"compatibility":["tests/test_upstream_packages.py"],"last_known_good":{"pin":"391a2701dd948f94f56a39f7533f8eea9a859c87","metadata_digest":"314c8e07b7e3989b4844e9d0a6f760001bd4955e09b1fc0f6d27f04cf5f6dd8d"}}, - {"id":"david","kind":"imported-collection","canonical_source":"https://github.com/davidondrej/skills.git","pin":{"type":"git-commit","value":"5c99080334072075eb9e0a17837f7d24e4f3e6ae"},"license":"MIT","license_sha256":"1bd321a3b9cfa8d4af2105e20edd69d830df0b28e83a1b0255558f888e493981","exports":["david-handoff","david-goal-loop","david-read-all-adrs"],"install":"pinned-import","adapters":["stack.orchestrate","stack.learn"],"compatibility":["tests/test_upstream_packages.py"],"last_known_good":{"pin":"5c99080334072075eb9e0a17837f7d24e4f3e6ae","metadata_digest":"7c680c10b3be8907f0e0b214d3913bccbae17cbb839d7d565cf37f8cedc218b4"}}, - {"id":"emil","kind":"imported-collection","canonical_source":"https://github.com/emilkowalski/skills.git","pin":{"type":"git-commit","value":"c8a79627b59d72d764d6ab6f2c87c09a48169833"},"license":"MIT","license_sha256":"4ff5bdb7887ec1435c9cab0e8d1a7caee704d894d65c2a008ccc68b1cc2f260b","exports":["emil-animate","emil-animate-expo","emil-animation-performance","emil-animation-vocabulary","emil-apple-design","emil-ask-sonner","emil-break-ui","emil-choreograph","emil-design-eng","emil-find-animation-opportunities","emil-improve-animations","emil-mobile-native","emil-pick-ui-library","emil-prototype","emil-remove-animations","emil-write-swift","review-animations"],"install":"pinned-import","adapters":["stack.design"],"compatibility":["tests/test_upstream_packages.py"],"last_known_good":{"pin":"c8a79627b59d72d764d6ab6f2c87c09a48169833","metadata_digest":"914284e55376793590c835fc17b79e7dba8f0325539d5180d750fbebf8292966"}}, - {"id":"stewdio","kind":"imported-collection","canonical_source":"https://github.com/StewdioAI/blank-page.git","pin":{"type":"git-commit","value":"cd42b37fa7cd0a5550e51f45cc8f82f63377b98c"},"license":"MIT","license_sha256":"4533bc64e6e26958fd9bf4f9a56b422f9ab31b7dbcfac7bc23a8bd0d5cbdfde9","exports":["blank-page"],"install":"pinned-import","adapters":["stack.design"],"compatibility":["tests/test_upstream_packages.py"],"last_known_good":{"pin":"cd42b37fa7cd0a5550e51f45cc8f82f63377b98c","metadata_digest":"faeea6b4be818bbe31cc77d5e64dbaf45f882e201bc59ce23344da4a3dcae368"}} + {"id":"compound-engineering","kind":"package","tracking":"weekly","canonical_source":"https://github.com/EveryInc/compound-engineering-plugin.git","pin":{"type":"git-commit","value":"1a7a4c1e844b55fe74f2aac79d9879cc136fbb5b"},"license":"MIT","license_sha256":"61d89de7646effdaba2d0a4ab7bd0eba60b4094b83efe5bc73c7940e43e93fc6","exports":["ce-plan","ce-brainstorm","ce-work","lfg","ce-worktree","ce-code-review","ce-commit"],"export_paths":{"ce-plan":"skills/ce-plan/SKILL.md","ce-brainstorm":"skills/ce-brainstorm/SKILL.md","ce-work":"skills/ce-work/SKILL.md","lfg":"skills/lfg/SKILL.md","ce-worktree":"skills/ce-worktree/SKILL.md","ce-code-review":"skills/ce-code-review/SKILL.md","ce-commit":"skills/ce-commit/SKILL.md"},"install":"pinned-git-checkout","adapters":["stack.plan","stack.build","stack.orchestrate","stack.review","stack.ship"],"compatibility":["tests/test_command_registry.py","tests/test_upstream_packages.py"],"last_known_good":{"pin":"1a7a4c1e844b55fe74f2aac79d9879cc136fbb5b","metadata_digest":"e6c58e2de5b77121fe929762b3316aff422f3330b93855d8a839be12183776e1"}}, + {"id":"gstack","kind":"package","tracking":"weekly","canonical_source":"https://github.com/garrytan/gstack.git","pin":{"type":"git-commit","value":"7c9df1c568a9ea745508f679a329332b2c338063"},"license":"MIT","license_sha256":"e56fbb5b3d95756f3fa1cfefa24732ec79f18ece1ad08a4e79e00df57e8b198c","exports":["office-hours","qa","canary","land-and-deploy","retro"],"export_paths":{"office-hours":"office-hours/SKILL.md","qa":"qa/SKILL.md","canary":"canary/SKILL.md","land-and-deploy":"land-and-deploy/SKILL.md","retro":"retro/SKILL.md"},"install":"pinned-git-checkout","adapters":["stack.explore","stack.qa","stack.ship","stack.learn"],"compatibility":["tests/test_command_registry.py","tests/test_upstream_packages.py"],"last_known_good":{"pin":"7c9df1c568a9ea745508f679a329332b2c338063","metadata_digest":"35a2a7838b545dfe6e69d41a402a459f54d2f6c7cb64b7f849cf8a4b680cb479"}}, + {"id":"stack-codex","kind":"repository-package","tracking":"weekly","canonical_source":"https://github.com/thecolormaroun/stack.git","pin":{"type":"sha256","value":"b773ec2e1f6353693184d7bda47bec9ca90663b5526c4c6690fec7e6cdf49595"},"license":"Stack-owned repository content","exports":["orchestrate-parallel-goals","stack-gemini-review","stack-ideate","stack-lfg","stack-mega","stack-review","stack-ship","stack-sync"],"install":"repository-bundle","bundle_path":"packages/stack-codex/content","adapters":["stack.explore","stack.build","stack.orchestrate","stack.review","stack.ship","stack.maintain","stack.run"],"compatibility":["tests/test_command_registry.py","tests/test_upstream_packages.py"],"last_known_good":{"pin":"b773ec2e1f6353693184d7bda47bec9ca90663b5526c4c6690fec7e6cdf49595","metadata_digest":"b773ec2e1f6353693184d7bda47bec9ca90663b5526c4c6690fec7e6cdf49595"}}, + {"id":"matt","kind":"imported-collection","tracking":"weekly","canonical_source":"https://github.com/mattpocock/skills.git","pin":{"type":"git-commit","value":"391a2701dd948f94f56a39f7533f8eea9a859c87"},"license":"MIT","license_sha256":"0e7ac423bf2c6e223b7c5b156f8cf72da49d748e56a1641402c31f22ad07dbb5","exports":["matt-code-review","matt-implement","matt-tdd"],"install":"pinned-import","adapters":["stack.build","stack.review"],"compatibility":["tests/test_upstream_packages.py"],"last_known_good":{"pin":"391a2701dd948f94f56a39f7533f8eea9a859c87","metadata_digest":"314c8e07b7e3989b4844e9d0a6f760001bd4955e09b1fc0f6d27f04cf5f6dd8d"}}, + {"id":"david","kind":"imported-collection","tracking":"pick-only","canonical_source":"https://github.com/davidondrej/skills.git","pin":{"type":"git-commit","value":"5c99080334072075eb9e0a17837f7d24e4f3e6ae"},"license":"MIT","license_sha256":"1bd321a3b9cfa8d4af2105e20edd69d830df0b28e83a1b0255558f888e493981","exports":["david-handoff","david-goal-loop","david-read-all-adrs"],"install":"pinned-import","adapters":["stack.orchestrate","stack.learn"],"compatibility":["tests/test_upstream_packages.py"],"last_known_good":{"pin":"5c99080334072075eb9e0a17837f7d24e4f3e6ae","metadata_digest":"7c680c10b3be8907f0e0b214d3913bccbae17cbb839d7d565cf37f8cedc218b4"}}, + {"id":"emil","kind":"imported-collection","tracking":"weekly","canonical_source":"https://github.com/emilkowalski/skills.git","pin":{"type":"git-commit","value":"c8a79627b59d72d764d6ab6f2c87c09a48169833"},"license":"MIT","license_sha256":"4ff5bdb7887ec1435c9cab0e8d1a7caee704d894d65c2a008ccc68b1cc2f260b","exports":["emil-animate","emil-animate-expo","emil-animation-performance","emil-animation-vocabulary","emil-apple-design","emil-ask-sonner","emil-break-ui","emil-choreograph","emil-design-eng","emil-find-animation-opportunities","emil-improve-animations","emil-mobile-native","emil-pick-ui-library","emil-prototype","emil-remove-animations","emil-write-swift","review-animations"],"install":"pinned-import","adapters":["stack.design"],"compatibility":["tests/test_upstream_packages.py"],"last_known_good":{"pin":"c8a79627b59d72d764d6ab6f2c87c09a48169833","metadata_digest":"914284e55376793590c835fc17b79e7dba8f0325539d5180d750fbebf8292966"}}, + {"id":"stewdio","kind":"imported-collection","tracking":"weekly","canonical_source":"https://github.com/StewdioAI/blank-page.git","pin":{"type":"git-commit","value":"cd42b37fa7cd0a5550e51f45cc8f82f63377b98c"},"license":"MIT","license_sha256":"4533bc64e6e26958fd9bf4f9a56b422f9ab31b7dbcfac7bc23a8bd0d5cbdfde9","exports":["blank-page"],"install":"pinned-import","adapters":["stack.design"],"compatibility":["tests/test_upstream_packages.py"],"last_known_good":{"pin":"cd42b37fa7cd0a5550e51f45cc8f82f63377b98c","metadata_digest":"faeea6b4be818bbe31cc77d5e64dbaf45f882e201bc59ce23344da4a3dcae368"}} ] } diff --git a/registry/upstreams.schema.json b/registry/upstreams.schema.json index 0995586..8d26048 100644 --- a/registry/upstreams.schema.json +++ b/registry/upstreams.schema.json @@ -12,10 +12,11 @@ "items": { "type": "object", "additionalProperties": false, - "required": ["id", "kind", "canonical_source", "pin", "license", "exports", "install", "adapters", "compatibility", "last_known_good"], + "required": ["id", "kind", "tracking", "canonical_source", "pin", "license", "exports", "install", "adapters", "compatibility", "last_known_good"], "properties": { "id": {"type": "string", "pattern": "^[a-z]+(?:-[a-z]+)*$"}, "kind": {"enum": ["package", "repository-package", "imported-collection"]}, + "tracking": {"enum": ["weekly", "pick-only"], "description": "weekly: the maintenance lane follows this provider. pick-only: Stack picked reviewed skills once; they are Stack-owned. See docs/upstream-policy.md."}, "canonical_source": {"type": "string", "pattern": "^https://"}, "pin": { "type": "object", diff --git a/scripts/classify-capabilities.py b/scripts/classify-capabilities.py index b68d5f0..93b1c50 100644 --- a/scripts/classify-capabilities.py +++ b/scripts/classify-capabilities.py @@ -93,11 +93,11 @@ 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", "matt-handoff"}: + if path.startswith("skills/orchestration/") or name in {"goal-validation-threads", "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", "matt-research", "muller-brockmann-grid-systems", "userinterface-wiki"}: + if path.startswith("skills/studio/research/") or name in {"field-theory-bookmark-synthesis", "fieldbook-source-split", "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" @@ -105,11 +105,11 @@ def family_for(name: str, path: str) -> str: return "engineering" 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: + if name in {"emil-break-ui", "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"}: return "delivery" - if name in {"local-tracker-dashboard", "reclaude", "david-setup-help", "david-effective-agent-skills"}: + if name in {"local-tracker-dashboard", "reclaude"}: return "platform" return "planning" if name.startswith("matt-") else "engineering" diff --git a/scripts/discover-upstream-updates.py b/scripts/discover-upstream-updates.py index 42bf2b6..d3c4b49 100644 --- a/scripts/discover-upstream-updates.py +++ b/scripts/discover-upstream-updates.py @@ -992,6 +992,8 @@ def discover_upstream_update( provider = providers.get(provider_id) if provider is None: raise DiscoveryPolicyError("provider_not_registered") + if provider.get("tracking") != "weekly": + raise DiscoveryPolicyError("provider_not_tracked") source_rows = _source_rows(sources, provider_id) if not source_rows: raise DiscoveryPolicyError("provider_not_in_maintenance_inventory") diff --git a/scripts/import-pinned-skills.py b/scripts/import-pinned-skills.py index 2b742e3..effdbb7 100644 --- a/scripts/import-pinned-skills.py +++ b/scripts/import-pinned-skills.py @@ -12,6 +12,10 @@ the exact commit with the same code the maintenance lane uses, bumps the pin, lock, and last-known-good digest, and rebuilds the generated catalog. +Only a provider with ``"tracking": "weekly"`` that passes the admission check in +``docs/upstream-policy.md`` can gain mappings; a pick-only provider is refused +before any network access. + It writes only to this checkout (and stages the new skill folders, because the catalog builder reads only indexed manifests). It never commits, pushes, opens a PR, installs a runtime, or publishes anything; the result still goes through @@ -35,6 +39,50 @@ SOURCES = ROOT / "registry" / "maintenance-sources.json" LOCK = ROOT / "upstreams.lock.json" +# docs/upstream-policy.md: the machine-checkable half of the admission rule. +OSI_LICENSES = frozenset({"MIT", "Apache-2.0", "BSD-2-Clause", "BSD-3-Clause", "ISC", "MPL-2.0", "0BSD"}) +LICENSE_FILES = ("LICENSE", "LICENSE.md", "LICENSE.txt", "COPYING") +README_FILES = ("README.md", "README", "README.rst") + + +class AdmissionError(SystemExit): + """A provider failed the upstream admission rule.""" + + +def require_tracked(provider: dict[str, Any]) -> None: + """Refuse to add tracked mappings for a provider that is not on the weekly lane.""" + provider_id = provider.get("id") + tracking = provider.get("tracking") + if tracking == "pick-only": + raise AdmissionError( + f"{provider_id}: pick-only provider (docs/upstream-policy.md). Copy one reviewed skill into its " + "family root as a Stack-owned skill instead of adding a tracked mapping." + ) + if tracking != "weekly": + raise AdmissionError(f"{provider_id}: registry/upstreams.json must set tracking to 'weekly' or 'pick-only'") + + +def has_regular_file(checkout: Path, names: tuple[str, ...]) -> bool: + """True when one of ``names`` is a regular file (not a symlink) at the checkout root.""" + return any((checkout / name).is_file() and not (checkout / name).is_symlink() for name in names) + + +def admission_check(provider: dict[str, Any], checkout: Path) -> None: + """Check what code can check before a provider gains tracked skills. + + Stable paths, a no-silent-deletion history or versioned releases, and + general-purpose skills are reviewed by a person and recorded in the audit + table in docs/upstream-policy.md. + """ + require_tracked(provider) + provider_id = provider.get("id") + if provider.get("license") not in OSI_LICENSES: + raise AdmissionError(f"{provider_id}: license {provider.get('license')!r} is not an approved OSI license") + if not has_regular_file(checkout, LICENSE_FILES): + raise AdmissionError(f"{provider_id}: the upstream checkout has no license file") + if not has_regular_file(checkout, README_FILES): + raise AdmissionError(f"{provider_id}: the upstream checkout has no README for users") + def load_script(filename: str, module_name: str): """Import a hyphenated repository script so this command reuses its exact logic.""" @@ -244,6 +292,8 @@ def main(argv: list[str] | None = None) -> int: registry, imports, sources, lock = read(UPSTREAMS), read(IMPORTS), read(SOURCES), read(LOCK) provider = next((row for row in registry["providers"] if row["id"] == args.provider), None) rule = next((row for row in imports["providers"] if row["id"] == args.provider), None) + if provider is not None: + require_tracked(provider) if provider is None or rule is None or provider.get("install") != "pinned-import": raise SystemExit(f"{args.provider}: not a pinned-import provider with an import rule") if rule.get("mapping") != "explicit-source-json": @@ -261,6 +311,7 @@ def main(argv: list[str] | None = None) -> int: checkout = Path(temporary) / "upstream" materializer.clone_exact(source_url, commit, checkout) materializer.validate_upstream_license(checkout, provider) + admission_check(provider, checkout) mapped = {Path(row["source"]).name for row in rule["targets"]} unmapped = [name for name in upstream_skills(checkout) if name not in mapped] if args.list_unmapped: diff --git a/scripts/materialize-maintenance-proposal.py b/scripts/materialize-maintenance-proposal.py index 276d734..afeda2f 100755 --- a/scripts/materialize-maintenance-proposal.py +++ b/scripts/materialize-maintenance-proposal.py @@ -533,6 +533,9 @@ def materialize(root: Path, receipt: Path, output: Path) -> Path: provider = providers[provider_id] if provider.get("pin", {}).get("type") != "git-commit": raise ProposalError("observed_provider_invalid") + if provider.get("tracking") != "weekly": + # Only weekly providers follow upstream (docs/upstream-policy.md). + raise ProposalError("provider_not_tracked") old_pin = provider["pin"]["value"] if old_pin == commit: raise ProposalError("observed_provider_not_changed") diff --git a/scripts/stack-maintenance.py b/scripts/stack-maintenance.py index 7cef455..f3ed71b 100644 --- a/scripts/stack-maintenance.py +++ b/scripts/stack-maintenance.py @@ -59,6 +59,7 @@ "cost-or-scope", "unknown", } +TRACKING_MODES = frozenset({"weekly", "pick-only"}) DISPOSITIONS = { "catalog-managed-provider", "repository-owned-capability", @@ -544,6 +545,11 @@ def validate_upstream_metadata( raise PolicyError("upstream_export_path_invalid") if not isinstance(provider.get("license"), str) or not provider["license"].strip(): raise PolicyError("upstream_license_missing") + if provider.get("tracking") not in TRACKING_MODES: + # docs/upstream-policy.md: every provider states whether the weekly + # lane follows it ("weekly") or Stack only picks reviewed skills from + # it once ("pick-only"). + raise PolicyError("upstream_tracking_invalid") if pin_type == "git-commit": license_digest = provider.get("license_sha256") if not isinstance(license_digest, str) or SHA256_PATTERN.fullmatch(license_digest) is None: @@ -783,13 +789,31 @@ def observe_upstream_heads( for provider_id, provider in providers.items() if provider.get("pin", {}).get("type") == "git-commit" } - if supplied and set(supplied) != git_provider_ids: + tracked_git_ids = { + provider_id for provider_id in git_provider_ids + if providers[provider_id].get("tracking") != "pick-only" + } + # Supplied refs must cover every tracked provider; refs for pick-only + # providers are accepted and ignored so callers may pass either set. + if supplied and not tracked_git_ids <= set(supplied) <= git_provider_ids: raise PolicyError("observed_provider_set_invalid") observations: list[dict[str, Any]] = [] for provider_id, provider in sorted(providers.items()): pin = provider.get("pin", {}) pin_type = pin.get("type") pin_value = str(pin.get("value", "")) + if pin_type == "git-commit" and provider.get("tracking") == "pick-only": + # Pick-only providers are never observed or proposed: their picked + # skills are Stack-owned and no longer follow upstream. + observations.append( + { + "provider_id": provider_id, + "pin": pin_value, + "observed_head": None, + "status": "pick_only", + } + ) + continue if pin_type != "git-commit": observations.append( { 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 68e6701..8030837 100644 --- a/skills/core/compatibility/agent-operating-stack/references/imported-skills.md +++ b/skills/core/compatibility/agent-operating-stack/references/imported-skills.md @@ -28,9 +28,11 @@ These are the concrete namespaced imports added from the Meng To recommendation. | `$matt-teach` | `teach` | `skills/productivity/teach` | | `$matt-writing-great-skills` | `writing-great-skills` | `skills/productivity/writing-great-skills` | -## David Ondrej Agent Skills +## Stack-owned Former Imports -| Local skill | Upstream skill | Upstream path | +These started as imports. Stack owns them as of 2026-11-13 and no longer tracks upstream: their upstream copies were removed or moved, or their provider is pick-only (`davidondrej/skills`; see `docs/upstream-policy.md`). Each keeps its origin and MIT notice in `references/source.md`. + +| Local skill | Origin skill | Origin path | | --- | --- | --- | | `$david-cmux` | `cmux` | `skills/agent-orchestration/cmux` | | `$david-codex-subagent` | `codex-subagent` | `skills/agent-orchestration/codex-subagent` | @@ -44,13 +46,6 @@ These are the concrete namespaced imports added from the Meng To recommendation. | `$david-deepapi` | `deepapi` | `skills/research-and-web/deepapi` | | `$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` | @@ -67,4 +62,4 @@ Retired on 2026-11-13 (reasons in `docs/stack-maintenance.md`): `david-pi-web-se ## Source Pins - Matt Pocock skills: `391a2701dd948f94f56a39f7533f8eea9a859c87` -- David Ondrej skills: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- David Ondrej skills (pick-only; last inspected): `5c99080334072075eb9e0a17837f7d24e4f3e6ae` diff --git a/skills/imported/david/david-anti-sleep/SKILL.md b/skills/engineering/david-anti-sleep/SKILL.md similarity index 88% rename from skills/imported/david/david-anti-sleep/SKILL.md rename to skills/engineering/david-anti-sleep/SKILL.md index 105eeca..dbecd59 100644 --- a/skills/imported/david/david-anti-sleep/SKILL.md +++ b/skills/engineering/david-anti-sleep/SKILL.md @@ -1,17 +1,17 @@ --- name: david-anti-sleep -description: 'Namespaced import of David Ondrej agent skills: Keep the user''s MacBook +description: 'Stack-owned, adapted from David Ondrej agent skills: Keep the user''s MacBook awake with macOS caffeinate — prevent sleep, screen dimming, or both, for a set duration or while a process runs. Use when the user says "don''t let my mac sleep", "keep the screen on", "anti-sleep", "caffeinate", or wants the machine awake overnight - / during a long build.. Use via $david-anti-sleep when this upstream workflow is + / during a long build.. Use via $david-anti-sleep when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-anti-sleep`. -- Upstream name: `anti-sleep`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-anti-sleep`. +- Adapted from David Ondrej's `anti-sleep` 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-anti-sleep/agents/openai.yaml b/skills/engineering/david-anti-sleep/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-anti-sleep/agents/openai.yaml rename to skills/engineering/david-anti-sleep/agents/openai.yaml diff --git a/skills/imported/david/david-anti-sleep/capability.json b/skills/engineering/david-anti-sleep/capability.json similarity index 72% rename from skills/imported/david/david-anti-sleep/capability.json rename to skills/engineering/david-anti-sleep/capability.json index ff8e011..487d943 100644 --- a/skills/imported/david/david-anti-sleep/capability.json +++ b/skills/engineering/david-anti-sleep/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-anti-sleep/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-anti-sleep/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-anti-sleep" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-anti-sleep" }, - "purpose": "Namespaced import of David Ondrej agent skills: Keep the user''s MacBook", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Keep the user''s MacBook", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-anti-sleep/SKILL.md" + "skill_path": "skills/engineering/david-anti-sleep/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/imported/david/david-anti-sleep/references/source.md b/skills/engineering/david-anti-sleep/references/source.md similarity index 78% rename from skills/imported/david/david-anti-sleep/references/source.md rename to skills/engineering/david-anti-sleep/references/source.md index 6d5bee8..53c8733 100644 --- a/skills/imported/david/david-anti-sleep/references/source.md +++ b/skills/engineering/david-anti-sleep/references/source.md @@ -1,10 +1,10 @@ -# Source Metadata +# Origin -- Imported skill: `$david-anti-sleep` -- Upstream skill name: `anti-sleep` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/ops-and-setup/anti-sleep` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- Stack-owned skill: `$david-anti-sleep` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `anti-sleep` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/ops-and-setup/anti-sleep` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` - License: MIT ## License Notice diff --git a/skills/imported/david/david-deepapi/SKILL.md b/skills/engineering/david-deepapi/SKILL.md similarity index 98% rename from skills/imported/david/david-deepapi/SKILL.md rename to skills/engineering/david-deepapi/SKILL.md index de99f20..bc1c68b 100644 --- a/skills/imported/david/david-deepapi/SKILL.md +++ b/skills/engineering/david-deepapi/SKILL.md @@ -1,16 +1,16 @@ --- name: david-deepapi -description: 'Namespaced import of David Ondrej agent skills: Use DeepAPI for scraping +description: 'Stack-owned, adapted from David Ondrej agent skills: Use DeepAPI for scraping and safe email with DEEPAPI_API_BASE_URL and DEEPAPI_API_KEY.. Use via $david-deepapi - 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.' version: f00d5f98cb40 --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-deepapi`. -- Upstream name: `deepapi`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-deepapi`. +- Adapted from David Ondrej's `deepapi` 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-deepapi/agents/openai.yaml b/skills/engineering/david-deepapi/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-deepapi/agents/openai.yaml rename to skills/engineering/david-deepapi/agents/openai.yaml diff --git a/skills/imported/david/david-deepapi/capability.json b/skills/engineering/david-deepapi/capability.json similarity index 72% rename from skills/imported/david/david-deepapi/capability.json rename to skills/engineering/david-deepapi/capability.json index 652c351..7abe121 100644 --- a/skills/imported/david/david-deepapi/capability.json +++ b/skills/engineering/david-deepapi/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-deepapi/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-deepapi/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-deepapi" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-deepapi" }, - "purpose": "Namespaced import of David Ondrej agent skills: Use DeepAPI for scraping", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Use DeepAPI for scraping", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-deepapi/SKILL.md" + "skill_path": "skills/engineering/david-deepapi/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/imported/david/david-cmux/references/source.md b/skills/engineering/david-deepapi/references/source.md similarity index 78% rename from skills/imported/david/david-cmux/references/source.md rename to skills/engineering/david-deepapi/references/source.md index 85009d4..46eaefa 100644 --- a/skills/imported/david/david-cmux/references/source.md +++ b/skills/engineering/david-deepapi/references/source.md @@ -1,10 +1,10 @@ -# Source Metadata +# Origin -- Imported skill: `$david-cmux` -- Upstream skill name: `cmux` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/agent-orchestration/cmux` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- Stack-owned skill: `$david-deepapi` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `deepapi` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/research-and-web/deepapi` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` - License: MIT ## License Notice diff --git a/skills/imported/david/david-fable-safe-prompt/SKILL.md b/skills/engineering/david-fable-safe-prompt/SKILL.md similarity index 91% rename from skills/imported/david/david-fable-safe-prompt/SKILL.md rename to skills/engineering/david-fable-safe-prompt/SKILL.md index a1cf410..6874a38 100644 --- a/skills/imported/david/david-fable-safe-prompt/SKILL.md +++ b/skills/engineering/david-fable-safe-prompt/SKILL.md @@ -1,20 +1,20 @@ --- name: david-fable-safe-prompt -description: 'Namespaced import of David Ondrej agent skills: Rewrite a user''s prompt +description: 'Stack-owned, adapted from David Ondrej agent skills: Rewrite a user''s prompt to reduce the chance it trips Claude Fable 5''s server-side safety classifiers (cyber/bio guardrails that force-route to Opus 4.8 or return stop_reason "refusal"). Use when the user hands you a prompt that touches cybersecurity, auth, exploits, malware, pentesting, or other dual-use topics and asks to make it "Fable-safe", "guardrail-safe", "won''t get flagged/refused/downgraded", or to rewrite it so Fable 5 won''t block - it.. Use via $david-fable-safe-prompt when this upstream workflow is needed inside + it.. Use via $david-fable-safe-prompt 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-fable-safe-prompt`. -- Upstream name: `fable-safe-prompt`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-fable-safe-prompt`. +- Adapted from David Ondrej's `fable-safe-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-fable-safe-prompt/agents/openai.yaml b/skills/engineering/david-fable-safe-prompt/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-fable-safe-prompt/agents/openai.yaml rename to skills/engineering/david-fable-safe-prompt/agents/openai.yaml diff --git a/skills/imported/david/david-fable-safe-prompt/capability.json b/skills/engineering/david-fable-safe-prompt/capability.json similarity index 71% rename from skills/imported/david/david-fable-safe-prompt/capability.json rename to skills/engineering/david-fable-safe-prompt/capability.json index 25845a6..ee4e7e9 100644 --- a/skills/imported/david/david-fable-safe-prompt/capability.json +++ b/skills/engineering/david-fable-safe-prompt/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-fable-safe-prompt/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/engineering/david-fable-safe-prompt/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-fable-safe-prompt" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-fable-safe-prompt" }, - "purpose": "Namespaced import of David Ondrej agent skills: Rewrite a user''s prompt", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Rewrite a user''s prompt", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-fable-safe-prompt/SKILL.md" + "skill_path": "skills/engineering/david-fable-safe-prompt/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/engineering/david-fable-safe-prompt/references/source.md b/skills/engineering/david-fable-safe-prompt/references/source.md new file mode 100644 index 0000000..cb799e5 --- /dev/null +++ b/skills/engineering/david-fable-safe-prompt/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-fable-safe-prompt` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `fable-safe-prompt` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/agent-orchestration/fable-safe-prompt` +- 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-read-all-adrs/SKILL.md b/skills/engineering/david-read-all-adrs/SKILL.md similarity index 57% rename from skills/imported/david/david-read-all-adrs/SKILL.md rename to skills/engineering/david-read-all-adrs/SKILL.md index aa8e5f8..eeca2d9 100644 --- a/skills/imported/david/david-read-all-adrs/SKILL.md +++ b/skills/engineering/david-read-all-adrs/SKILL.md @@ -1,16 +1,15 @@ --- name: david-read-all-adrs -description: 'Namespaced import of David Ondrej agent skills: Read every ADR markdown +description: 'Stack-owned, adapted from David Ondrej agent skills: Read every ADR markdown file in the project''s docs/adr/ folder so you have full context on past decisions. - Use only when the user explicitly calls it.. Use via $david-read-all-adrs when this - upstream workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' + Use only when the user explicitly calls it.. Use via $david-read-all-adrs 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-read-all-adrs`. -- Upstream name: `read-all-adrs`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-read-all-adrs`. +- Adapted from David Ondrej's `read-all-adrs` 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. Read EVERY single ADR `.md` file in this project's `docs/adr/` folder, start to diff --git a/skills/imported/david/david-read-all-adrs/agents/openai.yaml b/skills/engineering/david-read-all-adrs/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-read-all-adrs/agents/openai.yaml rename to skills/engineering/david-read-all-adrs/agents/openai.yaml diff --git a/skills/imported/david/david-read-all-adrs/capability.json b/skills/engineering/david-read-all-adrs/capability.json similarity index 71% rename from skills/imported/david/david-read-all-adrs/capability.json rename to skills/engineering/david-read-all-adrs/capability.json index ffe4cf0..fd4c0f5 100644 --- a/skills/imported/david/david-read-all-adrs/capability.json +++ b/skills/engineering/david-read-all-adrs/capability.json @@ -24,16 +24,16 @@ "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/engineering/david-read-all-adrs/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-read-all-adrs" }, - "purpose": "Namespaced import of David Ondrej agent skills: Read every ADR markdown", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Read every ADR markdown", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-read-all-adrs/SKILL.md" + "skill_path": "skills/engineering/david-read-all-adrs/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/engineering/david-read-all-adrs/references/source.md b/skills/engineering/david-read-all-adrs/references/source.md new file mode 100644 index 0000000..20fb985 --- /dev/null +++ b/skills/engineering/david-read-all-adrs/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-read-all-adrs` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `read-all-adrs` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/thinking-and-docs/read-all-adrs` +- 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-deep-research/references/source.md b/skills/imported/david/david-deep-research/references/source.md deleted file mode 100644 index 38f5635..0000000 --- a/skills/imported/david/david-deep-research/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-deep-research` -- Upstream skill name: `deep-research` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/research-and-web/deep-research` -- 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-deepapi/references/source.md b/skills/imported/david/david-deepapi/references/source.md deleted file mode 100644 index dd69c1d..0000000 --- a/skills/imported/david/david-deepapi/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-deepapi` -- Upstream skill name: `deepapi` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/research-and-web/deepapi` -- 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-effective-agent-skills/references/source.md b/skills/imported/david/david-effective-agent-skills/references/source.md deleted file mode 100644 index 36474e4..0000000 --- a/skills/imported/david/david-effective-agent-skills/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-effective-agent-skills` -- Upstream skill name: `effective-agent-skills` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/skill-authoring/effective-agent-skills` -- 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-fable-safe-prompt/references/source.md b/skills/imported/david/david-fable-safe-prompt/references/source.md deleted file mode 100644 index a201183..0000000 --- a/skills/imported/david/david-fable-safe-prompt/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-fable-safe-prompt` -- Upstream skill name: `fable-safe-prompt` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/agent-orchestration/fable-safe-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-goal-loop/references/source.md b/skills/imported/david/david-goal-loop/references/source.md deleted file mode 100644 index 9fea926..0000000 --- a/skills/imported/david/david-goal-loop/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-goal-loop` -- Upstream skill name: `goal-loop` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/agent-orchestration/goal-loop` -- 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-handoff/references/source.md b/skills/imported/david/david-handoff/references/source.md deleted file mode 100644 index 5ea3be5..0000000 --- a/skills/imported/david/david-handoff/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-handoff` -- Upstream skill name: `handoff` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/agent-orchestration/handoff` -- 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-read-all-adrs/references/source.md b/skills/imported/david/david-read-all-adrs/references/source.md deleted file mode 100644 index 8305e22..0000000 --- a/skills/imported/david/david-read-all-adrs/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-read-all-adrs` -- Upstream skill name: `read-all-adrs` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/thinking-and-docs/read-all-adrs` -- 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-setup-help/references/source.md b/skills/imported/david/david-setup-help/references/source.md deleted file mode 100644 index 653c262..0000000 --- a/skills/imported/david/david-setup-help/references/source.md +++ /dev/null @@ -1,34 +0,0 @@ -# Source Metadata - -- Imported skill: `$david-setup-help` -- Upstream skill name: `setup-help` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/ops-and-setup/setup-help` -- 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-deep-research/SKILL.md b/skills/knowledge/david-deep-research/SKILL.md similarity index 90% rename from skills/imported/david/david-deep-research/SKILL.md rename to skills/knowledge/david-deep-research/SKILL.md index 799e5a9..7681942 100644 --- a/skills/imported/david/david-deep-research/SKILL.md +++ b/skills/knowledge/david-deep-research/SKILL.md @@ -1,21 +1,21 @@ --- name: david-deep-research -description: 'Namespaced import of David Ondrej agent skills: Run a deep, source-backed +description: 'Stack-owned, adapted from David Ondrej agent skills: Run a deep, source-backed research query via DeepAPI (go to deepapi.co to get an API key) POST /v1/research/deep. Builds a rigorous one-paragraph research prompt (per research-prompt rules), fires it, and saves a cited markdown report. Use when the user asks for "deep research", "deepapi research", "perplexity deep research" (legacy trigger), or any deep source-backed research run. Differentiator vs the deepapi skill: this is the full research workflow (prompt + run + report file), not raw endpoint access.. Use via $david-deep-research - 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.' disable-model-invocation: true --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-deep-research`. -- Upstream name: `deep-research`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-deep-research`. +- Adapted from David Ondrej's `deep-research` 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-deep-research/agents/openai.yaml b/skills/knowledge/david-deep-research/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-deep-research/agents/openai.yaml rename to skills/knowledge/david-deep-research/agents/openai.yaml diff --git a/skills/imported/david/david-deep-research/capability.json b/skills/knowledge/david-deep-research/capability.json similarity index 71% rename from skills/imported/david/david-deep-research/capability.json rename to skills/knowledge/david-deep-research/capability.json index e1b782b..9e3ddc1 100644 --- a/skills/imported/david/david-deep-research/capability.json +++ b/skills/knowledge/david-deep-research/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-deep-research/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/knowledge/david-deep-research/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-deep-research" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-deep-research" }, - "purpose": "Namespaced import of David Ondrej agent skills: Run a deep, source-backed", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Run a deep, source-backed", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-deep-research/SKILL.md" + "skill_path": "skills/knowledge/david-deep-research/SKILL.md" }, "trust_class": "read-only", "validation": { diff --git a/skills/knowledge/david-deep-research/references/source.md b/skills/knowledge/david-deep-research/references/source.md new file mode 100644 index 0000000..243107e --- /dev/null +++ b/skills/knowledge/david-deep-research/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-deep-research` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `deep-research` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/research-and-web/deep-research` +- 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-cmux/SKILL.md b/skills/orchestration/david-cmux/SKILL.md similarity index 97% rename from skills/imported/david/david-cmux/SKILL.md rename to skills/orchestration/david-cmux/SKILL.md index cb3c023..7bf5c55 100644 --- a/skills/imported/david/david-cmux/SKILL.md +++ b/skills/orchestration/david-cmux/SKILL.md @@ -1,6 +1,6 @@ --- name: david-cmux -description: 'Namespaced import of David Ondrej agent skills: MUST be read ANY time +description: 'Stack-owned, adapted from David Ondrej agent skills: MUST be read ANY time you interact with cmux in ANY way — listing/inspecting/creating/closing cmux workspaces, panes, or surfaces; reading or capturing pane/screen output; sending input or keys to a pane/surface; delegating to, polling, or checking on other agents running in @@ -9,14 +9,13 @@ description: 'Namespaced import of David Ondrej agent skills: MUST be read ANY t or integrating an agent with cmux hooks. If your command starts with `cmux ` or touches a cmux workspace/pane/surface/agent, read this FIRST. Triggers on "cmux", "in this workspace", "this pane", "the other agent", "delegate to", "check on the - agent", "send to the pane". macOS only (14.0+).. Use via $david-cmux when this upstream - workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' + agent", "send to the pane". macOS only (14.0+).. Use via $david-cmux when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-cmux`. -- Upstream name: `cmux`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-cmux`. +- Adapted from David Ondrej's `cmux` 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-cmux/agents/openai.yaml b/skills/orchestration/david-cmux/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-cmux/agents/openai.yaml rename to skills/orchestration/david-cmux/agents/openai.yaml diff --git a/skills/imported/david/david-cmux/capability.json b/skills/orchestration/david-cmux/capability.json similarity index 73% rename from skills/imported/david/david-cmux/capability.json rename to skills/orchestration/david-cmux/capability.json index c8283b6..5da32e1 100644 --- a/skills/imported/david/david-cmux/capability.json +++ b/skills/orchestration/david-cmux/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-cmux/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/orchestration/david-cmux/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-cmux" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-cmux" }, - "purpose": "Namespaced import of David Ondrej agent skills: MUST be read ANY time", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: MUST be read ANY time", "role": "workflow", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-cmux/SKILL.md" + "skill_path": "skills/orchestration/david-cmux/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/imported/david/david-browser-harness/references/source.md b/skills/orchestration/david-cmux/references/source.md similarity index 79% rename from skills/imported/david/david-browser-harness/references/source.md rename to skills/orchestration/david-cmux/references/source.md index ed1b102..dca3afb 100644 --- a/skills/imported/david/david-browser-harness/references/source.md +++ b/skills/orchestration/david-cmux/references/source.md @@ -1,10 +1,10 @@ -# Source Metadata +# Origin -- Imported skill: `$david-browser-harness` -- Upstream skill name: `browser-harness` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/research-and-web/browser-harness` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- Stack-owned skill: `$david-cmux` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `cmux` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/agent-orchestration/cmux` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` - License: MIT ## License Notice diff --git a/skills/imported/david/david-codex-subagent/SKILL.md b/skills/orchestration/david-codex-subagent/SKILL.md similarity index 91% rename from skills/imported/david/david-codex-subagent/SKILL.md rename to skills/orchestration/david-codex-subagent/SKILL.md index 47a5c0f..4979c7b 100644 --- a/skills/imported/david/david-codex-subagent/SKILL.md +++ b/skills/orchestration/david-codex-subagent/SKILL.md @@ -1,18 +1,18 @@ --- name: david-codex-subagent -description: 'Namespaced import of David Ondrej agent skills: Launch OpenAI Codex +description: 'Stack-owned, adapted from David Ondrej agent skills: Launch OpenAI Codex CLI as a subagent (ChatGPT subscription auth, no API key). Use when delegating a self-contained coding task to Codex from another agent — parallel implementation work, a second opinion, or an independent verification pass.. Use via $david-codex-subagent - 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.' disable-model-invocation: true --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-codex-subagent`. -- Upstream name: `codex-subagent`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-codex-subagent`. +- Adapted from David Ondrej's `codex-subagent` 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-codex-subagent/agents/openai.yaml b/skills/orchestration/david-codex-subagent/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-codex-subagent/agents/openai.yaml rename to skills/orchestration/david-codex-subagent/agents/openai.yaml diff --git a/skills/imported/david/david-codex-subagent/capability.json b/skills/orchestration/david-codex-subagent/capability.json similarity index 72% rename from skills/imported/david/david-codex-subagent/capability.json rename to skills/orchestration/david-codex-subagent/capability.json index 82e6db1..0c945e4 100644 --- a/skills/imported/david/david-codex-subagent/capability.json +++ b/skills/orchestration/david-codex-subagent/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-codex-subagent/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/orchestration/david-codex-subagent/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-codex-subagent" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-codex-subagent" }, - "purpose": "Namespaced import of David Ondrej agent skills: Launch OpenAI Codex", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Launch OpenAI Codex", "role": "workflow", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-codex-subagent/SKILL.md" + "skill_path": "skills/orchestration/david-codex-subagent/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/orchestration/david-codex-subagent/references/source.md b/skills/orchestration/david-codex-subagent/references/source.md new file mode 100644 index 0000000..a143b3b --- /dev/null +++ b/skills/orchestration/david-codex-subagent/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-codex-subagent` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `codex-subagent` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/agent-orchestration/codex-subagent` +- 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-goal-loop/SKILL.md b/skills/orchestration/david-goal-loop/SKILL.md similarity index 96% rename from skills/imported/david/david-goal-loop/SKILL.md rename to skills/orchestration/david-goal-loop/SKILL.md index 8deb497..14e34b0 100644 --- a/skills/imported/david/david-goal-loop/SKILL.md +++ b/skills/orchestration/david-goal-loop/SKILL.md @@ -1,19 +1,19 @@ --- name: david-goal-loop -description: 'Namespaced import of David Ondrej agent skills: Explain and write effective +description: 'Stack-owned, adapted from David Ondrej agent skills: Explain and write effective instructions for the `/goal` feature — the persistent self-checking agent loop (plan → act → test → review → iterate), available in agents like Codex, Claude Code, and Hermes Agent. Use when the user mentions `/goal`, "goal loop", "Ralph loop", wants to kick off a long-running autonomous agent run, asks how to write a goal prompt, or wants a one-paragraph goal instruction drafted.. Use via $david-goal-loop when - this upstream workflow is needed inside Maroun''s Stack or Hermes-safe operating + this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-goal-loop`. -- Upstream name: `goal-loop`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-goal-loop`. +- Adapted from David Ondrej's `goal-loop` 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-goal-loop/agents/openai.yaml b/skills/orchestration/david-goal-loop/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-goal-loop/agents/openai.yaml rename to skills/orchestration/david-goal-loop/agents/openai.yaml diff --git a/skills/imported/david/david-goal-loop/capability.json b/skills/orchestration/david-goal-loop/capability.json similarity index 72% rename from skills/imported/david/david-goal-loop/capability.json rename to skills/orchestration/david-goal-loop/capability.json index d2fbc76..d03c80a 100644 --- a/skills/imported/david/david-goal-loop/capability.json +++ b/skills/orchestration/david-goal-loop/capability.json @@ -24,16 +24,16 @@ "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/orchestration/david-goal-loop/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-goal-loop" }, - "purpose": "Namespaced import of David Ondrej agent skills: Explain and write effective", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Explain and write effective", "role": "workflow", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-goal-loop/SKILL.md" + "skill_path": "skills/orchestration/david-goal-loop/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/orchestration/david-goal-loop/references/source.md b/skills/orchestration/david-goal-loop/references/source.md new file mode 100644 index 0000000..20d4072 --- /dev/null +++ b/skills/orchestration/david-goal-loop/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-goal-loop` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `goal-loop` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/agent-orchestration/goal-loop` +- 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-handoff/SKILL.md b/skills/orchestration/david-handoff/SKILL.md similarity index 93% rename from skills/imported/david/david-handoff/SKILL.md rename to skills/orchestration/david-handoff/SKILL.md index 6f6464c..b40a436 100644 --- a/skills/imported/david/david-handoff/SKILL.md +++ b/skills/orchestration/david-handoff/SKILL.md @@ -1,19 +1,19 @@ --- name: david-handoff -description: 'Namespaced import of David Ondrej agent skills: Compact the current +description: 'Stack-owned, adapted from David Ondrej agent skills: Compact the current conversation into a single, detailed handoff message — everything that happened, why it happened, and what''s left — output in a code block so it can be copy-pasted into a fresh agent session. Use when hitting context limits, switching focus, ending a work session, or partitioning a task across fresh contexts.. Use via $david-handoff - 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.' disable-model-invocation: true --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-handoff`. -- Upstream name: `handoff`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-handoff`. +- Adapted from David Ondrej's `handoff` 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-handoff/agents/openai.yaml b/skills/orchestration/david-handoff/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-handoff/agents/openai.yaml rename to skills/orchestration/david-handoff/agents/openai.yaml diff --git a/skills/imported/david/david-handoff/capability.json b/skills/orchestration/david-handoff/capability.json similarity index 73% rename from skills/imported/david/david-handoff/capability.json rename to skills/orchestration/david-handoff/capability.json index b85edf3..6f21064 100644 --- a/skills/imported/david/david-handoff/capability.json +++ b/skills/orchestration/david-handoff/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-handoff/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/orchestration/david-handoff/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-handoff" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-handoff" }, - "purpose": "Namespaced import of David Ondrej agent skills: Compact the current", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Compact the current", "role": "workflow", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-handoff/SKILL.md" + "skill_path": "skills/orchestration/david-handoff/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/imported/david/david-codex-subagent/references/source.md b/skills/orchestration/david-handoff/references/source.md similarity index 78% rename from skills/imported/david/david-codex-subagent/references/source.md rename to skills/orchestration/david-handoff/references/source.md index d720540..723383d 100644 --- a/skills/imported/david/david-codex-subagent/references/source.md +++ b/skills/orchestration/david-handoff/references/source.md @@ -1,10 +1,10 @@ -# Source Metadata +# Origin -- Imported skill: `$david-codex-subagent` -- Upstream skill name: `codex-subagent` -- Upstream repo: https://github.com/davidondrej/skills -- Upstream path: `skills/agent-orchestration/codex-subagent` -- Inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` +- Stack-owned skill: `$david-handoff` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `handoff` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/agent-orchestration/handoff` +- Last inspected commit: `5c99080334072075eb9e0a17837f7d24e4f3e6ae` - License: MIT ## License Notice diff --git a/skills/imported/david/david-effective-agent-skills/SKILL.md b/skills/platform/david-effective-agent-skills/SKILL.md similarity index 97% rename from skills/imported/david/david-effective-agent-skills/SKILL.md rename to skills/platform/david-effective-agent-skills/SKILL.md index 70e053f..93f837e 100644 --- a/skills/imported/david/david-effective-agent-skills/SKILL.md +++ b/skills/platform/david-effective-agent-skills/SKILL.md @@ -1,19 +1,19 @@ --- name: david-effective-agent-skills -description: 'Namespaced import of David Ondrej agent skills: How to write effective +description: 'Stack-owned, adapted from David Ondrej agent skills: How to write effective agent skills — what to do, what not to do, anatomy, progressive disclosure, design patterns, anti-patterns, testing, security. Read this whenever a skill (Claude Skill, Agent Skill, SKILL.md) is being created, edited, reviewed, or debugged. Use when the user says "create a skill", "new skill", "update this skill", "improve a skill", "why isn''t my skill triggering", or anything else involving authoring or editing - SKILL.md files.. Use via $david-effective-agent-skills when this upstream workflow + SKILL.md files.. Use via $david-effective-agent-skills when this workflow is needed inside Maroun''s Stack or Hermes-safe operating loop.' --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-effective-agent-skills`. -- Upstream name: `effective-agent-skills`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-effective-agent-skills`. +- Adapted from David Ondrej's `effective-agent-skills` 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-effective-agent-skills/agents/openai.yaml b/skills/platform/david-effective-agent-skills/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-effective-agent-skills/agents/openai.yaml rename to skills/platform/david-effective-agent-skills/agents/openai.yaml diff --git a/skills/imported/david/david-effective-agent-skills/capability.json b/skills/platform/david-effective-agent-skills/capability.json similarity index 70% rename from skills/imported/david/david-effective-agent-skills/capability.json rename to skills/platform/david-effective-agent-skills/capability.json index 193a4cc..f3c3968 100644 --- a/skills/imported/david/david-effective-agent-skills/capability.json +++ b/skills/platform/david-effective-agent-skills/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-effective-agent-skills/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/platform/david-effective-agent-skills/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-effective-agent-skills" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-effective-agent-skills" }, - "purpose": "Namespaced import of David Ondrej agent skills: How to write effective", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: How to write effective", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-effective-agent-skills/SKILL.md" + "skill_path": "skills/platform/david-effective-agent-skills/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/platform/david-effective-agent-skills/references/source.md b/skills/platform/david-effective-agent-skills/references/source.md new file mode 100644 index 0000000..d42ae4e --- /dev/null +++ b/skills/platform/david-effective-agent-skills/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-effective-agent-skills` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `effective-agent-skills` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/skill-authoring/effective-agent-skills` +- 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-setup-help/SKILL.md b/skills/platform/david-setup-help/SKILL.md similarity index 84% rename from skills/imported/david/david-setup-help/SKILL.md rename to skills/platform/david-setup-help/SKILL.md index d108a22..8e1ecf0 100644 --- a/skills/imported/david/david-setup-help/SKILL.md +++ b/skills/platform/david-setup-help/SKILL.md @@ -1,19 +1,19 @@ --- name: david-setup-help -description: 'Namespaced import of David Ondrej agent skills: Walk the user through +description: 'Stack-owned, adapted from David Ondrej agent skills: Walk the user through setting up anything step by step. Use when the user asks for help setting up, configuring, installing, or getting something working — "help me set up X", "walk me through this", "setup-help". Differentiator: gives one current step at a time, then always lists every remaining setup step after each response.. Use via $david-setup-help - 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.' disable-model-invocation: true --- -## Stack Import +## Stack-owned -- Invoke this imported skill as `$david-setup-help`. -- Upstream name: `setup-help`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-setup-help`. +- Adapted from David Ondrej's `setup-help` 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-setup-help/agents/openai.yaml b/skills/platform/david-setup-help/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-setup-help/agents/openai.yaml rename to skills/platform/david-setup-help/agents/openai.yaml diff --git a/skills/imported/david/david-setup-help/capability.json b/skills/platform/david-setup-help/capability.json similarity index 72% rename from skills/imported/david/david-setup-help/capability.json rename to skills/platform/david-setup-help/capability.json index 31a3e06..89cbb8e 100644 --- a/skills/imported/david/david-setup-help/capability.json +++ b/skills/platform/david-setup-help/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-setup-help/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/platform/david-setup-help/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-setup-help" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-setup-help" }, - "purpose": "Namespaced import of David Ondrej agent skills: Walk the user through", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Walk the user through", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-setup-help/SKILL.md" + "skill_path": "skills/platform/david-setup-help/SKILL.md" }, "trust_class": "local-mutation", "validation": { diff --git a/skills/platform/david-setup-help/references/source.md b/skills/platform/david-setup-help/references/source.md new file mode 100644 index 0000000..64cc3da --- /dev/null +++ b/skills/platform/david-setup-help/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-setup-help` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `setup-help` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/ops-and-setup/setup-help` +- 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-browser-harness/SKILL.md b/skills/qa/david-browser-harness/SKILL.md similarity index 96% rename from skills/imported/david/david-browser-harness/SKILL.md rename to skills/qa/david-browser-harness/SKILL.md index 64a32c4..25c03a2 100644 --- a/skills/imported/david/david-browser-harness/SKILL.md +++ b/skills/qa/david-browser-harness/SKILL.md @@ -1,16 +1,16 @@ --- name: david-browser-harness -description: 'Namespaced import of David Ondrej agent skills: Direct browser control +description: 'Stack-owned, adapted from David Ondrej agent skills: Direct browser control via CDP. Use when the user wants to automate, scrape, test, or interact with web pages. Connects to the user''s already-running Chrome.. Use via $david-browser-harness - 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-browser-harness`. -- Upstream name: `browser-harness`. -- Source metadata and license notice: [references/source.md](references/source.md). +- Invoke this skill as `$david-browser-harness`. +- Adapted from David Ondrej's `browser-harness` 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-browser-harness/agents/openai.yaml b/skills/qa/david-browser-harness/agents/openai.yaml similarity index 100% rename from skills/imported/david/david-browser-harness/agents/openai.yaml rename to skills/qa/david-browser-harness/agents/openai.yaml diff --git a/skills/imported/david/david-browser-harness/capability.json b/skills/qa/david-browser-harness/capability.json similarity index 71% rename from skills/imported/david/david-browser-harness/capability.json rename to skills/qa/david-browser-harness/capability.json index c6ae61c..6570cbc 100644 --- a/skills/imported/david/david-browser-harness/capability.json +++ b/skills/qa/david-browser-harness/capability.json @@ -24,16 +24,16 @@ "lifecycle": "active", "overlaps": [], "ownership": { - "package": "imported-skills", - "provider": "david", - "source_path": "skills/imported/david/david-browser-harness/SKILL.md" + "package": "stack", + "provider": "stack", + "source_path": "skills/qa/david-browser-harness/SKILL.md" }, "provenance": { - "license": "unknown", - "posture": "imported-upstream", - "source_identity": "upstream:skills/david-browser-harness" + "license": "MIT", + "posture": "repository-local", + "source_identity": "stack:skills/david-browser-harness" }, - "purpose": "Namespaced import of David Ondrej agent skills: Direct browser control", + "purpose": "Stack-owned, adapted from David Ondrej agent skills: Direct browser control", "role": "leaf", "runtimes": { "publish_targets": [ @@ -47,7 +47,7 @@ }, "schema_version": 1, "source": { - "skill_path": "skills/imported/david/david-browser-harness/SKILL.md" + "skill_path": "skills/qa/david-browser-harness/SKILL.md" }, "trust_class": "read-only", "validation": { diff --git a/skills/imported/david/david-browser-harness/references/install.md b/skills/qa/david-browser-harness/references/install.md similarity index 100% rename from skills/imported/david/david-browser-harness/references/install.md rename to skills/qa/david-browser-harness/references/install.md diff --git a/skills/qa/david-browser-harness/references/source.md b/skills/qa/david-browser-harness/references/source.md new file mode 100644 index 0000000..e9b1771 --- /dev/null +++ b/skills/qa/david-browser-harness/references/source.md @@ -0,0 +1,34 @@ +# Origin + +- Stack-owned skill: `$david-browser-harness` (converted 2026-11-13; no longer tracks upstream) +- Origin skill name: `browser-harness` +- Origin repo: https://github.com/davidondrej/skills +- Origin path: `skills/research-and-web/browser-harness` +- 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_agent_context.py b/tests/test_agent_context.py new file mode 100644 index 0000000..36dbb16 --- /dev/null +++ b/tests/test_agent_context.py @@ -0,0 +1,70 @@ +"""Claude and Codex share one instruction file and one context folder.""" +from __future__ import annotations + +import os +import re +import unittest +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] +CONTEXT = ROOT / "docs/context" +SHARED = (ROOT / "AGENTS.md", CONTEXT / "state.md", CONTEXT / "decisions.md", CONTEXT / "handoff.md") +FORBIDDEN = ( + re.compile(r"/(?:Users|home)/[^/\s`]+"), + re.compile(r"\b(?:gh[pousr]_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|sk-[A-Za-z0-9-]{20,}|xox[abpr]-[A-Za-z0-9-]{10,})"), + re.compile(r"[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}"), +) +DECISION = re.compile(r"^- (\d{4}-\d{2}-\d{2}): .+ \[#\d+\]\(https://github\.com/thecolormaroun/stack/pull/\d+\)$") + + +class AgentContextTests(unittest.TestCase): + def test_claude_md_is_a_symlink_to_agents_md(self) -> None: + claude = ROOT / "CLAUDE.md" + self.assertTrue(claude.is_symlink(), "CLAUDE.md must be a symlink to AGENTS.md") + self.assertEqual(os.readlink(claude), "AGENTS.md") + agents = ROOT / "AGENTS.md" + self.assertTrue(agents.is_file()) + self.assertFalse(agents.is_symlink(), "AGENTS.md is the source of truth, not a link") + self.assertFalse((ROOT / "config/CLAUDE.md").exists(), "a second instruction file would drift") + + def test_shared_context_files_exist(self) -> None: + for path in SHARED: + with self.subTest(path=path.relative_to(ROOT)): + self.assertTrue(path.is_file(), f"{path.relative_to(ROOT)} is missing") + + def test_agents_md_requires_reading_and_updating_the_context(self) -> None: + text = (ROOT / "AGENTS.md").read_text(encoding="utf-8") + self.assertIn("reads `docs/context/state.md` and `docs/context/handoff.md`", text) + self.assertIn("before starting work", text) + self.assertIn("update `state.md` and `handoff.md`", text) + self.assertIn("No secrets or personal data", text) + + def test_context_files_hold_no_secrets_or_personal_paths(self) -> None: + for path in SHARED: + text = path.read_text(encoding="utf-8") + for pattern in FORBIDDEN: + with self.subTest(path=path.relative_to(ROOT), pattern=pattern.pattern): + self.assertIsNone(pattern.search(text)) + + def test_decisions_are_dated_linked_and_in_order(self) -> None: + lines = [line for line in (CONTEXT / "decisions.md").read_text(encoding="utf-8").splitlines() if line.startswith("- ")] + self.assertTrue(lines) + dates = [] + for line in lines: + with self.subTest(line=line): + match = DECISION.match(line) + self.assertIsNotNone(match) + dates.append(match.group(1)) + self.assertEqual(dates, sorted(dates)) + + def test_handoff_names_author_and_date(self) -> None: + text = (CONTEXT / "handoff.md").read_text(encoding="utf-8") + self.assertRegex(text, r"(?m)^- Author: (Claude|Codex)$") + self.assertRegex(text, r"(?m)^- Date: \d{4}-\d{2}-\d{2}$") + self.assertIn("## Done", text) + self.assertIn("## Next", text) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_documented_commands.py b/tests/test_documented_commands.py index ab06775..446a2b5 100644 --- a/tests/test_documented_commands.py +++ b/tests/test_documented_commands.py @@ -11,7 +11,7 @@ ROOT = Path(__file__).resolve().parents[1] DOCUMENTS = ( ROOT / "README.md", - ROOT / "config/CLAUDE.md", + ROOT / "AGENTS.md", ROOT / "docs/architecture.md", ROOT / "docs/capability-lifecycle.md", ROOT / "docs/bookmark-curation.md", @@ -20,6 +20,10 @@ ROOT / "docs/weekly-intelligence-operations.md", ROOT / "docs/private-overlay.md", ROOT / "docs/stack-maintenance.md", + ROOT / "docs/upstream-policy.md", + ROOT / "docs/context/state.md", + ROOT / "docs/context/decisions.md", + ROOT / "docs/context/handoff.md", ROOT / "templates/periodic-reassessment.md", ROOT / "templates/stack-maintenance-reconciliation.md", ) diff --git a/tests/test_stack_owned_imports.py b/tests/test_stack_owned_imports.py index 0e8a444..a27d01b 100644 --- a/tests/test_stack_owned_imports.py +++ b/tests/test_stack_owned_imports.py @@ -1,7 +1,8 @@ """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. +were removed or moved became Stack-owned and left the maintenance lane, and so +did the 12 remaining David imports once davidondrej/skills became pick-only. """ from __future__ import annotations @@ -37,6 +38,19 @@ "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", + # davidondrej/skills became pick-only (docs/upstream-policy.md). + "david-anti-sleep": "skills/engineering/david-anti-sleep", + "david-deepapi": "skills/engineering/david-deepapi", + "david-fable-safe-prompt": "skills/engineering/david-fable-safe-prompt", + "david-read-all-adrs": "skills/engineering/david-read-all-adrs", + "david-browser-harness": "skills/qa/david-browser-harness", + "david-cmux": "skills/orchestration/david-cmux", + "david-codex-subagent": "skills/orchestration/david-codex-subagent", + "david-goal-loop": "skills/orchestration/david-goal-loop", + "david-handoff": "skills/orchestration/david-handoff", + "david-deep-research": "skills/knowledge/david-deep-research", + "david-effective-agent-skills": "skills/platform/david-effective-agent-skills", + "david-setup-help": "skills/platform/david-setup-help", } diff --git a/tests/test_upstream_admission.py b/tests/test_upstream_admission.py new file mode 100644 index 0000000..0ddd512 --- /dev/null +++ b/tests/test_upstream_admission.py @@ -0,0 +1,156 @@ +"""Contracts for the upstream admission rule in docs/upstream-policy.md.""" +from __future__ import annotations + +import importlib.util +import json +import sys +import tempfile +import unittest +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[1] + + +def load(filename: str, name: str): + spec = importlib.util.spec_from_file_location(name, ROOT / "scripts" / filename) + assert spec and spec.loader + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +IMPORTER = load("import-pinned-skills.py", "admission_importer") +MAINTENANCE = load("stack-maintenance.py", "admission_maintenance") + + +def providers() -> dict[str, dict]: + return {row["id"]: row for row in json.loads((ROOT / "registry/upstreams.json").read_text())["providers"]} + + +class TrackingFieldTests(unittest.TestCase): + def test_every_provider_declares_a_tracking_mode(self) -> None: + for provider_id, provider in providers().items(): + with self.subTest(provider=provider_id): + self.assertIn(provider.get("tracking"), {"weekly", "pick-only"}) + + def test_david_is_pick_only_and_fully_stack_owned(self) -> None: + self.assertEqual(providers()["david"]["tracking"], "pick-only") + self.assertFalse((ROOT / "skills/imported/david").exists()) + rules = {row["id"] for row in json.loads((ROOT / "registry/maintenance-imports.json").read_text())["providers"]} + self.assertNotIn("david", rules) + policy = json.loads((ROOT / "config/stack-maintenance.json").read_text()) + self.assertNotIn("skills/imported/david/", policy["diff_allowlist"]) + catalog = json.loads((ROOT / "registry/capabilities.json").read_text())["capabilities"] + self.assertEqual([row["canonical_name"] for row in catalog if row["ownership"]["provider"] == "david"], []) + + def test_pick_only_providers_have_no_tracked_mappings(self) -> None: + rules = {row["id"]: row for row in json.loads((ROOT / "registry/maintenance-imports.json").read_text())["providers"]} + for provider_id, provider in providers().items(): + if provider["tracking"] == "pick-only": + with self.subTest(provider=provider_id): + self.assertNotIn(provider_id, rules) + self.assertFalse((ROOT / "skills/imported" / provider_id).exists()) + + def test_every_provider_is_in_the_audit_table(self) -> None: + policy = (ROOT / "docs/upstream-policy.md").read_text(encoding="utf-8") + table = policy.split("## Provider audit", 1)[1] + rows = {line.split("|")[1].strip() for line in table.splitlines() if line.startswith("| ") and not line.startswith("| ---")} + self.assertTrue(set(providers()) <= rows, sorted(set(providers()) - rows)) + + def test_maintenance_rejects_a_provider_without_tracking(self) -> None: + registry, lock = MAINTENANCE.load_upstream_metadata() + MAINTENANCE.validate_upstream_metadata(registry, lock) + for value in (None, "daily"): + with self.subTest(tracking=value): + broken = json.loads(json.dumps(registry)) + if value is None: + broken["providers"][0].pop("tracking") + else: + broken["providers"][0]["tracking"] = value + with self.assertRaisesRegex(MAINTENANCE.PolicyError, "upstream_tracking_invalid"): + MAINTENANCE.validate_upstream_metadata(broken, lock) + + +class ObservationTests(unittest.TestCase): + def setUp(self) -> None: + registry, lock = MAINTENANCE.load_upstream_metadata() + self.providers = MAINTENANCE.validate_upstream_metadata(registry, lock) + self.tracked = { + provider_id: provider["pin"]["value"] + for provider_id, provider in self.providers.items() + if provider["pin"]["type"] == "git-commit" and provider["tracking"] == "weekly" + } + + def test_pick_only_provider_is_never_observed_or_proposed(self) -> None: + drifted = {**self.tracked, "david": "f" * 40} + for refs in (self.tracked, drifted): + with self.subTest(with_pick_only=("david" in refs)): + report = MAINTENANCE.observe_upstream_heads(self.providers, observed_refs=refs) + david = next(row for row in report["observations"] if row["provider_id"] == "david") + self.assertEqual(david["status"], "pick_only") + self.assertIsNone(david["observed_head"]) + self.assertNotIn("david", report["updates_available"]) + self.assertEqual(report["status"], "current") + + def test_missing_tracked_provider_ref_still_fails_closed(self) -> None: + partial = dict(self.tracked) + partial.pop("gstack") + with self.assertRaisesRegex(MAINTENANCE.PolicyError, "observed_provider_set_invalid"): + MAINTENANCE.observe_upstream_heads(self.providers, observed_refs=partial) + + +class ImporterAdmissionTests(unittest.TestCase): + def test_pick_only_provider_is_refused_before_network(self) -> None: + with self.assertRaises(IMPORTER.AdmissionError) as raised: + IMPORTER.main(["--provider", "david", "--list-unmapped"]) + self.assertIn("pick-only", str(raised.exception)) + + def test_provider_without_tracking_is_refused(self) -> None: + with self.assertRaisesRegex(IMPORTER.AdmissionError, "must set tracking"): + IMPORTER.require_tracked({"id": "example"}) + + def checkout(self, root: Path, *, license_file: bool = True, readme: bool = True) -> Path: + root.mkdir() + if license_file: + (root / "LICENSE").write_text("MIT License\n", encoding="utf-8") + if readme: + (root / "README.md").write_text("# Install\n", encoding="utf-8") + return root + + def test_weekly_provider_needs_osi_license_license_file_and_readme(self) -> None: + provider = {"id": "example", "tracking": "weekly", "license": "MIT"} + with tempfile.TemporaryDirectory() as temporary: + base = Path(temporary) + IMPORTER.admission_check(provider, self.checkout(base / "ok")) + cases = ( + ({**provider, "license": "unknown"}, self.checkout(base / "license-id"), "not an approved OSI license"), + (provider, self.checkout(base / "no-license", license_file=False), "no license file"), + (provider, self.checkout(base / "no-readme", readme=False), "no README"), + ({**provider, "tracking": "pick-only"}, self.checkout(base / "pick-only"), "pick-only"), + ) + for value, checkout, message in cases: + with self.subTest(message=message): + with self.assertRaisesRegex(IMPORTER.AdmissionError, message): + IMPORTER.admission_check(value, checkout) + + def test_symlinked_license_file_does_not_count(self) -> None: + provider = {"id": "example", "tracking": "weekly", "license": "MIT"} + with tempfile.TemporaryDirectory() as temporary: + checkout = self.checkout(Path(temporary) / "repo", license_file=False) + (Path(temporary) / "elsewhere").write_text("MIT License\n", encoding="utf-8") + (checkout / "LICENSE").symlink_to(Path(temporary) / "elsewhere") + with self.assertRaisesRegex(IMPORTER.AdmissionError, "no license file"): + IMPORTER.admission_check(provider, checkout) + + +class DownstreamRefusalTests(unittest.TestCase): + def test_discovery_refuses_a_pick_only_provider(self) -> None: + discovery = load("discover-upstream-updates.py", "admission_discovery") + with self.assertRaisesRegex(discovery.DiscoveryPolicyError, "provider_not_tracked"): + discovery.discover_upstream_update("david", root=ROOT) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_upstream_packages.py b/tests/test_upstream_packages.py index 074b4ef..4b2e70c 100644 --- a/tests/test_upstream_packages.py +++ b/tests/test_upstream_packages.py @@ -185,10 +185,10 @@ def test_stack_codex_exports_have_clean_home_resources_or_fallbacks(self) -> Non def test_maintenance_import_rules_are_curated_and_complete(self) -> None: rules = json.loads((ROOT / "registry/maintenance-imports.json").read_text()) providers = {row["id"]: row for row in rules["providers"]} - self.assertEqual(set(providers), {"matt", "david", "emil", "stewdio"}) + # davidondrej/skills is pick-only, so it has no tracked import rule. + self.assertEqual(set(providers), {"matt", "emil", "stewdio"}) self.assertTrue(all(row["license"] == "MIT" for row in providers.values())) self.assertEqual(providers["matt"]["mapping"], "existing-source-markdown") - self.assertEqual(providers["david"]["mapping"], "existing-source-markdown") self.assertEqual( {row["target"] for row in providers["emil"]["targets"]}, {"skills/imported/emil/emil-design-eng", "skills/design/review-animations"}