CLI Reference
The
manzanoCLI is the primary tool for creating, developing, testing, and deploying Grove applications. It provides commands for scaffolding new projects, running a local development server, executing tests, deploying to Manzano Cloud, and managing console tasks.
Prerequisites: The manzano CLI installed on your PATH.
What you'll learn: Every CLI command, its flags, and usage examples.
General Usage
manzano <command> [options]
Commands
init
Creates a new Grove project. Scaffolds the directory structure with a grove.toml, an initial module with a complete record/events/actions body, and developer-assistant context files (AGENTS.md, CLAUDE.md). After the project is created, init prints a concise Grove cheat sheet to stdout so you can start editing right away.
Usage:
manzano init <name>
Arguments:
| Argument | Description |
|---|---|
<name> | Name of the project to create (required) |
What it creates:
<name>/
grove.toml # project_id = "<name>"
modules/
<name>/
module.grove # starter record + events + actions
AGENTS.md # agent-assistant context
CLAUDE.md # Claude-specific context (symlink-compatible)
The starter module.grove ships with a working root record (including its kind declaration), events, and actions — enough to run manzano dev and see the project serve traffic without edits.
Examples:
# Create a new project called "myapp"
manzano init myapp
# Create and immediately enter the project directory
manzano init myapp && cd myapp
dev
Starts a local development server. The dev console is available at localhost:PORT, and your app is served at main.localhost:PORT (if an apps/main/ directory exists in your project).
Usage:
manzano dev [project_dir]
Arguments:
| Argument | Description |
|---|---|
[project_dir] | Path to the project directory (default: current directory) |
Flags:
| Flag | Default | Env Variable | Description |
|---|---|---|---|
--db <path> | in-memory | GROVE_DB | Path to a SQLite database file for persistent local state |
-p, --port <N> | 3000 | GROVE_PORT | Port the dev server listens on |
--bind <addr> | 127.0.0.1 | GROVE_BIND | Address the dev server binds to |
Examples:
# Start dev server in the current directory
manzano dev
# Start dev server for a specific project
manzano dev ./myapp
# Use a persistent SQLite database and custom port
manzano dev --db ./data/local.db --port 8080
# Bind to all interfaces (useful in containers)
manzano dev --bind 0.0.0.0
# Use environment variables
GROVE_PORT=4000 GROVE_DB=./dev.db manzano dev
Dev server URLs:
| URL | Description |
|---|---|
localhost:PORT | Dev console |
main.localhost:PORT | Your application (requires apps/main/ in the project) |
test
Discovers and runs all *_test.grove files across every module in the project.
Usage:
manzano test [project_dir]
Arguments:
| Argument | Description |
|---|---|
[project_dir] | Path to the project directory (default: current directory) |
Flags:
| Flag | Description |
|---|---|
--json | Output results as JSON (useful for CI pipelines) |
--run_agents | Run agent tests (requires ANTHROPIC_API_KEY environment variable) |
Examples:
# Run all tests in the current project
manzano test
# Run tests for a specific project directory
manzano test ./myapp
# Run tests with JSON output for CI
manzano test --json
# Run tests including agent tests
ANTHROPIC_API_KEY=sk-ant-... manzano test --run_agents
# Run agent tests with JSON output
manzano test --json --run_agents
deploy
Bundles and deploys a Grove project to Manzano Cloud.
Usage:
manzano deploy [project_dir]
Arguments:
| Argument | Description |
|---|---|
[project_dir] | Path to the project directory (default: current directory) |
Flags:
| Flag | Description |
|---|---|
--yes, -y | Skip the first-deploy confirmation prompt. Required in CI. |
--new-project | Force the create-new-project flow even if a project_id is already set in grove.toml. Recovery path when a project was deleted server-side. |
--name <NAME> | Override the project name shown in the deploy dashboard. Defaults to the project directory name. |
--local | Deploy to the local filesystem instead of Manzano Cloud |
--dry_run | Validate the bundle without deploying |
--tmp_dir <path> | Directory for temporary build artifacts |
First deploy vs. subsequent deploys. On the first deploy, manzano deploy detects that grove.toml has no project_id and prompts:
Create new project 'myapp'? [y/N]
Answering yes (or passing --yes) calls the platform to mint a fresh project ID of the form prj_<ksuid>, writes it back into grove.toml as project_id = "prj_..." (preserving any comments and formatting), and proceeds with the deploy. Every deploy after that uses the stored project_id; no prompt, no rewrite.
Use --new-project as a recovery path if the server-side project was deleted — it ignores the existing project_id and performs the create-new flow again.
What goes in the tarball. The deploy tarball contains:
grove.tomlmodules/**/*.groveapps/**/*(HTML templates, static assets, route handlers)policies.cedarat the project root, if present — enables per-project Cedar authorization on the cell runtime (see Authorization Hooks)
Examples:
# Deploy the current project interactively
manzano deploy
# Deploy in CI (skip the confirmation prompt)
manzano deploy --yes
# Recover after the server-side project was deleted
manzano deploy --new-project --name my-app
# Deploy a specific project directory
manzano deploy ./myapp
# Validate without deploying
manzano deploy --dry_run
# Deploy to local filesystem
manzano deploy --local
# Use a custom temp directory for build artifacts
manzano deploy --tmp_dir /tmp/grove-build
todo
Manage console tasks. Provides subcommands for listing, viewing, claiming, and responding to tasks.
Usage:
manzano todo [--port <N>] <subcommand>
Global Flags:
| Flag | Default | Description |
|---|---|---|
--port <N> | 3000 | Port of the dev server to connect to |
todo list
Lists tasks, optionally filtered by status.
manzano todo list [--status <S>]
| Flag | Description |
|---|---|
--status <S> | Filter tasks by status |
Examples:
# List all tasks
manzano todo list
# List only pending tasks
manzano todo list --status pending
todo show
Displays details of a specific task.
manzano todo show <id>
| Argument | Description |
|---|---|
<id> | Task ID to show (required) |
Examples:
manzano todo show task-42
todo claim
Claims a task for yourself.
manzano todo claim <id>
| Argument | Description |
|---|---|
<id> | Task ID to claim (required) |
Examples:
manzano todo claim task-42
todo respond
Sends a response to a task.
manzano todo respond <id> --message <MSG> [--complete] [--reject]
| Flag / Argument | Description |
|---|---|
<id> | Task ID to respond to (required) |
--message <MSG> | Response message (required) |
--complete | Mark the task as complete |
--reject | Reject the task |
Examples:
# Respond to a task
manzano todo respond task-42 --message "Done, deployed to staging"
# Respond and mark complete
manzano todo respond task-42 --message "All tests passing" --complete
# Reject a task with a reason
manzano todo respond task-42 --message "Out of scope" --reject
# Connect to dev server on a custom port
manzano todo --port 8080 list
Global Flags
These flags are available on all commands:
| Flag | Description |
|---|---|
--help, -h | Show help for the command |
--version, -V | Show the manzano CLI version |
See Also
- Server -- running Grove as an HTTP server
- Database Backends -- connection string formats and backend details
- Configuration Reference --
grove.tomlsettings - Module Resolution -- how the CLI locates modules