JARVIS v2.0 is a Personal AI Assistant (PI) - a next-generation agentic harness inspired by Claude Code and mistral-vibe. It provides unified agentic assistance for coding, research, documentation, and knowledge work through intelligent tool usage.
| Feature | Description |
|---|---|
| π€ Fully Agentic | JARVIS agent handles coding, research, documentation, and complex tasks autonomously |
| π Explore Subagent | Specialized agent for codebase exploration and architecture analysis |
| π Plan Subagent | Specialized agent for planning and task decomposition |
| π΄ Fork Subagent | Fork conversation context for parallel exploration |
| π MCP Integration | Connect to external MCP servers (stdio/HTTP transports) |
| π WebUI | Full-featured browser-based interface with FastAPI backend |
| π¨ Techy WebUI | Modern dark UI with infinite canvas, dot grid, slash commands, thinking picker |
| π‘ Learning System | Pattern detection, skill creation, and self-evaluation |
| πΎ Semantic Memory | Memory management for knowledge retrieval |
| π» Dual Interfaces | Rich CLI, modern TUI (Textual), and WebUI |
| π Safety First | Granular permission system with 5 agent profiles |
| π§ 20+ Tools | Comprehensive tools for file ops, code execution, web, and more |
| π Multi-LLM | OpenAI, Anthropic, and custom SDK adapters |
| βοΈ Remote Sessions | Connect to remote JARVIS instances via JARVIS_REMOTE_URL |
| Component | Status |
|---|---|
| β LLM Provider Abstraction | Complete |
| β Tool System | Complete (20+ tools) |
| β JARVIS Agent (PI) | Complete |
| β Explore Subagent | Ready |
| β Plan Subagent | Ready |
| β Fork Subagent | Ready |
| β CLI Interface | Stable |
| β TUI Interface | Complete (Default) |
| β WebUI | Complete (with slash commands, thinking picker, remote sessions) |
| β Permission System | Complete |
| β MCP Integration | Complete |
| β Learning System | Complete |
| β Heartbeat System | Complete |
| β Connectors System | Complete |
| β Session Management | Complete (local + remote) |
graph TB
%% Nodes definition
subgraph "JARVIS Agent Layer"
Jarvis["JarvisV2 (Main Agent)<br/>core/agents/jarvis_v2.py"]
end
subgraph "Core Managers & Controllers"
AgentMgr["AgentManager<br/>core/agents/manager.py"]
ToolReg["ToolRegistry<br/>core/tools/registry.py"]
Config["Settings & Models<br/>core/config/settings.py"]
History["ConversationHistory<br/>core/history.py"]
end
subgraph "Specialized Agents"
ExploreAg["ExploreAgent<br/>explore_agent.py"]
PlanAg["PlanAgent<br/>plan_agent.py"]
ForkAg["ForkSubagent<br/>fork_subagent.py"]
BuiltinAg["BuiltinAgents<br/>builtin_agents.py"]
end
subgraph "Toolbox (20+ Tools)"
FileTools["File Tools<br/>file_tools.py / file_edit_tool.py"]
GrepTool["Grep Tool<br/>grep_tool.py"]
ReplTool["REPL Tool<br/>repl_tool.py"]
MCPTool["MCP Adapter<br/>mcp_adapter.py"]
WebTools["Web Tools<br/>web_tools.py"]
SkillTool["Skill Tools<br/>skill_tool.py"]
end
subgraph "Supporting Systems"
Skills["SkillManager<br/>core/skills/manager.py"]
Safety["PermissionManager<br/>core/tools/permissions.py"]
Learn["LearningManager<br/>core/learn/learning_manager.py"]
Connectors["ConnectorManager<br/>core/connectors/manager.py"]
end
subgraph "LLM Provider Layer"
SDK["LLM SDK Adapter<br/>core/llm/sdk_adapter.py"]
OpenAI["OpenAI SDK<br/>core/llm_sdk/openai"]
Anthropic["Anthropic SDK<br/>core/llm_sdk/anthropic"]
Gemini["Gemini SDK<br/>core/llm_sdk/geminicli"]
end
%% Relationships & Flow
Jarvis --> AgentMgr
Jarvis --> ToolReg
Jarvis --> Config
Jarvis --> History
AgentMgr --> ExploreAg
AgentMgr --> PlanAg
AgentMgr --> ForkAg
AgentMgr --> BuiltinAg
ToolReg --> FileTools
ToolReg --> GrepTool
ToolReg --> ReplTool
ToolReg --> MCPTool
ToolReg --> WebTools
ToolReg --> SkillTool
Jarvis --> Learn
Jarvis --> Connectors
%% Interactions (Working)
FileTools --> Safety
GrepTool --> Safety
ReplTool --> Safety
SkillTool --> Skills
Learn --> Skills
Jarvis --> SDK
ExploreAg --> SDK
PlanAg --> SDK
SDK --> OpenAI
SDK --> Anthropic
SDK --> Gemini
%% Styling
classDef main fill:#ffcccc,stroke:#333,stroke-width:2px;
classDef core fill:#ccffcc,stroke:#333,stroke-width:1px;
classDef agent fill:#ccccff,stroke:#333,stroke-width:1px;
classDef tool fill:#ffffcc,stroke:#333,stroke-width:1px;
classDef support fill:#ffccff,stroke:#333,stroke-width:1px;
classDef sdk fill:#ccffff,stroke:#333,stroke-width:1px;
class Jarvis main;
class AgentMgr,ToolReg,Config,History core;
class ExploreAg,PlanAg,ForkAg,BuiltinAg agent;
class FileTools,GrepTool,ReplTool,MCPTool,WebTools,SkillTool tool;
class Skills,Safety,Learn,Connectors support;
class SDK,OpenAI,Anthropic,Gemini sdk;
JARVIS/
βββ core/
β βββ agents/ # Agent system
β β βββ base.py # Abstract BaseAgent
β β βββ jarvis_v2.py # Main JARVIS agent
β β βββ explore_agent.py # Codebase exploration
β β βββ plan_agent.py # Planning subagent
β β βββ fork_subagent.py # Fork context subagent
β β βββ heartbeat_scheduler.py # Nanobot-style heartbeat
β β βββ manager.py # AgentManager
β β βββ profiles.py # Profile definitions
β β βββ builtin_agents.py # Built-in agents
β β βββ system_prompts.py # Prompt management
β βββ config/ # Configuration
β β βββ settings.py # App settings
β β βββ models.py # Pydantic models
β βββ tools/ # Tool system
β β βββ registry.py # Tool registry
β β βββ base.py # BaseTool class
β β βββ permissions.py # Permission system
β β βββ file_tools.py # File operations
β β βββ code_tools.py # Bash, REPL, tests
β β βββ mcp_adapter.py # MCP integration
β β βββ skill_tool.py # Skill invocation
β β βββ skill_manage_tool.py # Skill management
β β βββ memory_tool.py # Memory operations
β β βββ web_tools.py # Web fetching
β β βββ grep_tool.py # Pattern search
β β βββ background_tools.py # Background tasks
β βββ llm_sdk/ # LLM provider SDKs
β β βββ openai/ # OpenAI adapter
β β βββ anthropic/ # Anthropic adapter
β β βββ copilot/ # Copilot adapter
β β βββ base/ # Base interface
β βββ learn/ # Learning system
β β βββ learning_manager.py # Main learning
β β βββ pattern_detector.py # Pattern detection
β βββ connectors/ # Connectors system
β β βββ manager.py # ConnectorManager
β β βββ filesystem.py # Filesystem connector
β βββ memory/ # Memory system
β βββ skills/ # Skill management
β βββ learn/ # Learning system
β βββ web/ # Web server
βββ interface/
β βββ cli/ # Rich CLI interface
β βββ textual_ui/ # TUI interface (Textual)
β βββ webui/ # WebUI (TypeScript + FastAPI)
βββ jarvis/ # Entry point
β βββ cli.py # CLI launcher
βββ tests/ # Test suite
βββ docs/ # Documentation
- Python 3.10+ (recommended 3.11+)
- API Key from OpenAI or Anthropic
# Clone the repository
git clone https://github.com/OEvortex/JARVIS.git
cd JARVIS
# Create virtual environment
uv venv
# Activate virtual environment
# On Linux/macOS:
source .venv/bin/activate
# On Windows:
.venv\Scripts\activate
# Install dependencies
uv pip install -e .Create a .env file with your API keys:
cp .env.example .envJARVIS_MODEL=gpt-4o
JARVIS_BASE_URL=https://api.openai.com/v1
JARVIS_API_KEY=your_api_key_here
JARVIS_SDK=openaiFor more advanced configuration, create a .jarvis/settings.json file (see Configuration Reference below).
# Launch TUI interface (default - uses .env file from current working directory)
jarvis
# With explicit configuration
jarvis --model gpt-4o --apikey YOUR_KEY
# With custom base URL (for local LLMs)
jarvis --model llama-3-70b --base_url http://localhost:8000/v1 --apikey dummy --sdk openai# Using CLI flags
jarvis --cli --model gpt-4o --apikey YOUR_KEY --sdk openai
# Using .env configuration
jarvis --cli
# Using short flags
jarvis --cli -m gpt-4o --apikey YOUR_KEY# Launch WebUI interface (default: http://127.0.0.1:5173)
jarvis --webui
# With custom port
jarvis --webui --port 8080 --backend-port 8765
# Expose to network
jarvis --webui --host 0.0.0.0 --port 5173- Slash Commands: Type
/for autocomplete (help, status, clear, exit, profile, tools, skills, rewind, config, mcp) - Thinking Picker: Select AI reasoning level (Low/Medium/High) for each message
- Infinite Canvas: Draggable dot grid background that extends infinitely
- Remote Sessions: Connect to remote JARVIS instances via
JARVIS_REMOTE_URLenv variable - Markdown Rendering: Beautiful tables, lists, headings with blue theme styling
- Session Management: Resume/load previous sessions from local storage
- Auto-Greeting: Sends "hi" on connect so users see immediate activity
# Remote sessions (optional)
JARVIS_REMOTE_URL=https://your-remote-jarvis.com| Flag | Short | Description |
|---|---|---|
--model |
-m |
Model name (e.g., gpt-4o, claude-3-5-sonnet-20241022) |
--base_url |
Base URL for LLM API | |
--apikey |
--api-key |
API key for the provider |
--sdk |
SDK mode: openai or anthropic |
|
--cli |
Launch CLI interface | |
--tui |
--TUI |
Launch TUI interface (default) |
--webui |
Launch WebUI interface | |
--bypass |
--yolo |
Bypass all tool permissions |
--host |
-H |
WebUI host (default: 127.0.0.1) |
--port |
-p |
WebUI frontend port (default: 5173) |
--backend-port |
-b |
WebUI backend port (default: 8765) |
JARVIS comes with 20+ built-in tools for comprehensive task handling:
| Tool | Description |
|---|---|
read |
Read file(s) with parallel support and offset/limit |
write |
Create new files (fails if exists) |
edit |
Edit existing files with string replacements |
list_dir |
List directory contents |
glob |
Search files by glob pattern |
| Tool | Description |
|---|---|
bash |
Execute shell commands |
repl |
Interactive Python REPL |
run_tests |
Run test files with pytest |
| Tool | Description |
|---|---|
grep |
Search for patterns in files |
| Tool | Description |
|---|---|
web_fetch |
Fetch web content |
web_search |
Search the web via Brave API |
| Tool | Description |
|---|---|
run_in_background |
Run commands in background |
list_background_processes |
List running background processes |
read_background_output |
Read background process output |
| Tool | Description |
|---|---|
save_memory |
Save information to semantic memory |
read_memory |
Read from memory |
learn_from_interaction |
Learn from interactions |
| Tool | Description |
|---|---|
agents |
Invoke subagents (explore, plan, fork) |
activate_skill |
Activate specialized skills |
manage_skills |
Create and manage custom skills |
ask_user_question |
Ask user structured questions |
| Tool | Description |
|---|---|
mcp_tools |
Execute tools from connected MCP servers |
mcp_list_servers |
List connected MCP servers |
| Tool | Description |
|---|---|
clipboard_read |
Read system clipboard |
clipboard_write |
Write to system clipboard |
resource_monitor |
Check system resources |
JARVIS is your main Personal AI Assistant (PI) agent with multiple specialized subagents:
| Agent | Purpose |
|---|---|
| JARVIS | Main agent for all tasks (coding, research, documentation) |
| Explore | Codebase exploration and architecture analysis |
| Plan | Task decomposition and planning |
| Fork | Fork conversation for parallel exploration |
Switch between safety levels for your workflow:
| Profile | Safety Level | Description |
|---|---|---|
default |
NEUTRAL | Read ops allowed, writes and commands need approval |
plan |
SAFE | Read-only for exploration and planning |
accept-edits |
DESTRUCTIVE | Auto-approves file edits |
auto-approve |
YOLO | Auto-approves all (use with caution) |
explore |
SAFE (Subagent) | Read-only subagent for codebase exploration |
Cycle profiles with Shift+Tab in TUI.
Permission Levels:
- ALWAYS: Tool executes without asking
- NEVER: Tool is permanently disabled
- ASK: Tool requires user approval (default)
Granular Permissions (Vibe-style):
- Path-based allowlist/denylist: Files matching patterns are always/never allowed
- Sensitive file patterns: Files matching sensitive patterns require special approval
- Workdir boundary: Files outside working directory require approval
- Scratchpad paths: Files in scratchpad directories are always allowed
- Dangerous command patterns: Bash commands with dangerous patterns require special approval
JARVIS supports connecting to external MCP servers for extended capabilities:
// .mcp.json (or ~/.jarvis/mcp_servers.json)
{
"mcp_servers": [
{
"name": "filesystem",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed"],
"transport": "stdio"
},
{
"name": "github",
"command": "python",
"args": ["-m", "mcp.server.github"],
"transport": "stdio",
"env": { "GITHUB_TOKEN": "..." }
},
{
"name": "http-server",
"url": "http://localhost:3000/mcp",
"transport": "http"
}
]
}- stdio: Local subprocess-based MCP servers
- http/sse: Remote MCP servers via HTTP
JARVIS includes an intelligent learning system that:
- Pattern Detection: Identifies recurring patterns in user interactions
- Skill Creation: Automatically creates skills after threshold interactions
- Self-Evaluation: Periodically evaluates its own performance
- Memory Management: Semantic memory with importance scoring
[learning]
enabled = true
skill_creation_threshold = 5
self_evaluation_interval = 15
memory_dir = "~/.jarvis/memory"
skills_dir = "~/.jarvis/skills"
max_memory_chars = 100000
max_user_chars = 50000JARVIS includes a nanobot-style two-phase heartbeat for periodic awareness:
- Phase 1 (Decision): LLM decides via virtual tool call whether to skip or run
- Phase 2 (Execution): Only triggered when Phase 1 returns "run"
- Response Filtering: Non-deliverable responses are automatically suppressed
[heartbeat]
enabled = true
every = "30m"
target = "last"
light_context = false
isolated_session = false
skip_when_busy = true
prompt = "Review tasks and decide if action is needed."
active_hours = { start = "09:00", end = "18:00", timezone = "America/New_York" }
show_ok = false
show_alerts = true
use_indicator = trueCreate .jarvis/HEARTBEAT.md in your project to define periodic tasks:
# Heartbeat Tasks
## Active Tasks
- [ ] Review open PRs
- [ ] Check build status
- [ ] Update dependencies
## Completed
- [x] Last task description# LLM Configuration
JARVIS_MODEL=gpt-4o
JARVIS_BASE_URL=https://api.openai.com/v1
JARVIS_API_KEY=your_api_key
JARVIS_SDK=openai
# Heartbeat Configuration (optional)
JARVIS_HEARTBEAT_ENABLED=true
JARVIS_HEARTBEAT_EVERY=30m
JARVIS_HEARTBEAT_TARGET=last
JARVIS_HEARTBEAT_SKIP_WHEN_BUSY=true
JARVIS_HEARTBEAT_SHOW_OK=false{
"app": {
"name": "JARVIS",
"version": "2.0.0",
"debug": false
},
"provider": {
"selected_provider_id": "openai",
"config_file": "providers.json"
},
"learning": {
"enabled": true,
"skill_creation_threshold": 5,
"self_evaluation_interval": 15,
"memory_dir": "~/.jarvis/memory",
"skills_dir": "~/.jarvis/skills"
},
"tools": {
"enable_code_execution": true,
"enable_file_operations": true,
"enable_git_operations": true
},
"async": {
"max_concurrent_agents": 5,
"max_concurrent_tools": 10,
"default_timeout": 300,
"enable_background_tasks": true,
"resource_monitoring": true,
"progress_updates": true
},
"heartbeat": {
"enabled": false,
"every": "30m",
"target": "last",
"light_context": false,
"skip_when_busy": true,
"show_ok": false
},
"learning": {
"enabled": true,
"skill_creation_threshold": 5,
"self_evaluation_interval": 15
}
}# Run all tests
pytest tests/ -v
# Run specific test file
pytest tests/test_async_agents.py -v
# Run single test
pytest tests/test_async_agents.py::test_function_name -v# Format code
black core/ interface/ jarvis/
# Lint
ruff check core/ interface/ jarvis/
# Type check
ty check .Contributions are welcome! Please read our contributing guidelines before submitting PRs.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE for details.
- Repository: https://github.com/OEvortex/JARVIS
- Issues: https://github.com/OEvortex/JARVIS/issues
- Authors: OEvortex and AnonymousCoderLokesh
