Skip to main content

Open-source agentic AI framework with multi-provider support, workflow orchestration, and extensible tool system

Project description

Victor

An contract-first agentic AI framework for building reliable agents across local and cloud models.

PyPI version Python 3.10+ Fast Checks Tests License: Apache 2.0 Docker


Victor gives you a typed Python framework, a service-first agent runtime, and an contract-first plugin ecosystem for building agents that can reason, call tools, run workflows, coordinate teams, and operate against project-local code intelligence.

It is designed for teams that need agent systems to be testable, extensible, observable, and portable across Anthropic, OpenAI-compatible providers, Gemini, Bedrock, local models, and air-gapped environments.

Why Victor

Capability What it gives you
Service-first runtime Chat, tools, sessions, context, provider routing, and recovery are owned by focused runtime services instead of a monolithic orchestrator.
StateGraph workflows Build typed graph workflows and use teams as graph nodes without inventing a separate multi-agent graph abstraction.
Local and cloud models Use cloud providers for capability, local providers for privacy/cost, and provider-specific caching strategies for performance.
Tool-rich execution Compose filesystem, git, shell, code search, graph, verification, Docker, web, testing, and refactoring tools.
contract-first plugins Put domain behavior in sibling victor-* packages through victor-contracts and public framework extension contracts.
Project code intelligence Keep graph indexes, semantic search, conversations, and project memory in project-local state.

Quick Start

Path Commands Best for
Local model pipx install victor-ai
ollama pull qwen2.5-coder:7b
victor chat "Explain this repo"
Private, low-cost, air-gapped work
Cloud model pipx install victor-ai
export ANTHROPIC_API_KEY=...
victor chat --provider anthropic "Plan this refactor"
Highest model capability
Python API pip install victor-ai Embedding Victor in applications
Docker docker pull ghcr.io/vjsingh1984/victor:latest Isolated CLI/API runtime

Python API

from victor.framework import Agent, EventType, ToolSet

agent = await Agent.create(
    provider="anthropic",
    tools=ToolSet.default(),
)

result = await agent.run("Explain the architecture of this codebase")
print(result.content)

async for event in agent.stream("Review the changed files"):
    if event.type == EventType.CONTENT:
        print(event.content, end="")

StateGraph Workflows

from typing import TypedDict

from victor.framework import END, StateGraph


class ReviewState(TypedDict):
    query: str
    findings: list[str]


async def inspect(state: ReviewState) -> ReviewState:
    return {**state, "findings": ["example finding"]}


graph = StateGraph(ReviewState)
graph.add_node("inspect", inspect)
graph.add_edge("inspect", END)

result = await graph.compile().invoke({"query": "review this module", "findings": []})

Architecture

The core rule is simple: interfaces compose framework APIs, framework APIs delegate to the service-first runtime, and domain packages plug in through SDK/public extension contracts.

Victor 0.7 architecture

Victor 0.7 makes the framework/plugin split explicit:

  • victor.framework is the stable public contract for agents, tools, StateGraph, workflows, events, and extension surfaces.
  • victor.agent is the internal runtime implementation behind that contract.
  • victor.agent.services owns effectful runtime behavior through ChatService, ToolService, SessionService, ContextService, ProviderService, and RecoveryService.
  • victor-contracts is the definition-layer contract for external verticals and plugins.
  • Sibling victor-* packages own domain behavior such as coding, DevOps, RAG, research, data analysis, and investment workflows.

Detailed references:

Plugin Ecosystem

External and first-party domain packages should use victor-contracts and public framework extension contracts. The root framework stays generic; domain-specific behavior belongs in plugins and vertical packages.

Package Focus
victor-coding Code review, editing, test generation, language tooling
victor-devops Infrastructure, containers, CI/CD, cloud operations
victor-rag Ingestion, retrieval, hybrid search, grounded answers
victor-dataanalysis Data cleaning, statistics, dataframe analysis, visualization
victor-research Source research, synthesis, fact checking
victor-invest Investment research workflows and dashboard/API integration
victor-registry Package marketplace and registry metadata

Plugin rules:

  • Use the victor.plugins entry point as the canonical discovery seam.
  • Register capabilities through VictorPlugin.register(context).
  • Import from victor_contracts, victor.framework.extensions, or documented public APIs.
  • Do not import victor.agent.* or private root runtime internals from external packages.

Use Cases

  • Build local or cloud-backed coding agents that can inspect files, search graphs, run tests, and produce review findings.
  • Compose workflow agents with typed StateGraph nodes, deterministic handoffs, and resumable execution.
  • Run tool-using assistants through CLI, TUI, HTTP API, MCP, or embedded Python.
  • Build domain plugins without copying framework internals into vertical packages.
  • Keep project code intelligence local while preserving global preferences, learning, and provider settings separately.

State and Code Intelligence

Victor uses a two-database model:

Scope Location Purpose
Global database ~/.victor/victor.db Settings, API keys, profiles, RL outcomes, tool/model preferences, cross-project patterns
Project database ./.victor/project.db Graph nodes/edges, conversations, project sessions, entity memory, change tracking

Project code intelligence is derived, rebuildable state. Graph indexes, vector indexes, file watcher state, and .victor/ runtime artifacts should not become source-of-truth release artifacts.

Development

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

make test-quick
make test
make lint
make check-repo-hygiene

Subprojects are scoped:

npm --prefix ui run build
npm --prefix web/ui run build
npm --prefix vscode-victor run compile
cd rust && cargo test

Documentation

Contributing

Start with CONTRIBUTING.md, AGENTS.md, and the architecture constraints in CLAUDE.md or GEMINI.md. Keep changes scoped, prefer public framework/SDK contracts over internal imports, and update docs/tests when public behavior changes.

License

Apache License 2.0. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

victor_ai-0.7.0.tar.gz (6.4 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

victor_ai-0.7.0-py3-none-any.whl (7.2 MB view details)

Uploaded Python 3

File details

Details for the file victor_ai-0.7.0.tar.gz.

File metadata

  • Download URL: victor_ai-0.7.0.tar.gz
  • Upload date:
  • Size: 6.4 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for victor_ai-0.7.0.tar.gz
Algorithm Hash digest
SHA256 e8c1cbac1ac953a3f4499f503ee2782e6c718cb112fa15be055492b505dc7ea9
MD5 c665c71f76c8fe22d1712aee71c6a9b2
BLAKE2b-256 3f0ea8c21650743bcaad390203f0a7f789e61ac1846ca80edc9bb5caae01428b

See more details on using hashes here.

Provenance

The following attestation bundles were made for victor_ai-0.7.0.tar.gz:

Publisher: release.yml on vjsingh1984/victor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file victor_ai-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: victor_ai-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 7.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for victor_ai-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 30693580e0da6cafd8880890ba5812bcc44f4f31d1fdbbb9e0ea745011860f8e
MD5 285953aa078776b57735fc6cfc00be50
BLAKE2b-256 d09bb5fa491b9ee955347d808a27cd1f9748a4ce554920d4f223f5681da908f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for victor_ai-0.7.0-py3-none-any.whl:

Publisher: release.yml on vjsingh1984/victor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page