Skip to main content

skillbot

An agentic bot powered by skills. Skillbot uses an LLM as its brain and Agent Skills as extensible capabilities, communicating via the A2A protocol.

Tech Stack

Category Tool
Language Python >= 3.13
Package Manager uv
Build Backend Hatchling
Linter & Formatter Ruff
Type Checker mypy (strict mode)
Testing pytest
Commit Convention Commitizen (Conventional Commits)
Git Hooks pre-commit
CI/CD GitHub Actions
Package Registry PyPI
Agent Framework LangGraph
LLM Provider LangChain OpenAI
Agent Protocol A2A SDK
Web Framework FastAPI
CLI Click
Containerization Podman

Quick Start

Install skillbot from PyPI and pull the pre-built runtime image from GitHub Container Registry. No need to clone this repo.

Prerequisites

1. Install skillbot

pip install skillbot

2. Pull the runtime image

# macOS only: ensure the Podman machine is running
podman machine start

podman pull ghcr.io/madarauchiha-314/skillbot-runtime:latest

3. Initialize and configure

skillbot init

This creates ~/.skillbot/skillbot.config.json. Edit it to add your OpenAI API key under model-providers.openai.api-key.

The generated config points to the GHCR image by default:

{
  "container": {
    "enabled": true,
    "image": "ghcr.io/madarauchiha-314/skillbot-runtime:latest"
  }
}

4. Start skillbot

skillbot start --user-id my-user

Architecture

Skillbot follows a structured agent loop:

START -> Find Relevant Skills -> Load Skills -> Load Memories
      -> Plan & Execute -> Reflect -> [Complete?]
          -> Yes: Create Memories -> END
          -> No:  Summarize -> loop back to Find Skills

The loop is implemented as a LangGraph StateGraph with persistent checkpointing via SQLite.

Local Development

Prerequisites

  • Python >= 3.13
  • uv
  • Podman (skill scripts run inside containers)

Setup

Clone the repository and install dependencies:

git clone https://github.com/MadaraUchiha-314/skillbot.git
cd skillbot
uv sync --dev

This creates a .venv virtual environment and installs all runtime and dev dependencies.

Installing Pre-commit Hooks

Pre-commit hooks run linting, type checking, unit tests, and commit message validation automatically on every commit. Install them with:

uv run pre-commit install
uv run pre-commit install --hook-type commit-msg

You can also run all hooks manually against the entire codebase:

uv run pre-commit run --all-files

Common Commands

# Run unit tests
uv run pytest

# Run linter
uv run ruff check .

# Auto-fix lint issues
uv run ruff check . --fix

# Format code
uv run ruff format .

# Run type checker
uv run mypy skillbot

# Run all pre-commit hooks
uv run pre-commit run --all-files

Commit Messages

This project follows Conventional Commits. Commit messages are validated by Commitizen via a commit-msg hook. Use the format:

<type>(<optional scope>): <description>

[optional body]

[optional footer]

Examples:

feat: add user authentication
fix(parser): handle empty input gracefully
docs: update README with setup instructions

Project Structure

skillbot/
├── skillbot/
│   ├── agents/             # Agent implementations
│   │   ├── prompts/        # Prompt templates (.prompt.md)
│   │   └── supervisor.py   # Default supervisor agent
│   ├── channels/           # Communication channels
│   │   └── chat.py         # Shared A2A chat primitives
│   ├── cli/
│   │   ├── cli.py          # CLI commands (init, start)
│   │   └── tui.py          # Rich TUI components
│   ├── config/
│   │   └── config.py       # Config loading & dataclasses
│   ├── framework/
│   │   ├── agent.py        # AgentFramework (LangGraph graph)
│   │   └── state.py        # AgentState TypedDict
│   ├── memory/
│   │   └── memory.py       # User memory read/write
│   ├── server/
│   │   └── a2a_server.py   # A2A protocol server (FastAPI)
│   ├── container/
│   │   └── manager.py      # Podman container management
│   ├── skills/
│   │   └── loader.py       # Skill discovery & loading
│   └── tools/              # Tool infrastructure
├── tests/                  # Test suite
├── docs/                   # Documentation
├── .github/workflows/      # CI/CD pipelines
│   ├── pr.yml
│   └── release.yml
├── Containerfile              # Base image for skill execution
├── pyproject.toml
└── .pre-commit-config.yaml

Running the CLI Locally

During development, use uv run to invoke the CLI. This uses the editable install from .venv so your local code changes are reflected immediately without reinstalling.

1. Initialize configuration

# Initialize config in a local directory (avoids writing to ~/.skillbot)
uv run skillbot init --root-dir ./local-config

2. Configure your API key

Edit ./local-config/skillbot.config.json and add your OpenAI API key under model-providers.openai.api-key.

3. Build the container image

All skill scripts run inside Podman containers. For local development, build the image from the Containerfile instead of pulling from GHCR:

# Ensure the Podman machine is running (macOS only)
podman machine start

# Build the runtime image
podman build -t skillbot-runtime:latest -f Containerfile .

Then use --image to point skillbot at your local build:

uv run skillbot start --user-id dev --image skillbot-runtime:latest --config ./local-config/skillbot.config.json

The --image flag overrides the GHCR image from the config file for that run. No config edits needed.

Skillbot will refuse to start if container.enabled is set to false.

4. Start skillbot

# Start the server and open the chat interface
uv run skillbot start --user-id my-user --config ./local-config/skillbot.config.json

# Or start the server in the background only (no chat)
uv run skillbot start --background --config ./local-config/skillbot.config.json

If you prefer, you can also activate the virtualenv and run skillbot directly:

source .venv/bin/activate
skillbot --help

Hot-Reload (Development)

Use the --reload flag to automatically restart the server whenever you change code under skillbot/. This is the recommended way to run during development:

uv run skillbot start --config ./local-config/skillbot.config.json --reload

The server watches the skillbot/ directory for file changes and restarts automatically, so you don't need to manually stop and restart after each edit.

Skill Permissions and Dependencies

Skills can declare network access and dependencies in their SKILL.md frontmatter:

---
name: my-skill
description: Does something useful
permissions:
  network: true      # allow network access inside the container
dependencies:
  pip:
    - requests
  npm:
    - cheerio
---

The container is created with --network=none by default. If any configured skill declares permissions.network: true, the container gets network access via slirp4netns. Dependencies from all configured skills are installed inside the container at startup.

Metadata

Release files for skillbot 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for skillbot 0.4.1
File Size Uploaded Provenance
skillbot-0.4.1.tar.gz 629.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for skillbot 0.4.1
File Interpreter ABI Platform
skillbot-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 673.1 kB

Release files / skillbot-0.4.1.tar.gz

Download URL skillbot-0.4.1.tar.gz
Size 629.7 kB
Tags Source
SHA-256 checksum
How to use checksums
8c60e6b6ec20bfbb3b4230488b3711c5bf7996af8bff0ecd654f3df2e06612c0
BLAKE2b-256 checksum
How to use checksums
c673809d522038e48d35309db7641fdc44ba8ee293831d8a7d20cf2c4466c8d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.

Transparency log

Release files / skillbot-0.4.1-py3-none-any.whl

Download URL skillbot-0.4.1-py3-none-any.whl
Size 43.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
af61ca972452b1d66e63b9610c7ec2b4c4be09c9bd7f7eb5a9cd6c22c3175ef7
BLAKE2b-256 checksum
How to use checksums
a11063c32f6575e342c654c88b587f090dd23ba63dc8067349ef2a3b0eabf4be
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.

Transparency log

Security for skillbot 0.4.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for skillbot-0.4.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page