- Primary
- Auditor
- Full SSSA
trace_bundle(for runtime types)sandbox_manifest(for runtime types)probe_evidence
Run a Phylax miner on testnet 486 from a clean Ubuntu host.
PhylaxSynapse requests from validators. Each request contains a skill bundle to analyse. You run your analysis pipeline on that bundle and return a signed SSSA.
The subnet team defines the structural contract for what inputs you receive and what outputs you must produce. Your internal analysis pipeline is entirely your own. That is where you compete.
docker compose version must work)btcli (install guide)sudo usermod -aG docker $USER && newgrp dockerCreate Wallet and Register
#faucet channel.Install and Configure
~/phylax/miner/.env:| Variable | What to set |
|---|---|
PHYLAX_NETUID | 486 |
SUBTENSOR_NETWORK | test |
WALLET_NAME | folder name in ~/.bittensor/wallets/ |
WALLET_HOTKEY | default (or the hotkey you registered) |
PHYLAX_SERVER_URL | network server URL |
PHYLAX_SERVER_HOTKEY | pinned server hotkey |
Choose Your Skill Types
| Skill type | What the bundle contains | What your harness must do |
|---|---|---|
rag_knowledge | Documents, knowledge base content. No code. | Content scan. No sandbox. Compute fingerprint, detect hidden instructions, enumerate URLs, find the canary. |
declarative | A SKILL.md of natural language instructions. No code. | Static text analysis. No sandbox. Compute skill_md_fingerprint, run prompt injection classifier, detect Unicode anomalies, find the canary. |
executable_python | Python source plus dependency manifests. | Static analysis + SBOM + Docker sandbox detonation. Emit four base traces plus imports.jsonl. Thread canary through sandbox. |
executable_script | Shell scripts. | Static shell taint analysis + Docker sandbox detonation. Emit four base traces plus shell_commands.jsonl. |
mcp_server | MCP server with handlers and manifest. | Two containers (server + your test client). Enumerate and exercise all tools, one invocation carrying the canary. Emit four base traces plus tool_calls.jsonl. Compute mcp_manifest_hash. |
agent_composition | Composition manifest orchestrating child skills. | Multi container cascading detonation across parent and all children. Emit aggregated base traces plus agent_calls.jsonl. Compute dependency graph hash and transitive risk score. |
declarative is mandatory and automatic. The register helper and the server both inject it for you, so you only list the EXTRA types in PHYLAX_SUPPORTED_TYPES. You must declare at least one extra type, and rag_knowledge alone does not count. Valid additions: executable_python, executable_script, mcp_server, agent_composition (or rag_knowledge plus one of those four).Build Your Pipeline
~/phylax/miner/src/. All paths below are relative to that directory.| Skill type | Runner file | Sandbox container |
|---|---|---|
rag_knowledge | src/phylax/harness/rag_knowledge/runner.py | none |
declarative | src/phylax/harness/declarative/runner.py | none |
executable_python | src/phylax/harness/executable_python/runner.py | src/phylax/harness/executable_python/container/ |
executable_script | src/phylax/harness/executable_script/runner.py | src/phylax/harness/executable_script/container/ |
mcp_server | src/phylax/harness/mcp_server/runner.py | src/phylax/harness/mcp_server/container/ |
agent_composition | src/phylax/harness/agent_composition/runner.py | src/phylax/harness/agent_composition/container/ |
run(bundle_dir, nonce, canary_id, canary_val). Your replacement must return the same dataclass shape and emit the required trace files into the evidence directory.For runtime types, the container contract:/harness/run.sh <bundle_path> <nonce>CANARY_ID, CANARY_VAL, AGENT_TIMEOUT/evidence/ which is bind mounted by the runnerLog Into Your Container Registry
Build and Tag Your Sandbox Image
src/scripts/build-sandbox.sh that handles the build, push, and digest extraction for you.<registry> with docker.io, ghcr.io, quay.io, etc. Replace <your-username> with your registry username (this must match the account you logged in with in the previous step).The helper prints the registry image and the sha256: digest at the end. Paste both into your .env:src/phylax/harness/<skill_type>/container/Dockerfile. The build context must be the container/ directory because the Dockerfile uses COPY tracer.py ... relative to itself:Register Your Specialization
src/scripts/register.sh that reads your .env, signs a request with your hotkey, and POSTs it to the server.Run it once after you’ve edited .env, and re-run whenever you change PHYLAX_SUPPORTED_TYPES or rebuild the sandbox image.PHYLAX_SANDBOX_IMAGE / PHYLAX_SANDBOX_DIGEST to all runtime types in PHYLAX_SUPPORTED_TYPES. If you build separate images per skill type, edit .env and re-run the script for each one, or call src/scripts/register_miner.py directly with a custom .env per type.task_metadata.role field set to either primary or auditor. The validator chooses your role per task per round. You do not choose it.
trace_bundle (for runtime types)sandbox_manifest (for runtime types)probe_evidence| Skill type | Primary t_min / deadline | Auditor t_min / deadline |
|---|---|---|
rag_knowledge | 5s / 45s | 2s / 15s |
declarative | 10s / 90s | 3s / 30s |
executable_python | 30s / 300s | 10s / 90s |
executable_script | 30s / 300s | 10s / 90s |
mcp_server | 60s / 600s | 20s / 150s |
agent_composition | 120s / 900s | 30s / 240s |
standard profile. fast and deep profiles scale accordingly.
PhylaxSynapse with these fields populated.
1. attestation (always required, primary and auditor)
2. probe_evidence (always required, primary and auditor)
fs.jsonl, network.jsonl, and process.jsonl.3. trace_bundle (required for runtime primaries only)
dict[str, str] of {filename: base64(gzip(jsonl_bytes))}.| Skill type | Required files |
|---|---|
executable_python | network.jsonl.gz, fs.jsonl.gz, process.jsonl.gz, secrets.jsonl.gz, imports.jsonl.gz |
executable_script | network.jsonl.gz, fs.jsonl.gz, process.jsonl.gz, secrets.jsonl.gz, shell_commands.jsonl.gz |
mcp_server | network.jsonl.gz, fs.jsonl.gz, process.jsonl.gz, secrets.jsonl.gz, tool_calls.jsonl.gz |
agent_composition | network.jsonl.gz, fs.jsonl.gz, process.jsonl.gz, secrets.jsonl.gz, agent_calls.jsonl.gz |
rag_knowledge, declarative | Omit entirely |
network 5 MB, fs 10 MB, process 5 MB, secrets 1 MB, imports 2 MB, shell_commands 5 MB, tool_calls 5 MB, agent_calls 10 MB. Total bundle must not exceed 30 MB.4. sandbox_manifest (required for runtime primaries only)
image and digest must exactly match what you registered.canary_id and canary_val derived from the nonce. You must handle them correctly or your evidence score is zero.
| Skill type | What to do with the canary |
|---|---|
rag_knowledge | Compute rag_content_fingerprint over the documents exactly as delivered. Scan for CANARY_<canary_id> in content and set canary_id_found accordingly. |
declarative | Scan SKILL.md for <!-- CANARY: {canary_id} -->. Set canary_id_found = true when found. Compute skill_md_fingerprint over SKILL.md exactly as delivered. |
executable_python / executable_script | Thread canary_val into the sandbox as the CANARY_VAL env var. Have your harness write it to /skill/.canary before launching the skill. Your tracer must record this filesystem op in fs.jsonl. |
mcp_server | Include canary_val as a parameter value in at least one synthetic tool invocation. The record must appear in tool_calls.jsonl. |
agent_composition | Inject canary_val into the parent skill’s input context before detonation. The propagation must appear in agent_calls.jsonl. |
skill.skill_type differs from the task’s skill_type and the response is treated as invalid.task_metadata.t_min_s and the response is treated as not having run the sandbox.task_metadata.deadline_s and the submission is discarded entirely. No score, no reputation update.allowed_use values are finding_enrichment, mitre_owasp_mapping, or cve_explanation. Any other value scores zero and flags your hotkey for a reputation penalty.
In the same round
ts-sorted JSON, and recomputes the sha256. The hash must equal what you declared in the SSSA. The validator also scans your fs.jsonl for the canary write and checks your probe_evidence matches the nonce derivation.Across your verification group
| Variable | Default | Description |
|---|---|---|
SANDBOX_TIMEOUT | 60 | Per detonation timeout in seconds |
PHYLAX_LOG_LEVEL | INFO | Log level |
PHYLAX_EVIDENCE_HOST_DIR | set by install.sh | Host side absolute path of the evidence bind mount. Required for docker in docker. |
PHYLAX_SANDBOX_IMAGE | ghcr.io/praxi-labs/phylax-sandbox:latest | Image launched by runtime harnesses. Must match image_uri at registration. |
PHYLAX_SANDBOX_DIGEST | (empty) | sha256:... digest of the sandbox image. Must match image_hash at registration. |
PHYLAX_TRACER_VERSION | 1.0.0 | Tracer version string included in sandbox_manifest |
AXON_PORT | 8091 | Host port for the miner axon |
Container exits immediately
ls ~/.bittensor/wallets/<WALLET_NAME>/hotkeys/<WALLET_HOTKEY> exists.No scan: lines after 5 minutes
Specialization rejected: 'sandbox_images must include an entry for each runtime skill type'
executable_python) but PHYLAX_SANDBOX_IMAGE / PHYLAX_SANDBOX_DIGEST are missing or empty in .env. Set both and re-run register.sh.Specialization rejected: 'needs base_weight >= 1.0'
PHYLAX_SUPPORTED_TYPES is empty or only contains rag_knowledge. Add at least one of executable_python, executable_script, mcp_server, agent_composition to your .env.Specialization rejected: 'missing sandbox_image'
sandbox_images[<type>] for every runtime type you declared.Sandbox produces only log.txt
scripts/install.sh or set PHYLAX_EVIDENCE_HOST_DIR to the correct absolute host path.permission denied connecting to Docker API
DOCKER_GID matches getent group docker.Bundle hash mismatch
bundle_url is reachable from inside the container.Sandbox timeouts
SANDBOX_TIMEOUT.