English | 中文 | Official Site | Documents
AI Manus is a general-purpose AI Agent system that supports running various tools and operations in a sandbox environment.
Enjoy your own agent with AI Manus!
👏 Join QQ Group(1005477581)
��️ Like AI Manus? Give it a star 🌟 or Sponsor to support the development!
ui.mp4
- Task: Latest LLM papers
en_llm.mov
- Task: Write a complex Python example
en_python.mov
- Deployment: Minimal deployment requires only an LLM service, with no dependency on other external services.
- Tools: Supports Terminal, Browser, File, Web Search, and messaging tools with real-time viewing and takeover capabilities, supports external MCP tool integration.
- Sandbox: Each task is allocated a separate sandbox that runs in a local Docker environment.
- Task Sessions: Session history is managed through MongoDB/Redis, supporting background tasks.
- Conversations: Supports stopping and interrupting, file upload and download.
- Multilingual: Supports both Chinese and English.
- Authentication: User login and authentication.
- Tools: Support for Deploy & Expose.
- Sandbox: Support for mobile and Windows computer access.
- Deployment: Support for K8s and Docker Swarm multi-cluster deployment.
When a user initiates a conversation:
- Web sends a request to create an Agent to the Server, which creates a Sandbox through
/var/run/docker.sockand returns a session ID. - The Sandbox is an Ubuntu Docker environment that starts Chrome browser and API services for tools like File/Shell.
- Web sends user messages to the session ID, and when the Server receives user messages, it forwards them to the PlanAct Agent for processing.
- During processing, the PlanAct Agent calls relevant tools to complete tasks.
- All events generated during Agent processing are sent back to Web via SSE.
When users browse tools:
- Browser:
- The Sandbox's headless browser starts a VNC service through xvfb and x11vnc, and converts VNC to websocket through websockify.
- Web's NoVNC component connects to the Sandbox through the Server's Websocket Forward, enabling browser viewing.
- Other tools: Other tools work on similar principles.
This project primarily relies on Docker for development and deployment, requiring a relatively new version of Docker:
- Docker 20.10+
- Docker Compose
Model capability requirements:
- Compatible with OpenAI interface
- Support for FunctionCall
- Support for Json Format output
Deepseek and GPT models are recommended.
Docker Compose is recommended for deployment:
services:
frontend:
image: simpleyyt/manus-frontend
ports:
- "5173:80"
depends_on:
- backend
restart: unless-stopped
networks:
- manus-network
environment:
- BACKEND_URL=http://backend:8000
backend:
image: simpleyyt/manus-backend
depends_on:
- sandbox
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
#- ./mcp.json:/etc/mcp.json # Mount MCP servers directory
networks:
- manus-network
environment:
# OpenAI API base URL
- API_BASE=https://api.openai.com/v1
# OpenAI API key, replace with your own
- API_KEY=sk-xxxx
# LLM model name
- MODEL_NAME=gpt-4o
# LLM temperature parameter, controls randomness
- TEMPERATURE=0.7
# Maximum tokens for LLM response
- MAX_TOKENS=2000
# MongoDB connection URI
#- MONGODB_URI=mongodb://mongodb:27017
# MongoDB database name
#- MONGODB_DATABASE=manus
# MongoDB username (optional)
#- MONGODB_USERNAME=
# MongoDB password (optional)
#- MONGODB_PASSWORD=
# Redis server hostname
#- REDIS_HOST=redis
# Redis server port
#- REDIS_PORT=6379
# Redis database number
#- REDIS_DB=0
# Redis password (optional)
#- REDIS_PASSWORD=
# Sandbox server address (optional)
#- SANDBOX_ADDRESS=
# Docker image used for the sandbox
- SANDBOX_IMAGE=simpleyyt/manus-sandbox
# Prefix for sandbox container names
- SANDBOX_NAME_PREFIX=sandbox
# Time-to-live for sandbox containers in minutes
- SANDBOX_TTL_MINUTES=30
# Docker network for sandbox containers
- SANDBOX_NETWORK=manus-network
# Chrome browser arguments for sandbox (optional)
#- SANDBOX_CHROME_ARGS=
# HTTPS proxy for sandbox (optional)
#- SANDBOX_HTTPS_PROXY=
# HTTP proxy for sandbox (optional)
#- SANDBOX_HTTP_PROXY=
# No proxy hosts for sandbox (optional)
#- SANDBOX_NO_PROXY=
# Search engine configuration
# Options: baidu, google, bing
- SEARCH_PROVIDER=bing
# Google search configuration, only used when SEARCH_PROVIDER=google
#- GOOGLE_SEARCH_API_KEY=
#- GOOGLE_SEARCH_ENGINE_ID=
# Auth configuration
# Options: password, none, local
- AUTH_PROVIDER=password
# Password auth configuration, only used when AUTH_PROVIDER=password
- PASSWORD_SALT=
- PASSWORD_HASH_ROUNDS=10
# Local auth configuration, only used when AUTH_PROVIDER=local
#- LOCAL_AUTH_EMAIL=admin@example.com
#- LOCAL_AUTH_PASSWORD=admin
# JWT configuration
- JWT_SECRET_KEY=your-secret-key-here
- JWT_ALGORITHM=HS256
- JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
- JWT_REFRESH_TOKEN_EXPIRE_DAYS=7
# Email configuration
# Only used when AUTH_PROVIDER=password
#- EMAIL_HOST=smtp.gmail.com
#- EMAIL_PORT=587
#- EMAIL_USERNAME=your-email@gmail.com
#- EMAIL_PASSWORD=your-password
#- EMAIL_FROM=your-email@gmail.com
# MCP configuration file path
#- MCP_CONFIG_PATH=/etc/mcp.json
# Application log level
- LOG_LEVEL=INFO
sandbox:
image: simpleyyt/manus-sandbox
command: /bin/sh -c "exit 0" # prevent sandbox from starting, ensure image is pulled
restart: "no"
networks:
- manus-network
mongodb:
image: mongo:7.0
volumes:
- mongodb_data:/data/db
restart: unless-stopped
#ports:
# - "27017:27017"
networks:
- manus-network
redis:
image: redis:7.0
restart: unless-stopped
networks:
- manus-network
volumes:
mongodb_data:
name: manus-mongodb-data
networks:
manus-network:
name: manus-network
driver: bridgeSave as docker-compose.yml file, and run:
docker compose up -dNote: If you see
sandbox-1 exited with code 0, this is normal, as it ensures the sandbox image is successfully pulled locally.
Open your browser and visit http://localhost:5173 to access Manus.
This project consists of three independent sub-projects:
frontend: manus frontendbackend: Manus backendsandbox: Manus sandbox
- Download the project:
git clone https://github.com/simpleyyt/ai-manus.git
cd ai-manus- Copy the configuration file:
cp .env.example .env- Modify the configuration file:
# Model provider configuration
API_KEY=
API_BASE=http://mockserver:8090/v1
# Model configuration
MODEL_NAME=deepseek-chat
TEMPERATURE=0.7
MAX_TOKENS=2000
# MongoDB configuration
#MONGODB_URI=mongodb://mongodb:27017
#MONGODB_DATABASE=manus
#MONGODB_USERNAME=
#MONGODB_PASSWORD=
# Redis configuration
#REDIS_HOST=redis
#REDIS_PORT=6379
#REDIS_DB=0
#REDIS_PASSWORD=
# Sandbox configuration
#SANDBOX_ADDRESS=
SANDBOX_IMAGE=simpleyyt/manus-sandbox
SANDBOX_NAME_PREFIX=sandbox
SANDBOX_TTL_MINUTES=30
SANDBOX_NETWORK=manus-network
#SANDBOX_CHROME_ARGS=
#SANDBOX_HTTPS_PROXY=
#SANDBOX_HTTP_PROXY=
#SANDBOX_NO_PROXY=
# Search engine configuration
# Options: baidu, google, bing
SEARCH_PROVIDER=bing
# Google search configuration, only used when SEARCH_PROVIDER=google
#GOOGLE_SEARCH_API_KEY=
#GOOGLE_SEARCH_ENGINE_ID=
# Auth configuration
# Options: password, none, local
AUTH_PROVIDER=password
# Password auth configuration, only used when AUTH_PROVIDER=password
PASSWORD_SALT=
PASSWORD_HASH_ROUNDS=10
# Local auth configuration, only used when AUTH_PROVIDER=local
#LOCAL_AUTH_EMAIL=admin@example.com
#LOCAL_AUTH_PASSWORD=admin
# JWT configuration
JWT_SECRET_KEY=your-secret-key-here
JWT_ALGORITHM=HS256
JWT_ACCESS_TOKEN_EXPIRE_MINUTES=30
JWT_REFRESH_TOKEN_EXPIRE_DAYS=7
# Email configuration
# Only used when AUTH_PROVIDER=password
#EMAIL_HOST=smtp.gmail.com
#EMAIL_PORT=587
#EMAIL_USERNAME=your-email@gmail.com
#EMAIL_PASSWORD=your-password
#EMAIL_FROM=your-email@gmail.com
# MCP configuration
#MCP_CONFIG_PATH=/etc/mcp.json
# Log configuration
LOG_LEVEL=INFO- Run in debug mode:
# Equivalent to docker compose -f docker-compose-development.yaml up
./dev.sh upAll services will run in reload mode, and code changes will be automatically reloaded. The exposed ports are as follows:
- 5173: Web frontend port
- 8000: Server API service port
- 8080: Sandbox API service port
- 5900: Sandbox VNC port
- 9222: Sandbox Chrome browser CDP port
Note: In Debug mode, only one sandbox will be started globally
- When dependencies change (requirements.txt or package.json), clean up and rebuild:
# Clean up all related resources
./dev.sh down -v
# Rebuild images
./dev.sh build
# Run in debug mode
./dev.sh upexport IMAGE_REGISTRY=your-registry-url
export IMAGE_TAG=latest
# Build images
./run build
# Push to the corresponding image repository
./run push