Command-line interface for Lablytics BYOD - Secure biotech data processing with zero-knowledge encryption
Project description
BYOD CLI
Secure biotech data processing with zero-knowledge encryption.
Your data is encrypted on your machine, processed inside a cryptographically attested AWS Nitro Enclave, and returned encrypted. No one — including Lablytics — can access your plaintext data.
Install
pip install byod-cli
# With the local web UI
pip install 'byod-cli[ui]'
Requirements: Python 3.9+ and AWS credentials (aws configure or environment variables).
Get Started
1. Sign up and get an API key
Go to https://byod.cultivatedcode.co, create an account, then go to Settings > API Keys and create a key. Copy it — it's only shown once.
2. Authenticate
byod auth login
Paste your API key when prompted (sk_live_xxxxx).
3. Set up your AWS resources (one-time)
byod setup
This creates a KMS key and IAM role in your AWS account. Only the verified Nitro Enclave can use the key to decrypt — not Lablytics, not anyone else.
4. Submit data
byod submit genomic-qc ./sample.fastq.gz
The CLI encrypts your file locally, uploads the ciphertext, and returns a job ID.
5. Get results
byod status <job-id> # Check progress
byod get <job-id> -o ./output/ # Retrieve + decrypt in one step
That's it. Your data was never visible to anyone outside the enclave.
Prefer a GUI? Run
byod uito do all of the above through a local web interface with drag-and-drop file submission and visual progress tracking.
Commands
| Command | What it does |
|---|---|
byod auth login |
Authenticate with your API key |
byod auth logout |
Clear stored credentials |
byod auth status |
Check if you're authenticated |
byod setup |
Create KMS key + IAM role in your AWS account |
byod update-policy |
Update KMS key policy with latest enclave PCR0 values |
byod submit <plugin> <file> |
Encrypt and submit data for processing |
byod status <job-id> |
Check job status |
byod list |
List your jobs |
byod get <job-id> -o <dir> |
Retrieve and decrypt results in one step |
byod plugins |
List available processing plugins |
byod profile list |
List configured profiles |
byod profile switch <name> |
Switch active profile |
byod profile delete <name> |
Delete a profile |
byod profile show |
Show current profile details |
byod config show |
Show current configuration |
byod ui |
Launch the local web UI for graphical submission and monitoring |
byod completion <shell> |
Generate shell completions (bash/zsh/fish) |
Plugins
| Plugin | Description | Accepts |
|---|---|---|
genomic-qc |
FastQC + MultiQC quality control | .fastq, .fastq.gz |
demo-count |
Line/word counting (for testing) | Any text file |
byod plugins # See all available plugins
byod plugins --format json # JSON output for scripting
Web UI
Prefer a graphical interface? The CLI includes a local web UI with drag-and-drop file submission, visual job tracking, and one-click result retrieval.
byod ui # Opens http://localhost:8420
byod ui --port 9000 # Custom port
byod ui --no-browser # Don't auto-open browser
The web UI runs entirely on your machine. All encryption happens locally — same security model as the CLI. Features include:
- Guided setup — walks you through authentication, AWS configuration, and KMS key creation
- Drag-and-drop submission — select a plugin, drop your files, and submit
- Live job tracking — watch progress with real-time status updates
- One-click results — download and decrypt results directly in the browser
- Profile management — switch between profiles and view configuration
Examples
# Submit a directory (auto-archived as tar.gz)
byod submit genomic-qc ./samples/
# Submit with metadata
byod submit genomic-qc ./sample.fastq.gz \
--description "Batch 2026-02" \
--tags experiment=exp001 \
--tags batch=batch_a
# Submit with custom pipeline config
echo '{"min_quality": 20}' > config.json
byod submit genomic-qc ./sample.fastq.gz --config config.json
# Wait for completion with live status updates
byod submit genomic-qc ./sample.fastq.gz --wait --timeout 3600
# List completed jobs
byod list --status completed
# JSON output for scripting
byod list --format json
byod submit genomic-qc ./data.fastq --format json
byod auth status --format json
# Quiet mode for CI/CD (suppress progress output)
byod --quiet submit genomic-qc ./sample.fastq.gz
# Disable colored output
byod --no-color list
# Use API key via environment variable (useful for CI/CD)
export BYOD_API_KEY=sk_live_xxxxx
byod --quiet submit genomic-qc ./sample.fastq.gz --format json
# Launch the web UI
byod ui
byod ui --port 9000 --no-browser
# Shell completions
eval "$(byod completion bash)"
eval "$(byod completion zsh)"
byod completion fish > ~/.config/fish/completions/byod.fish
How Security Works
Your Machine Lablytics
┌──────────────────┐ ┌──────────────────────────┐
│ byod-cli │ ciphertext │ S3 (encrypted blobs) │
│ - encrypt locally│───────────────>│ │ │
│ - decrypt locally│ │ v │
└────────┬─────────┘ │ Nitro Enclave │
│ │ - attests to your KMS key│
v │ - decrypts, processes, │
Your AWS Account │ re-encrypts │
┌──────────────────┐ │ - no network access │
│ KMS Key │<───────────────│ │
│ - you own it │ attestation └──────────────────────────┘
│ - PCR0 condition │
└──────────────────┘
| Who | Can decrypt your data? | Why |
|---|---|---|
| You | Yes | Your KMS key, your AWS credentials |
| Nitro Enclave | Yes | Cross-account role with PCR0 attestation |
| Lablytics operators | No | No access to your KMS key |
| Lablytics infrastructure | No | Attestation check blocks non-enclave access |
Environment Variables
| Variable | Description | Default |
|---|---|---|
BYOD_API_KEY |
API key (alternative to byod auth login) |
— |
BYOD_API_URL |
Custom API endpoint | https://byod.cultivatedcode.co |
BYOD_DEBUG |
Enable debug logging (1 or true) |
false |
NO_COLOR |
Disable colored output (any value) | — |
AWS_PROFILE |
AWS credentials profile | default |
AWS_REGION |
Region for KMS operations | us-east-1 |
Exit Codes
| Code | Meaning |
|---|---|
0 |
Success |
1 |
General error |
2 |
Authentication error |
3 |
Network error |
4 |
Resource not found |
Troubleshooting
"Not authenticated" — Run byod auth login with your API key from https://byod.cultivatedcode.co.
"No KMS key configured" — Run byod setup to create your KMS key and IAM role.
"AWS credentials not found" — Run aws configure or set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.
"AccessDenied when creating KMS key" — Your AWS user needs: kms:CreateKey, kms:CreateAlias, kms:PutKeyPolicy, iam:CreateRole, iam:PutRolePolicy.
"Decryption failed: AccessDeniedException" — Make sure you're using the same AWS account that ran byod setup. Check that the KMS key hasn't been deleted.
Debug mode:
byod --debug submit genomic-qc ./sample.fastq.gz
Development
pip install -e ".[dev]"
pytest # Run tests
ruff check src/ # Lint
ruff format src/ # Format
License
MIT — see LICENSE.
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 byod_cli-1.0.6.tar.gz.
File metadata
- Download URL: byod_cli-1.0.6.tar.gz
- Upload date:
- Size: 158.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1944d1740912974b968a032ca4134ab61608dcd5d0932da4a2617adbe670ccce
|
|
| MD5 |
680d0bca7f64bfdbfbd6a9cebae68ec0
|
|
| BLAKE2b-256 |
e93d80bcc07369bb14a56451bc53591c824c795a2435734d601cef186b871e86
|
Provenance
The following attestation bundles were made for byod_cli-1.0.6.tar.gz:
Publisher:
publish.yml on lablytics/byod-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
byod_cli-1.0.6.tar.gz -
Subject digest:
1944d1740912974b968a032ca4134ab61608dcd5d0932da4a2617adbe670ccce - Sigstore transparency entry: 946093708
- Sigstore integration time:
-
Permalink:
lablytics/byod-cli@6d7925c6fb0a865f17fd840323a14234c649e5a3 -
Branch / Tag:
refs/tags/v1.0.6 - Owner: https://github.com/lablytics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6d7925c6fb0a865f17fd840323a14234c649e5a3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file byod_cli-1.0.6-py3-none-any.whl.
File metadata
- Download URL: byod_cli-1.0.6-py3-none-any.whl
- Upload date:
- Size: 176.2 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 |
96b1c79aaf3150870c28bf234b1b5e25e8c6a131a94b6cefd77d220ebeafcb62
|
|
| MD5 |
371d967cc7b1733a724b4fdf902154c5
|
|
| BLAKE2b-256 |
aec3af344d4a6fffc59e517e2dca0fc559f28ab439b68259f3dca9f81a64cb5f
|
Provenance
The following attestation bundles were made for byod_cli-1.0.6-py3-none-any.whl:
Publisher:
publish.yml on lablytics/byod-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
byod_cli-1.0.6-py3-none-any.whl -
Subject digest:
96b1c79aaf3150870c28bf234b1b5e25e8c6a131a94b6cefd77d220ebeafcb62 - Sigstore transparency entry: 946093724
- Sigstore integration time:
-
Permalink:
lablytics/byod-cli@6d7925c6fb0a865f17fd840323a14234c649e5a3 -
Branch / Tag:
refs/tags/v1.0.6 - Owner: https://github.com/lablytics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6d7925c6fb0a865f17fd840323a14234c649e5a3 -
Trigger Event:
push
-
Statement type: