Skip to content

OEvortex/JARVIS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

323 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

JARVIS v2.1

Your Personal AI Assistant - Fully Agentic AI Harness with Claude Code-style Capabilities


πŸš€ Overview

JARVIS v2.1 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. Built with a plugin-extensible, event-driven architecture featuring an extension system, lifecycle hooks, pub/sub event bus, pluggable operation backends, persistent memory, RPC mode, and comprehensive tooling.

Key Features

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
🧠 Persistent Memory Structured memory with types (user/feedback/project/reference/global), scopes (private/team/global), tagging, and priority
πŸ”Œ Extension System Plugin architecture β€” custom tools, hooks, commands, shortcuts loaded from .jarvis/extensions/*.py
πŸ”§ Pluggable Operations Swap file/bash/edit backends at runtime (SSH, Docker, sandbox) via OperationsRegistry
πŸ”” Event & Hook System Pub/sub EventBus (24 event types) + lifecycle HookRegistry (16 stages) for observability and interception
πŸ“œ Prompt Templates Markdown files with YAML frontmatter auto-register as slash commands (/review, /testgen, /explain)
πŸ”„ Rewind System Conversation checkpointing with file snapshots for undo
πŸ“‘ RPC Mode JSONL protocol over stdin/stdout for IDE/process embedding
πŸ”Œ MCP Integration Lazy MCP proxy tool with on-demand connections, metadata cache, auth support
🌐 WebUI Full-featured browser-based interface with FastAPI backend
🎨 Techy WebUI Modern dark UI with infinite canvas, dot grid, slash commands, active tool call widget
πŸ’‘ Learning System Pattern detection, skill creation, and self-evaluation
πŸ’» Dual Interfaces Rich CLI, modern TUI (Textual), and WebUI
πŸ”’ Safety First Granular permission system with 5 agent profiles
πŸ”§ 25+ Tools Comprehensive tools for file ops, code execution, web, memory, worktree, MCP, and more
πŸ”Œ Multi-LLM OpenAI, Anthropic, and custom SDK adapters
☁️ Remote Sessions Connect to remote JARVIS instances via JARVIS_REMOTE_URL

πŸ“¦ Installation

Prerequisites

  • Python 3.10+ (recommended 3.11+)
  • Node.js 18+ (only needed for WebUI mode)
  • API Key from OpenAI or Anthropic

Quick Setup (CLI/TUI)

# Clone the repository
git clone https://github.com/OEvortex/JARVIS.git
cd JARVIS

# Create and activate virtual environment with uv
uv venv
source .venv/bin/activate     # Linux/macOS
# .venv\Scripts\activate       # Windows

# Install Python dependencies
uv sync

# Configure your API key
cp .env.example .env
# Then edit .env with your API key

Quick Setup (WebUI)

If you want the browser-based WebUI, do the extra step after installing Python deps:

# Install WebUI frontend dependencies
cd jarvis/interface/webui
npm install
cd ../../..

Quick Start

# TUI mode (default)
jarvis

# WebUI mode
jarvis --webui

Configuration

Create a .env file with your API keys:

cp .env.example .env
JARVIS_MODEL=gpt-4o
JARVIS_BASE_URL=https://api.openai.com/v1
JARVIS_API_KEY=your_api_key_here
JARVIS_SDK=openai

For more advanced configuration, create a .jarvis/settings.json file (see Configuration Reference below).


πŸš€ Usage

TUI Mode (Default)

jarvis
jarvis --model gpt-4o --apikey YOUR_KEY
jarvis --model llama-3-70b --base_url http://localhost:8000/v1 --apikey dummy --sdk openai

CLI Mode

jarvis --cli --model gpt-4o --apikey YOUR_KEY --sdk openai
jarvis --cli

WebUI Mode

Prerequisite: Run cd jarvis/interface/webui && npm install && cd ../../.. first to install frontend dependencies.

jarvis --webui
jarvis --webui --port 8080 --backend-port 8765
jarvis --webui --host 0.0.0.0 --port 5173

RPC Mode

echo '{"id":"1","type":"prompt","message":"Hello"}' | jarvis --mode rpc

Available CLI Flags

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
--mode Interface mode: tui (default), cli, webui, rpc
--cli Launch CLI interface
--tui --TUI Launch TUI interface (default)
--webui Launch WebUI interface
--rpc Launch RPC mode
--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)

🎯 Current Status

Component Status
βœ… LLM Provider Abstraction Complete
βœ… Tool System Complete (25+ tools)
βœ… JARVIS Agent (PI) Complete
βœ… Explore Subagent Ready
βœ… Plan Subagent Ready
βœ… Fork Subagent Ready
βœ… Rubber Duck Agent Ready
βœ… CLI Interface Stable
βœ… TUI Interface Complete (Default)
βœ… WebUI Complete (with slash commands, active tool call widget, remote sessions)
βœ… Permission System Complete
βœ… MCP Integration Complete (lazy proxy, lifecyle mgmt, auth, cache)
βœ… Extension System Complete (API, loader, runner, registry)
βœ… Event/Hook System Complete (EventBus + 16 HookStages)
βœ… Operations Registry Complete (pluggable file/bash/edit backends)
βœ… Persistent Memory Complete (typed, scoped, tagged, priority)
βœ… Prompt Templates Complete (markdown frontmatter β†’ slash commands)
βœ… Resource Discovery Complete (tiered: project > user > global)
βœ… Learning System Complete
βœ… Heartbeat System Complete
βœ… Connectors System Complete
βœ… Rewind System Complete (checkpoints + file snapshots)
βœ… RPC Mode Complete (JSONL stdin/stdout protocol)
βœ… Worktree Tools Complete (enter/exit git worktrees)
βœ… Theme & Keybindings Complete (51 tokens, hot-reload, namespaced actions)
βœ… Session Management Complete (local + remote)

πŸ—οΈ Architecture

System Overview

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"]
        DuckAg["RubberDuckAgent<br/>rubber_duck_agent.py"]
        BuiltinAg["BuiltinAgents<br/>builtin_agents.py"]
    end

    subgraph "Toolbox (25+ 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"]
        MemTool["Memory Tools<br/>memory_tool.py"]
        WtTool["Worktree Tools<br/>worktree_tool.py"]
        SkillTool["Skill Tools<br/>skill_tool.py"]
    end

    subgraph "Plugin & Event Layer"
        ExtAPI["Extension System<br/>core/extensions/"]
        EventBus["EventBus + Hooks<br/>core/events/"]
        OpsReg["OperationsRegistry<br/>core/tools/operations/"]
    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"]
        Prompts["Prompt Templates<br/>core/prompts/"]
        Resources["Resource Discovery<br/>core/resources/"]
        Rewind["Rewind Manager<br/>core/rewind/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"]
    end

    %% Relationships & Flow
    Jarvis --> AgentMgr
    Jarvis --> ToolReg
    Jarvis --> Config
    Jarvis --> History
    Jarvis --> ExtAPI
    Jarvis --> EventBus

    AgentMgr --> ExploreAg
    AgentMgr --> PlanAg
    AgentMgr --> ForkAg
    AgentMgr --> DuckAg
    AgentMgr --> BuiltinAg

    ToolReg --> FileTools
    ToolReg --> GrepTool
    ToolReg --> ReplTool
    ToolReg --> MCPTool
    ToolReg --> WebTools
    ToolReg --> MemTool
    ToolReg --> WtTool
    ToolReg --> SkillTool
    ToolReg --> OpsReg

    Jarvis --> Learn
    Jarvis --> Connectors
    Jarvis --> Rewind
    Jarvis --> Prompts
    Jarvis --> Resources

    FileTools --> Safety
    GrepTool --> Safety
    ReplTool --> Safety

    SkillTool --> Skills
    Learn --> Skills

    Jarvis --> SDK
    ExploreAg --> SDK
    PlanAg --> SDK
    ForkAg --> SDK

    SDK --> OpenAI
    SDK --> Anthropic

    %% 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 plugin fill:#ccddff,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,DuckAg,BuiltinAg agent;
    class FileTools,GrepTool,ReplTool,MCPTool,WebTools,MemTool,WtTool,SkillTool tool;
    class ExtAPI,EventBus,OpsReg plugin;
    class Skills,Safety,Learn,Connectors,Prompts,Resources,Rewind support;
    class SDK,OpenAI,Anthropic sdk;
Loading

Directory Structure

JARVIS/
β”œβ”€β”€ core/                   # Python backend
β”‚   β”œβ”€β”€ agents/                # Agent system (base, jarvis_v2, manager, profiles, prompts, subagents)
β”‚   β”œβ”€β”€ tools/                 # Tool system (registry, base, permissions, 25+ tools, MCP, sandbox, operations)
β”‚   β”œβ”€β”€ tools/operations/      # Pluggable operation backends (file, bash, edit) β€” SSH, Docker, sandbox
β”‚   β”œβ”€β”€ tools/agent/           # Agent activity tracking, memory snapshots, fork isolation
β”‚   β”œβ”€β”€ events/                # EventBus (pub/sub), HookRegistry (16 stages), 24 event types
β”‚   β”œβ”€β”€ extensions/            # Extension plugin system β€” API, loader, runner, registry
β”‚   β”œβ”€β”€ llm/                   # LLM provider abstraction (SDKAdapter, model info, registry)
β”‚   β”œβ”€β”€ llm_sdk/               # Provider SDKs (openai/, anthropic/, base)
β”‚   β”œβ”€β”€ provider/              # Provider manager & models
β”‚   β”œβ”€β”€ config/                # Settings, models, theme (51 tokens), keybindings (namespaced)
β”‚   β”œβ”€β”€ connectors/            # External data connectors (github, http, rss, weather, filesystem)
β”‚   β”œβ”€β”€ learn/                 # Learning system (pattern detection, skill crystallization, classification)
β”‚   β”œβ”€β”€ skills/                # Skill management (CRUD, sources, trace collection)
β”‚   β”œβ”€β”€ prompts/               # Prompt template system (markdown β†’ slash commands)
β”‚   β”œβ”€β”€ resources/             # Tiered resource discovery (project > user > global)
β”‚   β”œβ”€β”€ rewind/                # Conversation checkpointing with file snapshots
β”‚   β”œβ”€β”€ rpc/                   # RPC mode (JSONL stdin/stdout protocol)
β”‚   β”œβ”€β”€ watchers/              # Passive file/event watchers (manager + base)
β”‚   β”œβ”€β”€ web/                   # FastAPI web server (REST + WebSocket endpoints)
β”‚   └── agents/                # Agent lifecycle, prompts, builtins
β”œβ”€β”€ interface/             # User interfaces
β”‚   β”œβ”€β”€ cli/                   # prompt_toolkit-based CLI
β”‚   β”œβ”€β”€ textual_ui/            # Textual-based TUI (30+ widgets)
β”‚   └── webui/                 # React/TypeScript WebUI (Vite + Tailwind + shadcn)
β”œβ”€β”€ jarvis/                # Entry point & launcher
β”œβ”€β”€ tests/                 # Python test suite (pytest)
β”œβ”€β”€ docs/                  # πŸ“– Documentation
β”‚   β”œβ”€β”€ SUMMARY.md            # Entry point with quick-links
β”‚   β”œβ”€β”€ SETUP.md              # Installation & configuration
β”‚   β”œβ”€β”€ ARCHITECTURE.md       # Full system architecture
β”‚   β”œβ”€β”€ API.md                # REST + WebSocket API reference
β”‚   β”œβ”€β”€ CONTRIBUTING.md       # Development guide
β”‚   β”œβ”€β”€ custom-agents.md      # Custom agent profiles
β”‚   β”œβ”€β”€ custom-tools.md       # Writing new tools
β”‚   β”œβ”€β”€ MCP.md                # MCP server integration
β”‚   β”œβ”€β”€ SANDBOX.md            # Sandboxed execution
β”‚   β”œβ”€β”€ EXTENSIONS.md         # Extension plugin system
β”‚   β”œβ”€β”€ HOOKS.md              # Event & hook system
β”‚   β”œβ”€β”€ watchers.md           # File/event watchers
β”‚   └── webui-theme.md        # CSS variable theming
β”œβ”€β”€ examples/              # Reference examples
β”‚   β”œβ”€β”€ extensions/           # Extension examples (hello_world, audit, safety, ssh, etc.)
β”‚   └── prompts/              # Prompt template examples (review, testgen, explain)
β”œβ”€β”€ main.py               # Application entry point
β”œβ”€β”€ providers.json         # LLM provider definitions
β”œβ”€β”€ pyproject.toml          # Python project config
└── .env.example           # Environment variables template

🧠 Persistent Memory System

JARVIS features a structured persistent memory system (inspired by OpenClaude and Hermes):

Memory Types

Type Description
user Details about user's role, goals, preferences
feedback Guidance on how to approach work, corrections
project Ongoing work, goals, initiatives, bugs
project_context Architecture, technical decisions, implementation details
reference Pointers to external systems and resources
global Cross-project patterns and best practices

Scopes & Organization

Scope Location Visibility
private .jarvis/memory/private/ Current project only
team .jarvis/memory/team/ Shared within project
global ~/.jarvis/global_memory/ All projects

Memories are stored as Markdown files with YAML frontmatter (name, description, type, priority, tags, project), automatically indexed via MEMORY.md, and searchable by type, scope, tags, priority, and content.

Memory Tools

Tool Description
save_memory Save structured memories with type, scope, priority, tags
read_memory Search/retrieve memories with filtering
memory Hermes-style MEMORY.md/USER.md management (add/replace/read/remove)

πŸ”Œ Extension System

JARVIS has a full plugin architecture. Extensions are plain Python files loaded from .jarvis/extensions/:

.jarvis/extensions/
β”œβ”€β”€ my_tool.py          # Register custom tools
β”œβ”€β”€ safety_gate.py      # Block dangerous operations via hooks
└── ssh_backend.py      # Swap operations backend to SSH
# .jarvis/extensions/example.py
async def jarvis_extension(api: ExtensionAPI):
    api.register_tool(MyTool())
    api.on(ToolCallStarted, my_handler)
    api.register_hook(HookStage.BEFORE_TOOL_CALL, safety_gate)
    api.register_command("/hello", hello_cmd, "Say hello")
    api.register_shortcut("ctrl+h", "app.hello", "Hello")

See docs/EXTENSIONS.md for the full reference.

Access via ExtensionAPI:

  • register_tool(tool) β€” Override or add tools
  • register_command(name, handler, desc) β€” Slash commands
  • on(event_type, handler) β€” Subscribe to events
  • register_hook(stage, handler) β€” Lifecycle hooks
  • register_shortcut(key, action_id, desc) β€” Keyboard shortcuts
  • api.operations_registry.set_bash_ops(...) β€” Swap backends

πŸ”” Event & Hook System

Dual-layer architecture for observability and interception:

EventBus (Pub/Sub)

  • 24 event types across 8 categories (Agent, Turn, Message, Tool, Session, Extension, Status, System)
  • Priority-ordered handlers, polymorphic dispatch (MRO walking)
  • Per-session instances, introspection stats

HookRegistry (Lifecycle Interception)

  • 16 hook stages covering agent/turn/tool/session/skill lifecycles
  • Handlers can block, modify arguments, or inject content
  • Short-circuit on block, error-tolerant execution

See docs/HOOKS.md for the full reference.


πŸ“‘ RPC Mode

Embed JARVIS in IDEs, web UIs, or other processes via JSONL over stdin/stdout:

echo '{"id":"1","type":"prompt","message":"Hello"}' | jarvis --mode rpc

Commands: prompt, steer, follow_up, bash, compact, new_session, get_state, get_messages, get_tools, set_model

Events: text_delta, thinking_delta, tool_call_start, tool_call_end, turn_start, turn_end, status, session_started


πŸ”§ Pluggable Operations Backend

The OperationsRegistry decouples tool implementations from OS calls. Extensions can swap backends at runtime:

Backend Protocol Use Case
LocalFileOperations aiofiles Default local operations
LocalBashOperations asyncio Default subprocess execution
LocalEditOperations aiofiles Default file editing
Custom Any SSH, Docker, sandbox, remote
api.operations_registry.set_bash_ops(MySSHBackend())
api.operations_registry.set_file_ops(MyDockerBackend())

πŸ“œ Prompt Templates

Markdown files with YAML frontmatter auto-register as slash commands:

---
name: review
description: Review code for issues
arguments: path
---
# Code Review

Review the code at `$1` for:
- Security vulnerabilities
- Performance issues
- Best practices

Arguments use shell-style substitution ($1, $2, $@, ${@:2}). Templates are discovered from .jarvis/prompts/ and ~/.jarvis/prompts/.


πŸ› οΈ Available Tools

JARVIS comes with 25+ built-in tools for comprehensive task handling:

File Operations

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

Code Execution

Tool Description
bash Execute shell commands
repl Interactive Python REPL
run_tests Run test files with pytest

Search & Discovery

Tool Description
grep Search for patterns in files
tool_search Search and discover available tools

Web & Network

Tool Description
web_fetch Fetch web content
web_search Search the web via Brave/Exa API

Background & Async

Tool Description
run_in_background Run commands in background
list_background_processes List running background processes
read_background_output Read background process output

Memory & Knowledge

Tool Description
save_memory Save structured memories (typed, scoped, tagged)
read_memory Search/retrieve memories with filtering
memory Hermes-style MEMORY.md/USER.md management

Agents & Skills

Tool Description
agents Invoke subagents (explore, plan, fork, duck)
activate_skill Activate specialized skills
manage_skills Create and manage custom skills
ask_user_question Ask user structured questions

MCP Tools

Tool Description
mcp Unified proxy tool for all MCP servers (status, list, search, describe, call, connect)
mcp_list_servers List connected MCP servers

Worktree Tools

Tool Description
enter_worktree Create and enter an isolated git worktree
exit_worktree Exit current worktree and return to main

System Tools

Tool Description
clipboard_read Read system clipboard
clipboard_write Write to system clipboard
resource_monitor Check system resources

πŸ‘€ Agent Profiles

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
Rubber Duck Constructive critique and code review

Safety Profiles (WebUI)

5 safety levels with Shift+Tab cycling:

Level Name Code Files Dangerous
L1 Lockdown never ask ask
L2 Restricted ask ask ask
L3 Balanced ask always ask
L4 Permissive always always ask
L5 Unrestricted always always always

Cycle profiles with Shift+Tab in WebUI or TUI.

Permission System

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

πŸ”Œ MCP Integration

JARVIS uses a lazy MCP architecture with a single mcp proxy tool and on-demand connections:

// .mcp.json (or ~/.jarvis/mcp.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"
    }
  ]
}

MCP Transport Types

  • stdio: Local subprocess-based MCP servers
  • http/sse: Remote MCP servers via HTTP

Features: token-efficient proxy tool, lazy connections, metadata cache (~/.jarvis/mcp-cache.json), OAuth/Bearer/API key auth, resources/prompts/sampling support.


πŸ’‘ Learning System

JARVIS includes an intelligent learning system that:

  1. Pattern Detection: Identifies recurring patterns in user interactions
  2. Skill Creation: Automatically creates skills after threshold interactions
  3. Self-Evaluation: Periodically evaluates its own performance
  4. Memory Management: Semantic memory with importance scoring
  5. Classification: ML-based interaction categorization

Configuration

[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 = 50000

πŸ’“ Heartbeat System

JARVIS includes a nanobot-style two-phase heartbeat for periodic awareness:

How it Works

  1. Phase 1 (Decision): LLM decides via virtual tool call whether to skip or run
  2. Phase 2 (Execution): Only triggered when Phase 1 returns "run"
  3. Response Filtering: Non-deliverable responses are automatically suppressed

Configuration

[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 = true

HEARTBEAT.md

Create .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

πŸ”§ Configuration Reference

Environment Variables

# 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

# Remote sessions (optional)
JARVIS_REMOTE_URL=https://your-remote-jarvis.com

Full Configuration (settings.json)

{
  "app": {
    "name": "JARVIS",
    "version": "2.1.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
  }
}

πŸ“š Documentation

Doc For
πŸ“– SUMMARY.md Entry point β€” quick-links + AI agent instructions
πŸš€ SETUP.md Installing, configuring, and running JARVIS
πŸ—οΈ ARCHITECTURE.md Understanding the full system β€” agents, tools, LLM, frontends
πŸ“‘ API.md REST + WebSocket API reference for building on top
πŸ’» CONTRIBUTING.md Developing JARVIS β€” code style, tests, PRs
πŸ€– custom-agents.md Creating custom agent profiles
πŸ”§ custom-tools.md Writing new tools
πŸ”Œ MCP.md Connecting MCP servers
πŸ“¦ SANDBOX.md Sandboxed command execution
πŸ”Œ EXTENSIONS.md Extension plugin system
πŸ”” HOOKS.md Event & hook system
πŸ‘οΈ watchers.md File/event watchers
🎨 webui-theme.md Customizing WebUI colors

βœ… What You Can Change vs What NOT to Touch

Safe to Customize

What How
LLM model/provider Edit providers.json or settings.json
Agent behavior Switch profile or write a custom agent (~/.jarvis/agents/)
Safety level settings.json β†’ agent.safety_profile or Shift+Tab
WebUI colors Edit CSS variables in interface/webui/src/globals.css
System prompt Edit files in core/agents/prompts/
Tool permissions settings.json β†’ permissions
MCP servers Configure in .mcp.json
Custom tools Write a BaseTool subclass β€” see custom-tools.md
Extensions Create .jarvis/extensions/*.py β€” see EXTENSIONS.md
Hooks Register hooks via extensions β€” see HOOKS.md
Prompt templates Create .jarvis/prompts/*.md
All settings ~/.jarvis/settings.json or .jarvis/settings.json

Don't Touch (Internal Invariants)

File(s) Why
core/agents/base.py Agent loop β€” streaming, tool dispatch, approval
core/tools/base.py ToolInput/ToolOutput β€” all tools inherit these
core/tools/registry.py Tool discovery β€” changing breaks every tool
core/llm/base.py + sdk_adapter.py All LLM communication goes through these
core/history.py Message store β€” all consumers depend on its format
core/web/server.py API routes β€” changing endpoints breaks all frontends
core/config/models.py Settings schema β€” existing configs will fail to load

See docs/ARCHITECTURE.md for the full breakdown.


πŸ’» Development

See docs/CONTRIBUTING.md for the full development guide.

# Run all tests
pytest tests/ -v

# Lint & format
ruff check core/ interface/ jarvis/
ruff format core/ interface/ jarvis/

🀝 Contributing

Contributions are welcome! See docs/CONTRIBUTING.md for the full guide.

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

MIT License - see LICENSE for details.


πŸ”— Links


Built with ❀️ for developers who want a truly agentic AI assistant

About

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.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors