Skip to main content

Python-first agent harness framework with Markdown skills, sessions, sandboxes, and pluggable backends.

Project description

PyFlue

CI Docs

PyFlue is the agent harness framework for Python. It gives you Markdown skills, stateful sessions, sandboxed filesystem and shell access, typed Pydantic outputs, streaming events, file-based webhook routes, and deployment-ready project structure.

PyFlue is inspired by the Flue framework and adapts the agent harness model for Python teams.

Use it to build coding agents, issue triage agents, data analysis agents, support agents, and workflow agents that need controlled access to files, commands, tools, and structured outputs.

Install

With uv:

uv add pyflue

With pip:

pip install pyflue

Optional extras:

uv add "pyflue[monty]"
uv add "pyflue[sandboxes]"
pip install "pyflue[monty]"
pip install "pyflue[sandboxes]"

Quick Start

pyflue init my-agent
cd my-agent
pyflue run --prompt "Review this project"

Python API

from pydantic import BaseModel
from pyflue import init


class FixResult(BaseModel):
    fix_applied: bool
    summary: str


async def main():
    agent = await init(
        model="openai:gpt-4o",
        sandbox="virtual",
        allow_write=True,
        allow_shell=True,
        allowed_commands=["git"],
    )
    session = await agent.session("fix-123")
    result = await session.skill(
        "triage",
        args={"issue_number": 123},
        result=FixResult,
    )
    if result.fix_applied:
        await session.shell("git status --short")

What PyFlue Gives You

Capability What it means
Markdown skills Put reusable workflows in .agents/skills/*.md.
Project instructions Use AGENTS.md for global behavior and context.
Roles Scope behavior with .agents/roles/*.md.
Sessions Resume agent state with stable session IDs.
Tasks Run focused child tasks with isolated history and shared sandbox.
Sandbox Read, write, edit, grep, glob, and shell behind explicit policies.
Secret grants Keep secrets out of prompts and grant them only per call.
Typed outputs Validate results with Pydantic and repair invalid JSON automatically.
Streaming Use session.stream(...), pyflue run --stream, or SSE.
Webhooks Expose agents/*.py as /agents/{name}/{agent_id}.
Python code backend Use pyflue[monty] for safe host-side Python snippets.
Remote sandboxes Use Daytona, E2B, Modal, or Runloop with optional extras.
Connector guides Use pyflue add to print agent-readable setup guides for sandbox providers.
Deployment Generate Docker/FastAPI, CI, Railway, Render, Fly.io, Vercel, Netlify, and Cloudflare starter files.

Project Layout

AGENTS.md
pyflue.toml
.agents/
  roles/
    coder.md
  skills/
    triage.md
agents/
  default.py

File-Based Agent

triggers = {"webhook": True}


async def default(context):
    agent = await context.init()
    session = await agent.session(context.agent_id)
    result = await session.prompt(context.payload["prompt"])
    return {"text": result.text}

Run it locally:

pyflue dev --port 2024

Call it:

curl http://127.0.0.1:2024/agents/default/demo \
  -H "Content-Type: application/json" \
  -d '{"payload": {"prompt": "Review this repository"}}'

Streaming

pyflue run --stream --prompt "Review this project"
async for event in session.stream("Review this project"):
    print(event.type, event.data)

Connector Guides

List available guides:

pyflue add

Print a guide for a known sandbox provider:

pyflue add daytona --print

Start from any provider documentation URL:

pyflue add https://e2b.dev/docs --category sandbox --print | codex

Security Model

PyFlue starts with safe defaults:

  • writes are disabled until allow_write=True
  • shell execution is disabled until allow_shell=True
  • compound shell syntax is blocked by default
  • command allowlists are supported with allowed_commands
  • secrets are not injected into prompts
  • secrets are mounted into sandbox calls only when requested with secrets=[...]

Deployment

Generate deployment files:

pyflue build --target docker
pyflue build --target railway
pyflue build --target fly
pyflue build --target vercel
pyflue build --target netlify

Deploy with a supported provider CLI:

pyflue deploy --target fly

Development

uv sync --extra dev --extra docs
uv run --extra dev ruff check .
uv run --extra dev pytest
uv run --extra docs mkdocs build --strict
uv build

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

pyflue-0.1.1.tar.gz (348.5 kB view details)

Uploaded Source

Built Distribution

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

pyflue-0.1.1-py3-none-any.whl (51.0 kB view details)

Uploaded Python 3

File details

Details for the file pyflue-0.1.1.tar.gz.

File metadata

  • Download URL: pyflue-0.1.1.tar.gz
  • Upload date:
  • Size: 348.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for pyflue-0.1.1.tar.gz
Algorithm Hash digest
SHA256 50db9dfaec1f46d6487acd84fa3b6b4223c91f811e85ee0ae12f2e2bb5542484
MD5 ffe706f9fc5058f2ffac284a8e4c607a
BLAKE2b-256 000a0a391976a66381e8b5f899a65852115e65cfa5c34ec548383185d3d72b22

See more details on using hashes here.

File details

Details for the file pyflue-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: pyflue-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 51.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for pyflue-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 439047a472c191183c03ebdf7855b7f8f1110eaf5df4ec13de564b5aae396bf7
MD5 9f4c509a9c578aab5ebfdec39e502bff
BLAKE2b-256 695a6a3ca5176407bbb206b78b0f59182296e94de2d7803bc3d99cb81b16e02c

See more details on using hashes here.

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