The nuiitivet-app skill¶
nuiitivet-app is an AI skill — a bundle of instructions you install into
your assistant so it writes idiomatic Nuiitivet code. It is the authoring leg of
the AI pair-programming loop.
Why it exists¶
Nuiitivet's surface resembles Flutter (widgets), SwiftUI/Compose (modifiers),
and Rx/WPF (Observable), so an assistant readily writes valid Python that
follows those other frameworks' habits — setState, SizedBox/Padding
wrappers, subscribe() to push values — instead of Nuiitivet's idioms. The skill
front-loads the correct idioms and ships a linter that flags the leaks.
Install¶
The skill follows the Agent Skills open standard (a SKILL.md plus its
references and linter script), so the same directory works across assistants —
only the destination differs. Three ways to install it:
Bundled with the package¶
The pip package carries the skills, so what this installs always matches the
nuiitivet version you have — re-run it after upgrading nuiitivet. Omit the
skill name to install both skills. The defaults target Claude's skills
directories; point --dest at any other assistant's.
# project-local (default) — for Claude, .claude/skills/
python -m nuiitivet.skills install nuiitivet-app
# or personal (available in every project) — for Claude, ~/.claude/skills/
python -m nuiitivet.skills install --user nuiitivet-app
# or another assistant's skills directory — e.g. GitHub Copilot
python -m nuiitivet.skills install --dest .github/skills nuiitivet-app
Copy by hand¶
The skill lives in the Nuiitivet repository at
skills/nuiitivet-app/ — copy the directory
into your assistant's skills directory. The examples below use Claude's
(.claude/skills/); for another assistant only the destination changes, e.g.
.github/skills/ for GitHub Copilot:
# without a checkout
npx degit yuksblog/nuiitivet/skills/nuiitivet-app .claude/skills/nuiitivet-app
# from a checkout — project-local (checked in with your repo)
cp -r path/to/nuiitivet/skills/nuiitivet-app .claude/skills/nuiitivet-app
# or personal (available in every project)
cp -r path/to/nuiitivet/skills/nuiitivet-app ~/.claude/skills/nuiitivet-app
Claude Code plugin¶
One command pair installs both skills and wires up the dev bridge MCP server:
What it front-loads¶
SKILL.md opens with seven core rules the assistant must not violate:
- One import root —
import nuiitivet.material as nv; reach every symbol throughnv. - UI components subclass
nv.ComposableWidgetand definebuild(self)— noStatelessWidget/StatefulWidget, nocreateState/initState. - State is
Observable, and the UI binds to it — never push — nosetState, nosubscribe()just to shove a value into a widget. - Size, spacing, and alignment are widget parameters, not wrapper widgets
— no
Padding/SizedBox/EdgeInsets. (Containerdoes exist as a plain layout box; background/border/clipping are modifiers, not its job.) - Decoration and behavior attach via
.modifier(...)chained with|— do not wrap a widget to decorate it. - The app root is a factory, not an instance — pass
App(Window(content=build_root)), neverApp(Window(content=build_root())); per-tree init goes in the factory or__init__, notmain(). - The one-line mental model — logic → UI is declarative (
Observablebinding); UI → logic is imperative (event handlers).
It links to topical references (layout, state, navigation, anti-patterns) the
assistant reads on demand. Running the app under hot reload and driving it while
you debug is the companion nuiitivet-debug skill's
job, not this one.
The idioms linter¶
The skill ships a linter that flags foreign-framework patterns and points at the correct Nuiitivet idiom (warnings only — it does not edit code):
The skill instructs the assistant to run it as the final step of any edit and resolve every finding by hand.
See also¶
- AI pair-programming — where this skill fits the edit → see → act loop.
- The
nuiitivet-debugskill — the companion skill that runs, hot-reloads, and drives the app you write with this one. - Hot Reload — the factory contract behind core rule 6.