RadioShaq: Ham Radio AI Orchestration and Remote SDR Reception System
Project description
RadioShaq
Strategic Ham Radio Autonomous Query and Kontrol System
An AI-powered orchestrator for ham radio operations, emergency communications, and field-to-HQ coordination. One install gives you the API, web UI, and optional remote SDR receiver.
Install
pip install radioshaq
Optional (for SDR hardware): pip install radioshaq[sdr] (RTL-SDR) or radioshaq[hackrf] (HackRF).
Requirements: Python 3.11+
License notice: RadioShaq is distributed under GPL-2.0-only. Official CLI and web UI require explicit license acceptance before normal use.
Easiest way to get started: interactive setup
From a project directory (or the repo root), run:
radioshaq setup
This walks you through:
- Mode — field, hq, or receiver
- Database — use Docker Postgres or an existing URL
- Secrets — JWT secret, LLM API key (optional)
- Config — writes
.envandconfig.yaml, can start Docker and run migrations
Minimal prompts: radioshaq setup --quick (mode + “use Docker?” then defaults).
Non-interactive (CI/scripts): radioshaq setup --no-input --mode field (optionally --db-url postgresql://...).
Reconfigure: radioshaq setup --reconfigure to update existing config without starting over.
Run the API and web UI
radioshaq run-api
- API docs: http://localhost:8000/docs
- Web UI: http://localhost:8000/
- Health: http://localhost:8000/health
Default host: 0.0.0.0, port: 8000. Override with --host and --port.
Get a token (auth)
Most API calls need a Bearer JWT:
radioshaq token --subject op1 --role field --station-id STATION-01
Then set RADIOSHAQ_TOKEN to the printed value, or pass it in requests. Roles: field, hq, receiver.
Check API from the CLI:
radioshaq health
radioshaq health --ready
CLI at a glance
| Command | What it does |
|---|---|
| setup | |
radioshaq setup |
Interactive setup: .env, config.yaml, optional Docker and migrations |
radioshaq setup --quick |
Minimal prompts (mode, use Docker?), then defaults |
radioshaq setup --no-input --mode field |
Non-interactive for CI; optional --db-url, --config-dir |
radioshaq setup --reconfigure |
Update existing config (merge sections) |
| Server & auth | |
radioshaq run-api |
Start FastAPI server (and web UI at /). Options: --host, --port, --reload |
radioshaq run-receiver |
Start remote SDR receiver (port 8765). Set JWT_SECRET, STATION_ID, HQ_URL |
radioshaq token |
Get JWT. Options: --subject, --role, --station-id, --base-url |
radioshaq health |
Liveness check; radioshaq health --ready for readiness |
Callsigns (require RADIOSHAQ_TOKEN) |
|
radioshaq callsigns list |
List registered callsigns |
radioshaq callsigns add <callsign> |
Register a callsign |
radioshaq callsigns remove <callsign> |
Remove from whitelist |
radioshaq callsigns register-from-audio <file> |
Register from audio (ASR) |
| Messages | |
radioshaq message process <text> |
Send message through REACT orchestrator |
radioshaq message inject <text> |
Inject into RX path (demo). Options: --band, --mode, --source-callsign |
radioshaq message whitelist-request <text> |
Whitelist request (orchestrator + optional TTS) |
radioshaq message relay <msg> --source-band X --target-band Y |
Relay message between bands |
| Transcripts | |
radioshaq transcripts list |
List transcripts. Options: --callsign, --band, --since, --limit |
radioshaq transcripts get <id> |
Get one transcript |
radioshaq transcripts play <id> |
Play transcript as TTS over radio |
| Radio | |
radioshaq radio bands |
List bands |
radioshaq radio send-tts <message> |
Send TTS over radio. Options: --frequency-hz, --mode |
Use radioshaq --help and radioshaq <command> --help for options. API base URL: RADIOSHAQ_API (default http://localhost:8000).
Remote receiver (SDR listen-only)
For a listen-only station (e.g. Raspberry Pi + RTL-SDR) that streams to HQ:
pip install radioshaq[sdr] # or radioshaq[hackrf] for HackRF
export JWT_SECRET=your-secret
export STATION_ID=RECEIVER-01
export HQ_URL=http://your-hq:8000
radioshaq run-receiver
HQ accepts uploads at POST /receiver/upload (Bearer JWT). Default receiver port: 8765 (--port to change).
After install (no interactive setup)
If you prefer to configure by hand:
- Database: Set
DATABASE_URLorPOSTGRES_*(and run migrations with your Alembic config). - Config: Copy
config.example.yamltoconfig.yamland setmode,database,auth, etc. See Configuration. - Start:
radioshaq run-api.
Documentation
License
GPL-2.0-only
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 radioshaq-0.1.3.dev202603090021.tar.gz.
File metadata
- Download URL: radioshaq-0.1.3.dev202603090021.tar.gz
- Upload date:
- Size: 349.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
384f9f6d5bbbc2337d293d4a791cb9519e510bacf8197f3b868039dfe16e55bd
|
|
| MD5 |
650e1979e39ad9ed74b0c6d5518a0b22
|
|
| BLAKE2b-256 |
9baffc98fc6ac08636b5e8930de84fcbdd4c7860f68a22766579f5a13d32abfd
|
Provenance
The following attestation bundles were made for radioshaq-0.1.3.dev202603090021.tar.gz:
Publisher:
publish-nightly.yml on Josephrp/radioshaq
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
radioshaq-0.1.3.dev202603090021.tar.gz -
Subject digest:
384f9f6d5bbbc2337d293d4a791cb9519e510bacf8197f3b868039dfe16e55bd - Sigstore transparency entry: 1062782263
- Sigstore integration time:
-
Permalink:
Josephrp/radioshaq@08a0708dd859d829b751a12d332c7bb0c255207c -
Branch / Tag:
refs/heads/dev - Owner: https://github.com/Josephrp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-nightly.yml@08a0708dd859d829b751a12d332c7bb0c255207c -
Trigger Event:
push
-
Statement type:
File details
Details for the file radioshaq-0.1.3.dev202603090021-py3-none-any.whl.
File metadata
- Download URL: radioshaq-0.1.3.dev202603090021-py3-none-any.whl
- Upload date:
- Size: 425.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
54550daa1ec17b812f4b78aa2e110e0cf2b46e7a04608e7fe2d41870e8e92a84
|
|
| MD5 |
31cfb627f609faeef2d84d864f642341
|
|
| BLAKE2b-256 |
757f33c411f60c724fab16a701a7f32958d9b881e8f7bc5a7be3c9888969fa1d
|
Provenance
The following attestation bundles were made for radioshaq-0.1.3.dev202603090021-py3-none-any.whl:
Publisher:
publish-nightly.yml on Josephrp/radioshaq
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
radioshaq-0.1.3.dev202603090021-py3-none-any.whl -
Subject digest:
54550daa1ec17b812f4b78aa2e110e0cf2b46e7a04608e7fe2d41870e8e92a84 - Sigstore transparency entry: 1062782337
- Sigstore integration time:
-
Permalink:
Josephrp/radioshaq@08a0708dd859d829b751a12d332c7bb0c255207c -
Branch / Tag:
refs/heads/dev - Owner: https://github.com/Josephrp
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-nightly.yml@08a0708dd859d829b751a12d332c7bb0c255207c -
Trigger Event:
push
-
Statement type: