Skip to content

First Project

Create or enter a repository, then run setup:

cd /path/to/project
greatminds setup --session myproject

setup creates editable project configuration under coordination/, runtime state under .greatminds/, and local agent configuration files. It does not overwrite an existing coordination/coord.yaml; edit that file when you want different tools, windows, or launch modes.

Agent tools and role mapping

List the installed tool capabilities at any time:

greatminds agent tools
greatminds agent tools --json

The packaged adapters support these tools:

Tool Use it for Setup requirement
claude Claude Code chat, loop, and driven roles. Install Claude Code, authenticate it for the OS user that runs the fleet, and keep the claude binary reachable from daemon shells.
codex OpenAI Codex chat and driven roles. Run codex login once for the machine account; optionally set GREATMINDS_CODEX_HOME when the login is not under ~/.codex.
cursor Cursor agent chat/loop panes and one-shot driven roles. Install Cursor CLI / cursor-agent, authenticate it for the OS user, and keep it on PATH. Greatminds runs cursor-agent through a systemd-run --user scope in cursor.slice by default; tune GREATMINDS_CURSOR_MEM_HIGH, GREATMINDS_CURSOR_MEM_MAX, GREATMINDS_CURSOR_CPU, or GREATMINDS_CURSOR_SLICE when needed.
cline Cline CLI chat/loop panes and one-shot driven roles. Install and configure Cline CLI for the OS user that runs the fleet.
gemini Gemini CLI chat/loop panes and one-shot driven roles. Install Gemini CLI, authenticate/configure it for the OS user, and keep gemini on PATH. Driven turns run with --skip-trust for unattended workspaces.
openhands OpenHands CLI chat panes and one-shot driven roles. Install the openhands command, run openhands or openhands login once to create machine settings, and configure its LLM provider before assigning driven roles. agent-canvas is a separate OpenHands UI launcher and is not the CLI entrypoint used by the adapter.

Window modes in coordination/coord.yaml:

Mode Meaning
chat A live tmux pane for an operator-facing conversation.
loop A resident watchdog pane that wakes on its own timer.
staged A tmux pane with the start command pre-typed; the operator starts it manually when needed.
driven No live pane; coordd starts one driven turn when work lands in the role's queue, inbox, or stand event stream. Claude and Codex use stateful drivers; Cursor, Cline, Gemini, and OpenHands use one-shot headless subprocess drivers.

Role-to-tool assignment lives in coordination/coord.yaml. The default template mixes Claude and Codex roles, but it is ordinary project config. Change tool: per role, then restart the daemon and launch session:

Role Default tool Default mode
ARCHITECT-PLANNER codex chat
MAINTAINER claude loop
LIVE-DEVELOPER claude staged
ARCHITECT-REVIEWER codex driven
DEVELOPER claude driven
UI-DEVELOPER claude driven
TECHNICAL-WRITER codex driven
TESTER claude driven
READER claude driven
EXPLORER codex driven
windows:
  - name: planner
    role: ARCHITECT-PLANNER
    tool: codex
    mode: chat
  - name: maintainer
    role: MAINTAINER
    tool: claude
    mode: loop
  - name: dev
    role: DEVELOPER
    tool: claude
    mode: driven
  - name: reviewer
    role: ARCHITECT-REVIEWER
    tool: codex
    mode: driven

mode: chat and mode: loop create live panes. mode: driven creates no agent pane; coordd starts one driven turn when queue, inbox, or stand events arrive.

Claude local settings

During setup, greatminds writes or extends .claude/settings.local.json. New files include the Stop hook, the canonical autoMode.allow entries from claude_settings.auto_mode.allow, and the canonical permissions.allow entries from the packaged schema under claude_settings.permissions.allow.

Those allow rules let unattended Claude roles perform the git operations they are authorized to run, such as reviewer commit, tag, push, merge, branch, checkout, and worktree commands. Without explicit allow rules, Claude Code can pause on an approval prompt that a driven or self-loop role cannot answer.

Project operators can add their own permissions.allow entries directly in .claude/settings.local.json. Re-running greatminds setup unions the schema defaults into the existing permission and auto-mode lists, deduplicates them, and preserves operator-added rules. For a valid existing file, setup leaves other top-level settings such as custom hooks untouched.

Claude marketplace plugins

During setup, greatminds installs curated Claude marketplace plugins for each Claude-hosted role from the packaged schema under plugins.claude_marketplace. For example, the shipped schema can assign plugins such as playwright, sentry, postman, or sourcegraph to the roles that use them.

The install step runs the equivalent of claude plugin install <name> for each plugin assigned to that role. It is idempotent: plugins already present in claude plugin list are preserved, failed installs are reported in the setup summary, and setup continues with the remaining plugins.

Setup resolves the claude binary from PATH first, then checks common npm install locations: ~/.local/bin/claude, ~/.npm-global/bin/claude, and /usr/local/bin/claude. This covers non-login shells, SSH launches, and daemon contexts where the interactive shell profile that adds npm binaries to PATH has not been loaded.

If setup reports claude binary not found in PATH or common locations, plugin installation is skipped for the affected roles and the plugin names are counted as failed. Add Claude Code to PATH, or install it with npm install -g @anthropic-ai/claude-code, then run greatminds setup again.

