utopia_cli 0.2.0 copy "utopia_cli: ^0.2.0" to clipboard
utopia_cli: ^0.2.0 copied to clipboard

A CLI for scaffolding Flutter projects built on utopia_arch and utopia_hooks, with optional Claude Code skills and JSON-first agent workflows.

Utopia CLI

Utopia CLI 👾 #

A command-line scaffolder for Flutter projects built on utopia_arch + utopia_hooks, with optional Claude Code skills and JSON-first workflows for Codex, shell, and CI agents.

Install #

dart pub global activate utopia_cli

Make sure $HOME/.pub-cache/bin is on your PATH. Verify:

utopia --version

Quick start #

utopia create flutter_app my_app --org io.utopiasoft
cd my_app
dart run build_runner build --delete-conflicting-outputs
flutter run

You now have a runnable Flutter app with a sample Screen/State/View feature and Claude Code skills pre-registered. Codex and shell agents can use the CLI directly; run utopia init agents in existing projects to write a provider-neutral AGENTS.md.

Commands #

Command Status What it does
utopia create flutter_app <name> Scaffold a Utopia Flutter app.
utopia create flutter_package <name> Scaffold a Utopia Flutter package.
utopia add screen <name> Scaffold a Screen/State/View triad in an existing project.
utopia init agents Write provider-neutral AGENTS.md instructions for Codex, shell, and CI agents.
utopia init skills Register the skills marketplace in an existing project.
utopia describe Emit project structure (screens, routes, states, services, deps) as JSON for agents.
utopia hooks analyze Fast utopia_hooks convention analysis for changed files, one file, or the whole project.
utopia doctor Repo-wide audit (setup, conventions, artifacts, imports, structure) with tag-filtered checks.
utopia mcp Boot MCP server exposing describe, describe_routes, doctor, and hooks analysis for AI agents.
utopia bump Bump all utopia_* deps in pubspec.yaml to latest pub.dev versions.
utopia update Self-update from pub.dev.
utopia --version Print the CLI version.

utopia add screen #

Scaffolds three files at lib/screen/<name>/:

lib/screen/<name>/
├── <name>_screen.dart           # HookWidget — wires state into view
├── state/<name>_state.dart      # value class + use<Name>State() hook
└── view/<name>_view.dart        # pure StatelessWidget
utopia add screen <name> [options]

Options:
  -r, --route             Route path served by this screen (default: /<name>)
  -d, --output-directory  Parent directory (default: lib/screen)
      --json              Emit a machine-readable summary to stdout

After scaffolding, the CLI prints a snippet you can paste into lib/app/app_routing.dart to register the new route.

The brick is vendored from Utopia-USS/utopia-mason's screen brick and shipped in-repo for atomic versioning.

utopia hooks analyze #

Fast convention analysis for utopia_hooks projects. This is the canonical CLI implementation of the Screen/State/View quality rules that AI-agent adapters and CI can share.

utopia hooks analyze [paths...] [options]

Options:
  -C, --project-root  Project (or workspace) root. Defaults to CWD.
  -f, --file          File(s) to analyze. Repeat or comma-separate. Positional paths are also accepted.
      --changed       Analyze changed git files. Default when no target is supplied.
      --all           Analyze every Dart file under the project root.
      --format        human | json. Default: human.
  -o, --output        JSON output file. "-" writes to stdout.
      --fail-on       error | warning | info | never. Default: warning.

Use utopia hooks analyze --hook-json from agent hook adapters, utopia hooks analyze --file <path> for manual one-file validation, utopia hooks analyze lib/a.dart lib/b.dart for batch path validation, utopia hooks analyze for changed-file validation, and utopia hooks analyze --all --format=json for CI-style scans.

utopia init agents #

Writes AGENTS.md into the current directory with the canonical CLI workflow for provider-neutral agents: inspect with describe, generate with add screen --json, and validate with doctor.

