Set up¶
Set up connects your coding agent to your running app. Once per project.
1. Install the dev extra¶
[dev] carries the dev bridge's MCP server.
2. Install the skills¶
The skills says what each of the three does for you. Install all three, by whichever route fits your agent:
That installs them into Claude's directory, .claude/skills/. The other
destinations:
# personal (available in every project) — for Claude, ~/.claude/skills/
python -m nuiitivet.skills install --user
# another agent's skills directory — e.g. GitHub Copilot
python -m nuiitivet.skills install --dest .github/skills
Re-run it after upgrading nuiitivet.
The plugin installs the three skills and registers the MCP server.
The skills live in the Nuiitivet repository under
skills/. From
a checkout, copy the three directories into your agent's skills
directory; the example is Claude's:
Without a checkout, one at a time:
3. Register the MCP server¶
Add python -m nuiitivet.dev mcp to your MCP host's server list. For Claude
Code that is .mcp.json at the project root:
The command is relative to where the host starts the server, the project
root for Claude Code. If your host starts elsewhere, give the venv's python
as an absolute path.
4. Pass a root factory to the window¶
import nuiitivet.material as nv
class Counter(nv.ComposableWidget):
def __init__(self) -> None:
super().__init__()
self.count = nv.Observable(0)
def build(self) -> nv.Widget:
return nv.Column(
padding=16,
children=[
nv.Text(self.count.map(lambda n: f"Count: {n}")),
nv.Button("increment", on_click=lambda: self._inc()),
],
)
def _inc(self) -> None:
self.count.value += 1
def build_root() -> nv.Widget:
return Counter()
def main() -> None:
nv.App(nv.Window(content=build_root)).run()
if __name__ == "__main__":
main()
Window takes the factory itself, build_root, not a call to it. With
Window(content=build_root()) edits stop applying to that window. The dev
runner warns about it.
5. Launch under the dev runner¶
A package module launches by name:
Arguments for your app go after a -- separator. Everything past it
becomes the app's sys.argv:
python app.py still runs the app as before.
6. Confirm the connection¶
Run python -m nuiitivet.dev status, or ask the agent to call status. It
prints the running app's window title. Check it is your app. A "no running
app" error means the app is not up under the dev runner.
Next Steps¶
- Hot Reload — what a save does to the running window, and what it does not restore.
- With a coding agent — the section overview.