triz_parameter
Get a canonical TRIZ engineering parameter (1-39). Omit id to list all 39.
id
io.github.sv由 GitHub 帳號 sv 發布v0.5.1更新於 Nov 6, 2026
Deterministic, read-only TRIZ: matrix, principles, effects, routing, type-checked function models.
唯讀的 TRIZ 伺服器,讓助理以確定性方式查詢工程參數、發明原理與矛盾矩陣,並檢查具型別的函數模型。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
參照 儲存庫 中的啟動說明。
An agent skill that applies TRIZ to real problems — products, services, processes, organizations, markets, and technical systems — plus a deterministic MCP server so the agent can only cite principles and matrix cells it has looked up, never ones it recalled.
Two parts, usable separately:
An LLM asked for "the TRIZ principles for this contradiction" will produce plausible principle
numbers from memory. The matrix is a lookup table, not a reasoning step, so recall is the wrong
mechanism for it — and a wrong cell silently poisons everything downstream. This repo makes the
lookup deterministic and fail-closed: a blank or diagonal cell returns covered: false with a
pointer to the canonical reference, never a guess.
The skill itself is method, not vocabulary: frame → diagnose → model → synthesize → substantiate, with the matrix used only where both sides of a contradiction credibly map to engineering parameters.
Copy or symlink skills/triz-innovation/ into wherever your agent loads skills from — e.g.
.claude/skills/, .agents/skills/, .codex/skills/, or a $SKILLS_DIR your harness reads:
Once the repo is listed on skills.sh the shorthand becomes
npx skills add sv/triz-skill.
The skill works standalone. The MCP server is what removes recall from the loop.
Published package (preferred once released):
From a checkout:
Register it (.mcp.json in this repo is a working example):
TRIZ_DATA_DIR is only needed when the server runs outside this repo's layout; otherwise the data
dir is resolved relative to the repo root and the server fails closed with a clear message if it is
missing.
src/worker.ts serves the same tools, except the optional triz_graph and triz_purpose and
triz_export format svg, as a Cloudflare Worker over stateless streamable HTTP (deploy with npx wrangler deploy; endpoints
/mcp and /health). It has no authentication and allows any origin (Access-Control-Allow-Origin: *) on purpose: it
is a stateless, read-only public utility with no storage bindings and no secrets, so any client
or web page may drive it. An operator who wants it private can check a token in fetch before
the MCP handler, list allowed origins instead of *, or put it behind Cloudflare Access or a
rate limit. Calling a hosted endpoint sends your model to whoever runs it; keep private models on
the local stdio server.
One line per workflow stage; the table below has one row per tool. What each model tool's verdict means, and how to chain the tools, is in categorical-model.md; the theory behind them, and exactly what is and is not claimed, is in docs/theory-map.md.
triz_synthesize preserves exhaustive reference mode and the optimized residual search.
Use strategy: "symbolic" for checked joint finite-map compilation of stateless serial regions before
union traces are enumerated. Typed port permutations, grouped primitives and bounded residual
reuse compound boundary sharing; concrete resource choices remain separate. See
scope, proofs and trust boundary and
measured benchmarks.
For local source import, including exports from instantiated ModelingToolkit and Agents.jl models, see Importing models. Imported models remain drafts through the builder and are refused by analysis until explicitly reviewed.
triz_behavior can specify several unknown boxes jointly: use weakest_spec with joint_boxes
and a target. The result keeps coupling explicit and checks whether its per-box projections are
safe. See Joint weakest specification.
The package also installs triz, which runs the same tools without an MCP client, for scripts
and agents with a shell. It validates arguments exactly as the server does and prints only JSON
on stdout:
triz call exits 0 with a result, 1 when the result has ok: false (its issues and hints are
still on stdout), and 2 on a usage error or arguments that fail the tool's schema (the issues as
JSON on stderr); --pretty indents the output. Without a global install, run
npx -y -p triz-mcp triz …; from a checkout, node --import tsx src/cli.ts …, or
node dist/cli.js … after pnpm build. triz_graph and triz_purpose read TRIZ_GRAPH and
TRIZ_REGISTRY, as on the server.
The eight-workstream assurance extension adds whole-model behavior, operational adequacy, semantic isomorphism/refinement, joint implementation and finite synthesis contracts, global overlapping-constraint checks, finite queue/conservation adapters, and restricted rewrite analysis. See implemented scope and tools. Acceptance criteria and literature references are kept separately. The documentation index maps guides, guarantees and planned work.
triz_function_model, triz_trim, and triz_separate run deterministic checks over a function
model written as an open wiring diagram, defined by
function-model.schema.json:
Any dangling, mis-directed, or mistyped wire fails closed. The checks cover:
Every ok: false result keeps its errors and adds issues: per error a stable kebab-case
code, a JSON path into the call's arguments (such as $.model.wires[2].carrier), and a
hint with a concrete fix, so an agent can correct its input from the output alone. Common
slips get a pointed hint, such as a whole triz_rule_apply listing entry passed as match.
triz_function_model, triz_trim, and triz_behavior also return warnings: lints such as an
excessive rating on a loss like a pressure drop, which never change a verdict. That lint guesses
a loss from words unless the carrier declares loss, so a renaming can move it.
error-codes.md tabulates every code.
Every loop and absorber they return is a hypothesis to substantiate. triz_transform applies
typed moves. Each returns a model that type-checks, or fails closed:
triz_rule_apply takes a rule as data, a span L ← K → R of patterns
(rule.schema.json). It lists the rule's
matches in a model, then applies one by double pushout after checking the no-identification and
no-dangling conditions. Three built-in rules encode evolution lines whose text describes a
structural move: mono → bi, self-adjusting feedback, and changing the working field (the same
function on another carrier, with the change recorded). The uneven-development line is a
detector instead: it names the lagging subsystem, a box of the largest harm-loop region that is on
a binding feasibility dimension or limits a deliverable.
Functions record who acts on whom, not which boxes sit in series along a flow: two valves in a
line both act on the water, not on each other. A model can declare flows, each an ordered path
of boxes with a carrier. triz_flow reports per flow its bottleneck candidates (resistance-like
functions acting on the flow), accumulation candidates (flows converging, or ending inside the
system), leaks, and loops. Principle 5's merge treats boxes consecutive on a flow as adjacent,
and every construction carries the flows along.
When boxes declare behaviour (finite carrier values and relation rows), triz_behavior
decides a concept against a baseline instead of only screening it: preserved, changed with
a counterexample input, or undecided (boxes that need behaviour, or no steady state in either
model). The concept can be a trim or any triz_transform result; a segment's boxMap maps its
parts back. Segmentation gives each part its projection of the box's relation when that relation
is the product of the projections, and suggests the finest partition of the box's ports for
which it is; Intermediary's mediator can declare an identity relation.
The semantics is steady state; it says nothing about dynamics. With weakest_spec, it gives the
weakest specification for the one box without behaviour, such as an absorber: every row that
keeps the relation inside the target. The verdict is spec when that specification also covers
the target, and impossible when no behaviour of the box can. When the box declares the rows it
can physically produce (producible), the specification is cut down to them, and a target only
unproducible rows reach is impossible with reason infeasible, naming those rows. With two
boxes without behaviour, such as an absorber and a new mediator, it gives the maximal pairs of
relations for them that cover the target; several such pairs are incomparable, so there may be
no weakest one. triz_weakness ranks modelled
concepts by the situations they admit (references/weakness.md).
When boxes declare feasibility (minimal rows of levels provided against levels required and
operating cost), triz_feasibility finds the minimal resource vectors by Kleene's ascent to the
least fixpoint, loops included, and judges them against the budget: feasible, infeasible
(over budget with the binding dimension, or a level no row provides), or undecided. With
trim, it decides whether the remaining boxes provide what the trim leaves them within budget,
and reports each absorber's added resources. No polynomial bound is claimed; past its caps the
call fails closed.
When boxes declare state (state, initial, and transition rows), triz_dynamics explores
every run up to a horizon. It decides whether a harm loop escalates into an unsafe set, with a
shortest trace, and whether a safe set is invariant. It also decides whether one run meets
time-separated demands within their windows. It classifies the loops' long-run behaviour as
bistable, trapped (a closed component inside the unsafe set), recurrent (one that meets it and
can recover), or oscillating. Only finite, discrete dynamics are covered.
The models link to each other. A carrier may declare levels, thresholds that read numeric
feasibility amounts as behaviour values (from 2500 N, supported); triz_feasibility then
reports each feasibility row whose amounts disagree with the box's behaviour rows, and
triz_weakness takes its acceptable set from a threshold (at_least, below) instead of a
hand-written list. triz_abstraction checks that a coarse model (few boxes, behaviour) is an
abstraction of a detailed one (many boxes, costs) under a map of boxes, ports, and carriers:
total, typed, every coarse function the image of a detailed one of its polarity class, and
every coarse harm loop the image of a detailed loop. triz_function_model takes mpv_weights
to compare a concept with its baseline over the main parameters of value only, with explicit
weights. When the 9-windows snapshots declare rows, each time carries its behaviour and
feasibility verdicts, and each change between times says how they move.
triz_nine_windows builds system-operator views, and triz_export draws a model or encodes it
as an open hypergraph. Format dot draws each box with its «role» and its typed ports, inputs
left and outputs right, rates each function by line style and colour, and adds a legend; render
it with dot -Tsvg. Format mermaid renders as is in GitHub and GitLab markdown and in many
chat clients; Mermaid has no ports, so each edge names its ports and carrier instead.
[A function model drawn by triz_export format dot]
Format svg returns the picture itself, with no Graphviz needed. The server lays the model out
with elkjs: boxes left to right, ports fixed on the box sides,
and orthogonal edges. It then writes a self-contained SVG with the same conventions as dot.
Hover a box or edge to see its id. Text widths are estimated from Helvetica and Arial metrics,
so a much wider font may run past a box. elkjs (about 1.6 MB) is an optional dependency: it is
installed with triz-mcp unless optional dependencies are omitted (--omit=optional), and
without it the format answers ok: false with format-unavailable. The hosted Worker does not
offer the format. elkjs would more than double the script, it does not start on workerd as
published, and a first layout costs more CPU than a Free-plan request allows (see
src/worker.ts).
[The same model drawn by triz_export format svg]
Given compare_to, triz_function_model also reports whether the two
models share a wiring shape. Each verdict names in basis the theorem in theory/ it relies
on; a test checks that every cited name is a theorem there. Nothing is extracted from Lean:
the theorems prove the abstract facts the algorithms rest on, tests check the TypeScript
against them, and the pairing is enforced in CI (lake build --wfail, so no sorry ships).
The theorems also act as design machinery, not just citations: when triz_feasibility says
infeasible, budget_feasible_iff (a budget admits a configuration iff it lies above one of
the minimal resource vectors) is what the returned relaxation block computes — the
nondominated minimal budget raises, each with the row selection that then fits; when candidates
must be compared across resources, lifecycle figures and component counts at once,
triz_pareto returns the joint nondominated frontier with dominance witnesses, and reports
incomparable candidates as trade-offs instead of resolving them (pareto_not_total: the
componentwise order is not total, so a single ranking needs weights the caller chooses).
The structured verdicts of the
checks are label-blind: renaming ids or
changing the domain does not change them. Property tests check this, with the exclusions listed
in the theory map. That shows the kernel reads only the wiring shape, not that solutions
transfer between domains.
docs/theory-map.md states exactly
what is and is not claimed. examples/function-models/ holds a physical, a business, and two
software models. One software model has the physical model's wiring shape. Three copies of
the physical model declare box behaviour, box feasibility, and a shaft temperature, so their
trims can be decided and their heat loop's escalation classified.
Behavior contracts prune incompatible multi-port correlations before enumeration, and resource support witnesses expose their activation order. The mathematical integration map explains the checked foundations for general component synthesis and the remaining adapters. The mixed-system guide includes a runnable hardware, software and service-provider example and explains multidimensional constraints and optimization scope.
theory/ is a Lean 4 / Mathlib package that states and proves the facts the checks rely on,
with no sorry:
Relation.Comp) is monotone, and the relational
trace is monotone and yanks a swap to the identity;theory/Semantics.lean):
gluing open diagrams in series, with the interface fully exposed, composes their external
relations; a disjoint union gives the product; feedback gives the relational trace; widening a
box widens the relation. Diagrams up to their relations form a category with a faithful
functor to RelCat. externalBehavior is checked against a brute-force transcription of this
semantics on seeded random models and the examples, not extracted from it;Verdicts cite only the statements they use exactly; the theory map marks the others as never cited, and why.
theory/Witnesses.lean checks that none of the typing, restriction, rewrite,
behaviour-monotonicity, residual, weakness, co-design, or dynamics lemmas is vacuous. For each, a
concrete diagram, relation, or step relation meets all its hypotheses, and a counterexample shows
each hypothesis is needed. theory/SemanticsWitnesses.lean does the same for the compositional
semantics, except for the part of a diagram (sub): there only the extension hypothesis has a
counterexample, and the interface and locality hypotheses (hI, hO, hloc) have none.
Trimming is decided only for models that declare behaviour, by triz_behavior's finite
relational check, and its verdict depends on the absorber chosen. theory/ does not state
trimming as a Kan extension; the theory map says why.
pnpm lean:setup (scripts/lean-setup.mjs) sets up theory/.lake/packages: Mathlib and the
packages it requires, with the prebuilt oleans of the Mathlib modules the theory imports. When the
directory is missing, it looks for another worktree or the main checkout of this repository
(git worktree list) whose theory/lake-manifest.json and theory/lean-toolchain are
byte-identical, and clones its packages copy-on-write (cp -cpR on macOS APFS, cp -pR --reflink=auto on Linux), so a new worktree downloads nothing and shares the blocks on disk.
Without one, or when an imported module still has no olean, it runs lake exe cache get with the
theory's Mathlib imports, the same list as Lean CI (node scripts/lean-setup.mjs --print-imports). That command is its only network access. It prints what it did; then build.
The TypeScript test suite never runs Lean: it checks the kernel against the theorems by name
(basis) and by property tests, and Lean CI builds theory/ separately with lake build --wfail.
triz_graph and triz_purpose reason over a project contradiction graph — they ship with no
data. The graph is an OTSM Network of Problems with a DIKWP purpose layer:
couples, blocks, or dissolves;dissolves edges — resolving it removes
the most others (the Theory-of-Constraints step);contradiction in the function-model schema's PhysicalContradiction form.
triz_graph checks it and reports irreducible, separable, no-contradiction, or
invalid; an invalid one fails closed for that node only, with its errors.
dissolves go first to irreducible nodes, then to unmodelled or invalid nodes, then
to separable nodes, and last to nodes that are not contradictions.dissolves stays the primary key. A node that already separates keeps its place but is
flagged, because separation already gives it a resolution route;purpose names the invariant it serves, and counts as secured only when a
verified_by record exists on the node or on a linked registry entry. No verifier, no gate — it
fails closed.examples/problem-graph.json and examples/triz-registry.json show the expected shape:
Point TRIZ_GRAPH / TRIZ_REGISTRY at your own files, or place them at data/problem-graph.json
and data/triz-registry.json.
skills/triz-innovation/data/ carries three suites:
evals.json — hard lookup assertions (run by pnpm test) plus synthetic reasoning cases;published-case-evals.json — six problems reconstructed from CC BY MATRIZ publications. Solver
prompts contain only pre-solution facts; reported diagnoses and outcomes stay in judge-only
fields and are never returned by triz_evals.Scoring does not require reproducing the published solution — a causally stronger, testable alternative earns full credit.
The suites ship as data; nothing calls an LLM by default. scripts/run-evals.mjs runs them
against any OpenAI-compatible endpoint and is fail-closed on a key — without
TRIZ_EVAL_API_KEY (or OPENAI_API_KEY) it exits before any network call. CI exercises it in
--dry-run mode only, which is offline and keyless. Results land in evals/results/ (gitignored)
as JSON plus a markdown report:
TRIZ_EVAL_BASE_URL and TRIZ_EVAL_MODEL select the endpoint and model (any
OpenAI-compatible API). no-recall is the benchmark that justifies the server: a model asked
for matrix cells from memory is scored against the canonical table, and fabricated citations are
counted. With the server in the loop, the same citations are lookups — fabrication is zero by
construction.
The 39 parameters, 40 principles, and the core tool catalog are classical TRIZ vocabulary; the effects starter database (78 entries, all with conditional typings) contains repository-authored summaries of physics, chemistry and geometry. See the catalogue audit for corrections, additions, references and evidence gaps.
Knowledge packs separate universal
measurement vocabulary from domain quantities and effects. All installed packs are used by
default. Expert contributions add versioned JSON packs with attributed review status;
pnpm knowledge validates their union and updates hosted imports. Canonical matrix parameters
remain the original 39.
Eight shared interface families factor 22 named cases into 14 signatures, with 52 direct definitions giving 66 independently
declared interfaces while retaining all 78 searchable entries and their case-specific evidence.
Four named configurations derive their boundaries from registered multiport models; two
explicit forward observations forget qualified current/force types without unit conversion.
Serial recipes expand into checked constituent models through triz_effect_setup; they need
no new opaque generator. Raw pack consumers should use compileKnowledge to resolve contracts.
triz_knowledge reports field groups separately from the 69 response and nine mechanism
entries; these are modeling roles, not counts of independent physical laws.
pnpm example:effects-products checks selected contracts against a real voice-coil stage and
two patent disclosures, preserving discovery and rejecting unsupported decompositions.
See the validation scope.
pnpm example:effects-recent-patents checks nine 2025–2026 publications, four added response
clauses, further interface sharing, and explicit state/probability limitations.
Compound/clause assessments
identify 15 named functions to retain as compounds, six entries needing separate clause models,
and 13 coupled responses to retain. Query them with triz_effects.assessment; missing facets
remain advisory and do not change the 78-entry executable catalogue.
The classical parameter audit retains every matrix id, clarifies nearby categories and normalizes Force at id 10 with the former wording retained as an alias. Runtime and schema checks protect the closed 1–39 vocabulary.
matrix.json was imported from a machine-readable workbook. The underlying table is Altshuller's
and widely republished. To regenerate the file from a source of your own choosing:
Published case benchmarks are concise attributed paraphrases of CC BY publications; sources,
authors, and pages are recorded per case in published-case-evals.json.
The code in this repository is MIT licensed (LICENSE). That license covers the code and the
original prose, not third-party data noted above.
The engine roadmap owns priorities and workstream status. Assurance requirements owns acceptance cases; the joint engineering synthesis design develops architecture, sizing and maintenance optimization. See the documentation index for current tool guides and research notes.
The full runbook — npm release flow, the MCP Registry PR, Smithery/Glama/PulseMCP, skill registries (skills.sh, anthropics/skills, OpenAI), and promotion — lives in docs/PUBLISHING.md.
MCP Registry. server.json holds the prepared entry (name
io.github.sv/triz) for the official registry at
registry.modelcontextprotocol.io. Listing goes
through the official mcp-publisher CLI — not a PR: publish the npm package first (the registry
verifies the mcpName field inside the published package.json), then
mcp-publisher login github (device flow) and mcp-publisher publish. Full steps in
docs/PUBLISHING.md.
npm. Publish to the public npm registry (npm publish) so npx -y triz-mcp works without a
checkout. GitHub Packages also hosts npm packages (npm.pkg.github.com), but it requires
authentication even to install public packages, so it suits private or org-internal distribution
— not a public CLI.
來源:README.md,提交 09f1de2
Get a canonical TRIZ engineering parameter (1-39). Omit id to list all 39.
idGet a canonical TRIZ inventive principle (1-40). Omit id to list all 40. Look up principle numbers instead of recalling them from memory.
idLook up the canonical contradiction matrix for an improving and worsening engineering parameter. Blank and diagonal cells fail closed; never guess a recommendation.
improving必填worsening必填Multi-parameter contradiction lookup: every (improving x worsening) matrix cell with the principles aggregated by how many cells recommend each (ties broken by mean position). Use when a conflict involves several parameters on either side; per-cell detail is returned so nothing is hidden. All-blank or diagonal-only results fail closed like triz_matrix.
improving必填worsening必填Look up a contradiction-matrix cell and expand its recommended principles and both engineering parameters. Fails closed on blank cells.
improving必填worsening必填List the domain-neutral TRIZ tool catalog, optionally restricted to problem analysis, task modeling, or solution synthesis.
stageSearch the curated effects database by required function (e.g. 'convert temperature difference into voltage', 'store heat', 'sense strain') or list by category: physical, chemical, geometric. Effects are classical textbook phenomena; selecting and substantiating one remains a synthesis step, never a lookup verdict.
querycategoryRoute a problem stage and optional observable signals to candidate TRIZ tools. Routing is deterministic and returns only tools registered for that stage.
stage必填signalsBuild a typed function model from an interaction table: components with stable ids, names and roles, and subject/action/object interactions with explicit carrier descriptors and polarities. Generates readable, stable ports and wire ids: each interaction gets its own input port on its object, `in:<carrier>:<subject>:<action>`, so no input port is fed by two functions (no fan-in, no extensive-fan-in); each subject gets one output port per carrier it sends, `out:<carrier>`, shared by its functions on that carrier (fan-out: one shared level when intensive, the sum of the demands when extensive); each function is the wire `wire:<subject>:<action>:<object>:<carrier>`. Each part is percent-escaped (':' as %3A, '%' as %25), so distinct tuples never share an id. Validates the result, runs lints, and returns a bounded completeness report of unrecorded component pairs, isolation and product reach. Ratings and behavior are never inferred. Optional flows reference component and carrier ids from the table.
draftflowsdomain必填systemhierarchycomponents必填interactions必填Substitute one box's declared inner model into its parent through its checked input/output interface. Returns a typed model and fresh box, wire and flow id maps. Preserves inner box costs, feasibility, states and transitions, and standalone inner flows. Parent flow occurrences require explicit routes and checked boundary connections; media need explicit mappings. Inner budgets, weights and contradictions require opt-in global-intersection, global-merge and append-renamed policies. Product-identity changes fail closed. Expand nested boxes one at a time before requesting flat behavior, dynamics or resource verdicts. triz_nine_windows reads a selected box's inner model as its subsystem view.
box必填mediamodel必填routespoliciesCheck a TRIZ function model written as a typed wiring diagram (boxes with typed ports, wires carrying one carrier and a polarity) and analyse it: harm loops (closed loops containing a harmful or excessive function, with witness cycles), an ideality profile per resource dimension (never summed; a scalar ratio only with explicit weights), separation checks for embedded physical contradictions, and, given compare_to, a componentwise baseline-vs-concept comparison plus an isomorphism check: whether the two models share a wiring shape ignoring every id and label (a bijection preserving roles, port sides, shared carriers, wiring, ratings, and costs; decided:false if the bounded search runs out). With mpv_weights (and compare_to), comparison.mpv compares the two models over the main parameters of value only: the named cost dimensions or 'harmful', componentwise and by the explicit weighted sum, listing the other axes on which they differ; a lost deliverable still decides, and no weight is ever filled in. Each verdict cites the theorem in theory/CategoricalTriz.lean it relies on (basis). Any dangling, mis-directed, or mistyped wire, or an invalid embedded contradiction, fails closed with ok:false. Harm loops and separation read the outer wiring and the model's own contradictions only: when boxes declare an `inner` model, incompleteHierarchy lists them, the note says their inner loops and contradictions are not analysed, and the isomorphism check carries incompleteHierarchy: true; run triz_expand_hierarchy on each first. Loops are hypotheses about mechanism to substantiate, not findings.
model必填box_mapcompare_tompv_weightsFlow analysis (router entry 16) over the model's declared `flows`: each an ordered path of the boxes a carrier passes through, in series, which functions do not record (two valves in series both act on the water, not on each other). Per flow: its steps (consecutive boxes, with the functions of the flow's carrier between them; declaredOnly counts the steps no function joins); bottleneck candidates (the performer of an insufficient, excessive, or harmful function that carries the flow's carrier and touches the path: a resistance-like output on the flow, at its position); accumulation candidates (a box where the steps of every flow of the carrier converge, with at least two predecessors and fewer successors, or a last box inside the engineered system, role tool or mediator, that no flow of the carrier continues from); leak candidates (a function on the carrier from a box on the path to an environment or supersystem box off it); loops (a box that recurs on the path, with the cycle between occurrences); and the harm loops that meet the path. Every item is a structural candidate to substantiate, not a finding. Boxes consecutive on a flow are adjacent for triz_transform merge. A model that fails the type-check, flows included, fails closed.
model必填Screen a trimming of one or more boxes by the TRIZ trimming rules: A (object trimmed too, function no longer needed), B (the object performs the function itself), C (another remaining box or supersystem resource has an output of the same carrier). Returns per-function absorbers, orphaned functions that block the trim, harms and costs removed, and one trimming problem per absorber. A carrier match is a necessary condition only; every absorber is a hypothesis to solve and substantiate.
trim必填model必填Decide whether a physical contradiction's demands can be met piecewise over a finite space x time x condition x direction x level base (the MATRIZ separation types). Each demand lists admissible values and the cells where it applies (omitted axis = whole axis). Returns per-pair status (compatible: not a physical contradiction; separated: the separating axes; irreducible: overlap on every axis) and the conflict cells where no value satisfies every active demand. With `along`, also returns the parameter as a function of that axis alone: the admissible values per cell and whether it must change along the axis (with 'time', the checkable part of Principle 15, Dynamics). Each separated pair also gets `suggestions`, hints and not verdicts: per separating axis, the operations that could build the piecewise system (space: triz_transform segment or take_out; time: standby, or triz_dynamics separation with timed demands, Principle 15; condition: rerate, or a rewrite that changes the field, Principle 28; level: triz_nine_windows, the system operator or its subsystem restriction; direction: segment by port direction), each with the demands' cells on that axis and the looked-up text of the principle it follows. With `certificate: true`, also returns a Lean file that states these separation verdicts about this contradiction and proves them against theory/CategoricalTriz.lean, so Lean can check this one result.
alongcertificatecontradiction必填Export a function model that type-checks: 'dot' gives Graphviz DOT (each box a table: name and «role» in a role-coloured header, input ports left and output ports right with their carriers, open ports in italics; functions as edges between ports, harmful red, insufficient dashed, excessive bold; flows dotted blue; a legend of what occurs; render with `dot -Tsvg`), 'mermaid' gives a Mermaid flowchart that GitHub, GitLab, and many chat clients render without tools (Mermaid has no ports, so each edge names its out port, in port, and carrier), 'svg' gives a self-contained SVG picture with dot's conventions, laid out by ELK with orthogonal edges, for when Graphviz is not at hand (stdio server only: it needs the optional elkjs package; the hosted server answers ok:false with format-unavailable), 'hypergraph' gives an open hypergraph (ports as carrier-typed vertices, boxes and functions as hyperedges, unwired ports as the interface), 'lean' gives a certificate: a Lean file that encodes the model as finite data and states the kernel's verdicts about it (typing, each harm-loop witness cycle, and the separation verdicts of embedded contradictions), each proved against theory/CategoricalTriz.lean, so Lean can check this one model's verdicts (`certifies` lists them; nothing is extracted). A model that fails the type-check is not exported (ok:false with the errors).
model必填format必填Apply one typed model transformation and return the new model. Principle constructions: segment (1: divide a box into parts whose ports partition its ports), take_out (2: separate the ports touching a harmful or excessive function, or isolate the part carrying all useful functions), merge (5: collapse adjacent or identical boxes into one; boxes consecutive on a declared flow are adjacent), standby (11: add an unwired typed absorber for a box's functions), reverse (13: swap a function's performer and object), rerate (16: rate a useful function insufficient or excessive; 23: change the level of a function on a cycle), retarget (22: a harmful function's source feeds a useful function), feedback (23: add a function that closes a loop), interpose (24: route a function through a new mediator box), cheap_copy (26, 27: replace a box by a cheaper copy with the same ports). Also trim (perform a typed-feasible trim, re-attaching each kept function to an absorber; rule B is Principle 25, one absorber for everything is Principle 6) and rewrite (delete and add boxes and wires; no remaining wire may touch a deleted box). Every result type-checks or the call fails closed with ok:false. When the segmented box declares behaviour, segment (and take_out) reports behaviourallyIndependent: whether the box's relation is the product of its projections onto the parts; if so each part gets its projection, else no part gets behaviour and each coupled part is named with a witness: two rows whose mix is not a row. It also suggests the finest partition of the box's ports over which its relation is a product (behavior.finest: parts; cut, the suggested blocks the given parts cut, empty iff the split holds; splitsFurther, when nothing is cut, the parts that hold several blocks; decided:false past the cap). interpose's mediator may declare behavior (rows, or 'identity'). A transformation is a structural move, not evidence that it solves the problem: model the result and compare it with triz_function
model必填transformation必填Double-pushout rewriting with rules as data. A rule is a span L ← K → R of patterns over the function-model schema (boxes with ports typed by carrier variables, and wires); pass it as `rule`, or name a built-in evolution-line rule with `rule_id`: 'mono-bi' (transition to supersystem, mono → bi; apply again for poly), 'feedback' (increasing controllability, self-adjusting with feedback; bind its carrier variable 's' with `carriers`), or 'working-field' (changing the working field: the matched function re-made on another carrier; bind 'd' with `carriers` to a carrier other than the matched one; the result's fieldChanges records both carriers' layer and dimension). Each built-in rule cites the evolution-trends.md line it encodes. `rule_id` 'uneven-development' is a detector, not a rewrite, and takes only the model: the lagging subsystem, a box of the largest harm-loop region that is also on a binding feasibility dimension or limits a deliverable (feasibility finds it unprovidable, or it performs an insufficient function on a product); verdict lagging, none, or undecided (no harm loop, or feasibility undecided). Without `match`: lists every injective match of L (seed it with `at`), each verified as a typed homomorphism and marked applicable when the no-identification and no-dangling conditions hold (a deleted box may not lie on a declared flow) and the rule's `distinct` carrier variables bind different carriers; decided:false if the step budget runs out, complete:false past `limit`. A rule's `forbid` holds negative application conditions (Habel–Pennemann): each pattern extends `left` by id, and a match that extends to an occurrence of one — including any elements the pattern adds — is not applicable; a condition its own step budget cannot decide also refuses the application. With `match` (a listed match, or your own mapping): checks the match, these conditions, and that a kept box keeps the ports its declared rows name (every port for behavior and transition; the named
atidsrulelimitmatchmodel必填rule_idcarriersmax_stepsCompose declared box behaviour (carrier `values`, box `behavior` rows) into the model's external relation: boundary inputs (unwired input ports) to deliverables (product input ports fed by a non-harmful function). The default upstream scope composes boxes that can reach a deliverable and explicitly assumes omitted boxes accept everything; scope whole composes every box, including downstream and disconnected constraints. full_relation returns all rows within the search cap. Feedback loops compose by the relational trace, so every consistent steady state counts, and the steady states are listed. `factorisations` lists each composed box whose relation is the product of its projections onto two or more groups of ports, with the finest groups, in box order (decided:false past a per-box cap): segment it into them, or unions of them, and each part keeps its projection. The hint describes the declared rows, not a physical split, and changes no verdict. This is steady-state semantics, not dynamics. With `compare_to`, decide whether the model (a concept, e.g. a triz_transform result) has the baseline's input→deliverable relation; pass segment's or take_out's boxMap as `box_map`. `trim` is shorthand: perform the trim as triz_transform does and compare the result with the model. Verdict preserved; changed (a lost deliverable, or a counterexample input with the differing outputs and which relation contains which); or undecided (reason missing-behavior: the boxes that can reach a deliverable and declare no behaviour; reason no-steady-state: neither model has a steady state at any input, so equal empty relations say nothing). With `joint_boxes` and `weakest_spec`, select every composed box without behavior and compute one coupled residual over their combined ports. The joint rows are a single relation: independentSafe checks whether independently declaring their per-box projections stays inside the target, factorizes checks whether their product equals the joint relation, and a co
trimmodel必填scopeabsorbbox_maprow_costscompare_tomax_statescertificatejoint_boxesweakest_specfull_relation另有 1 個Rank candidate concepts that declare behaviour by the operating situations they admit (references/weakness.md). A situation is a valuation of the concepts' boundary inputs (unwired input ports, matched by box and port id) over their carriers' declared values: the declared input space is weakness.md's list of operating situations. A concept admits a situation when it has a steady state there and every deliverable output there is acceptable (`acceptable`: per deliverable port, or per carrier for all its deliverables, the values that are, listed or derived from a threshold `at_least`/`below` that is a declared level of the carrier; required for every deliverable; derived sets are listed under acceptable in the result). Give each operating condition the same box and port id in every concept (e.g. an environment box with an unwired input); readByOne lists the inputs only one concept reads. Ranked by set inclusion: weakest (admits everything any other admits), maximal, and every pair as equal, first-weaker, second-weaker, or incomparable, with a situation only one admits each way. The admitted count is a secondary figure: it depends on how finely carrier values are declared. `priors` gives a real prior over the situations (weakness.md: a real prior beats the uniform assumption): per situation input (box and port), or per carrier, a nonnegative weight per declared value (unlisted inputs and values count 1; 0 rules a value out); each concept carries the total prior mass of what it admits (weightedAdmitted, ranked in byWeight), and no inclusion ever moves under weights. `joint_prior` is the alternative for correlated operating conditions: an explicit complete joint table, a weight for every situation (zero allowed), with no independence assumption; it reports jointAdmittedWeight and jointAdmittedProbability per concept, ranked in byJointPrior, separately from inclusion and counts. Give priors or joint_prior, not both. Fails closed when the concepts deliver different ports, a
scopepriorsconcepts必填acceptable必填max_statescertificatejoint_priorBounded dynamics of a function model whose boxes declare `state`, `initial`, and `transition` rows (state, inputs) → (next state, outputs): each such box is a nondeterministic Mealy machine (a lens with a residual is one, with the residual as state); boxes with `behavior` are stateless. Boxes compose synchronously along the wiring: wires are instantaneous, memory lives only in declared state, and a loop through stateless boxes resolves within a step as in triz_behavior. From the initial states, over the boundary inputs you allow at each time (default: every value), every run is explored breadth first up to `horizon` steps; the result lists the reachable states, the fixed points among them, and the runs that block (a state with no row for its inputs). `unsafe` decides escalation: reachable (with a shortest trace), unreachable (the reachable set stopped growing, so at no horizon), or unreachable-within-horizon. `safe` decides invariance: violated (shortest trace), invariant, or invariant-within-horizon. Without `inputs` the configurations are finite, so each verdict also carries `unbounded`, decided at every horizon by continuing the search past the horizon within the same state cap: reachable or violated (with the time and, past the horizon, a shortest trace), unreachable or invariant (with completeAfter), or undecided (cap-exceeded past the horizon, or blocked); the bounded verdict beside it is unchanged. A blocked state meets a target by its state conditions; a port condition there leaves the verdict undecided (reason blocked), never safe. `separation` takes two to four demands, each a target set with a time window, and decides whether one run visits each within its window (separation in time along a trajectory, Principle 15): realizable with a witness trace, unrealizable (a demand never met, or no single run meets them all), or undecided (a blocked run might meet them all). Without `inputs`, `loops` classifies the closed components (no step leaves them) of the rea
safemodel必填inputsunsafehorizoninitialmax_statesseparationcertificateMonotone co-design feasibility (Censi 2015) from declared box `feasibility` rows: each row provides a level per output port against the levels it requires per input port and an operating cost, read monotonically (providing less never needs more; more resources never hurt). The product boxes' rows are the demand. An output port feeding several functions meets the largest of their demands on an intensive carrier (the default: one shared level) and their sum on a carrier declared `quantity: extensive`. Composes the rows along non-harmful functions, including feedback loops, by Kleene's ascent from nothing demanded to the least fixpoint, and returns the minimal resource vectors (fixed costs of every box plus the chosen rows' operating costs), each with its rows and demanded levels. Verdict against the model's budget: feasible; infeasible (reason over-budget, with the binding dimensions every minimal vector exceeds, or unprovidable, naming the port no row can serve); or undecided (missing-feasibility, no-budget, unbudgeted). With `trim` and `absorb` (as triz_behavior takes them), apply the trim and decide the trimmed model; the baseline is solved only to report each absorber's added resources. When carriers declare `levels` (thresholds reading amounts as declared values), `levels` reports each feasibility row, of a box that also declares behaviour, whose named amounts read as values no matching behaviour row gives (value-mismatch) or at inputs the behaviour rules out (no-behavior-row). Fails closed on ill-typed or dominated rows, a requirement no non-harmful function supplies, an extensive input fed by several functions (extensive-fan-in: model a merge box), and past the caps. No polynomial bound is claimed. The verdict holds for the rows as declared; the absorber's new harms are not modelled.
trimmodel必填absorbmax_antichainmax_iterationsCheck that a coarse function model (few boxes, e.g. with declared behaviour) is an abstraction of a detailed one of the same system (many boxes, e.g. with costs and feasibility) under a typed map: detailed box → coarse box (several may share one; a box left out is outside the abstraction), per box detailed port → coarse port (default: the same id and side), detailed carrier → coarse carrier (default: the same id). A function between two mapped ports is mapped; one between unmapped ports of boxes with the same image is hidden inside that coarse box; one between boxes with different images and an unmapped port is forgotten. Four checks: total (every mapped port's carrier has an image, and every mapped function has an image coarse function with the mapped endpoints, the mapped carrier, and the same polarity class: negative = harmful or excessive, or not), typed (each mapped port lands on a port of the same side whose carrier is its carrier's image, of the same layer; typed_map), wires (every coarse function is the image of a mapped detailed function of its class), harm loops (every coarse harm loop is the image of a detailed one: each harmful or excessive coarse function on it has such a preimage whose object reaches its performer along mapped and hidden functions; cycle_map, with the detailed cycle as witness). Verdict abstraction or not-an-abstraction with the failing checks. Also reports the functions hidden, forgotten, and left out (harms listed apart), the detailed harm loops the coarse model hides or loses, whether reachability among mapped boxes passes to the coarse model (reach_map, when nothing is forgotten), and, where a coarse box with behaviour has one preimage box with feasibility, whether that box's feasibility amounts read through the coarse carriers' levels fall in the coarse behaviour. When either model declares flows, each detailed flow's runs inside the mapped boxes are sent through the map like a merge and matched step by step against the coarse flo
map必填coarse必填detailed必填System operator (9 windows) over function models: for past, present, and future, the subsystem view (restriction to the boxes you name, with crossing functions as its boundary), the system view, and the supersystem view (the tool and mediator boxes, or the boxes you list, collapsed into one black box; hidden harmful functions are listed). Each view reports its boxes, function counts, and harm loops. Present is required. Past and future are snapshots with stable box ids, or transitions: triz_transform operations applied in order (past_to_present needs past and must reach present; present_to_future must reach future if given, or derives it). A transition that fails or does not reach its snapshot fails closed. Each transition is reported as one net rewrite step, its part inside the subsystem (which takes the earlier subsystem view to the later one), whether it stays within the subsystem, and the boundary functions it cuts and adds. When the snapshots declare behaviour or feasibility, each time's system view carries its verdicts (system.verdicts) and each change between times says how they move (changes[].verdicts): behaviour compared as triz_behavior compare_to does, weakness ranked with `acceptable`, and feasibility, changed only when both sides are decided; a failure there never fails the grid. When the snapshots declare flows, the verdicts carry each flow's triz_flow candidates, and each change lists the flows added, removed, and re-routed and the candidates each flow gains or loses; a transition must reach the snapshot's flows too, and flowsChanged lists the flows it changes. Missing windows are reported as prompts.
pastfuturesystempresent必填subsystem必填acceptabletransitionsReturn the domain-neutral TRIZ lookup regressions and cross-domain reasoning cases.
無需輸入參數。
Distinguish a declared subsystem summary from one checked against the complete inner steady-state relation and a single declared resource mode. Verification checks exact behavior over explicit assumptions, nonblocking, levels, demands and budgets; missing data or unsupported modes are undecided. Resource/behavior coupling remains a declared empirical assertion. Caller-supplied checked status is never trusted.
box必填mode必填model必填contract必填max_statesCheck nonblocking and acceptable outputs over required operating situations under an explicit scope. Equality of two partial relations does not establish adequacy.
model必填scopeacceptable必填max_statesrequired_inputsVerify or search a bijection preserving wiring and declared semantic annotations; search continues past incompatible automorphisms and returns undecided on its global budget.
source必填target必填mappingprofilemax_stepsCompose two WHOLE models and check exact equality or directional inclusion under explicit boundary and deliverable value maps. Complete relations are checked; no physical transfer is inferred.
coarse必填inputs必填outputs必填detailed必填max_statesCompose a stateless subsystem into an exact finite boundary relation with an explicit port map, fixed cost, and hidden-harm list. Empty relations are reported without inventing unknown behavior.
idboxes必填model必填max_statesEvaluate named complete implementations against one whole-model behavior, adequacy, declared-harm and resource contract. Never splice behavior and cost from different modes; provenance remains declared.
contract必填max_workmax_statesalternatives必填Enumerate all compatible absorber endpoints and complete assignments under one finite contract and a shared work budget. Separate per-function successes do not establish joint sufficiency.
trim必填model必填contract必填max_workmax_statesimplementation必填Search the Cartesian product of finite behavior/resource alternatives for several stateless holes on fixed wiring. Each complete tuple meets one shared contract; capped search is undecided, impossibility is only within this declared library.
holes必填model必填contract必填max_workmax_statesimplementation必填Decide exact finite global compatibility of allowed tuples on overlapping variable contexts, with a witness or complete empty join. Pairwise projection compatibility alone is insufficient; no cohomology is computed.
regions必填max_workvariables必填Compile a finite discrete queue with explicit arrivals, service/storage capacity, schedule and units, then check overflow through existing dynamics. All declared arrival combinations within the schedule are considered.
arrivals必填max_workschedule必填time_unit必填quantity_unit必填initial_backlog必填service_capacity必填storage_capacity必填Check declared consumptive versus shared-level supply constraints for explicit units. Consumptive branches sum; shared intensive requirements use max. No physical law is inferred from labels.
unit必填inputs必填outputs必填max_workoperation必填allow_lossquantity_kind必填Validate a named rule subset and establish termination when every successful application strictly decreases lexicographic box/wire counts. No global confluence or critical-pair completeness is inferred.
rules必填Replay two named structural rewrites in both orders and check whether those occurrences commute. Interference does not prove nonconfluence.
first必填model必填second必填Return an applied trim as explicit deletion/gluing data with its declared absorbers, interface, and checked replay. No Kan-extension claim is made.
trim必填model必填absorbLocal-only import of supplied BOM, OpenAPI, Quint, Lean or Julia inputs. Prefer modelingtoolkit-json and agents-json exports from instantiated Julia models; raw julia is a partial static fallback. Does not fetch references, execute source or load checkpoints. Returns a draft interaction table and model with embedded unconfirmed provenance; review all ratings and assumptions before analysis. Source-code outlines are partial syntactic references, not verified causal or finite behavior models.
format必填source必填Local-only explicit analyst confirmation of an imported model. Edit the draft first, then confirm every pending id exactly once with decision confirm and optional note. Source locations remain embedded; review asserts the supplied ratings and assumptions, without proving source correctness or physical truth.
model必填decisions必填Optional project extension: analyse an OTSM Network of Problems (contradiction graph) and its verifier-backed purpose gates. A node may carry a PhysicalContradiction; each is checked by separationCheck (irreducible, separable, no-contradiction, or invalid, which fails closed for that node), and the core-conflict ranking breaks ties on dissolves in favour of irreducible nodes and flags a top node that already separates. Requires a project graph via TRIZ_GRAPH; not part of the neutral skill core.
無需輸入參數。
Optional project extension: inspect the invariant, purpose gate, and separation check of one contradiction node of the project graph.
id必填已滿足適用檢查項的 90%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
git clone https://github.com/sv/triz-skill.gitln -s "$PWD/triz-skill/skills/triz-innovation" ~/.claude/skills/triz-innovationnpx -y triz-mcp # stdio server, no checkout neededpnpm installpnpm start # stdio serverpnpm test # deterministic lookup regressionspnpm typecheck{ "mcpServers": { "triz": { "type": "stdio", "command": "npx", "args": ["tsx", "/path/to/triz-skill/src/server.ts"], "env": { "TRIZ_DATA_DIR": "/path/to/triz-skill/skills/triz-innovation/data" } } }}triz list # one line per tool; --json for a JSON arraytriz schema triz_behavior # the description and input JSON Schema, as JSONecho '{"improving": 9, "worsening": 14}' | triz call triz_matrix # or: triz call <tool> args.jsonpnpm schema # regenerate the JSON Schema from src/act.tspnpm lean:setup # theory/.lake/packages: cloned from another checkout, or fetched(cd theory && lake build --wfail) # the same check Lean CI runs: no `sorry` shipsTRIZ_GRAPH=examples/problem-graph.json \TRIZ_REGISTRY=examples/triz-registry.json \npx tsx scripts/graph-report.mjs report.mdpnpm evals -- --suite no-recall --limit 40 # matrix-recall citation benchmarkpnpm evals -- --suite reasoning # synthetic cross-domain cases, LLM judgepnpm evals -- --suite published --variant solver # blinded MATRIZ cases, structured variantpnpm evals -- --dry-run --suite published # plan a run: no key, no networknpx tsx scripts/import-matrix.mjs <url|file.csv|file.json> [--format csv|json]