The setup summary separates marketplace plugin results into installed, pre-existing, dedupe-this-run, and failed. pre-existing means the plugin was already present before setup started; dedupe-this-run means another role installed it earlier in the same setup run. Failed installs include the plugin name in the summary, and setup also prints the first stderr line from the underlying claude plugin install command.

To add project-local Claude plugins, create role files under coordination/plugins.local/. Setup merges those files with the packaged defaults:

# coordination/plugins.local/tester.yaml
claude_marketplace: [playwright, sentry, postman, codspeed]

Keep empty lists for roles that should not receive marketplace plugins. Codex marketplace lists are currently empty by design; Codex roles use generated per-role profile sources plus the single machine Codex login instead of Claude marketplace plugin installs. See Codex Profiles for the generated layout and launch path.

After setup, verify the installed Claude plugins with:

claude plugin list

Project environment

.greatminds/PROJECT.env is the minimal place for machine-local project-specific values. It is gitignored, loaded before each agent starts, and passed to stand profiles as Ansible extra vars.

For a local smoke stand:

cat > .greatminds/PROJECT.env <<'EOF'
STAND_HOST=localhost
STAND_USER=violet
EOF

For a remote stand, make STAND_HOST an SSH config alias or comma-separated aliases, and set STAND_USER to the remote account whose PATH should be used by the stand playbook:

cat > .greatminds/PROJECT.env <<'EOF'
STAND_HOST=app-stand
STAND_USER=deploy
EOF

Add product-specific values there as well, such as service URLs, ports, database names, deploy paths, or feature flags. Reference them in coordination/PROJECT.md, MCP configs, skills, and stand profiles.

Minimal stand profile

A stand is the live environment that agents lease for deployed validation. The lease does not deploy by itself; coordd prepares the active lease by running an Ansible YAML profile from coordination/stand-profiles/.

Setup copies reference profiles:

  • smoke-only: reachability probe, useful first.
  • full-deploy: rsync and install pattern for backend-style deployment.
  • vite-dev: backend plus a Vite dev server for live UI iteration.

Setup also writes coordination/stand-profiles.yaml, the project-owned registry of allowed profile names. A lease selects a registry key:

greatminds stand lease --task <task-id> --profile full-deploy

The selected key is stored in .greatminds/.stand/state.yaml as active_lease.profile. The registry entry chooses the YAML file to run:

profiles:
  full-deploy:
    file: full-deploy.yaml
    purpose: Full deployed product validation on a stand.
    environment: stand
    used_for: [tester_validation, explorer_review, reviewer_validation]
    default_for: [feature_test, explorer, reviewer]

used_for describes what the profile can safely serve. default_for maps common role intents to one registry key; each default_for token must be claimed by at most one profile. The allowed tokens are defined in the packaged schema copied to .greatminds/schema.yaml under stand_profile_registry.

Inspect and validate the registry after edits:

greatminds stand profiles list
greatminds stand profiles doctor

To add a profile, add a registry entry and a matching YAML file under coordination/stand-profiles/. For production, add an explicit production entry with environment: production, requires_explicit_user_approval: true, and an allowed_roles list such as [ARCHITECT-REVIEWER, MAINTAINER]. Production leases must include an approval marker after the user has approved that lease:

greatminds stand lease \
  --task <task-id> \
  --profile production \
  --profile-approval USER_APPROVED

The smallest useful coordination/stand-profiles/smoke-only.yaml is:

---
- name: register stand node
  hosts: localhost
  gather_facts: false
  tasks:
    - name: add configured stand host
      ansible.builtin.add_host:
        name: "{{ STAND_HOST | default('localhost') }}"
        groups: stand_nodes
        ansible_connection: >-
          {{ 'local' if (STAND_HOST | default('localhost')) == 'localhost'
             else 'ssh' }}

- name: smoke stand
  hosts: stand_nodes
  gather_facts: false
  tasks:
    - name: remote shell works
      ansible.builtin.command: /bin/true
      changed_when: false

When a task needs live validation, the holder leases a profile:

greatminds stand lease \
  --task <task-id> \
  --worktree "$(greatminds worktree path <task-id>)" \
  --profile smoke-only

Use Stand Operations for the complete lease, profile, and evidence flow.

Start the daemon

The daemon is the process that watches inboxes and pushes wake text into idle agents:

greatminds daemon install
greatminds daemon start
greatminds daemon status

The daemon instance name is derived from coord.yaml: session. That lets one user run several projects on the same machine without a single global service name colliding.

Launch the fleet

greatminds launch --target tmux
tmux a -t myproject

Each window in coord.yaml starts the configured role, tool, and mode. Planner is the user-facing interactive role. MAINTAINER runs as a self-loop watchdog. Worker roles are driven by coordd: their panes stay idle between turns, and coordd starts one turn when their inbox, queue, or stand-state events change.

File your first task

The normal product path starts with user feedback or an inbox task, then flows through planning, implementation, test or reader review, and final review:

greatminds task new \
  --stream product \
  --kind feature \
  --scope backend \
  --title "Add a small feature"

From there, the planner owns triage and routing. Implementers do not claim from feature_plan/; they claim only from their own queues.