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!
π Try a Demo
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: bridge
Save as docker-compose.yml file, and run:
docker compose up -d
Note: 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 up
export IMAGE_REGISTRY=your-registry-url export IMAGE_TAG=latest # Build images ./run build # Push to the corresponding image repository ./run push