Skip to main content

mistralai-vibe-protocol

SDK for the Task protocol — composable, observable, durable agentic orchestration.

Overview

mistralai-vibe-protocol is built around the Task, a single abstraction that unifies tools, agents, and workflows under one protocol. Every Task shares the same interface: input, output, streaming history updates, a terminal result event, and recursive subtask composition.

  • One interface for everything: Tools, LLM agents, workflows, and sandboxed code are all Tasks
  • Recursive composability: Tasks compose into observable trees at any depth
  • Streaming observability: History updates stream as JSON patches, followed by one terminal task result
  • Port/adapter design: Pluggable LLM backends via the CompletionModel protocol
  • Durability-ready: TaskState is the complete checkpoint — serialize, store, resume

Installation

uv sync

For development dependencies:

uv sync --all-extras

Quick Start

MISTRAL_API_KEY=<your-key> uv run python examples/demo_simple.py

Simple Agent with Tools

from mistralai.vibe.protocol import AgentTask, ToolTask, TaskState, PendingOutput, MessageEntry, MessageEntryPayload
from mistralai.vibe.protocol.patterns.completion.adapters.mistral import MistralAdapter

def add_numbers(a: float, b: float) -> str:
    return str(a + b)

completion = MistralAdapter(api_key=api_key)
add_tool = ToolTask(fn=add_numbers, name="add_numbers", description="Add two numbers")

agent = AgentTask(
    completion=completion,
    tasks={"add_numbers": add_tool},
    system_prompt="You are a helpful assistant.",
)

state = TaskState(
    id="demo",
    output=PendingOutput(),
    history=[MessageEntry(payload=MessageEntryPayload(role="user", content="What is 3 + 4?"))],
)

channel = await agent.run(state)
async for message in channel:
    # history_update events stream while the task runs,
    # then one terminal task_result carries the final TaskState.
    print(message)

Nested Agents (Subtask Delegation)

researcher = AgentTask(
    completion=completion,
    tasks={"search_web": search_tool},
    name="researcher",
    description="Research a topic using web search",
    system_prompt="Research the given topic, then summarize findings.",
    input_schema={"type": "object", "properties": {"topic": {"type": "string"}}},
)

orchestrator = AgentTask(
    completion=completion,
    tasks={"researcher": researcher},
    system_prompt="Delegate research to the 'researcher' tool, then synthesize.",
)

channel = await orchestrator.run(state)
async for message in channel:
    print(message)

The orchestrator LLM sees researcher as a tool. When it calls researcher(topic="quantum computing"), the runtime spawns a nested agent loop with its own LLM and tools. The parent receives structured output as a tool result.

Documentation

Development

# Type checking
uv run pyright

# Linting
uv run ruff check .

# Tests
uv run pytest tests/

Project Structure

mistralai/vibe/protocol/
  __init__.py              # Package exports
  logging.py               # Structured logging configuration

  types/                   # Pure types and contracts
    state.py               # TaskState, HistoryEntry, TaskOutput
    events.py              # history_update, task_result, callback_* messages
    channel.py             # Channel protocol
    task.py                # Task protocol (@runtime_checkable)
    patch.py               # RFC 6902 JSON Patch ops + AppendOp extension

  modules/                 # Generic engine components
    execution.py           # ExecutionLoop, StateModule ABC, Downstream protocol
    sub_task.py            # sub_task_reducer, subtask event/effect types
    produce.py             # Immer-like produce() + diff()
    json_patch.py          # apply_patches(), reroute_patches()
    task.py                # ModuleTask base class, TaskConfigBase

  patterns/                # Concrete task implementations
    agent.py               # AgentTask, AgentModule (LLM-driven orchestration)
    tool.py                # ToolTask (function wrapper)
    completion/            # LLM completion domain
      port.py              # CompletionModel protocol
      types.py             # CompletionRequest, CompletionChunk
      messages.py          # Message, ToolCall, FunctionCall
      bridge.py            # stream_to_mutations, build_completion_request
      adapters/
        mistral.py         # Mistral API adapter

tests/
  conftest.py              # Shared test factories and mocks
  test_protocol_types.py   # Protocol type tests
  test_produce.py          # produce() / diff() tests
  test_execution_loop.py   # ExecutionLoop tests
  test_replay_invariants.py # Reducer/loop invariant tests
  test_effect_handlers.py  # Standalone effect handler tests
  test_agent_reducer.py    # AgentModule reducer unit tests
  test_sub_task.py         # sub_task_reducer tests
  test_tool_task.py        # ToolTask tests
  test_stream_bridge.py    # LLM streaming bridge tests
  test_agent_task.py       # AgentTask integration tests

examples/
  render.py                # Rendering utilities for example output
  configs/                 # Demo configurations
    simple.yaml            # Basic agent with tools
    subagents.yaml         # Parent with child researchers
    callbacks.yaml         # Callback resolution patterns
    triple_callback.yaml   # 3-level callback chain
    agent_callback.yaml    # Agent-as-callback implementation

Download files

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

Source Distribution

mistralai_vibe_protocol-0.3.2.tar.gz (74.7 kB view details)

Uploaded Source

Built Distribution

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

mistralai_vibe_protocol-0.3.2-py3-none-any.whl (98.7 kB view details)

Uploaded Python 3

File details

Details for the file mistralai_vibe_protocol-0.3.2.tar.gz.

File metadata

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

File hashes

Hashes for mistralai_vibe_protocol-0.3.2.tar.gz
Algorithm Hash digest
SHA256 f4664c8692af12c398eb037fcf98a2637e8f65943e4fbef82700545a8b40988a
MD5 20fade9abfac3d2f689be2672d91b4f0
BLAKE2b-256 281395f3d789329c6beccdfa048b86d7cfb25108877924b3661d1b959b03b4a8

See more details on using hashes here.

Provenance

The following attestation bundles were made for mistralai_vibe_protocol-0.3.2.tar.gz:

Publisher: release.yml on mistralai/vibe-protocol

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

File details

Details for the file mistralai_vibe_protocol-0.3.2-py3-none-any.whl.

File metadata

File hashes

Hashes for mistralai_vibe_protocol-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 06eb63dd56b47adc5220f7778f8fedb7a7316406dd7df238a06f6c0afe0275bd
MD5 a1f3d8d35c0c08a5f9e3d39f2756c4e4
BLAKE2b-256 edd465aa0e8f8e9176cf7a162656e86086a74db1afe701e5e8931d08793bd575

See more details on using hashes here.

Provenance

The following attestation bundles were made for mistralai_vibe_protocol-0.3.2-py3-none-any.whl:

Publisher: release.yml on mistralai/vibe-protocol

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

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 files

0.3.1

2 files

0.3.0

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

0.0.1

2 files

Supported by

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