This command does not write .claude/; Claude Code skills are configured separately with utopia init skills.

utopia init agents [options]

Options:
  -d, --output-directory  Project root (default: ".")
  -f, --force             Overwrite an existing AGENTS.md

utopia init skills #

Writes .claude/settings.json + .claude/README.md into the current directory, pre-registering the Utopia-USS/utopia-flutter-skills marketplace and enabling the utopia-hooks plugin by default.

Intended for projects created with --no-skills, or any existing Flutter project that wants to opt in.

utopia init skills [options]

Options:
  -d, --output-directory  Project root (default: ".")
  -f, --force             Overwrite an existing .claude/settings.json

utopia describe #

Emit project structure as JSON. Output schema is versioned (schema_version: 1) and documented in doc/describe_schema.md; downstream tooling (skills, MCP) pins to it.

utopia describe [options]

Options:
  -C, --project-root  Project (or workspace) root. Defaults to CWD.
  -o, --output        Output file. Defaults to `-` (stdout).
      --[no-]pretty   Pretty-print JSON. Default on.
      --routes-only   Only the routes view (useful for piping).

Detects monorepo workspaces (Melos), screen kinds (routed / sheet / dialog / non_routed_page / subscreen_fragment / bare_screen / auto_route_page), routing strategy, global states, services, and foreign-framework artefacts. Discovery notes flag unresolved references rather than silently skipping them.

utopia doctor #

Repo-wide audit. Complements the per-file quality_check.sh PostToolUse hook in the utopia-hooks skill - that fires on every edit; doctor catches drift across the whole project on demand and in CI.

utopia doctor [options]

Options:
  -C, --project-root  Project (or workspace) root. Defaults to CWD.
  -o, --output        Output file. Defaults to `-` (stdout).
      --check=...     Run only these tags / sub-tags / rule IDs.
      --skip=...      Exclude these tags / sub-tags / rule IDs.
  -f, --file          Run shared per-file hooks analysis for these Dart files.
      --strict        Bypass activation gates; run all checks.
      --[no-]pretty   Pretty-print JSON. Default on.
      --human         Also print a human-readable summary to stderr.
      --fail-on       error | warning | info | never. Default: error.

Tag taxonomy (used by --check / --skip):

Tag Covers
setup pubspec coherence, utopia_lints extension, .claude/ settings, plugin enablement
conventions per-file utopia_hooks rules scanned repo-wide
artifacts foreign framework patterns. Sub-tags: artifacts:bloc, artifacts:riverpod, artifacts:provider, artifacts:mobx, artifacts:getx, artifacts:stateful
imports banned direct imports (package:flutter_hooks/)
structure cross-file invariants (orphan state files, etc.)

Default behaviour: artifacts:bloc runs only if flutter_bloc is in the pubspec; same for :riverpod, :provider, :mobx, :getx. setup and conventions run on any project that declares utopia_arch or utopia_hooks. --strict overrides all gates. Use doctor --file <paths> -o - when an editor hook or agent wants the same per-file rule set as utopia hooks analyze under the doctor JSON contract.

