Skip to main content

Victor SDK - Protocol definitions for vertical development

Project description

Victor SDK

Protocol and type definitions for building Victor verticals without pulling in the Victor runtime.

Overview

Use victor-sdk when you want to author or publish a vertical package. Use victor-ai when you want to run a vertical inside the Victor host runtime.

The supported external authoring model is contract-first:

  • vertical packages depend on victor-sdk only
  • verticals declare tools, capabilities, prompts, teams, and workflow metadata through the SDK contract
  • victor-ai remains responsible for runtime concerns such as agent creation, capability injection, and tool execution

Installation

SDK-only authoring

pip install victor-sdk

Runtime usage

pip install victor-ai

Stable SDK Surface

The core authoring surface is available from the top-level package:

from victor_sdk import (
    CURRENT_DEFINITION_VERSION,
    CapabilityIds,
    CapabilityRequirement,
    ToolNames,
    ToolRequirement,
    VerticalBase,
    VerticalDefinition,
)

Key pieces:

  • VerticalBase: SDK base class for external verticals
  • ToolNames: canonical SDK-owned tool identifiers
  • CapabilityIds: canonical SDK-owned runtime capability identifiers
  • ToolRequirement / CapabilityRequirement: typed requirement declarations
  • VerticalDefinition: validated serializable manifest returned by get_definition()

Quick Start

from victor_sdk import (
    CapabilityIds,
    CapabilityRequirement,
    ToolNames,
    ToolRequirement,
    VerticalBase,
)


class SecurityVertical(VerticalBase):
    name = "security"
    description = "Security analysis and audit workflows"
    version = "1.0.0"

    @classmethod
    def get_name(cls) -> str:
        return cls.name

    @classmethod
    def get_description(cls) -> str:
        return cls.description

    @classmethod
    def get_tool_requirements(cls) -> list[ToolRequirement]:
        return [
            ToolRequirement(ToolNames.READ, purpose="inspect code and configs"),
            ToolRequirement(ToolNames.GREP, purpose="search for vulnerable patterns"),
            ToolRequirement(ToolNames.SHELL, required=False, purpose="run scanners"),
            ToolRequirement(ToolNames.WEB_SEARCH, required=False, purpose="look up CVEs"),
        ]

    @classmethod
    def get_capability_requirements(cls) -> list[CapabilityRequirement]:
        return [
            CapabilityRequirement(
                capability_id=CapabilityIds.FILE_OPS,
                purpose="read repository contents",
            ),
            CapabilityRequirement(
                capability_id=CapabilityIds.WEB_ACCESS,
                optional=True,
                purpose="fetch external security references",
            ),
        ]

    @classmethod
    def get_system_prompt(cls) -> str:
        return "You are a security-focused assistant."

    @classmethod
    def get_prompt_templates(cls) -> dict[str, str]:
        return {
            "audit": "Audit the target for security issues and explain severity."
        }

    @classmethod
    def get_task_type_hints(cls) -> dict[str, dict[str, object]]:
        return {
            "audit": {
                "hint": "Start with read-first reconnaissance, then validate findings.",
                "tool_budget": 12,
                "priority_tools": [ToolNames.READ, ToolNames.GREP, ToolNames.SHELL],
            }
        }

    @classmethod
    def get_team_declarations(cls) -> dict[str, dict[str, object]]:
        return {
            "security_review_team": {
                "name": "Security Review Team",
                "formation": "pipeline",
                "members": [
                    {
                        "role": "researcher",
                        "goal": "Inspect the target and identify likely risks.",
                    },
                    {
                        "role": "reviewer",
                        "goal": "Validate findings before escalation.",
                    },
                ],
            }
        }


definition = SecurityVertical.get_definition()
assert definition.definition_version == "1.0"
assert definition.tools == [ToolNames.READ, ToolNames.GREP, ToolNames.SHELL, ToolNames.WEB_SEARCH]
assert definition.team_metadata.teams[0].team_id == "security_review_team"

Definition Contract

VerticalBase.get_definition() is the preferred SDK contract. It returns a validated VerticalDefinition manifest that contains:

  • definition_version
  • canonical tool identifiers
  • typed tool and capability requirements
  • system prompt text
  • prompt metadata and task-type hints
  • team metadata such as declarative team layouts and the default team identifier
  • declarative stage definitions
  • workflow metadata such as initial stage, provider hints, and evaluation criteria

Compatibility note:

  • get_config() still exists as a bridge for current victor-ai integrations
  • VerticalDefinition.to_config() / from_config() bridge the legacy config shape
  • VerticalDefinition.from_dict() supports serialized manifest round-tripping

Packaging

Register the vertical via the standard Victor entry point:

[project]
name = "victor-security"
version = "1.0.0"
dependencies = ["victor-sdk>=1.0.0"]

[project.entry-points."victor.verticals"]
security = "victor_security:SecurityVertical"

Discovery

Victor discovers external verticals through Python entry points:

from victor_sdk.discovery import get_global_registry

registry = get_global_registry()
verticals = registry.get_verticals()

Guides And Examples

Testing

pip install -e ".[dev]"
pytest victor-sdk/tests -q

To verify compatibility with the runtime as well:

pip install -e ".[dev]" victor-ai
pytest victor-sdk/tests/unit tests/integration/test_sdk_integration.py -q

Versioning

The package follows semantic versioning, and the manifest contract is versioned separately via VerticalDefinition.definition_version. External verticals should treat the SDK contract as the source of truth for supported identifiers and manifest fields.

Links

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_sdk-0.6.0.tar.gz (46.0 kB view details)

Uploaded Source

Built Distribution

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

victor_sdk-0.6.0-py3-none-any.whl (57.7 kB view details)

Uploaded Python 3

File details

Details for the file victor_sdk-0.6.0.tar.gz.

File metadata

  • Download URL: victor_sdk-0.6.0.tar.gz
  • Upload date:
  • Size: 46.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for victor_sdk-0.6.0.tar.gz
Algorithm Hash digest
SHA256 ae7b228380b1e073993690469d4194548ea28edf8e99ab6219e40997dc7d50e5
MD5 c3ff701b5dbe6179719abe78b3a1803d
BLAKE2b-256 9e27de2d1c470e00389ea942cf700b2ac9fd394e29ed1cc06e63cbc4cc5fc616

See more details on using hashes here.

Provenance

The following attestation bundles were made for victor_sdk-0.6.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_sdk-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: victor_sdk-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 57.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for victor_sdk-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1043ee560f45edb7f1d3c17e4d8df244099d129b201fbaa87082db6091996466
MD5 9f6024fa218be15ae7f7889d3559ab9e
BLAKE2b-256 1f785aecaaf5c0fa01b67a2f02d77655e102e50fad5e312c082fc9d7210d5887

See more details on using hashes here.

Provenance

The following attestation bundles were made for victor_sdk-0.6.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