Pull-based RedOS worker runtime agent for WORKER_RUNTIME task execution.
Project description
RedOS Runtime Agent
The RedOS runtime agent is a pull-based worker process. It authenticates with a
worker token, claims WORKER_RUNTIME tasks, runs one non-interactive shell
command at a time, streams output to the control plane, and reports final
results.
The agent is packaged as a separate instance under agent/. Its runtime
environment is intentionally separate from the control-plane .env.
PyPI Package
Package name:
redteam-os-agent
The package version is currently sourced from:
agent/redos_agent/__init__.py
If you update the code and want to publish again, you must bump
redos_agent.__version__ first. PyPI will reject uploading the same version
twice.
Boundaries
This agent does not install tools, create persistence, open an interactive terminal, run MCP, perform exploit automation, or choose commands by itself. It only executes task payloads explicitly created and dispatched by the control plane.
Configuration
Required:
cp agent/.env.example agent/.env
Then edit agent/.env and set at least:
REDOS_AGENT_API_URL="http://localhost:5000/api"
REDOS_AGENT_WORKER_TOKEN="rw_<worker_id>_<secret>"
Create A Worker Token
Create or reuse a worker through the operator API, then rotate a worker token:
curl -sS -X POST "http://localhost:5000/api/workers/$WORKER_ID/token" \
-H "Authorization: Bearer $REDOS_API_TOKEN"
The plaintext token is shown once. Store it in REDOS_AGENT_WORKER_TOKEN.
Run Locally
python -m venv .agent-venv
. .agent-venv/bin/activate
pip install -r agent/requirements.txt
set -a
. agent/.env
set +a
PYTHONPATH=agent python -m redos_agent
If installed from PyPI instead of source, run:
redteam-os-agent
Install As A Service
After installing from PyPI, you can install and start the agent as a systemd
service with one command:
sudo redteam-os-agent-install
The installer will:
- ask for the RedOS API URL
- ask for the worker token
- validate the token with the control plane by sending a heartbeat
- if validation succeeds, write the service config
- enable and start the service immediately
The installer writes:
- env file:
/etc/redteam-os-agent/agent.env - service file:
/etc/systemd/system/redteam-os-agent.service
After install:
systemctl status redteam-os-agent
journalctl -u redteam-os-agent -f
If you prefer non-interactive install:
sudo redteam-os-agent-install \
--api-url "http://localhost:5000/api" \
--worker-token "rw_<worker_id>_<secret>" \
--agent-name "redos-agent-service" \
--yes
Run With Docker Compose
cp agent/.env.example agent/.env
# edit agent/.env
docker compose -f agent/docker-compose.agent.yml --env-file agent/.env up --build
On Linux, the compose file maps host.docker.internal to the host gateway.
Because the compose file now lives under agent/, its Docker build context and
env file are fully local to the agent instance.
Build And Publish To PyPI
First build
From the repository root:
python -m venv .publish-venv
. .publish-venv/bin/activate
python -m pip install --upgrade pip build twine
cd agent
python -m build
python -m twine check dist/*
This creates:
dist/redteam_os_agent-<version>.tar.gzdist/redteam_os_agent-<version>-py3-none-any.whl
First upload
Upload to PyPI:
cd agent
python -m twine upload dist/*
If you want to test the package first, upload to TestPyPI:
cd agent
python -m twine upload --repository testpypi dist/*
Install after publish
pip install redteam-os-agent
Install and start as a service right after package install:
sudo redteam-os-agent-install
Rebuild and publish again after code changes
- Update the code.
- Bump
agent/redos_agent/__version__. - Rebuild clean artifacts.
- Upload the new version.
Recommended flow:
. .publish-venv/bin/activate
cd agent
rm -rf build dist *.egg-info
python -m build
python -m twine check dist/*
python -m twine upload dist/*
Verify published package
pip install --upgrade redteam-os-agent
redteam-os-agent
If you are testing against TestPyPI:
pip install --index-url https://test.pypi.org/simple/ redteam-os-agent
Dispatch A Runtime Task
Create a harmless task:
curl -sS -X POST "http://localhost:5000/api/tasks" \
-H "Authorization: Bearer $REDOS_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"target":"runtime-agent","command_payload":"whoami"}'
Dispatch it for worker-runtime mode:
curl -sS -X POST "http://localhost:5000/api/tasks/$TASK_ID/dispatch" \
-H "Authorization: Bearer $REDOS_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"WORKER_RUNTIME"}'
The agent will claim the task, create a runtime TaskExecution, stream output,
and finalize the task result.
To collect artifacts, include artifact_paths when creating the task:
curl -sS -X POST "http://localhost:5000/api/tasks" \
-H "Authorization: Bearer $REDOS_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"target":"runtime-agent","command_payload":"printf hello > /tmp/redos-artifact.txt","artifact_paths":["/tmp/redos-artifact.txt"]}'
The agent uploads existing artifact files before reporting completion or
failure. Missing files are reported as artifact metadata with status MISSING.
Observe Output
List executions:
curl -sS "http://localhost:5000/api/tasks/$TASK_ID/executions" \
-H "Authorization: Bearer $REDOS_API_TOKEN"
Watch live SSE output:
curl -N "http://localhost:5000/api/tasks/$TASK_ID/executions/$EXECUTION_ID/stream?last_id=0-0" \
-H "Authorization: Bearer $REDOS_API_TOKEN"
Read durable logs and final results:
curl -sS "http://localhost:5000/api/tasks/$TASK_ID/executions/$EXECUTION_ID/logs" \
-H "Authorization: Bearer $REDOS_API_TOKEN"
curl -sS "http://localhost:5000/api/tasks/$TASK_ID/results" \
-H "Authorization: Bearer $REDOS_API_TOKEN"
List and download artifacts:
curl -sS "http://localhost:5000/api/tasks/$TASK_ID/artifacts" \
-H "Authorization: Bearer $REDOS_API_TOKEN"
curl -L "http://localhost:5000/api/tasks/$TASK_ID/artifacts/$ARTIFACT_ID/download" \
-H "Authorization: Bearer $REDOS_API_TOKEN" \
-o redos-artifact.bin
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
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 redteam_os_agent-0.1.2.tar.gz.
File metadata
- Download URL: redteam_os_agent-0.1.2.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d0f420f424d4c13e33d65474813c044fa1a68b1a054dcc3ad1a0b6db8de6217
|
|
| MD5 |
a51d1f3d3ba8113d9ca29cd37393af6c
|
|
| BLAKE2b-256 |
0cf95f85d61c293bc502299426b698f3b9872957bb30d2c9437538a1e74d089f
|
File details
Details for the file redteam_os_agent-0.1.2-py3-none-any.whl.
File metadata
- Download URL: redteam_os_agent-0.1.2-py3-none-any.whl
- Upload date:
- Size: 12.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8ce7d74e2b434fb0ab48754dae250f76f09b4bf7108e1e48a7d1cb17aa07c8a
|
|
| MD5 |
027260f6dcbca9015998574758e32495
|
|
| BLAKE2b-256 |
9e51842103ab7c56de4cab001d51e1fc66acee5b77527d7b958ce7b32a942591
|