Skip to main content

Source Code Deployment

1. Clone the project

For network issues, use the mirror: https://gitee.com/zhayujie/CowAgent

2. Install dependencies

Core dependencies (required):
Optional dependencies (recommended):

3. Install Cow CLI

Install the command-line tool for managing services and skills:
Then use the cow command:
This step is recommended. After installation you can use cow start, cow stop, cow update to manage the service, and cow skill to manage skills. Without the CLI, you can use ./run.sh or python3 app.py to run.

4. Configure

Copy the config template and edit:
Fill in model API keys, channel type, and other settings in config.json. See the model docs for details.

5. Run

Using Cow CLI (recommended):
Or run locally in foreground:
By default, the Web console starts. Access http://localhost:9899 to chat. Background run on server (without CLI):
Deploying on a server? By default web_host only listens on 127.0.0.1 (local access). Set web_host to 0.0.0.0 in config.json to make the console reachable from outside, and set web_password to protect it. Don’t forget to open port 9899 in your firewall or security group — ideally restricted to specific IPs.

Docker Deployment

Docker deployment does not require cloning source code or installing dependencies. For Agent mode, source deployment is recommended for broader system access.
Requires Docker and docker-compose.
1. Download config
Edit docker-compose.yml with your configuration. 2. Start container
3. View logs
Data persistence: docker-compose.yml mounts two host directories by default, so your data survives container restarts and docker compose pull image upgrades:
  • ./cow/home/agent/cow in the container: the workspace, holding conversation-installed skills, memory, knowledge base, mcp.json, and conversation artifacts.
  • ./cow-data/home/agent/.cow in the container: the data directory pointed to by COW_DATA_DIR, holding the config.json saved from the web console, run logs, and channel credentials.
Both directories are created next to docker-compose.yml by default — don’t delete them.
Running in Docker? Set WEB_HOST to 0.0.0.0 in docker-compose.yml so the console is reachable from outside the container, and set WEB_PASSWORD to protect it. Make sure port 9899 is mapped to the host and open in your firewall or security group.

Core Configuration

Full configuration options are in the project config.py.