cowagent-ai-assistant
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCowAgent AI Assistant
CowAgent AI 助手
Skill by ara.so — AI Agent Skills collection.
CowAgent is an open-source autonomous AI assistant framework that plans tasks, executes tools and skills, and grows through memory and knowledge. It supports multiple LLM providers (Claude, GPT, Gemini, DeepSeek, etc.) and channels (Web, WeChat, Feishu, DingTalk), with a three-tier memory architecture and personal knowledge base.
由ara.so开发的技能——AI Agent技能集合。
CowAgent是一个开源的自主AI助手框架,可进行任务规划、执行工具与技能,并通过记忆和知识实现能力成长。它支持多个LLM提供商(Claude、GPT、Gemini、DeepSeek等)和多种渠道(Web、微信、飞书、钉钉),具备三层内存架构和个人知识库功能。
Installation
安装
Quick Install (Recommended)
快速安装(推荐)
Linux / macOS:
bash
bash <(curl -fsSL https://cdn.link-ai.tech/code/cow/run.sh)Windows (PowerShell):
powershell
irm https://cdn.link-ai.tech/code/cow/run.ps1 | iexDocker:
bash
curl -O https://cdn.link-ai.tech/code/cow/docker-compose.yml
docker compose up -dLinux / macOS:
bash
bash <(curl -fsSL https://cdn.link-ai.tech/code/cow/run.sh)Windows(PowerShell):
powershell
irm https://cdn.link-ai.tech/code/cow/run.ps1 | iexDocker:
bash
curl -O https://cdn.link-ai.tech/code/cow/docker-compose.yml
docker compose up -dManual Installation from Source
从源码手动安装
bash
undefinedbash
undefinedClone repository
克隆仓库
git clone https://github.com/zhayujie/CowAgent.git
cd CowAgent
git clone https://github.com/zhayujie/CowAgent.git
cd CowAgent
Install dependencies (Python 3.8+)
安装依赖(Python 3.8+)
pip3 install -r requirements.txt
pip3 install -r requirements.txt
Copy and configure
复制并配置文件
cp config-template.json config.json
cp config-template.json config.json
Start the agent
启动Agent
python3 app.py
After starting, access the Web console at `http://localhost:9899`.python3 app.py
启动后,可通过`http://localhost:9899`访问Web控制台。CLI Commands
CLI 命令
The CLI manages the CowAgent service:
cowbash
undefinedcowbash
undefinedService control
服务控制
cow start # Start CowAgent
cow stop # Stop CowAgent
cow restart # Restart CowAgent
cow status # Check service status
cow logs # View logs
cow start # 启动CowAgent
cow stop # 停止CowAgent
cow restart # 重启CowAgent
cow status # 检查服务状态
cow logs # 查看日志
Updates and skills
更新与技能管理
cow update # Pull latest code and restart
cow skill install <name> # Install a skill from Skill Hub
cow install-browser # Install browser automation dependencies
cow update # 拉取最新代码并重启
cow skill install <name> # 从技能中心安装技能
cow install-browser # 安装浏览器自动化依赖
Usage examples
使用示例
cow skill list # List installed skills
cow skill search weather # Search for skills
undefinedcow skill list # 列出已安装技能
cow skill search weather # 搜索技能
undefinedConfiguration
配置
Model Configuration
模型配置
Configure via Web console (recommended) or manually edit :
config.jsonjson
{
"model": "claude-opus-4",
"claude_api_key": "${CLAUDE_API_KEY}",
"openai_api_key": "${OPENAI_API_KEY}",
"gemini_api_key": "${GEMINI_API_KEY}",
"vision_model": "gpt-4o",
"image_create_model": "dall-e-3",
"speech_recognition_model": "whisper-1",
"text_to_speech_model": "tts-1",
"embedding_model": "text-embedding-3-small"
}推荐通过Web控制台配置,或手动编辑:
config.jsonjson
{
"model": "claude-opus-4",
"claude_api_key": "${CLAUDE_API_KEY}",
"openai_api_key": "${OPENAI_API_KEY}",
"gemini_api_key": "${GEMINI_API_KEY}",
"vision_model": "gpt-4o",
"image_create_model": "dall-e-3",
"speech_recognition_model": "whisper-1",
"text_to_speech_model": "tts-1",
"embedding_model": "text-embedding-3-small"
}Channel Configuration
渠道配置
Set to switch channels:
channel_typejson
{
"channel_type": "wx", // Options: terminal, wx, web, feishu, dingtalk, wecom_bot, qq
// Web channel (default)
"web": {
"port": 9899,
"admin_password": "your_password"
},
// WeChat
"wechat": {
"single_chat_prefix": ["bot", "@bot"],
"single_chat_reply_prefix": "[bot] ",
"group_chat_prefix": ["@bot"],
"group_name_white_list": ["ChatGroup1", "ChatGroup2"]
},
// Feishu
"feishu": {
"app_id": "${FEISHU_APP_ID}",
"app_secret": "${FEISHU_APP_SECRET}"
}
}设置切换渠道:
channel_typejson
{
"channel_type": "wx", // 可选值:terminal, wx, web, feishu, dingtalk, wecom_bot, qq
// Web渠道(默认)
"web": {
"port": 9899,
"admin_password": "your_password"
},
// 微信
"wechat": {
"single_chat_prefix": ["bot", "@bot"],
"single_chat_reply_prefix": "[bot] ",
"group_chat_prefix": ["@bot"],
"group_name_white_list": ["ChatGroup1", "ChatGroup2"]
},
// 飞书
"feishu": {
"app_id": "${FEISHU_APP_ID}",
"app_secret": "${FEISHU_APP_SECRET}"
}
}Memory Configuration
内存配置
json
{
"memory": {
"enable_long_term": true,
"deep_dream_time": "03:00", // Daily Deep Dream time
"max_context_messages": 20,
"enable_hybrid_search": true
}
}json
{
"memory": {
"enable_long_term": true,
"deep_dream_time": "03:00", // 每日深度梦境时间
"max_context_messages": 20,
"enable_hybrid_search": true
}
}Knowledge Base Configuration
知识库配置
json
{
"knowledge": {
"enable": true,
"auto_curate": true,
"update_threshold": 3
}
}json
{
"knowledge": {
"enable": true,
"auto_curate": true,
"update_threshold": 3
}
}Skills System
技能系统
Installing Skills
安装技能
Via CLI:
bash
cow skill install weather
cow skill install stock-query
cow skill install github-repo-searchVia Chat:
/skill search weather
/skill install weather
/skill list通过CLI:
bash
cow skill install weather
cow skill install stock-query
cow skill install github-repo-search通过聊天指令:
/skill search weather
/skill install weather
/skill listCreating Custom Skills
创建自定义技能
Skills are defined in a manifest:
skill.jsonjson
{
"name": "custom-api-caller",
"version": "1.0.0",
"description": "Call external API and process results",
"author": "Your Name",
"triggers": ["call api", "fetch data from api"],
"parameters": [
{
"name": "endpoint",
"type": "string",
"description": "API endpoint URL",
"required": true
},
{
"name": "method",
"type": "string",
"description": "HTTP method (GET/POST)",
"default": "GET"
}
],
"steps": [
{
"action": "web_fetch",
"params": {
"url": "{{endpoint}}",
"method": "{{method}}"
}
},
{
"action": "write",
"params": {
"path": "result.json",
"content": "{{web_fetch.response}}"
}
}
]
}Place in and restart.
skills/custom-api-caller/skill.json技能通过清单定义:
skill.jsonjson
{
"name": "custom-api-caller",
"version": "1.0.0",
"description": "Call external API and process results",
"author": "Your Name",
"triggers": ["call api", "fetch data from api"],
"parameters": [
{
"name": "endpoint",
"type": "string",
"description": "API endpoint URL",
"required": true
},
{
"name": "method",
"type": "string",
"description": "HTTP method (GET/POST)",
"default": "GET"
}
],
"steps": [
{
"action": "web_fetch",
"params": {
"url": "{{endpoint}}",
"method": "{{method}}"
}
},
{
"action": "write",
"params": {
"path": "result.json",
"content": "{{web_fetch.response}}"
}
}
]
}将文件放置在并重启服务。
skills/custom-api-caller/skill.jsonConversational Skill Creation
对话式创建技能
Use the built-in skill:
skill-creatorCreate a skill that fetches GitHub repository info and saves it to a markdown file.The agent will generate the skill manifest interactively.
使用内置的技能:
skill-creatorCreate a skill that fetches GitHub repository info and saves it to a markdown file.Agent会交互式生成技能清单。
Tools System
工具系统
Built-in Tools
内置工具
File Operations:
python
undefined文件操作:
python
undefinedAgent uses these tools automatically
Agent会自动使用这些工具
read(path="/path/to/file.txt")
write(path="output.txt", content="data")
edit(path="config.json", replacements=[{"old": "value1", "new": "value2"}])
ls(path="./data")
**Terminal:**
```python
bash(command="ls -la")
bash(command="python script.py")Memory & Knowledge:
python
memory(query="what did user say about project X")
knowledge_search(query="API documentation")Web & Browser:
python
web_fetch(url="https://api.example.com/data")
web_search(query="Python async best practices")
browser(action="navigate", url="https://example.com")
browser(action="click", selector="#submit-button")Scheduling:
python
scheduler(action="add", time="2026-05-25 14:00", task="Send report")
scheduler(action="list")read(path="/path/to/file.txt")
write(path="output.txt", content="data")
edit(path="config.json", replacements=[{"old": "value1", "new": "value2"}])
ls(path="./data")
**终端操作:**
```python
bash(command="ls -la")
bash(command="python script.py")记忆与知识库:
python
memory(query="what did user say about project X")
knowledge_search(query="API documentation")Web与浏览器:
python
web_fetch(url="https://api.example.com/data")
web_search(query="Python async best practices")
browser(action="navigate", url="https://example.com")
browser(action="click", selector="#submit-button")任务调度:
python
scheduler(action="add", time="2026-05-25 14:00", task="Send report")
scheduler(action="list")MCP Integration
MCP 集成
Configure MCP servers in :
mcp.jsonjson
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
"transport": "stdio"
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"transport": "stdio",
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
},
"puppeteer": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-puppeteer"],
"transport": "stdio"
}
}
}Hot reload: edit and restart CowAgent.
mcp.json在中配置MCP服务器:
mcp.jsonjson
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/workspace"],
"transport": "stdio"
},
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"transport": "stdio",
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
},
"puppeteer": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-puppeteer"],
"transport": "stdio"
}
}
}热重载:编辑后重启CowAgent即可生效。
mcp.jsonWorking Code Examples
可用代码示例
Python Plugin Example
Python插件示例
Create a custom plugin in :
plugins/my_plugin.pypython
import plugins
from bridge.context import ContextType
from bridge.reply import Reply, ReplyType
from common.log import logger
@plugins.register(
name="MyPlugin",
desc="Custom functionality plugin",
version="1.0",
author="Your Name"
)
class MyPlugin(plugins.Plugin):
def __init__(self):
super().__init__()
self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context
logger.info("[MyPlugin] initialized")
def on_handle_context(self, e_context: EventContext):
context = e_context['context']
if context.type != ContextType.TEXT:
return
content = context.content.strip()
if content.startswith("/hello"):
reply = Reply()
reply.type = ReplyType.TEXT
reply.content = "Hello from custom plugin!"
e_context['reply'] = reply
e_context.action = EventAction.BREAK_PASS
return
def get_help_text(self, **kwargs):
return "MyPlugin: Use /hello to get a greeting"在中创建自定义插件:
plugins/my_plugin.pypython
import plugins
from bridge.context import ContextType
from bridge.reply import Reply, ReplyType
from common.log import logger
@plugins.register(
name="MyPlugin",
desc="Custom functionality plugin",
version="1.0",
author="Your Name"
)
class MyPlugin(plugins.Plugin):
def __init__(self):
super().__init__()
self.handlers[Event.ON_HANDLE_CONTEXT] = self.on_handle_context
logger.info("[MyPlugin] initialized")
def on_handle_context(self, e_context: EventContext):
context = e_context['context']
if context.type != ContextType.TEXT:
return
content = context.content.strip()
if content.startswith("/hello"):
reply = Reply()
reply.type = ReplyType.TEXT
reply.content = "Hello from custom plugin!"
e_context['reply'] = reply
e_context.action = EventAction.BREAK_PASS
return
def get_help_text(self, **kwargs):
return "MyPlugin: Use /hello to get a greeting"Custom Channel Implementation
自定义渠道实现
python
from channel.channel import Channel
from bridge.context import Context, ContextType
from bridge.reply import Reply
class CustomChannel(Channel):
def __init__(self):
super().__init__()
def startup(self):
# Initialize your channel (websocket, HTTP server, etc.)
logger.info("[CustomChannel] starting...")
def handle_message(self, message):
context = Context()
context.type = ContextType.TEXT
context.content = message['text']
context['session_id'] = message['user_id']
# Process through agent
reply = super().build_reply_content(message['text'], context)
# Send reply through your channel
self.send_message(message['user_id'], reply.content)
def send_message(self, user_id, content):
# Implement sending logic
passRegister in :
channel/channel_factory.pypython
from channel.custom.custom_channel import CustomChannel
def create_channel(channel_type):
if channel_type == "custom":
return CustomChannel()
# ... existing channelspython
from channel.channel import Channel
from bridge.context import Context, ContextType
from bridge.reply import Reply
class CustomChannel(Channel):
def __init__(self):
super().__init__()
def startup(self):
# 初始化你的渠道(websocket、HTTP服务器等)
logger.info("[CustomChannel] starting...")
def handle_message(self, message):
context = Context()
context.type = ContextType.TEXT
context.content = message['text']
context['session_id'] = message['user_id']
# 通过Agent处理消息
reply = super().build_reply_content(message['text'], context)
# 通过你的渠道发送回复
self.send_message(message['user_id'], reply.content)
def send_message(self, user_id, content):
# 实现发送逻辑
pass在中注册:
channel/channel_factory.pypython
from channel.custom.custom_channel import CustomChannel
def create_channel(channel_type):
if channel_type == "custom":
return CustomChannel()
# ... 已有渠道Advanced Skill with Multiple Tools
多工具高级技能
json
{
"name": "github-issue-reporter",
"version": "1.0.0",
"description": "Search GitHub repos, analyze issues, generate report",
"triggers": ["analyze github issues", "report on github repository"],
"parameters": [
{
"name": "repo",
"type": "string",
"description": "GitHub repository (owner/repo)",
"required": true
}
],
"steps": [
{
"action": "web_fetch",
"params": {
"url": "https://api.github.com/repos/{{repo}}/issues",
"headers": {
"Authorization": "token ${GITHUB_TOKEN}"
}
},
"output": "issues_data"
},
{
"action": "bash",
"params": {
"command": "echo '{{issues_data}}' | jq '[.[] | {title: .title, state: .state, comments: .comments}]' > /tmp/issues.json"
}
},
{
"action": "read",
"params": {
"path": "/tmp/issues.json"
},
"output": "processed_issues"
},
{
"action": "write",
"params": {
"path": "github_report_{{repo | replace('/', '_')}}.md",
"content": "# GitHub Issues Report for {{repo}}\n\n{{processed_issues}}\n\nGenerated at {{now}}"
}
}
]
}json
{
"name": "github-issue-reporter",
"version": "1.0.0",
"description": "Search GitHub repos, analyze issues, generate report",
"triggers": ["analyze github issues", "report on github repository"],
"parameters": [
{
"name": "repo",
"type": "string",
"description": "GitHub repository (owner/repo)",
"required": true
}
],
"steps": [
{
"action": "web_fetch",
"params": {
"url": "https://api.github.com/repos/{{repo}}/issues",
"headers": {
"Authorization": "token ${GITHUB_TOKEN}"
}
},
"output": "issues_data"
},
{
"action": "bash",
"params": {
"command": "echo '{{issues_data}}' | jq '[.[] | {title: .title, state: .state, comments: .comments}]' > /tmp/issues.json"
}
},
{
"action": "read",
"params": {
"path": "/tmp/issues.json"
},
"output": "processed_issues"
},
{
"action": "write",
"params": {
"path": "github_report_{{repo | replace('/', '_')}}.md",
"content": "# GitHub Issues Report for {{repo}}\n\n{{processed_issues}}\n\nGenerated at {{now}}"
}
}
]
}Common Patterns
常见模式
Agent Planning Loop
Agent规划循环
The agent follows a plan-execute-reflect loop:
- Plan: Decompose user request into subtasks
- Execute: Run tools and skills step by step
- Reflect: Check if goal achieved, adjust plan
- Loop: Continue until task complete
Agent遵循“规划-执行-反思”循环:
- 规划:将用户请求分解为子任务
- 执行:逐步运行工具与技能
- 反思:检查目标是否达成,调整规划
- 循环:持续直到任务完成
Memory Retrieval Pattern
记忆检索模式
python
undefinedpython
undefinedAgent automatically searches memory when relevant
Agent会自动检索相关记忆
Manual retrieval in custom code:
在自定义代码中手动检索:
from plugins import memory_search
results = memory_search(
query="user's favorite programming language",
limit=5
)
undefinedfrom plugins import memory_search
results = memory_search(
query="user's favorite programming language",
limit=5
)
undefinedKnowledge Base Update Pattern
知识库更新模式
python
undefinedpython
undefinedAgent auto-curates during conversation
Agent会在对话中自动整理知识
Manual update:
手动更新:
from plugins import knowledge_update
knowledge_update(
topic="Project Setup",
content="New setup steps: 1. Install deps 2. Configure .env",
operation="append"
)
undefinedfrom plugins import knowledge_update
knowledge_update(
topic="Project Setup",
content="New setup steps: 1. Install deps 2. Configure .env",
operation="append"
)
undefinedMulti-Step Workflow Pattern
多步骤工作流模式
For complex workflows, chain tools in skills:
json
{
"steps": [
{"action": "web_fetch", "params": {"url": "..."}},
{"action": "bash", "params": {"command": "process.sh"}},
{"action": "read", "params": {"path": "result.txt"}},
{"action": "memory", "params": {"action": "save", "content": "{{read.content}}"}}
]
}对于复杂工作流,可在技能中串联多个工具:
json
{
"steps": [
{"action": "web_fetch", "params": {"url": "..."}},
{"action": "bash", "params": {"command": "process.sh"}},
{"action": "read", "params": {"path": "result.txt"}},
{"action": "memory", "params": {"action": "save", "content": "{{read.content}}"}}
]
}Troubleshooting
故障排查
Installation Issues
安装问题
Python version mismatch:
bash
python3 --version # Ensure 3.8+
pip3 install --upgrade pip setuptools wheelMissing dependencies:
bash
pip3 install -r requirements.txt --force-reinstallPort already in use:
json
{
"web": {
"port": 9900 // Change from default 9899
}
}Python版本不匹配:
bash
python3 --version # 确保版本为3.8+
pip3 install --upgrade pip setuptools wheel依赖缺失:
bash
pip3 install -r requirements.txt --force-reinstall端口已被占用:
json
{
"web": {
"port": 9900 // 从默认的9899修改为其他端口
}
}Model Configuration Issues
模型配置问题
API key not working:
- Ensure environment variables are set:
export CLAUDE_API_KEY=sk-... - Or set in directly (not recommended for production)
config.json - Check key has proper permissions and quota
Model not responding:
bash
cow logs # Check for API errorsCommon fixes:
- Verify field matches provider's model name
model - Check provider-specific API key field (,
claude_api_key, etc.)openai_api_key - Test with curl:
bash
curl -X POST https://api.anthropic.com/v1/messages \
-H "x-api-key: ${CLAUDE_API_KEY}" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-opus-4","messages":[{"role":"user","content":"test"}],"max_tokens":100}'API密钥无效:
- 确保已设置环境变量:
export CLAUDE_API_KEY=sk-... - 或直接在中设置(生产环境不推荐)
config.json - 检查密钥是否有足够权限和配额
模型无响应:
bash
cow logs # 查看API错误信息常见修复方案:
- 验证字段与提供商的模型名称一致
model - 检查提供商专属的API密钥字段(、
claude_api_key等)openai_api_key - 使用curl测试:
bash
curl -X POST https://api.anthropic.com/v1/messages \
-H "x-api-key: ${CLAUDE_API_KEY}" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-opus-4","messages":[{"role":"user","content":"test"}],"max_tokens":100}'Channel Connection Issues
渠道连接问题
WeChat not connecting:
- QR code expired: restart and scan new code within 60 seconds
- Check config in
wechatconfig.json - Ensure network allows WeChat web protocol
Feishu/Lark setup:
- Verify and
app_idfrom Feishu admin consoleapp_secret - Enable bot capabilities in app settings
- Add bot to target groups before testing
微信无法连接:
- QR码过期:重启服务并在60秒内扫描新二维码
- 检查中的
config.json配置wechat - 确保网络支持微信网页协议
飞书配置问题:
- 验证飞书管理控制台获取的和
app_idapp_secret - 在应用设置中启用机器人能力
- 测试前将机器人添加到目标群组
Memory & Knowledge Issues
记忆与知识库问题
Deep Dream not running:
- Check in config
memory.deep_dream_time - Ensure agent is running at scheduled time
- Verify sufficient conversation history
Knowledge not updating:
- Set
knowledge.auto_curate: true - Check (default 3 relevant exchanges)
knowledge.update_threshold
深度梦境未运行:
- 检查配置中的
memory.deep_dream_time - 确保Agent在计划时间处于运行状态
- 验证是否有足够的对话历史
知识库未更新:
- 设置
knowledge.auto_curate: true - 检查(默认需要3次相关交互)
knowledge.update_threshold
Skill Issues
技能问题
Skill not triggering:
- Check in
triggersmatch user inputskill.json - List skills:
/skill list - Reinstall:
cow skill install <name>
Skill execution fails:
bash
cow logs # Check for tool errorsVerify:
- Required tools are available
- Parameters match schema
- File paths are accessible
技能未触发:
- 检查中的
skill.json是否匹配用户输入triggers - 列出已安装技能:
/skill list - 重新安装:
cow skill install <name>
技能执行失败:
bash
cow logs # 查看工具错误信息验证:
- 所需工具是否可用
- 参数是否符合 schema
- 文件路径是否可访问
Browser Tool Issues
浏览器工具问题
Browser not installed:
bash
cow install-browserHeadless mode issues:
json
{
"browser": {
"headless": false // Debug with visible browser
}
}浏览器未安装:
bash
cow install-browser无头模式问题:
json
{
"browser": {
"headless": false // 启用可见浏览器进行调试
}
}Performance Optimization
性能优化
Slow responses:
- Use faster models: ,
claude-sonnet-4,gpt-4o-minideepseek-v4-flash - Reduce
memory.max_context_messages - Disable unused features
High memory usage:
- Limit conversation history
- Disable Deep Dream if not needed
- Restart agent daily:
0 3 * * * cow restart
响应缓慢:
- 使用更快的模型:、
claude-sonnet-4、gpt-4o-minideepseek-v4-flash - 减少的值
memory.max_context_messages - 禁用未使用的功能
内存占用过高:
- 限制对话历史长度
- 若不需要则禁用深度梦境
- 每日定时重启Agent:
0 3 * * * cow restart
Logs and Debugging
日志与调试
bash
cow logs # View recent logs
cow logs -f # Follow logs in real-time
tail -f logs/app.log # Direct log accessEnable debug mode in :
config.jsonjson
{
"debug": true,
"log_level": "DEBUG"
}For issues, check:
- - service running
cow status - - error messages
cow logs - Config validation: ensure JSON is valid
- Port conflicts:
netstat -tuln | grep 9899
bash
cow logs # 查看近期日志
cow logs -f # 实时跟踪日志
tail -f logs/app.log # 直接访问日志文件在中启用调试模式:
config.jsonjson
{
"debug": true,
"log_level": "DEBUG"
}遇到问题时,按以下步骤排查:
- - 检查服务是否运行
cow status - - 查看错误信息
cow logs - 配置验证:确保JSON格式有效
- 端口冲突检查:
netstat -tuln | grep 9899