Skip to content

Changelog

All notable changes to JarvisCore Framework are documented here. This project follows Semantic Versioning.


1.0.4 2026-05-11

Documentation

  • Mobile drawer fully resolved: Level 1 nav items clickable on all viewports, back arrow restored, site name text hidden in mobile view.
  • Section index.md entry points added for Concepts, Guides, and Reference — each section now has an overview landing page with icon cards.
  • CSS tab icons removed from sections that use frontmatter-defined icons, eliminating duplication.
  • README expanded and restructured with additional examples and API reference.

Fixed

  • Deprecated Mesh(mode='distributed') calls replaced with explicit config={"p2p_enabled": True} in test_09_distributed_autoagent.py and test_10_distributed_customagent.py.

1.0.3 2026-05-08

Documentation

  • Launched the full MkDocs documentation site — Getting Started, Concepts, Guides, Reference, Examples, and Enterprise sections.
  • New guides: AutoAgent, CustomAgent, Workflows, Chat, HITL, Nexus, Knowledge Base, System Prompts, Observability, FastAPI Integration, Internet Search, Migration (CrewAI + LangGraph), Testing.
  • New concept pages: Architecture, Memory, Nexus, P2P, System Bundles, Agent Personas.
  • New examples: Financial Pipeline, Research Network, Support Swarm, Content Pipeline, Investment Committee.
  • Synced all 15 brand SVG variants to docs/assets/ and removed legacy unreferenced logo.png / logo.svg.
  • guides/testing.md: documented ExampleMockLLMClient — tool-validating mock LLM for unit testing agents with tool use.
  • Fixed deprecated Mesh(mode=...) calls in README.md, guides/production.md, guides/browser-automation.md, and guides/adapters.md.

Added

  • mesh.run_task(agent, task, context, complexity) — primary user-facing API for dispatching a single task to an agent by role with multi-tier model routing.
  • P2P_ENABLED=true env var support — Settings.p2p_enabled is now merged into Mesh config at startup.
  • HITLCategory enum with hard enforcement on HITLQueue.request() — valid categories: auth_required, data_required, critical_action. Invalid categories raise ValueError.
  • Subagent hint alias map in the Planner — LLM-hallucinated hints (analyst, developer, writer, scraper) are remapped to valid roles before dispatch.
  • STEP_OUTPUT_MAX_BYTES (default 200 KB) and STEP_OUTPUT_PREVIEW_BYTES (default 20 KB) — large step outputs stored as truncated preview with _overflow flag.
  • Idempotent write guard on RedisStore.save_step_output() — a successful result will not be overwritten by a subsequent error payload from a stalled re-execution.
  • Azure Content Filter resilience in LLMClient — substitution table for business phrases that trigger false-positive content rejections.
  • Kernel._get_model_for_tier() — clean multi-tier model resolution: complexity hint → TASK_MODEL_NANO / TASK_MODEL_STANDARD / TASK_MODEL_HEAVY → legacy fallback.
  • MailboxManager schema normalisation — handles both the current flat envelope schema and the pre-v1.0.2 double-nested schema transparently.
  • Vertex AI provider (LLMProvider.VERTEX_AI): GCP-native Gemini access via Application Default Credentials (ADC). No API key required — authenticate with gcloud auth application-default login or attach a service account. Config: VERTEX_AI_ENABLED=true, VERTEX_AI_PROJECT, VERTEX_AI_LOCATION (default us-central1), VERTEX_AI_MODEL (default gemini-2.5-flash). Slots into the fallback chain after Gemini: Azure → Claude → vLLM → Gemini → Vertex AI.
  • _normalize_tools_for_gemini() static method — auto-converts tool schemas to Gemini function_declarations format. Accepts Anthropic/PeerTool (input_schema), flat (name+parameters), or already-native formats.
  • Shared _call_genai_client() helper: both _call_gemini and _call_vertex_ai delegate here for consistent token accounting and cost calculation.
  • Tool-call response parsing in _call_genai_client: when a Gemini/Vertex AI response contains function_call parts, tool_calls is populated and content is set to "".
  • Token pricing entries for gemini-2.5-flash, gemini-2.5-pro, gemini-3.1-pro, gemini-3.1-pro-preview.
  • Process-wide LLM concurrency semaphore (LLM_MAX_CONCURRENT env var) — prevents thundering-herd 429s in multi-agent deployments.
  • llm.nano_model and llm.planner_model properties — tier-aware model selection for StepEvaluator and Planner.
  • max_completion_tokens alias in generate() — callers can use GPT-5.x SDK naming convention interchangeably with max_tokens.

