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.
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-aiollama pull qwen2.5-coder:7bvictor chat "Explain this repo" |
Private, low-cost, air-gapped work |
| Cloud model | pipx install victor-aiexport 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 makes the framework/plugin split explicit:
victor.frameworkis the stable public contract for agents, tools, StateGraph, workflows, events, and extension surfaces.victor.agentis the internal runtime implementation behind that contract.victor.agent.servicesowns effectful runtime behavior throughChatService,ToolService,SessionService,ContextService,ProviderService, andRecoveryService.victor-contractsis 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.pluginsentry 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8c1cbac1ac953a3f4499f503ee2782e6c718cb112fa15be055492b505dc7ea9
|
|
| MD5 |
c665c71f76c8fe22d1712aee71c6a9b2
|
|
| BLAKE2b-256 |
3f0ea8c21650743bcaad390203f0a7f789e61ac1846ca80edc9bb5caae01428b
|
Provenance
The following attestation bundles were made for victor_ai-0.7.0.tar.gz:
Publisher:
release.yml on vjsingh1984/victor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
victor_ai-0.7.0.tar.gz -
Subject digest:
e8c1cbac1ac953a3f4499f503ee2782e6c718cb112fa15be055492b505dc7ea9 - Sigstore transparency entry: 1876739533
- Sigstore integration time:
-
Permalink:
vjsingh1984/victor@4dd95847f1fa40c5096436d20d54f50192079adb -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/vjsingh1984
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4dd95847f1fa40c5096436d20d54f50192079adb -
Trigger Event:
push
-
Statement type:
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30693580e0da6cafd8880890ba5812bcc44f4f31d1fdbbb9e0ea745011860f8e
|
|
| MD5 |
285953aa078776b57735fc6cfc00be50
|
|
| BLAKE2b-256 |
d09bb5fa491b9ee955347d808a27cd1f9748a4ce554920d4f223f5681da908f7
|
Provenance
The following attestation bundles were made for victor_ai-0.7.0-py3-none-any.whl:
Publisher:
release.yml on vjsingh1984/victor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
victor_ai-0.7.0-py3-none-any.whl -
Subject digest:
30693580e0da6cafd8880890ba5812bcc44f4f31d1fdbbb9e0ea745011860f8e - Sigstore transparency entry: 1876739696
- Sigstore integration time:
-
Permalink:
vjsingh1984/victor@4dd95847f1fa40c5096436d20d54f50192079adb -
Branch / Tag:
refs/tags/v0.7.0 - Owner: https://github.com/vjsingh1984
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4dd95847f1fa40c5096436d20d54f50192079adb -
Trigger Event:
push
-
Statement type: