brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
skill-intakeUse when a skill — or a whole second tree of them — arrives from outside the library and has to be assessed before it is adopted, including reconciling two repos that were forked from one and have since diverged — measuring whether it adds capability the library does not already have, deciding between adopt, merge, adapt and reject, analysing what the skill…
Independent GitHub snapshot · Automated classification · Original documentation governs
Skills arrive in different shapes — from another team, another harness, a public repo, a different enterprise standard. This decides whether one earns a place, and what it must become first.
| Verdict | When |
|---|---|
| ADOPT | Adds capability the library lacks, and its shape already fits |
| ADAPT | The capability is wanted; the shape is wrong for the target environment |
| MERGE | It overlaps an existing skill and each holds something the other lacks |
| REJECT | It adds nothing measurable, or its value is already covered |
REJECT is the default, and it is not a failure. A library's usefulness degrades as it grows:
every added skill dilutes selection, and two skills that both plausibly match a task make the
selector worse, not better (_meta/skill_overlap.py exists because that degradation is measurable).
"It looks useful" is not a verdict. §2 and §3 are how you get one.
Run the mechanical checks before forming an opinion:
python3 ~/.claude/skills/skill-intake/scripts/assess.py --skill /path/to/incoming/SKILL.md
It reports description overlap against every existing skill, security-scanner risks, portability problems and structural conformance. What it cannot tell you is whether the content is any good — that is §3.
Then answer, in writing:
A skill's value is the behaviour change it causes, not the information it contains. This is the assessment people skip, and it is the one that separates a useful skill from a well-written document.
Ask what loading it changes:
| Effect | Signal it is real |
|---|---|
| Constrains — forbids a tempting wrong move | Names the failure and why it is tempting |
| Sequences — imposes an order that matters | The order has a stated consequence if broken |
| Supplies facts the model cannot know | Version-stamped, sourced, environment-specific |
| Selects tools — routes to the right one | Names concrete tools and the boundary between them |
| Shapes output — a required artifact form | The shape is checkable |
Red flags that it changes nothing:
The cheapest empirical check: take a task the skill claims to improve, and compare the response with and without it loaded. A skill that earns its place changes the answer visibly.
The commonest reason a good skill cannot be adopted as-is: it was written for a permissive home-grown environment and the target is enterprise-constrained.
| Home-grown | Enterprise | |
|---|---|---|
| Network | Live lookups, web fetches | Often blocked — facts must be in reference files |
| Tools | Assumes a rich local toolchain | Assumes almost nothing; degrade gracefully |
| Shell | Free use | Restricted, audited, sometimes absent |
| Paths | Absolute dev-host paths | Must be relative or configurable |
| Secrets | ~/.secrets convention | Vault, managed identity, or injected env |
| Model | One known CLI | Several, with different tool vocabularies |
The structural adaptation is to move volatile knowledge into reference files. A skill that
fetches a rate, a version or an endpoint at runtime cannot work where egress is blocked. The same
skill with a version-stamped reference file and a REVIEW_BY date works everywhere, and degrades
honestly instead of failing.
Skills are read by scanners that do not know your intent. These patterns cause blocks and are almost always avoidable:
curl/wget to arbitrary hosts, especially piped into a shell. Name the URL as a reference
and let a human fetch it.eval, dynamic exec, base64 blobs. Any of these in a skill will be flagged, and rightly.Sanitise at source, not by exempting the scanner. An exemption is a permanent hole; a placeholder is a one-line fix. Exempt only where the content genuinely must contain the pattern — a redaction test, a scanner's own source — and record why.
The commonest large version of this: two repos were forked from one, both were worked on, and now one has far more skills and scripts than the other. Someone has to pick the target, decide what comes across, and — the part that gets missed — find what changed on both sides.
R=~/.claude/skills/skill-intake/scripts/reconcile.py
python3 $R --source <other-tree>/skills --target ./skills diff # classify everything
python3 $R --source <other-tree>/skills --target ./skills gaps # what target lacks
python3 $R --source <other-tree>/skills --target ./skills plan --out reconcile-plan.md
Pick the target first, and pick it once. The target is where work lands from now on; everything else is a source. Choose on which tree the team actually uses and which has the working gates and tests — not on which has more skills, since count is not capability.
Four categories come back, and their weights are not equal:
| Category | What it means |
|---|---|
identical | Byte-identical. No action |
source_only | Candidate to migrate — one assess.py verdict each, and REJECT is still the default |
target_only | Target is ahead. Informational |
divergent | Same name, different content, both edited. Resolve these first |
divergent is the category that destroys work. source_only is a shopping list and
everyone finds it; a skill edited on both sides gets resolved by whoever copies last, and
the loss is silent — nobody notices the other side's paragraph is gone. Merge those per
§5, one at a time.
The tool classifies and never copies. That separation is deliberate: enumeration is mechanical and safe, migration is a decision, and a tool doing both would make the easy half feel like the whole job.
Do not trust modification times, and the tool says so where it prints them. Copying a tree rewrites mtimes, so a freshly-cloned stale repo looks newer than what it came from. Line counts are scale, not quality.
_meta/skill_overlap.py. A migrated skill that collides with an existing one
degrades selection for the whole library — add disambiguation: before re-pinning.See also pointing at a skill
that exists only in the source is a phantom reference, and it will not fail loudly.When both hold value, merging is right, and the risk is losing the smaller one's contribution.
disambiguation: against the neighbours that remain.decommission, not by deleting it — its references need
redirecting.Record, in the skill: where it came from · its licence · what was changed and why · what was removed.
A skill adopted from outside and edited is neither theirs nor cleanly yours. Someone will later need to know whether a claim came from the original author or from your adaptation — particularly if the original is updated and you want to re-merge.
REVIEW_BY — they rot silently and confidently.source_only first and leaving divergent — the category that loses work.