Fixed

  • P2P_ENABLED env var was not forwarded to Mesh.config, requiring config={"p2p_enabled": True} explicitly even when the env var was set.
  • HITL escalations could be raised for arbitrary reasons, polluting the human review queue. Now enforced at the framework level.
  • Planner emitted Unknown subagent_hint warnings for semantically valid but aliased LLM role names.
  • Examples audit (2026-05-07): fixed API compatibility across all 5 production examples for v1.0.3 breaking changes.
  • SWIM stabilisation replaced hardcoded 5 s sleep with condition-based poll (0.3 s for single-node; up to 5 s when seed nodes configured).
  • AutoAgent result dict now exposes payload as a dedicated top-level key when the output is a structured dict, enabling downstream step access without manual parsing.
  • Crash recovery _resume() pre-populates recovered step results into pre_results so resumed workflows replay correctly rather than skipping completed steps.
  • ExampleMockLLMClient validates tool names against the tools parameter before returning tool-use responses, preventing mock deadlocks when a tool is out of scope.
  • _call_gemini now forwards **kwargs (including tools) to _call_genai_client, making Gemini tool-calling behaviour consistent with Vertex AI.
  • test_claude_primary now passes an explicit config that disables all other providers, making the assertion environment-independent.

Changed

  • mesh.workflow() no longer restricted to autonomous mode — works across all mesh configurations.
  • CLI references updated from python -m jarviscore.cli.* to the jarviscore entry-point CLI.

1.0.2 2026-03-04

Fixed

  • P2P Keepalive Spam Prevention: Added exponential backoff mechanism (45s default) to prevent continuous keepalive attempts when peers are unavailable or network has connectivity issues.
  • Remote Agent Discovery Bug: Fixed PeerClient.list_roles() to include remote agents from SWIM mesh, not just local agents. Previously only checked local agent registry, missing agents discovered via P2P network.
  • Single-Node Graceful Degradation: Added allow_zero_peers flag (default: True) to recognize single-node runs as valid state without triggering failure warnings.

Changed

  • Increased ask_peer timeout from 600s to 7200s (2 hours) to support long-running database queries and complex analysis tasks.
  • Enhanced keepalive manager with consecutive failure tracking and backoff-until timestamp for better network resilience.
  • Improved keepalive logging to distinguish between expected zero-peer state and actual failures.

Added

  • P2P_KEEPALIVE_FAILURE_BACKOFF_SECONDS config parameter (default: 45) for keepalive retry backoff.
  • P2P_ALLOW_ZERO_PEERS config parameter (default: True) for single-node development and testing.

1.0.1 2026-02-27

Fixed

  • LICENSE link in README resolves to 404 on PyPI. Replaced relative path with absolute GitHub URL.

1.0.0 2026-02-25

Changed

  • Version: 0.4.0 → 1.0.0 — stable public release.
  • Documentation URL updated to custom domain: https://jarviscore.developers.prescottdata.io/

Added

  • Apache 2.0 license (replaces MIT); CLA/INDIVIDUAL.md, CLA/CORPORATE.md, TRADEMARK.md.
  • CONTRIBUTING.md with CLA links, ruff tooling, PR checklist.
  • CODE_OF_CONDUCT.md community standards.
  • ENTERPRISE.md for OSS vs Enterprise comparison.
  • examples/investment_committee/ — 7-agent multi-step workflow with web dashboard (AutoAgent + CustomAgent, parallel step execution, LTM institutional memory, FastAPI dashboard on port 8004).

0.4.0 2026-02-19

This was the largest release in JarvisCore history, introducing the complete infrastructure stack across nine phases. It added persistent storage, context distillation, telemetry, the mailbox messaging system, the function registry, the Kernel OODA loop, distributed workflow execution, Nexus authentication, and the unified memory architecture.

