Agentic framework with desk/worker/workforce primitives
Project description
Blackgeorge
Blackgeorge is a code-first agentic framework built around the Desk, Worker, and Workforce primitives. It focuses on clear APIs, structured outputs, tool safety, and pause/resume flows.
Docs
See docs/README.md for the full documentation set.
Preview locally with uv run mkdocs serve.
Install
uv pip install -e .
Basic usage
from blackgeorge import Desk, Worker, Job
desk = Desk(model="openai/gpt-5-nano")
worker = Worker(name="Researcher")
job = Job(input="Summarize this topic", expected_output="A short summary")
report = desk.run(worker, job)
print(report.content)
Job input
Job.input is the payload sent to the worker as the user message. If it is not a string, it is serialized to JSON. Use a string for simple requests, or a structured dict when you want explicit fields.
job = Job(
input={
"task": "Fix calculator behavior and update tests.",
"context": "Use tools to inspect the project files.",
"requirements": [
"Confirm divide-by-zero behavior with the user.",
"Confirm empty-average behavior with the user.",
"Apply changes using tools.",
],
},
expected_output="Updated project files with consistent behavior.",
)
Workforce
from blackgeorge import Desk, Worker, Workforce, Job
desk = Desk(model="openai/gpt-5-nano")
w1 = Worker(name="Researcher")
w2 = Worker(name="Writer")
workforce = Workforce([w1, w2], mode="managed")
job = Job(input="Create a market report")
report = desk.run(workforce, job)
Workflow
from blackgeorge import Desk, Worker, Job
from blackgeorge.workflow import Step, Parallel
desk = Desk(model="openai/gpt-5-nano")
analyst = Worker(name="Analyst")
writer = Worker(name="Writer")
flow = desk.flow([
Step(analyst),
Parallel(Step(writer), Step(analyst)),
])
job = Job(input="Analyze product feedback")
report = flow.run(job)
Streaming
report = desk.run(worker, job, stream=True)
Pause and resume
from blackgeorge import Desk, Worker, Job
from blackgeorge.tools import tool
@tool(requires_confirmation=True)
def risky_action(action: str) -> str:
return f"ran:{action}"
desk = Desk(model="openai/gpt-5-nano")
worker = Worker(name="Ops", tools=[risky_action])
job = Job(input="run risky")
report = desk.run(worker, job)
if report.status == "paused":
report = desk.resume(report, True)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file blackgeorge-0.1.0.tar.gz.
File metadata
- Download URL: blackgeorge-0.1.0.tar.gz
- Upload date:
- Size: 26.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"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":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b75e1a0e4945e8f5e29b69bb14051d069bff6c34f1fef5e4f639e7c351e9e9de
|
|
| MD5 |
a33b3967048314536c4ab2088d562ed2
|
|
| BLAKE2b-256 |
0c3b117b5b78251a676ea49fdadc73b37a6c3ccd99a451729c0495b71f1c1abd
|
File details
Details for the file blackgeorge-0.1.0-py3-none-any.whl.
File metadata
- Download URL: blackgeorge-0.1.0-py3-none-any.whl
- Upload date:
- Size: 41.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.11 {"installer":{"name":"uv","version":"0.9.11"},"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":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1a9b1c93f6d1ccaf2286526131bf613c19dddb8f46cca88bcebfd1d40895d473
|
|
| MD5 |
bcccf57fc48a4d765a98112c4a55117d
|
|
| BLAKE2b-256 |
879cf88db2dfa5737410eac9a8e5bd22173960ad1a5e91c6bb7bdd4bdc1e656e
|