Skip to main content

Minimal, local-first agent runner using Markdown front matter.

Project description

Quick Agent

Quick Agent is a minimal, local-first agent runner that loads agent definitions from Markdown front matter and executes a small chain of steps with limited context handling. It is intentionally small and explicit: you define the model, tools, and steps in a single Markdown file, and the orchestrator runs those steps in order with a bounded prompt preamble.

Project Goal

Provide a simple, maintainable agent framework that:

  • Uses Markdown front matter for agent configuration.
  • Runs a deterministic chain of steps (text or structured output).
  • Keeps context handling deliberately limited and predictable.
  • Supports local tools and simple inter-agent calls.

Install

pip install quick-agent

If you are working from source:

python -m venv .venv
. .venv/bin/activate
pip install -e .

Hello World Example

Create agents/hello.md:

---
name: "Hello Agent"
description: "Minimal example"
model:
  provider: "openai-compatible"
  base_url: "http://localhost:11434/v1"
  api_key_env: "OPENAI_API_KEY"
  model_name: "llama3"
chain:
  - id: hello
    kind: text
    prompt_section: step:hello
output:
  format: json
  file: out/hello.json
---

## step:hello

Say hello to the input.

Then run:

quick-agent --agent hello --input safe/path/to/input.txt

Note: by default, file access is restricted to the safe/ directory (use --safe-dir to change it). Agents can further restrict access with safe_dir in frontmatter (relative to the safe root).

If you omit the entire model: section, the defaults are:

model:
  provider: "openai-compatible"
  base_url: "https://api.openai.com/v1"
  api_key_env: "OPENAI_API_KEY"
  model_name: "gpt-5.2"

Structured Output Example

Create agents/structured.md:

---
name: "Structured Agent"
model:
  provider: "openai-compatible"
  base_url: "http://localhost:11434/v1"
  api_key_env: "OPENAI_API_KEY"
  model_name: "llama3"
schemas:
  Summary: "quick_agent.schemas.outputs:SummaryOutput"
chain:
  - id: summarize
    kind: structured
    prompt_section: step:summarize
    output_schema: Summary
output:
  format: json
  file: out/summary.json
---

## step:summarize

Summarize the input into a short title and 2 bullet points.

Define the schema in src/quick_agent/schemas/outputs.py (example below):

from pydantic import BaseModel


class SummaryOutput(BaseModel):
    title: str
    bullets: list[str]

Then run:

quick-agent --agent structured --input safe/path/to/input.txt

OpenAI API Example

This example uses OpenAI's API via the OpenAI-compatible provider. Set your API key in the environment:

export OPENAI_API_KEY="your-key"

Create agents/openai.md:

---
name: "OpenAI Agent"
chain:
  - id: reply
    kind: text
    prompt_section: step:reply
output:
  format: json
  file: out/openai.json
---

## step:reply

Answer the input in a short paragraph.

Then run:

quick-agent --agent openai --input safe/path/to/input.txt

Python Usage

You can also run agents programmatically:

from pathlib import Path

import anyio

from quick_agent import Orchestrator, QuickAgent
from quick_agent.agent_registry import AgentRegistry
from quick_agent.agent_tools import AgentTools
from quick_agent.directory_permissions import DirectoryPermissions


def main() -> None:
    agent_roots = [Path("agents")]
    tool_roots = [Path("tools")]
    safe_dir = Path("safe")

    registry = AgentRegistry(agent_roots)
    tools = AgentTools(tool_roots)
    permissions = DirectoryPermissions(safe_dir)

    agent = QuickAgent(
        registry=registry,
        tools=tools,
        directory_permissions=permissions,
        agent_id="hello",
        input_data=Path("safe/path/to/input.txt"),
        extra_tools=None,
    )

    result = anyio.run(agent.run)
    print(result)


if __name__ == "__main__":
    main()

How It Works

Agents are stored as Markdown files with YAML front matter and step sections:

  • Front matter declares the model, tools, schemas, and chain.
  • Body contains ## step:<id> sections referenced by the chain.

The orchestrator loads the agent, builds the tools, and executes each step in order, writing the final output to disk. If the agent front matter omits output.file, the orchestrator returns the final output without writing a file.

Nested Output

When an agent invokes another agent via agent_call or handoff, the nested agent can either write its own output.file or return output inline only. Configure this in the parent agent front matter:

nested_output: inline  # default, no output file for nested calls

Use nested_output: file to allow nested agents to write their configured output files.

Documentation

See the docs in docs/:

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

quick_agent-0.1.7.tar.gz (66.0 kB view details)

Uploaded Source

Built Distribution

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

quick_agent-0.1.7-py3-none-any.whl (83.5 kB view details)

Uploaded Python 3

File details

Details for the file quick_agent-0.1.7.tar.gz.

File metadata

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

File hashes

Hashes for quick_agent-0.1.7.tar.gz
Algorithm Hash digest
SHA256 801ce7ff48a63141ea31612cd020cf8f634c1cad89eb83d5b956ae625a768f2d
MD5 e94d7b3f6a805853fe1fb730604036a9
BLAKE2b-256 4d6143cfad2f410c668d04f2901878ffda2f7f6c7985280af3121cab3d582645

See more details on using hashes here.

Provenance

The following attestation bundles were made for quick_agent-0.1.7.tar.gz:

Publisher: publish.yml on charlesverge/quick-agent

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

File details

Details for the file quick_agent-0.1.7-py3-none-any.whl.

File metadata

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

File hashes

Hashes for quick_agent-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 3f400e94ad91b751f28b2afc9a538c05af0e825d6b8475391f20a33b8620fc0e
MD5 d9a04a1f9b21d86305f90fb8b50f65b1
BLAKE2b-256 c7e743fda46201585ed527374b58d45863498ddbcc83cf360d9a85a07dafc91b

See more details on using hashes here.

Provenance

The following attestation bundles were made for quick_agent-0.1.7-py3-none-any.whl:

Publisher: publish.yml on charlesverge/quick-agent

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