Phase 1 — Foundation Layer

LocalBlobStorage / AzureBlobStorage with save(path, data) / load(path) for any artifact. RedisContextStore for full Redis-backed step output, workflow graph, mailbox, HITL, and checkpoint methods. Configured via STORAGE_BACKEND, STORAGE_BASE_PATH, and REDIS_URL.

Phase 2 — Context Distillation

Evidence, TruthFact, TruthContext, AgentOutput Pydantic models. distill_output(), scrub_sensitive(), merge_facts() utilities. ContextManager for token-budget aware prompt building (priority stack: mission → plan → scratchpad → LTM → tool history → variables). JarvisContext enhanced with truth, mailbox, tracer, human_tasks fields.

Phase 3 — Telemetry and Tracing

TraceEventType enum covering workflow, step, kernel cognition, tool, mailbox, HITL, and context events. TraceManager with three output channels: Redis List (persistent), Redis PubSub (real-time), and JSONL (compliance fallback). record_step_execution(duration, status) Prometheus histogram and counter, enabled via PROMETHEUS_ENABLED=true.

Phase 4 — MailboxManager

self.mailbox.send(target_id, payload) / read(max_messages) for async agent messaging. Backed by Redis Streams, available in all modes when REDIS_URL is set.

Phase 5 — Function Registry

CodeRegistry auto-registers successfully executed code per task and promotes to VERIFIED on first success. Available as agent.code_registry in AutoAgent, persisted to {log_dir}/function_registry/. Includes update_execution_stats(func_name, success, execution_time) for graduation tracking.

Phase 6 — Kernel / SubAgent OODA Loop

The Kernel replaces AutoAgent's linear codegen → sandbox → repair pipeline with a supervised OODA loop. ExecutionLease enforces token/turn/wall-clock budgets per subagent role. AgentCognitionManager tracks budget spend per phase, detects spinning (same tool 3+ times), and enforces cognitive gates. AdaptiveHITLPolicy with HumanTask pauses execution when confidence or risk triggers fire. Fast path: simple coding tasks skip full OODA and dispatch directly to coder subagent.

Phase 7 — Distributed WorkflowEngine

WorkflowEngine persists DAG to Redis hash workflow_graph:{wf_id} for crash recovery. When no local agent matches a step, the engine resets status to "pending" and polls Redis. Mesh._run_distributed_worker() scans jarviscore:active_workflows, checks are_dependencies_met(), atomically claims steps via SETNX, executes, and writes output to Redis.

Phase 7D — AuthenticationManager (Nexus)

Set requires_auth = True on any agent and the Mesh injects self._auth_manager before setup(). Full NexusClient flow: request_connection → browser OAuth → poll ACTIVE → resolve_strategy → apply headers. Graceful degradation when NEXUS_GATEWAY_URL is not set.

Phase 8 — Memory Architecture

UnifiedMemory(workflow_id, step_id, agent_id, redis_store, blob_storage) with .episodic (EpisodicLedger via Redis Streams), .ltm (LongTermMemory via Redis), and .scratch (in-memory WorkingScratchpad). RedisMemoryAccessor reads step outputs across the workflow.

Phase 9 — Mesh Integration and Auto-Injection

Before each agent's setup(), the Mesh injects _redis_store, _blob_storage, and mailbox. Prometheus server starts automatically when PROMETHEUS_ENABLED=true. Agents use injected infrastructure directly with zero boilerplate.

Production Examples

  • financial_pipeline.py — AutoAgent autonomous, 3-step financial analysis pipeline.
  • research_synthesizer.py + research_node_1/2/3.py — AutoAgent 4-node SWIM research cluster.
  • support_swarm.py — CustomAgent P2P, 4-agent support routing with Nexus auth.
  • content_pipeline.py — CustomAgent distributed, content pipeline with LTM.

Fixed

  • AutoAgent.execute_task: pass context=task.get('context') to sandbox.execute() so LLM-generated code can access previous_step_results.

