Skip to main content

overseer-sdk (Python)

PyPI Python Tests

Python SDK for building external plugins for overseer — a personal developer CLI that unifies daily workflows.


What is an overseer plugin?

overseer supports external plugins: any executable named overseer-<name> on PATH or in brain/overseer/plugins/ is automatically registered as overseer <name>. Plugins can also hook into the daily briefing and status health-check commands.

This SDK gives you the context, helpers, and styling primitives to write those plugins in Python.


Install

pip install overseer-sdk

Or with uv:

uv add overseer-sdk

Quick start

#!/usr/bin/env python3
from overseer_sdk import PluginContext, StatusResult, run_main, section_header, ok_line

def daily(ctx: PluginContext) -> str:
    token = ctx.secret("myservice", "token")
    # ... fetch data using token ...
    lines = [str(section_header("My Service", "2 items"))]
    lines.append(str(ok_line("all good")))
    return "\n".join(lines)

def status(ctx: PluginContext) -> list[StatusResult]:
    return [StatusResult(name="myservice", ok=True, message="connected")]

if __name__ == "__main__":
    run_main(daily_fn=daily, status_fn=status)

Save it as overseer-myservice, make it executable, and drop it in brain/overseer/plugins/. Add a sidecar manifest:

// overseer-myservice.json
{
  "description": "My service integration",
  "secrets": ["myservice"],
  "hooks": ["daily", "status"]
}

API reference

PluginContext

Loaded from the OVERSEER_CONTEXT environment variable that overseer injects before calling your plugin.

from overseer_sdk import PluginContext

ctx = PluginContext.from_env()

ctx.version      # str — overseer version
ctx.config_path  # str — path to the active config.yaml
ctx.secrets      # dict[str, dict[str, str]] — resolved secrets

ctx.secret(ref, key) -> str

Return a resolved secret value by integration ref and key. Raises KeyError if the ref or key is not found — this usually means the secret wasn't declared in the plugin manifest.

token = ctx.secret("github.personal", "token")

run_main(daily_fn, status_fn)

Wire up your plugin's hooks from CLI arguments. Call this at the bottom of your script.

from overseer_sdk import run_main

run_main(daily_fn=my_daily, status_fn=my_status)
  • When called with daily: runs daily_fn(ctx), prints the returned string to stdout.
  • When called with status: runs status_fn(ctx), serialises the returned list to JSON on stdout.
  • Either argument can be omitted if your plugin only implements one hook.

StatusResult

from overseer_sdk import StatusResult

StatusResult(name="github", ok=True, message="authenticated as user@example.com")
StatusResult(name="jira", ok=False, message="token expired")

notify(title, message, subtitle="")

Fire a native desktop notification via overseer notify.

from overseer_sdk import notify

notify("Deploy done", "my-service v1.2.3 is live")
notify("Build failed", "see CI logs", subtitle="my-repo")

Styling

The SDK exposes the same colour palette and helpers used by the overseer CLI itself, built on rich.

from rich.console import Console
from overseer_sdk import (
    section_header,  # ▸ Label  ·  badge
    ok_line,         # ✓  label: message
    warn_line,       # ⚠  label: message
    error_line,      # ✗  label: message
    STYLE_HEADER, STYLE_ACCENT, STYLE_OK, STYLE_WARN,
    STYLE_ERROR, STYLE_MUTED, STYLE_DIM, STYLE_NORMAL,
)

console = Console()
console.print(section_header("GitHub", "3 open PRs"))
console.print(ok_line("auth", "user@example.com"))
console.print(warn_line("rate limit", "80% used"))
console.print(error_line("token", "expired"))

How overseer calls your plugin

overseer sets the OVERSEER_CONTEXT environment variable to a JSON object before invoking your plugin binary:

{
  "version": "1.2.3",
  "config_path": "/Users/you/brain/overseer/config.yaml",
  "secrets": {
    "myservice": {
      "token": "resolved-secret-value"
    }
  }
}

Secrets listed in the manifest are pre-resolved (including op:// 1Password references) before the plugin is called. Your plugin never needs to touch the op CLI directly.


Links

Metadata

Release files for overseer-sdk 0.1.2

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

Source distribution (sdist)

Source distribution for overseer-sdk 0.1.2
File Size Uploaded Provenance Actions
overseer_sdk-0.1.2.tar.gz 7.0 kB Without provenance Details for overseer_sdk-0.1.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for overseer-sdk 0.1.2
File Interpreter ABI Platform Actions
overseer_sdk-0.1.2-py3-none-any.whl Python 3 none any Details for overseer_sdk-0.1.2-py3-none-any.whl

Total release size: 13.5 kB

Release files / overseer_sdk-0.1.2.tar.gz

Download URL overseer_sdk-0.1.2.tar.gz
Size 7.0 kB
Tags Source
SHA-256 checksum
How to use checksums
51422d5910926b9ac743eefe7f7a9efb28c7b0c5235f01d51990101e9ecac3c6
BLAKE2b-256 checksum
How to use checksums
8ec91ef7709cfe8869243a20d9bb36a3552b99d542b643aa8c9f8fd2e7d2efbc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / overseer_sdk-0.1.2-py3-none-any.whl

Download URL overseer_sdk-0.1.2-py3-none-any.whl
Size 6.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
261ecdacc0dcaf20229930bf9304ab2567e9e3b3e813f941a5d29a3fac33aeb1
BLAKE2b-256 checksum
How to use checksums
6d8d129cdb449fd7901a9e8cba3edef462baa8fb06c81f0b26b3a19aeb1a40c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for overseer-sdk 0.1.2

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

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