CLI Reference

The manzano CLI 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:

ArgumentDescription
<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:

ArgumentDescription
[project_dir]Path to the project directory (default: current directory)

Flags:

FlagDefaultEnv VariableDescription
--db <path>in-memoryGROVE_DBPath to a SQLite database file for persistent local state
-p, --port <N>3000GROVE_PORTPort the dev server listens on
--bind <addr>127.0.0.1GROVE_BINDAddress 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:

URLDescription
localhost:PORTDev console
main.localhost:PORTYour 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:

ArgumentDescription
[project_dir]Path to the project directory (default: current directory)

Flags:

FlagDescription
--jsonOutput results as JSON (useful for CI pipelines)
--run_agentsRun 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:

ArgumentDescription
[project_dir]Path to the project directory (default: current directory)

Flags:

FlagDescription
--yes, -ySkip the first-deploy confirmation prompt. Required in CI.
--new-projectForce 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.
--localDeploy to the local filesystem instead of Manzano Cloud
--dry_runValidate 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:

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:

FlagDefaultDescription
--port <N>3000Port of the dev server to connect to

todo list

Lists tasks, optionally filtered by status.

manzano todo list [--status <S>]
FlagDescription
--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>
ArgumentDescription
<id>Task ID to show (required)

Examples:

manzano todo show task-42

todo claim

Claims a task for yourself.

manzano todo claim <id>
ArgumentDescription
<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 / ArgumentDescription
<id>Task ID to respond to (required)
--message <MSG>Response message (required)
--completeMark the task as complete
--rejectReject 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:

FlagDescription
--help, -hShow help for the command
--version, -VShow the manzano CLI version

See Also