Changed

  • P2P env var namespace: bind_port, bind_host, seed_nodes, node_name now read from JARVISCORE_BIND_PORT, JARVISCORE_BIND_HOST, JARVISCORE_SEED_NODES, JARVISCORE_NODE_NAME respectively. This isolates per-process P2P settings from the swim package's own env vars.

0.3.2 2026-02-04

Added

Session Context Propagation: context parameter added to notify(), request(), respond(), and broadcast() methods. Context carries metadata like mission_id, priority, trace_id across message flows. respond() automatically propagates context from request if not overridden.

response = await peers.request("analyst", {"q": "..."}, context={"mission_id": "abc"})

async def on_peer_request(self, msg):
    mission_id = msg.context.get("mission_id")
    return {"result": "..."}

Mesh Diagnostics: mesh.get_diagnostics() returns local_node, known_peers, local_agents, and connectivity_status (healthy, isolated, degraded, not_started, local_only). Includes SWIM and keepalive status when P2P is enabled.

Async Request Pattern: ask_async(target, message, timeout, context) returns a request_id immediately. check_inbox(request_id, timeout, remove) retrieves the response later. Enables fire-and-forget workflows where you collect results when ready.

Load Balancing Strategies: strategy parameter on discover() supports "first", "random", "round_robin", and "least_recent". discover_one() convenience method for single peer lookup.

MockMesh Testing Utilities: jarviscore.testing module with MockPeerClient (full mock with discovery, messaging, assertion helpers) and MockMesh (simplified mesh without real P2P infrastructure). Auto-injects MockPeerClient into agents during MockMesh.start().


0.3.1 2026-02-02

Breaking Changes

ListenerAgent has been merged into CustomAgent. Migration requires only an import change:

# Before
from jarviscore.profiles import ListenerAgent

# After
from jarviscore.profiles import CustomAgent

All handler methods work exactly the same way. No other code changes required.

Changed

CustomAgent now includes P2P handlers: on_peer_request(msg), on_peer_notify(msg), on_error(error, msg), and the built-in run() listener loop. The profile architecture was simplified from three profiles (AutoAgent + CustomAgent + ListenerAgent) to two (AutoAgent + CustomAgent), removing the "which profile do I use?" confusion.


0.3.0 2026-01-29

Added

ListenerAgent Profile: New ListenerAgent class for handler-based P2P communication with on_peer_request(msg) and on_peer_notify(msg) handlers. No more manual run() loops required for simple P2P agents.

FastAPI Integration: JarvisLifespan context manager reduces FastAPI integration from approximately 100 lines to 3. Automatic agent lifecycle management with support for both p2p and distributed modes.

Cognitive Discovery: peers.get_cognitive_context() generates LLM-ready peer descriptions with dynamic peer awareness. Auto-updates when peers join or leave the mesh.

Cloud Deployment: agent.join_mesh(seed_nodes) for self-registration without central orchestrator. agent.leave_mesh() for graceful departure. agent.serve_forever() for container deployments. RemoteAgentProxy for automatic cross-node agent visibility.


0.2.1 2026-01-23

Fixed

  • P2P message routing stability improvements.
  • Workflow engine dependency resolution edge cases.

0.2.0 2026-01-15

Added

CustomAgent profile for integrating existing agent code. P2P mode for direct agent-to-agent communication. Distributed mode combining workflow engine with P2P. @jarvis_agent decorator for wrapping existing classes. wrap() function for wrapping existing instances. JarvisContext for workflow context access. Peer tools: ask_peer, broadcast, list_peers.

Changed

Mesh now supports three modes: autonomous, p2p, distributed. Agent base class now includes P2P support.


0.1.1 2026-01-16

Changed

  • Migrated from the deprecated google.generativeai SDK to the current google.genai SDK.
  • Updated default Gemini model to gemini-2.0-flash.

Added

  • Scaffold CLI (python -m jarviscore.cli.scaffold) for new project initialization.
  • Bundled .env.example and example files in the PyPI distribution.

0.1.0 2026-01-13

Added

Initial release. AutoAgent profile with LLM-powered code generation. Workflow engine with dependency management. Sandbox execution (local and remote). Auto-repair for failed code. Internet search integration (DuckDuckGo). Multi-provider LLM support (Claude, OpenAI, Azure, Gemini). Result storage and code registry.