Skip to content
Conduit

skill

zwicky

Fritz Zwicky's morphological analysis as a CLI and an AI-agent skill

javarool/zwickycommunitylistedunreviewed

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

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 26, 2026

zwicky

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

  1. Box: you (or your agent) describe the problem as axes and values, plus a baseline, the familiar solution.
  2. Map: zwicky map writes the full cartesian product to map.csv. It streams the output and has a safety limit.
  3. 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, and collapse for duplicates (rows that differ only on an axis that stops mattering).
  4. Filter: zwicky filter applies 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).
  5. Review: zwicky review shows 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.
  6. Pick: zwicky pick returns a shortlist bucketed by novelty, which is the number of axes that differ from the baseline. Modes: diverse (farthest-point), random (seeded, --fresh skips 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 liststored 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

↑↓ navigate openesc close