A previous release had provenance metadata, but this release does not. View details.
DevOpsBot SDK
Python client for the DevOpsBot desktop app. Provides the agentos CLI to configure credentials and a BackendClient to interact with the DevOpsBot backend.
Private package — requires GitHub access to install.
For a full walkthrough including SSH setup, end-to-end testing, and troubleshooting see SETUP_GUIDE.md.
Requirements
| Minimum | Check | |
|---|---|---|
| Python | 3.11+ | python3 --version (Linux/macOS) · python --version (Windows) |
| Git | any | git --version |
| DevOpsBot account | — | Needed for your API token |
Installation
Choose the method that fits your setup. Option A (venv) is recommended for developers. Option B (system Python) works for everyone else and requires no extra steps.
Option A — Virtual environment (recommended for developers)
A virtual environment keeps the SDK isolated from your system Python.
Linux / macOS:
# Create and activate a venv
python3 -m venv devopsbot-env
source devopsbot-env/bin/activate
# Install via SSH
pip install "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git"
# OR install via HTTPS token
pip install "git+https://<YOUR_GITHUB_TOKEN>@github.com/consultancy-outfit/DevOpsBot-SDK.git"
Windows (Command Prompt):
python -m venv devopsbot-env
devopsbot-env\Scripts\activate
pip install "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git"
Windows (PowerShell):
python -m venv devopsbot-env
devopsbot-env\Scripts\Activate.ps1
pip install "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git"
The venv must be activated every time you open a new terminal before using
agentosor running SDK scripts. You only create it once.
Option B — System Python (simplest, works for everyone)
Installs directly into your default Python environment — no activation needed.
Linux / macOS:
# via SSH
pip3 install --break-system-packages "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git"
# via HTTPS token
pip3 install --break-system-packages "git+https://<YOUR_GITHUB_TOKEN>@github.com/consultancy-outfit/DevOpsBot-SDK.git"
Windows:
# via SSH
pip install "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git"
# via HTTPS token
pip install "git+https://<YOUR_GITHUB_TOKEN>@github.com/consultancy-outfit/DevOpsBot-SDK.git"
--break-system-packagesis required on Ubuntu 22.04+ and Debian 12+ due to PEP 668. It is safe — it only installs this package, it does not affect your system Python. Windows does not need this flag.
If
pipis not found on Windows, usepython -m pip install ...instead.
With optional collectors
Append [all] to either install command to enable screen capture and process listing:
Linux / macOS (system Python):
pip3 install --break-system-packages "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git[all]"
Linux / macOS (venv, after activation):
pip install "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git[all]"
Windows:
pip install "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git[all]"
Configure
Get your API token from DevOpsBot Web App → Settings → API Tokens → Generate Token.
Token format: co_<uuid>_<32-hex-secret>
agentos configure
To replace an existing token:
agentos configure --rotate
Quick Start
import asyncio
from sdk import BackendClient
async def main():
client = BackendClient.from_config() # reads ~/.agentos/config.toml
profile = await client.bootstrap()
print(f"Logged in — tier: {profile.tier}")
async for envelope in client.chat("my-thread", "What tasks are open?"):
if envelope.type == "delta":
print(envelope.data["text"], end="", flush=True)
elif envelope.type == "done":
print()
break
asyncio.run(main())
Agents
The orchestrator runs AI agent pipelines server-side. You submit a task, receive a stream of progress envelopes, and approve or reject the outcome.
Run an agent
import asyncio
from sdk import BackendClient
from sdk.models.requests import OrchestratorRequest
async def main():
client = BackendClient.from_config()
req = OrchestratorRequest(
task_input="hello",
intent="greet", # optional — helps the backend route the task
)
async for envelope in client.orchestrator_run(req):
print(f"[{envelope.type}] {envelope.data}")
if envelope.type == "awaiting_approval":
# Task needs a human decision before it continues
task_id = envelope.data["task_id"]
decision = input("Approve? (yes/no): ").strip().lower()
await client.approve_task(
task_id,
decision="approved" if decision == "yes" else "rejected",
note="Reviewed and approved by operator.",
)
elif envelope.type in ("done", "error"):
break
asyncio.run(main())
Envelope types emitted by the orchestrator
| Type | When it fires | Useful data |
|---|---|---|
pipeline_started |
Task accepted by backend | task_id |
pipeline.<key> |
A pipeline context field updated | key, value |
awaiting_approval |
Pipeline paused — human decision required | task_id |
done |
Pipeline completed | task_id, approval_status |
error |
Unrecoverable failure | code, message |
List and approve tasks
import asyncio
from sdk import BackendClient
async def main():
client = BackendClient.from_config()
# List tasks waiting for approval
result = await client.list_tasks(status="To Do", limit=20)
for task in result.get("tasks", []):
print(task["task_id"], task.get("summary", ""))
# Approve a specific task by ID
await client.approve_task("task-id-here", decision="approved", note="LGTM")
asyncio.run(main())
Test agents end-to-end (no repo clone needed)
Linux / macOS
python3 - << 'EOF'
import asyncio
from sdk import BackendClient
from sdk.models.requests import OrchestratorRequest
async def main():
client = BackendClient.from_config()
print("Starting agent pipeline...")
req = OrchestratorRequest(task_input="hello")
async for envelope in client.orchestrator_run(req):
print(f" [{envelope.type}] {envelope.data}")
if envelope.type == "awaiting_approval":
print(" → Auto-approving for test...")
await client.approve_task(envelope.data["task_id"], decision="approved")
elif envelope.type == "done":
print("\nAgent completed successfully.")
break
elif envelope.type == "error":
print(f"\nAgent error: {envelope.data}")
break
asyncio.run(main())
EOF
Windows (PowerShell)
python - << 'EOF'
import asyncio
from sdk import BackendClient
from sdk.models.requests import OrchestratorRequest
async def main():
client = BackendClient.from_config()
print("Starting agent pipeline...")
req = OrchestratorRequest(task_input="hello")
async for envelope in client.orchestrator_run(req):
print(f" [{envelope.type}] {envelope.data}")
if envelope.type == "awaiting_approval":
print(" -> Auto-approving for test...")
await client.approve_task(envelope.data["task_id"], decision="approved")
elif envelope.type == "done":
print("\nAgent completed successfully.")
break
elif envelope.type == "error":
print(f"\nAgent error: {envelope.data}")
break
asyncio.run(main())
EOF
Windows (Command Prompt)
Save as test_agent.py and run python test_agent.py:
# test_agent.py
import asyncio
from sdk import BackendClient
from sdk.models.requests import OrchestratorRequest
async def main():
client = BackendClient.from_config()
print("Starting agent pipeline...")
req = OrchestratorRequest(task_input="hello")
async for envelope in client.orchestrator_run(req):
print(f" [{envelope.type}] {envelope.data}")
if envelope.type == "awaiting_approval":
print(" -> Auto-approving for test...")
await client.approve_task(envelope.data["task_id"], decision="approved")
elif envelope.type == "done":
print("\nAgent completed successfully.")
break
elif envelope.type == "error":
print(f"\nAgent error: {envelope.data}")
break
asyncio.run(main())
Expected output
Starting agent pipeline...
[pipeline_started] {'task_id': 'tsk_abc123'}
[pipeline.summary] {'key': 'summary', 'value': 'Processing...'}
[awaiting_approval] {'task_id': 'tsk_abc123'}
-> Auto-approving for test...
[done] {'task_id': 'tsk_abc123', 'approval_status': 'approved'}
Agent completed successfully.
Error Handling
from sdk import BackendClient, TokenNotConfigured, BackendAuthFailed, BackendUnreachable
try:
client = BackendClient.from_config()
await client.ping()
except TokenNotConfigured:
print("Run: agentos configure")
except BackendAuthFailed:
print("Token expired — run: agentos configure --rotate")
except BackendUnreachable as e:
print(f"Backend unreachable: {e}")
Upgrade
Linux / macOS (system Python):
pip3 install --break-system-packages --upgrade "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git"
Linux / macOS (venv — activate first):
source devopsbot-env/bin/activate
pip install --upgrade "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git"
Windows:
pip install --upgrade "git+ssh://git@github.com/consultancy-outfit/DevOpsBot-SDK.git"
Uninstall
Remove the SDK package
Linux / macOS (system Python):
pip3 uninstall devops-bot-sdk -y
Linux / macOS (venv — activate first):
source devopsbot-env/bin/activate
pip uninstall devops-bot-sdk -y
Windows:
pip uninstall devops-bot-sdk -y
Remove the venv entirely (if you used one)
Linux / macOS:
rm -rf devopsbot-env
Windows (Command Prompt):
rmdir /s /q devopsbot-env
Windows (PowerShell):
Remove-Item -Recurse -Force devopsbot-env
Remove saved credentials
Deletes the stored token and backend URL from your machine.
Linux / macOS:
rm -rf ~/.agentos
Windows (Command Prompt):
rmdir /s /q %USERPROFILE%\.agentos
Windows (PowerShell):
Remove-Item -Recurse -Force $HOME\.agentos
Metadata
Release files for devops-bot-sdk 1.6.60
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Loss of provenance
These files do not have provenance metadata, despite files in a prior release including this data.
We recommend further investigation before installing these files. View details.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| devops_bot_sdk-1.6.60.tar.gz | 955.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| devops_bot_sdk-1.6.60-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.7 MB
Release files / devops_bot_sdk-1.6.60.tar.gz
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | devops_bot_sdk-1.6.60.tar.gz |
|---|---|
| Size | 955.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cf7180019de3870e2951b0c5a1783c618314e8bb491bfdff00be34b4f07d3e90
|
|
BLAKE2b-256 checksum How to use checksums |
186e15ba89b0feee6f82a1e0ed8fb1a8329629fa61bc92872ca770f9bc58b349
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / devops_bot_sdk-1.6.60-py3-none-any.whl
Loss of provenance
This file belongs to a release without provenance metadata, despite a prior release including this data.
We recommend further investigation before installing this file. View details.
| Download URL | devops_bot_sdk-1.6.60-py3-none-any.whl |
|---|---|
| Size | 756.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d0ac3f557b920aeae0a13178d4e7941be75827406091ed6999e8d3eb5e3c67ce
|
|
BLAKE2b-256 checksum How to use checksums |
c05abccf2fbe3b528dd83cf876955fe79e49f65395074ddf585e900fa31a59ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for devops-bot-sdk 1.6.60
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.
Loss of provenance
A previous release of these files had provenance metadata, but this release does not.
While this could reflect a routine change by the project maintainers, it may also indicate that the release files have been compromised.
Release comparison
- Removed 1.6.54 2 files With provenance
- Added 1.6.60 2 files Without provenance
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.