Key points
- Positioning: JManus is a Spring Boot-driven multi-agent Plan-Act execution platform, targeting enterprise environments that need deterministic, auditable AI workflow orchestration. The frontend uses Vue 3 + Ant Design Vue with a graphical interface for plan editing, execution, and monitoring.
- Overall shape: A monolithic Spring Boot application hosts all business APIs, the plan-execution kernel, the tool system, and persistence, and serves the built Vue frontend from static resources. Docker and GraalVM native image deployments are both supported.
- Core capabilities: Plan generation and scheduling in Plan-Act mode, tool invocation (database, browser, Bash, OCR, etc.), execution trace recording, conversational memory, MCP (Model Context Protocol) extensions, open HTTP APIs, and Cron scheduling.
- Runtime requirements: Java 17+, embedded H2 by default (switchable to MySQL/PostgreSQL), an external LLM service (e.g., DashScope), and optional Playwright/ChromeDriver.
- UI layer: the
ui-vue3sub-project builds intosrc/main/resources/staticand is served by Spring Boot. - Service layer: REST APIs under
/api/*; high-level APIs focus on plan execution (ManusController), plan templates, configuration, and tool orchestration. - Execution kernel: the
planning,runtime,agent,tool, andrecorderpackages form the chain from plan parsing, agent dispatch, and tool invocation to execution recording. - Data & config layer: Spring Data JPA repositories plus
Config/Recorderentities; theconfigpackage handles dynamic configuration, startup loading, and property mapping. - External integrations:
llmfor LLM interaction,mcpfor remote MCP tools,adapterfor OpenAI-compatible protocols,deployfor containerization scripts. - Events & scheduling: an
eventdomain event bus and acronpackage wrapping Spring Scheduling. PlanningFactoryregisters tool callbacks (browser, database, Cron, etc.) and dynamically extends the tool list from MCP services, wrapping each tool as aToolCallBiFunctionDeforMcpTool.PlanningCoordinatorconverts plans intoExecutionContext, delegates to an executor fromPlanExecutorFactory, and passes results toPlanFinalizerfor post-processing (summaries, direct responses, or interruption notices).AbstractPlanExecutorcontrols the step loop, agent execution, file syncing, result recording, and interruption, usingLevelBasedExecutorPoolfor hierarchical thread-pool scheduling.PlanFinalizerdecides whether to generate an LLM summary, respond directly, or report an interrupted task, while writing execution records and interacting with conversation memory.- All tools implement
ToolCallBiFunctionDef, providing name, description, input schema, and execution callback aligned with function calling. - Built-in tool families: browser automation (
BrowserUseToolwith Playwright/ChromeDriver), database read/write/metadata tools, file and OCR-to-Markdown tools,CronToolfor scheduled plans, andParallelExecutionToolfor concurrent sub-plans. - Extension:
tool/howToCreateNewTool.mddocuments custom tool creation; MCP tools load remote capabilities dynamically viaMcpService. - The
configpackage mapsapplication.ymlproperties (ManusProperties, etc.), exposes runtime configuration viaConfigController/ConfigService, and loads defaults through startup listeners. - The
eventpackage definesJmanusEventandPlanExceptionEvent; thecronpackage provides plan-level scheduled execution;TaskInterruptionManagercoordinates execution interruption via database state. NewRepoPlanExecutionRecorderpersists full execution traces (Plan → Agent → Think-Act hierarchy), supporting execution-tree rendering in the UI.- Vue 3 (Composition API) + TypeScript + Vite + Pinia + Vue Router + Ant Design Vue; production builds are copied to the backend
static/uidirectory. - Pinia stores (
task,sidebar,memory,namespace) manage task submission, running state, stop operations, conversation memory, and namespace context, syncing across views via browser events andlocalStorage. - The API layer wraps
fetchcalls against/api/*. The main flow: submit a task → obtainplanId→ track state in Pinia → poll/api/executor/details/{planId}for the execution tree → submit user input via/submit-input/{planId}when required. Task interruption calls/api/executor/stopTask/{planId}. - Plan creation to execution:
ManusController.executeByToolNameAsyncaccepts tool names or template IDs, writes conversation memory, syncs uploaded files, and triggersPlanningCoordinator. Plan templates support<<param>>placeholder substitution. - User input & interruption:
UserInputServicemarks waiting states inRootTaskManagerEntity; submitted JSON forms wake the executor; interruption is confirmed throughTaskInterruptionManagerin both the executor loop and finalizer. - Custom tools: implement
ToolCallBiFunctionDefand register with Spring or MCP;PlanningFactorycan register full or trimmed tool sets based onagent.initconfiguration. - Dynamic agents:
DynamicAgent,ConfigurableDynaAgent, andDynamicAgentDefinitionassemble agent flows at runtime; thesubplanmodule generates child plans dynamically, forming tree-shaped execution. - LLM integration adapts Spring AI via
LlmService, supporting multiple vendors, streaming responses, and memory strategies. Makefileandtools/makewrap Maven, frontend builds, Docker image creation, and CI checks (codespell, markdownlint, yamllint).deploy/Dockerfileis JDK17-based;deploy/start.shprovides the startup script;/api/configoffers dynamic configuration;playwright-initpre-downloads browser kernels.- Logging uses
logback-spring.xmlwith aManusProperties.debugDetailswitch for LLM debugging.
Architecture blueprint
Backend execution pipeline
Tool system
Configuration, events, and persistence
Frontend architecture
Key flows
Extensibility
Deployment & operations
Conclusion
JManus closes the loop from frontend orchestration → backend plan-execution kernel → tools and external services → execution recording and visual feedback. Developers can extend tooling, customize plan templates, or swap LLM providers while keeping the core execution pipeline stable.