Each finding carries rule_id, severity, message, an optional file/line location, and package - the name of the package the finding belongs to (matching describe's packages[].name; null for project-root-level findings), so monorepo agents don't have to infer the package from path prefixes. All file paths in JSON output are project-root-relative and always use forward slashes, on Windows too.

utopia mcp - MCP server for AI agents #

Exposes operational tools as a Model Context Protocol server over stdio. Scoped intentionally: only tools that earn their keep on the MCP-vs-Bash test - i.e. called multiple times per session with structured output the agent reasons over.

utopia mcp

Tools registered:

Tool Wraps Why MCP vs Bash
describe utopia describe Structured JSON output, called repeatedly across a refactor session
describe_routes utopia describe --routes-only Same; subset for cheap path enumeration
doctor utopia doctor Structured findings array agents reason over ({file, line, rule_id, severity})
analyze_hooks_files utopia hooks analyze --file Per-edit utopia_hooks analysis gate with structured findings
analyze_hooks_changed utopia hooks analyze Changed-file analysis gate for Codex/agent validation before final response

Generators (utopia create *, utopia add screen, utopia init skills) are not exposed via MCP - they're one-shot, return only "done"/"error", and gain nothing from the MCP transport. Agents should invoke them via Bash.

Agent workflow without Claude Code #

Codex and shell/CI agents do not need the Claude Code skills plugin. Use the deterministic CLI surfaces directly:

utopia describe -o -
utopia add screen profile --json
utopia doctor --fail-on=warning --human -o -

Keep JSON on stdout for machine parsing. Human summaries, when enabled, go to stderr.

Example: register in your Claude Code config:

{
  "mcpServers": {
    "utopia": { "command": "utopia", "args": ["mcp"] }
  }
}

utopia create flutter_app #

utopia create flutter_app <name> [options]

Options:
  -o, --org              Org in reverse-domain notation
                         (default: io.utopiasoft)
  -p, --platforms        Comma-separated Flutter platforms
                         (default: android,ios)
  -d, --output-directory Where to create the project (default: .)
      --application-id   iOS bundle / Android app id
                         (default: <org>.<name>)
      --description      Project description
                         (default: "A Utopia Flutter project.")
      --[no-]skills      Generate .claude/ skills config (default: on)
      --[no-]pub-get     Run `flutter pub get` after generation
      --[no-]git         Initialize a git repo

utopia update #

Checks pub.dev for a newer release and runs dart pub global activate utopia_cli <latest> when one is available.

What you get from flutter_app #

my_app/
├── .claude/                   # Claude Code skills pre-registered
│   ├── settings.json
│   └── README.md
├── lib/
│   ├── app/                   # routing, theming, top-level providers
│   ├── common/                # shared widgets and constants
│   ├── screen/
│   │   ├── splash/
│   │   └── counter/           # sample Screen/State/View
│   │       ├── counter_screen.dart
│   │       ├── state/counter_state.dart
│   │       └── view/counter_view.dart
│   └── util/
├── DEVELOPMENT.md             # Screen/State/View overview
├── README.md
└── pubspec.yaml

The counter feature demonstrates the Utopia pattern in three small files — copy it as the starting point for your own screens.

.utopia.yaml #

The repository contains an experimental config loader, but released commands do not currently read .utopia.yaml. Prefer explicit flags for now; this surface is intentionally not documented as active until a command has tests proving it consumes the config.

Migrating from utopia_arch_cli #

The utopia_arch_cli executable (versions 0.1.0-dev.*) has been renamed to utopia. The old executable still works in 0.2.0 and prints a deprecation notice; it will be removed in 0.3.0.

Old New
utopia_arch_cli --name my_app --org io.utopiasoft utopia create flutter_app my_app --org io.utopiasoft
dart pub global activate utopia_arch_cli dart pub global activate utopia_cli

Generated project structure is unchanged apart from the new sample counter feature and .claude/ directory.

Contributing #

See CONTRIBUTING.md. The bricks ship in-repo under bricks/ — when you edit a brick, the next dart run bin/utopia.dart … picks it up immediately (no mason get required).

License #

BSD 2-Clause. See LICENSE.

2
likes
140
points
151
downloads

Documentation

API reference

Publisher

verified publisherutopiasoft.io

Weekly Downloads

A CLI for scaffolding Flutter projects built on utopia_arch and utopia_hooks, with optional Claude Code skills and JSON-first agent workflows.

Repository (GitHub)
View/report issues
Contributing

Topics

#cli #flutter #scaffolding #utopia #mcp

License

BSD-2-Clause (license)

Dependencies

args, dart_mcp, mason, mason_logger, meta, path, pub_updater, stream_channel, yaml

More

Packages that depend on utopia_cli