Skip to content

Changelog

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

Versioning Policy (effective v1.1.0)

Releases prior to v1.1.0 did not follow SemVer consistently: new features were shipped in patch releases and a breaking change landed in v0.3.1 (a patch). Starting with v1.1.0, this project adheres to strict SemVer:

  • PATCH (1.1.x): backward-compatible bug fixes only.
  • MINOR (1.x.0): new features, new public API surface, backward-compatible behavioral changes.
  • MAJOR (x.0.0): breaking changes to the public API.

Versions 1.0.3 and 1.0.4 contain critical regressions and should be avoided. They will be yanked from PyPI. Pin jarviscore-framework>=1.1.0.


1.3.0 2026-08-05

A developer-experience and integrations release. The atom catalog more than triples, memory setup becomes a one-command flow backed by a published image, traces become readable from the CLI, and AI editors get a first-class skill. Backward compatible; one security default changed (see Security below).

Added

  • [#111] Atom catalog expansion: 104 new provider bundles (987 atoms) imported from our production function registry, bringing the catalog to 150 providers and 1224 atoms. Every ported provider was hand-verified atom by atom against the official vendor API documentation.
  • [#103] jarviscore inspect: read recorded traces from the CLI. Run list with steps, tokens, failures, and duration; per-step timelines; --errors and --step filters; workflow id prefix matching; honest [clipped] markers on long values.
  • [#109] AI editor skill: jarviscore init --skill installs a verified SKILL.md for GitHub Copilot and Claude Code, covering the real API contracts, profile decision rule, and common mistakes. The doc site now serves llms.txt and an AI Editors guide.
  • [#108] Image-first memory init: jarviscore memory init pulls the published Athena image instead of cloning and building from source. --from-source keeps the old path for contributors; memory up is now a working alias.
  • [#106] Minimal env scaffold: jarviscore init writes a focused 35-line .env template (one provider key gets you running); --full writes the complete reference.

Fixed

  • [#106] Fresh-clone init: an unanchored data/ gitignore pattern meant packaged data files were never tracked, so jarviscore init failed from any fresh clone.
  • [#111] Atoms never shipped: integrations/atoms was neither a package nor declared package-data, so pip-installed wheels contained zero atom files and seed_registry found nothing at runtime.
  • [#105] Silent import: import jarviscore no longer prints four lines of peer-to-peer module banners; the swim-p2p output is captured into debug logging and the p2p re-exports are lazy.
  • [#108] Memory CLI crashes: memory init raised NameError (missing Path import) and memory up did not exist.

Security

  • [#110] TLS verification enforced: three code paths disabled certificate verification on outbound HTTPS, one of them while sending Bearer tokens. All outbound HTTPS now verifies against the certifi CA bundle. If you genuinely need to disable verification behind a corporate proxy, set JARVISCORE_TLS_INSECURE=1; it logs a warning on every use.

Changed

  • [#104] Documentation overhaul: landing page rewritten around enforced production rules, getting-started leads with a profile decision table, site-wide style pass, and the changelog page renders correctly.

1.2.0 2026-07-19

A large, fully backward-compatible release. It hardens the AutoAgent cognitive stack (context assembly, convergence, planning, evaluation), adds new orchestration and goal-mode primitives, and makes failures loud and honest across the board. Every change is additive: no public API was removed or altered, so upgrading from 1.1.0 is a drop-in.

Added

  • [#52] Dynamic fan-out (mesh.fanout()): run one task template over a runtime list of items with bounded concurrency, first-class partial failure (collect or fail_fast), per-item timeouts, and explicit aggregation via .aggregate() / .summarize(). Results are stamped with item and step identity so concurrent items cannot cross-contaminate.
  • [#73] Goal persistence and resume: goal executions persist after planning, after every completed step, and at terminal states, under goals/{agent_id}/{goal_id}.json. execute_goal(resume_goal_id=...) rehydrates the plan, facts, and history so a crash loses at most the in-flight step.
  • [#74] Dependency-parallel planning: the planner declares depends_on per step. Steps with no ordering constraint run concurrently (bounded by MAX_PARALLEL_STEPS), and a step never runs before its dependencies produce usable output. Plans without dependencies stay strictly sequential.
  • [#72] GOAL STATE context block: plan facts and completed-step outcomes now cross step boundaries as a structured, named block instead of one clipped generic line.
  • [#69] Generational LTM compaction: long-term memory is bounded through incremental generational merges rather than unbounded growth or a destructive rewrite, with archives kept for retrieval.
  • [#63] single_response execution contract: AutoAgent can serve a one-completion analysis shape without the full planner or codegen, declared per task. The two-profile model (CustomAgent, AutoAgent) is preserved.
  • [#84] Partial-result preservation: a goal that stops before completing now returns the work it finished, tagged [PARTIAL RESULT], instead of an empty result. Loud failures stay loud but hand back what they earned.
  • [#86] Local in-memory mailbox: MailboxManager works without Redis for single-process meshes instead of raising AttributeError. Multi-node durability still uses Redis.
  • [#88] Registry function identity: successful coder results carry a function_id when a registry function was reused or promoted, so reuse is observable from the envelope.

Fixed

  • [#57, #58] Observation and convergence integrity: the subagent observation channel no longer truncates silently, and the convergence governor stops raising false stalls from content-length equivalence or parameter-blind tool streaks.
  • [#55, #56] Honest context assembly: every context clip carries an explicit marker, and key-cap overflow is announced by name instead of dropping state silently.
  • [#61, #62] Directive precedence and step identity: TOOL and DONE precedence is resolved correctly, and every workflow result carries its step_id, including successes.
  • [#59] Zero-loss summarization: summarization compresses from real evidence and archives originals rather than discarding history.
  • [#60] FailureLedger integrity: structured-first error classification with aligned guard keys, so retry policy is driven by real error types, not substring guesses.
  • [#81, #82] HITL correctness: HITL_ENABLED is the single opt-in for every escalation path. Goals never dead-end waiting for a human on deployments that did not enable HITL. Evaluator hitl verdicts are reserved for genuine human decisions, and the file-backed queue resolve() to check() round-trip now works.
  • [#85] Evaluator evidence: the evaluator sees enough of a step's output to judge it (tunable, generous windows with honest truncation markers), ending replan churn caused by verdicts made blind.
  • [#87] Execution-backed coder reasoning: the coder's system prompt trains it to prove computed answers by executing code rather than answering from memory.

Changed

  • [#83] Plan-mode boundary documentation: clarifies that plan mode is an AutoAgent capability which triages before planning, while CustomAgent treats planning as a library it calls.
  • [#80] Fan-out guide fix: the workflow guide fan-out example now reads results from output, matching the real result shape.
  • Documentation accuracy pass: corrected blob_storage.load() references to the real read() API in the CustomAgent guide and troubleshooting page.
  • Removed internal-project references and development artifacts from the public tree.

1.1.0 2026-05-12

This release fixes all critical regressions introduced in v1.0.3 that rendered AutoAgent unusable, adds new AI engineering primitives (cognitive routing, intent normalization, structured output validation), and marks the beginning of strict SemVer compliance. Versions 1.0.3 and 1.0.4 are deprecated and will be yanked from PyPI.

Fixed

  • [#32] Output schema enforcement: Agent.output_schema (Pydantic BaseModel) is now passed through the Kernel into CoderSubAgent, which validates sandbox output against the schema via model_validate(). Schema violations fail fast with a clear error instead of silently returning unstructured data.
  • [#33] CoderSubAgent sandbox hallucination: CoderSubAgent.get_system_prompt() now appends a dynamic SANDBOX ENVIRONMENT manifest listing all pre-loaded modules and globals in the sandbox namespace. This grounds the LLM in what is actually available, preventing hallucinated imports and undefined-name errors.
  • [#34] Complexity gate before Planner: AutoAgent.execute_task() now runs a TaskComplexityClassifier before dispatching to the Planner DAG. Non-complex tasks bypass the full Plan → Execute → Evaluate loop, while classifier contract failures now fail visibly instead of silently falling through to the Planner.
  • [#35] FunctionRegistry semantic search miss: CoderSubAgent._tool_check_registry() now normalizes verbose task descriptions into concise canonical intents via IntentNormalizer before calling semantic_search(). This eliminates embedding distance drift caused by prompt verbosity.
  • [#36] AutoAgent vs CustomAgent boundary: Added p2p_responder attribute to the Agent base class (False by default, True on CustomAgent). JarvisLifespan now only creates background asyncio.Task instances for agents with p2p_responder=True, and raises RuntimeError at startup if a p2p_responder agent does not override run().
  • [#37] Semantic vs execution status: ResultHandler.process_result() now tracks semantic_success separately from execution status. CoderSubAgent._tool_execute_code() includes an evaluator hook that flags outputs where success=False or status="failure" even when the sandbox execution itself succeeded. Fixed TypeError when cost_usd is None.
  • [#38] Sandbox namespace leak into ZMQ coroutine cleanup: SandboxExecutor._execute_sync() and _execute_async() now restore namespace['__builtins__'] to the actual builtins module in a finally block. This prevents KeyError: '__builtins__' crashes in ZMQ's Cython backend during coroutine garbage collection.
  • Structured Kernel routing: keyword role matching has been replaced by a typed TaskRouter. Explicit planner/profile roles are honored first; otherwise the router returns a validated role, confidence, reason, and evidence flag. Invalid or low-confidence routing fails visibly. Custom roles must register kernel_role_profiles.
  • Strict subagent completion protocol: unparseable LLM responses now fail as protocol violations instead of being returned as successful raw content.
  • Coder proof-of-work contract: CoderSubAgent must produce sandbox execution evidence before completion; structured prose results alone are no longer accepted for coder work.
  • Workflow terminal status handling: only success completes a workflow step. yield, hitl, blocked, error, and unknown statuses are recorded as failures rather than satisfying dependencies.
  • WorkflowBuilder failure visibility: agent-returned failure, yield, blocked, hitl, or unknown statuses are now preserved instead of being wrapped as step success.
  • Distributed workflow output integrity: a remote step marked completed without persisted output now returns failure rather than fabricating a successful empty result.
  • AutoAgent Kernel failure visibility: Kernel exceptions now return an explicit failure instead of silently falling back to the legacy direct-codegen pipeline.
  • Profile routing explicitness: missing default_kernel_role in a profile no longer implies communicator; applications must opt into profile-level routing hints.
  • _run_context AttributeError in CoderSubAgent: Changed direct attribute access to getattr(self, '_run_context', {}) to prevent AttributeError when _run_context is not yet initialized.

Added

  • TaskComplexityClassifier (jarviscore.planning.classifier): LLM-based cognitive router that classifies tasks as "trivial", "moderate", or "complex" to determine whether the full Planner DAG is needed.
  • IntentNormalizer (jarviscore.execution.intent_normalizer): Distills verbose task descriptions into concise canonical intents for accurate embedding-based semantic search.
  • Agent.p2p_responder attribute: Boolean flag distinguishing reactive task workers (AutoAgent) from proactive mesh citizens (CustomAgent) at the framework level.
  • Agent.output_schema attribute: Optional Pydantic BaseModel class for end-to-end structured output validation through the Kernel pipeline.
  • semantic_success field in ResultHandler result data: Enables downstream consumers to distinguish between "code ran without errors" and "task actually achieved its goal".
  • SandboxExecutor.get_manifest() / CoderSandbox.get_manifest(): Introspect the sandbox namespace for prompt injection into the CoderSubAgent system prompt.

Deprecated

  • Versions 1.0.3 and 1.0.4: contain critical AutoAgent regressions. Will be yanked from PyPI. Users should pin >=1.1.0.

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.
  • Planner subagent hints are strict: valid hints are accepted exactly and invalid hints fail visibly instead of being remapped.
  • 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 visibility in LLMClient: raw provider content-filter rejections now fail visibly by default. AZURE_CONTENT_FILTER_REPAIR_ENABLED=true explicitly opts into Azure-specific prompt repair after the raw prompt is rejected.
  • 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. Coder dispatches require executable proof of work before completion.

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-22

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.