When suggesting Ensemble CLI commands, we are in development mode by default. This means:
ensemble agents list
ensemble agents get 0x123...
ensemble wallets create my-walletpnpm dev agents list
pnpm dev agents get 0x123...
pnpm dev wallets create my-wallet- The CLI is not globally installed via npm during development
- We run commands using
pnpm devwhich executestsx src/bin/ensemble.ts - This allows testing changes without building or linking
# List agents
pnpm dev agents list
# Get specific agent
pnpm dev agents get 0x5c02b4685492d36a40107b6ec48a91ab3f8875cb
# Update agent
pnpm dev agents update 0x5c02b4685492d36a40107b6ec48a91ab3f8875cb \
--communication-type "socketio-eliza" \
--communication-params '{"websocketUrl": "https://agents.ensemble.codes", "agentId": "28d29474-23c7-01b9-aee8-ba150c366103", "version": "1.x", "env": "production"}'
# Wallet operations
pnpm dev wallets create main-wallet
pnpm dev wallets list
pnpm dev wallets balanceOnly after running npm link or when the package is installed globally via npm.
This is a monorepo project with multiple packages. Task management is centralized at the project root using task-master.
ensemble-framework/ # Project root (task-master location)
├── packages/
│ ├── sdk/ # SDK package
│ ├── cli/ # CLI package
│ ├── contracts/ # Smart contracts
│ ├── app/ # Frontend application
│ ├── subgraph/ # Subgraph indexer
│ └── mcp-server/ # MCP server
└── .taskmaster/ # Centralized task management
- All task-master operations should be run from the project root directory
- Task-master is initialized at:
/Users/leon/workspace/ensemble/ensemble-framework/ - When creating or managing tasks, always
cdto the project root first - Tasks apply to the entire monorepo, not individual packages
- Never initialize task-master in package subdirectories
# Always navigate to project root first
cd /Users/leon/workspace/ensemble/ensemble-framework
task-master add-task --prompt="..."
task-master list
task-master show <id>
task-master set-status --id=<id> --status=<status>When working on package-specific tasks:
- Create the task at the project root level
- Include the package name prefix in the task description
- Navigate to the specific package directory for implementation
Use these prefixes when creating tasks to identify which package they belong to:
CLI:- CLI package tasksSDK:- SDK package tasksContracts:- Smart contracts tasksSubgraph:- Subgraph tasksMCP:- MCP server tasksCore:- Cross-package/monorepo infrastructure tasks
# Navigate to root and create a CLI testing task
cd /Users/leon/workspace/ensemble/ensemble-framework
task-master add-task --prompt="CLI: Implement comprehensive testing suite with Jest, including unit tests for commands and utilities"
# Create an SDK task
task-master add-task --prompt="SDK: Add Zod validation schemas for all agent types"
# Create a cross-package task
task-master add-task --prompt="Core: Update all packages to use latest TypeScript version"# View all tasks
task-master list
# Filter tasks by package (using grep)
task-master list | grep "CLI:"
task-master list | grep "SDK:"
task-master list | grep "Contracts:"When implementing tasks in a specific package:
# 1. Check tasks at root level
cd /Users/leon/workspace/ensemble/ensemble-framework
task-master next # See next task to work on
# 2. Navigate to package for implementation
cd packages/cli
# ... do your work ...
# 3. Update task status from root
cd ../..
task-master set-status --id=<task-id> --status=done- Use descriptive task names with package prefixes
- Group related tasks using subtasks
- Set dependencies between tasks when order matters
- Update task status immediately when starting/completing work
- Add context to tasks using the update command when you learn new information
# From project root only:
task-master list --status=pending # View pending tasks
task-master next # Get next task to work on
task-master show <id> # View task details
task-master expand --id=<id> # Break task into subtasks
task-master add-subtask --parent=<id> --title="..." --description="..."
task-master set-status --id=<id> --status=in-progress
task-master set-status --id=<id> --status=done# ❌ WRONG - Don't initialize task-master in packages
cd packages/sdk
task-master init # DON'T DO THIS
# ❌ WRONG - Don't create tasks from package directories
cd packages/cli
task-master add-task # DON'T DO THIS# ✅ CORRECT - Always work from project root for tasks
cd /Users/leon/workspace/ensemble/ensemble-framework
task-master add-task --prompt="CLI: Add new command for..."