skill
zwicky
Fritz Zwicky's morphological analysis as a CLI and an AI-agent skill
Set up
Skills are installed by placing their folder where your agent loads skills.
The download comes from github.com/javarool/zwicky itself, not from our server, so what you get is exactly what its author published.
Install instructions come from the README
README
synced Oct 26, 2026zwicky
An AI-agent skill for systematic idea generation, based on Fritz Zwicky's morphological analysis, with a bundled brute-force CLI.
Ask your agent to come up with, invent or explore options for something with several independent dimensions, such as an architecture, a product concept, or what to do in a tricky situation. The skill takes over: it splits the problem into axes, confirms them with you, enumerates every combination, removes the junk, reads all the survivors and shows you the 3 strongest ideas with a link to the full list.
Install the skill
npx skills add javarool/zwicky # Claude Code, Cursor, Codex, Gemini CLI and other agents
Claude Code plugin:
/plugin install zwicky --marketplace javarool/zwicky
Older Claude Code versions: /plugin marketplace add javarool/zwicky, then /plugin install zwicky@zwicky.
The skill needs Node.js ≥ 18 and carries its own copy of the CLI, so nothing else is installed. Then just ask: "come up with architecture options for …".
What it does
Break a problem into independent parameters, enumerate every combination, eliminate the inconsistent ones with explicit rules, and get a diverse shortlist across familiar, unexpected and extreme ideas.
5 energy sources × 5 propulsions × 3 layouts × 4 terrains = 300 combinations
frame "wild": 8 rules → 208 survivors → 8 picks, from "e-scooter" to "hydrogen hovercraft for rivers"
Fritz Zwicky (1898–1974) named supernovae and dark matter. He designed jet engines with the "morphological box": instead of trusting intuition about which designs are obvious, he looked into every cell of the matrix, including the empty ones. Done by hand, people skip cells, and done by a language model, the model skips them too. This tool makes the brute-force step mechanical. Humans or agents do the judgment (which parameters, which combinations are impossible), and the CLI does the counting.
The CLI and the skill are based on morphological analysis (problem-solving), also known as general morphological analysis, including its cross-consistency assessment step.
How it works
- Box: you (or your agent) describe the problem as axes and values, plus a baseline, the familiar solution.
- Map:
zwicky mapwrites the full cartesian product tomap.csv. It streams the output and has a safety limit. - Frame: you judge value pairs, not rows. A 7-axis × 6-value box has 280,000 rows but only 756 cross-axis pairs. Rules are declarative:
exclude,forbid(any arity),require, andcollapsefor duplicates (rows that differ only on an axis that stops mattering). - Filter:
zwicky filterapplies the frame to every row and reports how many rows each rule removed, plus dead and forced values. Survivors are written as ids (survivors-<frame>.csv) and as labels for people (ideas-<frame>.csv). - Review:
zwicky reviewshows every survivor, losslessly factorized into product blocks (T1|T2 F1 * X4= all those combinations survive). An agent can read thousands of rows as a few lines and choose by the user's criteria. - Pick:
zwicky pickreturns a shortlist bucketed by novelty, which is the number of axes that differ from the baseline. Modes:diverse(farthest-point),random(seeded,--freshskips rows already shown),top(weighted value scores).
Everything is saved in a store (~/.zwicky/<slug>/). Re-runs reuse the map, and asking for "more ideas" costs one command.
CLI on its own
The CLI works without an agent too. It is not on npm yet, so build it from the repo:
git clone https://github.com/javarool/zwicky && cd zwicky && npm ci && npm run build
node dist/zwicky.mjs --help
Node.js ≥ 18. Single-file bundle, no runtime dependencies.
Quick start
Here zwicky means node dist/zwicky.mjs (or the skill's scripts/zwicky.mjs).
zwicky example urban-transport
zwicky map urban-transport
zwicky filter urban-transport --frame wild
zwicky pick urban-transport --frame wild
zwicky pick urban-transport --frame wild --mode random --fresh
Box format
{
"slug": "urban-transport",
"problem": "A compact way for people to get around a city",
"baseline": ["E1", "P1", "S3", "M1"],
"axes": [
{ "id": "E", "name": "Energy source", "values": [
{ "id": "E1", "label": "Internal combustion engine", "scores": { "feasibility": 5 } },
{ "id": "E2", "label": "Battery", "scores": { "feasibility": 5 } }
] }
],
"criteria": [{ "name": "feasibility", "weight": 2 }]
}
criteria and scores are optional. Value ids must be unique across the box ([A-Za-z0-9_.-]).
Frame format
{
"name": "wild",
"description": "Remove only what is physically impossible",
"exclude": [{ "value": "M4", "reason": "..." }],
"forbid": [{ "all": ["E3", "M4"], "reason": "..." }],
"require": [{ "if": ["M4"], "anyOf": ["S1", "S2"], "reason": "..." }],
"collapse": [{ "if": ["P5"], "ignore": ["E"], "reason": "without propulsion the energy source is irrelevant" }]
}
There is no eval and no custom code, so it is safe to run on frames written by an LLM.
Commands
| Command | |
|---|---|
zwicky list | stored boxes |
zwicky show <slug> | box, map state, frames |
zwicky example [name] | list examples / copy one into the store |
zwicky map <box.json|slug> [--force] [--limit n] | full enumeration (refuses >100k rows without --force) |
zwicky pairs <slug> | cross-consistency checklist |
zwicky filter <slug> --frame <file|name> | apply a frame |
zwicky review <slug> [--frame f] [--rows [--labels]] [--page k] [--size 200] [--max 2000] [--seed s] | every survivor as lossless product blocks (or one row per line) |
zwicky pick <slug> [--frame f] [--mode m] [--n 8] [--bucket b] [--min-novelty k] [--fresh] [--seed s] [--json] | shortlist |
Global flag: --store <dir>, or set ZWICKY_HOME.
Output is plain markdown. Colors appear only on an interactive terminal, so agents read clean text.
Use it from an AI agent
skills/zwicky/ is a ready-made Agent Skill: a SKILL.md with the full workflow, plus the bundled CLI and examples. Install it as shown above, or copy or symlink the folder into your agent's skills directory (for example ~/.claude/skills/zwicky).
Examples
urban-transport (from Zwicky's classic teaching example), microservices, api-design, kitchen-device, game-mechanics.
Development
npm install
npm test # vitest
npm run typecheck
npm run build # dist/zwicky.mjs + copy into skills/zwicky/
Related methods
zwicky belongs to the family of structured invention and creativity methods, alongside TRIZ (Altshuller's theory of inventive problem solving and its contradiction matrix), SCAMPER, Systematic Inventive Thinking (SIT), attribute listing and design thinking. TRIZ resolves one contradiction with known inventive principles. Morphological analysis maps the whole solution space instead, so no option is left out, which suits architecture choices, product concepts, strategy and everyday decisions. The two work well together: TRIZ principles are a good source of unusual values for an axis.
Roadmap
zwicky init: an interactive wizard for building a box without an agent.
License
MIT