{"id":"bb2134ac-1265-4bb5-bc9b-6c992d96225a","entityType":"agent","slug":"clawhub-mbordash-dradis-tactical-command","name":"DRADIS PolyMarket & Kalshi Trading Automation","canonicalUrl":"https://www.xpersona.co/agent/clawhub-mbordash-dradis-tactical-command","canonicalPath":"/agent/clawhub-mbordash-dradis-tactical-command","generatedAt":"2026-10-10T23:45:42.696Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T20:52:08.110Z","emptyReason":null},"description":"Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication. Skill: DRADIS PolyMarket & Kalshi Trading Automation Owner: mbordash Summary: Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication. Tags: defi:1.0.0, finance:1.0.0, high-frequency:1.0.0, latest:1.5.1, polymarket:1.0.0, trading:1.0.0 Version history: v1.5.1 | 2026-08-10T23:33:44.6","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.3K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17b5g20vyhg91q4dc40c7h3sh86vyy8:dradis-tactical-command","sourceUrl":"https://clawhub.ai/mbordash/dradis-tactical-command","homepage":"https://clawhub.ai/mbordash/skills/dradis-tactical-command","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/mbordash/dradis-tactical-command","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/mbordash/skills/dradis-tactical-command","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support f"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:52:08.110Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:52:08.110Z","emptyReason":null},"stars":null,"forks":null,"downloads":1261,"packageName":null,"latestVersion":"1.5.1","tractionLabel":"1.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T20:52:08.014Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T20:52:08.110Z","lastCrawledAt":"2026-10-10T20:52:08.014Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T20:52:08.014Z","lastVerifiedAt":null,"highlights":[{"version":"1.5.1","createdAt":"2026-08-10T23:33:44.693Z","changelog":"dradis-tactical-command v1.5.1 - No file changes detected in this version. - Documentation version updated from 1.5.0 to 1.5.1, with no technical or behavioral changes to the skill. - All API contracts, safety guardrails, and procedures remain as previously described.","fileCount":3,"zipByteSize":9515},{"version":"1.5.0","createdAt":"2026-08-10T23:24:18.914Z","changelog":"dradis-tactical-command v1.5.0 - Corrected PATCH bodies to require a flat, partial object (not wrapped as {\"updates\": {...}}); wrapping is silently ignored and does nothing. - Clarified that squadron IDs are of the form \"{asset}-{cadence}\" (e.g. \"btc-hourly\") and must be sourced from `list_squadrons`; never construct manually. - Updated config workflow: Only squadron config affects trading; global config PATCH now governs the LLM advisor only. - Added new read tools: `get_viper_status`, `get_llm_actions` (plus approve/reject), `get_telemetry`, `get_logs`, `get_latency`, `get_taxonomy_raptors`, `get_taxonomy_vipers`, `get_available_markets`, `get_deployments`, `get_deployment_region`, and more. - Improved documentation for error codes, public vs. protected routes, venue/build differences, config change verification, and read-only/403 behavior. - Removed obsolete sample file `skill-card.md`.","fileCount":3,"zipByteSize":9483},{"version":"1.4.0","createdAt":"2026-06-21T20:02:10.219Z","changelog":"**v1.4.0 adds squadron-level management, config validation, and new portfolio/positions tools.** - Adds squadron-specific monitoring and config management: `list_squadrons`, `get_squadron`, `get_squadron_config`, `patch_squadron_config`. - Introduces `get_config_schema` for config field validation and safer updates. - Expands portfolio and positions tools: `get_portfolio_value`, `get_pending_positions`, `get_confirmed_positions`, `list_assets`. - Example commands and safety guidelines updated to cover squadron and portfolio features. - Removed redundant documentation file (`skill-card.md`).","fileCount":3,"zipByteSize":4100},{"version":"1.3.0","createdAt":"2026-05-16T14:12:19.799Z","changelog":"Added Publisher Note addressing ClawScan's two Medium findings (live config patching + API key usage)","fileCount":3,"zipByteSize":3258},{"version":"1.2.0","createdAt":"2026-05-16T13:25:18.416Z","changelog":"Added homepage link to DRADIS repo + short About section so users understand the project","fileCount":2,"zipByteSize":1970},{"version":"1.1.0","createdAt":"2026-05-16T13:19:45.652Z","changelog":"Added full support for DRADIS_API_KEY + X-API-Key header authentication (matches latest README)","fileCount":2,"zipByteSize":1828},{"version":"1.0.0","createdAt":"2026-05-16T13:02:46.893Z","changelog":"Initial release: full Polymarket trading engine supervisor with health, P&L, positions, trades, config, strategy status, and LLM recommendations","fileCount":2,"zipByteSize":2218}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17b5g20vyhg91q4dc40c7h3sh86vyy8:dradis-tactical-command","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T23:45:42.691Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-mbordash-dradis-tactical-command/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T20:52:08.110Z","emptyReason":null},"readme":"Skill: DRADIS PolyMarket & Kalshi Trading Automation\n\nOwner: mbordash\n\nSummary: Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication.\n\nTags: defi:1.0.0, finance:1.0.0, high-frequency:1.0.0, latest:1.5.1, polymarket:1.0.0, trading:1.0.0\n\nVersion history:\n\nv1.5.1 | 2026-08-10T23:33:44.693Z | user\n\ndradis-tactical-command v1.5.1\n\n- No file changes detected in this version.\n- Documentation version updated from 1.5.0 to 1.5.1, with no technical or behavioral changes to the skill.\n- All API contracts, safety guardrails, and procedures remain as previously described.\n\nv1.5.0 | 2026-08-10T23:24:18.914Z | user\n\ndradis-tactical-command v1.5.0\n\n- Corrected PATCH bodies to require a flat, partial object (not wrapped as {\"updates\": {...}}); wrapping is silently ignored and does nothing.\n- Clarified that squadron IDs are of the form \"{asset}-{cadence}\" (e.g. \"btc-hourly\") and must be sourced from `list_squadrons`; never construct manually.\n- Updated config workflow: Only squadron config affects trading; global config PATCH now governs the LLM advisor only.\n- Added new read tools: `get_viper_status`, `get_llm_actions` (plus approve/reject), `get_telemetry`, `get_logs`, `get_latency`, `get_taxonomy_raptors`, `get_taxonomy_vipers`, `get_available_markets`, `get_deployments`, `get_deployment_region`, and more.\n- Improved documentation for error codes, public vs. protected routes, venue/build differences, config change verification, and read-only/403 behavior.\n- Removed obsolete sample file `skill-card.md`.\n\nv1.4.0 | 2026-06-21T20:02:10.219Z | user\n\n**v1.4.0 adds squadron-level management, config validation, and new portfolio/positions tools.**\n\n- Adds squadron-specific monitoring and config management: `list_squadrons`, `get_squadron`, `get_squadron_config`, `patch_squadron_config`.\n- Introduces `get_config_schema` for config field validation and safer updates.\n- Expands portfolio and positions tools: `get_portfolio_value`, `get_pending_positions`, `get_confirmed_positions`, `list_assets`.\n- Example commands and safety guidelines updated to cover squadron and portfolio features.\n- Removed redundant documentation file (`skill-card.md`).\n\nv1.3.0 | 2026-05-16T14:12:19.799Z | user\n\nAdded Publisher Note addressing ClawScan's two Medium findings (live config patching + API key usage)\n\nv1.2.0 | 2026-05-16T13:25:18.416Z | user\n\nAdded homepage link to DRADIS repo + short About section so users understand the project\n\nv1.1.0 | 2026-05-16T13:19:45.652Z | user\n\nAdded full support for DRADIS_API_KEY + X-API-Key header authentication (matches latest README)\n\nv1.0.0 | 2026-05-16T13:02:46.893Z | user\n\nInitial release: full Polymarket trading engine supervisor with health, P&L, positions, trades, config, strategy status, and LLM recommendations\n\nArchive index:\n\nArchive v1.5.1: 3 files, 9515 bytes\n\nFiles: skill-card.md (2314b), SKILL.md (21721b), _meta.json (142b)\n\nFile v1.5.1:SKILL.md\n\n---\nname: dradis-tactical-command\ndescription: Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication.\nhomepage: https://github.com/mbordash/DRADIS\nuser-invocable: true\n---\n\n# Skill: DRADIS Tactical Command (v1.5.1)\n\nFull-featured autonomous supervisor for the **DRADIS** high-frequency prediction market execution engine.\n\n> **What's new in v1.5.1**\n> - **Corrected PATCH contract.** Config PATCH bodies are a *flat* partial object, not a wrapped `updates` object. A wrapped body is silently ignored and still returns `200 OK` — see [Applying config changes](#applying-config-changes) for the mandatory verification step.\n> - **Corrected squadron ids.** Ids are `{asset}-{cadence}` (e.g. `btc-hourly`), never a bare asset name. Always read them from `list_squadrons`.\n> - **`patch_dynamic_config` no longer affects trading.** Strategy execution reads squadron-scoped config exclusively; the global endpoint now only governs the LLM advisor. Use `patch_squadron_config` for anything that changes trading behaviour.\n> - **New read tools:** `get_viper_status` (why isn't it trading?), `get_llm_actions` + approve/reject (the AI action queue), `get_telemetry`, `get_telemetry_history`, `get_telemetry_assets`, `get_logs`, `get_latency`, `get_taxonomy_raptors`, `get_taxonomy_vipers`, `get_available_markets`, `get_deployments`, `get_deployment_region`.\n> - Documented `DRADIS_READ_ONLY` (403 on writes), public vs. protected routes, query-param defaults and clamps, and per-venue endpoint availability.\n\n## About DRADIS\n\nDRADIS is an open-source, low-latency Rust trading engine for crypto prediction markets.\nIt features a Viper strategy engine, real-time equity curve, dynamic config hot-reloading, and a built-in LLM advisor.\n\n**Project repository:** [https://github.com/mbordash/DRADIS](https://github.com/mbordash/DRADIS)\n\n### Venues\n\nDRADIS builds against exactly one venue at a time (mutually exclusive Cargo features):\n\n| Build | Venue | Notes |\n|---|---|---|\n| `intl_clob` (default) | Polymarket International | Self-custody; on-chain wallet balance available |\n| `us_retail` | Polymarket US | Custodial; no on-chain wallet probe |\n| `kalshi` | Kalshi | Custodial; no on-chain wallet probe |\n\nThe agent cannot tell which build is running from the venue name alone — call `get_deployment_region` to find out. This matters because a few endpoints are build-specific (noted per tool below).\n\n### Architecture the agent should understand\n\n- A **CAG** (Commander Air Group) runs one or more **Squadrons**, one per market.\n- Each Squadron owns **Raptors** (signal feeds) and **Vipers** (strategies), plus **its own `DynamicConfig`**.\n- **Squadron config is the only config that affects trading.** The global `/api/config` object is a separate, legacy-scope record that now only feeds the LLM advisor.\n\n## Publisher Note (Addressing ClawScan Findings)\n\nClawScan has flagged two medium-risk items (as expected for any live-trading integration):\n- Ability to PATCH live strategy parameters\n- Forwarding of a sensitive `DRADIS_API_KEY`\n\nThese are intentional and documented. The skill **never** applies config changes without explicit human confirmation.\n\nThis skill is **monitoring and configuration only, by design.** It deliberately exposes no tool that opens, closes, or settles a position, and none that deploys a squadron. The engine's API does offer such endpoints (`DELETE /api/positions/{token_id}`, `POST /api/positions/manual-exit`, `POST /api/positions/sync`, `POST /api/squadrons/deploy`) — they are omitted here so that no agent turn can spend money or flatten a position. Perform those actions in the Control Tower UI.\n\nI strongly recommend using a dedicated, least-privilege API key and only running this skill against your own trusted DRADIS instance.\n\n## Authentication\n\nDRADIS supports optional API key authentication via the `X-API-Key` header.\n\n- Set `DRADIS_API_KEY` in your OpenClaw configuration.\n- The skill automatically adds the header to every request.\n- Local use works without a key; remote/production use strongly recommends it.\n\n**Public vs. protected routes.** `check_engine_status` (`/api/health`) and `list_assets` (`/api/assets`) are intentionally unauthenticated so that container health checks and load balancers can probe them. Every other tool requires the key when `DRADIS_API_KEY` is set. A healthy `/api/health` alongside 401s elsewhere means *the key is wrong*, not that the engine is down — report it that way.\n\n### Error codes the agent must distinguish\n\n| Code | Meaning | What to tell the user |\n|---|---|---|\n| `401` | Missing/incorrect `X-API-Key` | Configure `DRADIS_API_KEY` to match the engine's env var |\n| `403` | `DRADIS_READ_ONLY=true` — the engine rejects **every** non-GET request | This is a read-only/demo instance; config changes are disabled at the engine, not by the skill |\n| `404` (squadron routes) | Unknown squadron id | Re-read ids from `list_squadrons`; do not retry with a guessed id |\n| `409` (LLM actions) | Action is not in `proposed` state, or failed apply-time revalidation | Re-read `get_llm_actions`; the proposal was already handled or is stale |\n| `400` (config PATCH) | Body was not valid JSON, or a value failed type coercion | Show the engine's error text verbatim |\n\n## Safety & Usage Guidelines (Critical)\n\n**This skill controls a live trading system with real money at risk.**\nThe agent **must** follow these guardrails at all times:\n\n- **Never** apply any configuration change without first explicitly confirming the exact update with the human user and receiving clear approval.\n- Always call `get_config_schema` before proposing a patch, to validate the field name, type, unit, and min/max bounds.\n- Never construct a squadron id. Read ids from `list_squadrons` and use them verbatim.\n- Only call tools when the user's request directly relates to monitoring or configuration.\n- When reporting numbers, carry the engine's own caveats through: `prices_live: false` in `get_portfolio_value` means positions are marked with stale prices, and `get_viper_status` rows older than 120 seconds mean the evaluation loop is not reporting.\n\n### Applying config changes\n\nThe PATCH body is a **flat JSON object containing only the fields to change**. It is *not* wrapped in an `updates` key.\n\n```jsonc\n// CORRECT\n{\"time_decay_position_size_usdc\": \"8.0\", \"enable_basis\": false}\n\n// WRONG — silently ignored, still returns 200 OK with the UNCHANGED config\n{\"updates\": {\"time_decay_position_size_usdc\": \"8.0\"}}\n```\n\nThe engine merges the body over the current config and **ignores keys it does not recognise**. A misspelled field, or a wrapped body, therefore produces a successful-looking response in which nothing changed.\n\n**Mandatory verification step:** a `200 OK` does **not** mean the change was applied. Both PATCH endpoints return the full resulting config. After every patch, read back the specific field you changed from the response body and confirm it holds the new value. Report success only if it does; if it does not, tell the user the patch was rejected as an unknown field and did not take effect.\n\n### Which config endpoint to use\n\n| Goal | Tool |\n|---|---|\n| Change how a strategy trades (size, thresholds, enable/disable a viper) | `patch_squadron_config` |\n| Change LLM advisor behaviour or autonomy settings | `patch_dynamic_config` |\n\n`patch_dynamic_config` writes the global config record, which **no squadron reads**. Strategy execution loops read a per-squadron config handle, and newly deployed squadrons seed from compile-time defaults rather than the global record. Patching global config to change trading behaviour will appear to succeed and will change nothing. If the user asks to change a strategy parameter without naming a squadron, list the squadrons and ask which one — do not fall back to the global endpoint.\n\n## Example Natural Language Commands\n\n- \"What's the current status of DRADIS?\"\n- \"Why isn't DRADIS trading right now?\"\n- \"Show me open positions and session P&L\"\n- \"What markets is each strategy currently trading?\"\n- \"List the last 10 trades\"\n- \"What does the LLM advisor recommend right now?\"\n- \"Are there any AI config changes waiting for my approval?\"\n- \"Show me the last 200 log lines\"\n- \"What's our current latency to the venue?\"\n- \"List my squadrons and their P&L\"\n- \"Show me the btc-hourly squadron's config\"\n- \"What's my total portfolio value right now?\"\n- \"Show pending vs confirmed positions for ETH\"\n- \"Can you increase the adverse block threshold on btc-hourly? Show me the current value first and confirm before patching.\"\n\n## Configuration\n\n- `DRADIS_API_URL`: Base URL for the engine API (Default: `http://localhost:9000/api`)\n- `DRADIS_API_KEY`: API key for authentication (optional locally, **recommended** for remote/production)\n\n---\n\n## Tools\n\nAll tools send `X-API-Key: {{DRADIS_API_KEY}}`.\n\n### Engine health & inventory\n\n### 1. check_engine_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/health`\n- **Response:** the literal text `ok`\n- **Note:** Public — succeeds without an API key. Use it to separate \"engine down\" from \"key wrong\".\n\n### 2. list_assets\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/assets`\n- **Response:** JSON array of asset symbols with an initialised database, e.g. `[\"btc\", \"eth\", \"sol\"]`\n- **Note:** Public. Includes venue-only databases (e.g. `\"kalshi\"`) that carry no raptor signal data; `get_telemetry_assets` returns the narrower set that does.\n\n### 3. get_deployment_region\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/deployment/region`\n- **Response:** `{\"region\": \"intl\" | \"us\" | \"kalshi\", \"available_types\": [\"politics\", \"sports\", \"crypto\"]}`\n- **Note:** Call this first when a venue-specific behaviour matters.\n\n### 4. get_strategy_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/status`\n- **Response:** `{\"strategy_markets\": {…}, \"session_started_at\": \"…\", \"raptors\": {…}}` — the strategy→market mapping, the current session id, and per-asset raptor connection health.\n\n### 5. get_viper_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/vipers/status`\n- **Query Param:** `asset` (optional, e.g. `btc`; omit for all squadrons)\n- **Response:** JSON array of `{asset, strategy, last_eval_at, last_eval_secs_ago, last_outcome, last_reason, last_reason_secs_ago, last_signal_at, last_signal_secs_ago}`\n- **Note:** **This is the correct tool for \"why isn't DRADIS trading?\"** `last_outcome` is one of `signal | no_signal | error | timeout`. `last_reason` is the named gate that vetoed the most recent entry attempt (\"edge below required\", \"cooldown active\"); only instrumented vipers populate it, so `null` means \"reports liveness only\", not \"no veto\". Interpretation rules:\n  - All vipers evaluating recently with named reasons → the engine is healthy and correctly sitting out. Say so; do not imply a fault.\n  - `last_eval_secs_ago > 120` → the evaluation loop is not reporting. Flag as a probable fault.\n  - `last_outcome` of `error` or `timeout` → flag as a fault regardless of age.\n  - The registry is in-memory and empty after a restart, so an absent viper means \"not yet evaluated\", not \"never trades\".\n\n### Positions & performance\n\n### 6. get_open_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions`\n- **Query Param:** `asset` (optional, e.g. `btc`)\n- **Response:** JSON array of all open position records (pending + confirmed)\n\n### 7. get_pending_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions/pending`\n- **Query Param:** `asset` (optional)\n- **Response:** JSON array of positions placed but not yet confirmed on-chain\n\n### 8. get_confirmed_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions/confirmed`\n- **Query Param:** `asset` (optional)\n- **Response:** JSON array of confirmed open positions\n\n### 9. get_portfolio_value\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/portfolio`\n- **Response:** `{\"collateral\", \"positions_value\", \"total_value\", \"unrealized_pnl\", \"position_count\", \"prices_live\"}` (decimal values as strings)\n- **Note:** On `intl` builds, `collateral` is probed live on-chain. On `us` and `kalshi` builds there is no wallet probe, so it falls back to the database-tracked snapshot. If `prices_live` is `false`, positions are marked at stale prices — say so when quoting `total_value` or `unrealized_pnl`.\n\n### 10. check_session_pnl\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/pnl/history`\n- **Query Params:** `asset` (optional), `limit` (optional, default 200, clamped 1–1000)\n- **Response:** JSON array of equity snapshots\n- **Note:** Omitting `asset` returns the **aggregated** curve across all assets, not the primary asset's. Pass `asset` explicitly whenever the user asks about one asset.\n\n### 11. get_recent_trades\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/trades`\n- **Query Params:** `asset` (optional), `limit` (optional, default 100, clamped 1–500)\n- **Note:** A `limit` above 500 is silently clamped; never claim more trades were returned than the array contains.\n\n### Squadrons\n\n### 12. list_squadrons\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons`\n- **Response:** JSON array of squadron summaries (id, asset, market class, state, market names, active raptors/vipers)\n- **Note:** **The only valid source of squadron ids.** Ids are `{asset}-{cadence}`, e.g. `btc-hourly`, `btc-open`. Call this before any other squadron tool.\n\n### 13. get_squadron\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons/{id}`\n- **Path Param:** `id` — a squadron id from `list_squadrons`, e.g. `btc-hourly`\n- **Response:** JSON squadron summary, or 404 if unknown\n\n### 14. get_squadron_config\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons/{id}/config`\n- **Path Param:** `id`, e.g. `btc-hourly`\n- **Response:** flat JSON object of the squadron's `DynamicConfig`, or 404 if no config row exists for that id\n- **Note:** A 404 here means the id is wrong or the squadron has never been deployed — not that config is unavailable.\n\n### 15. patch_squadron_config\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons/{id}/config`\n- **Path Param:** `id`, e.g. `btc-hourly`\n- **Payload Type:** `application/json`\n- **Body:** a **flat** partial object of only the fields to change, e.g. `{\"time_decay_position_size_usdc\": \"8.0\"}`\n- **Response:** the full resulting config\n- **Safety Note:** Requires explicit user confirmation before executing. Validate field names and bounds with `get_config_schema` first. **Unknown keys are ignored and still return 200** — read the changed field back out of the response and confirm it before reporting success. Applied changes reach the patrol loop on its next tick.\n- **This is the tool that changes trading behaviour.**\n\n### Global config (LLM advisor scope)\n\n### 16. get_current_config\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Response:** flat JSON object of the global `DynamicConfig`\n- **Note:** This is the global record, not any squadron's live config. To report what a strategy is actually running, use `get_squadron_config`.\n\n### 17. patch_dynamic_config\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Payload Type:** `application/json`\n- **Body:** a **flat** partial object, e.g. `{\"llm_autonomy_tier\": 1}`\n- **Response:** the full resulting config\n- **Safety Note:** Requires explicit user confirmation before executing. Same unknown-key caveat and same mandatory read-back as `patch_squadron_config`.\n- **Scope warning:** This affects the LLM advisor only. **No squadron reads this record**, so it will not change how any strategy trades. Do not use it as a fallback when a squadron id is unknown — ask the user which squadron instead.\n\n### 18. get_config_schema\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config/schema`\n- **Response:** JSON array describing every editable field: `{key, group, enable_key, label, type, unit, min, max, step, advanced}`\n- **Note:** `key` is exactly what a PATCH body expects. `type` is one of `usd | price | pct | decimal | secs | bool`. Use before any PATCH to validate the field name and bounds.\n\n### LLM advisor\n\n### 19. get_llm_recommendations\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/recommendations`\n- **Query Params:** `asset` (optional), `limit` (optional, default 10, clamped 1–50)\n\n### 20. get_llm_actions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/actions`\n- **Query Param:** `limit` (optional, default 100, clamped 1–500)\n- **Response:** JSON array of the AI action audit trail, newest first: `{id, batch_id, ts, expires_at, model, tier, ghost_mode, field, from_value, to_value, clamped, delta_pct, reason, status, status_detail, …}`\n- **Note:** `status` is one of `proposed | approved | applied | rejected | expired | reverted | failed`. Rows with `status: \"proposed\"` are awaiting human approval. Depending on the configured autonomy tier the engine may have **already applied** changes on its own (`status: \"applied\"`) — surface those when the user asks what changed. Reads the primary database only; the `asset` param is ignored here.\n\n### 21. approve_llm_action\n- **Method:** `POST`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/actions/{id}/approve`\n- **Path Param:** `id` — the numeric action id from `get_llm_actions`\n- **Safety Note:** This applies a live config change. Requires explicit user confirmation, quoting the field, the from→to values, and the LLM's stated reason. The engine revalidates the proposal against the *current* config at approval time and returns `409` if it is no longer valid — report that as \"the proposal went stale\", not as an error to retry.\n- **Scope warning:** Approval applies through the global config path, which carries the same scope limitation as `patch_dynamic_config`.\n\n### 22. reject_llm_action\n- **Method:** `POST`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/actions/{id}/reject`\n- **Path Param:** `id`\n- **Note:** Only `proposed` actions can be rejected (`409` otherwise). Rejections feed the model's negative-example corpus.\n\n### Telemetry & diagnostics\n\n### 23. get_telemetry\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/telemetry`\n- **Response:** live raptor signal snapshot keyed by asset — connection flags plus `oracle_price`, `velocity_5s`, `velocity_1s`, `acceleration`, `drift_60m`, `drift_10m`, `funding_rate`\n\n### 24. get_telemetry_history\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/telemetry/history`\n- **Query Params:** `asset` (optional, defaults to the primary asset), `limit` (optional, defaults to the full retained window ≈ 1 hour)\n- **Response:** JSON array of telemetry samples, oldest → newest\n\n### 25. get_telemetry_assets\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/telemetry/assets`\n- **Response:** JSON array of assets that actually have raptor telemetry — a narrower set than `list_assets`\n\n### 26. get_logs\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/logs`\n- **Query Param:** `tail` (optional, default 500, clamped 1–2000)\n- **Response:** `{\"count\": n, \"lines\": [...]}` from the in-memory ring buffer, oldest first\n- **Note:** Log lines print in US/Eastern. They may contain market names and order details; quote only what is relevant.\n\n### 27. get_latency\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/latency`\n- **Response:** rolling round-trip latency from the engine host to the trading venue\n\n### Taxonomy & deployment inventory (read-only)\n\n### 28. get_taxonomy_raptors\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/taxonomy/raptors`\n- **Query Param:** `market_class` (**required**, e.g. `crypto`, `sports`, `politics`)\n- **Response:** JSON array of `{id, display, implemented}`\n\n### 29. get_taxonomy_vipers\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/taxonomy/vipers`\n- **Query Param:** `market_class` (**required**)\n- **Response:** JSON array of `{id, display, venue_agnostic}`\n\n### 30. get_available_markets\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/markets/available`\n- **Query Params:** `market_type` (**required**: `crypto` | `sports` | `politics`), `expiry_window` (optional: `1h` | `4h` | `24h` | `7d`; default varies by type — 24h sports, 30d crypto, 90d politics), `min_liquidity` (optional, default 500)\n- **Response:** `{\"markets\": [...]}` — candidate markets for deployment\n- **Note:** Informational only. This skill exposes no deployment tool; deploy from the Control Tower UI.\n\n### 31. get_deployments\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/deployments`\n- **Response:** JSON array of deployment requests with status: `{id, market_id, market_type, raptors, vipers, status, squadron_id, error, created_at}`\n\n---\n\n## Endpoints deliberately NOT exposed\n\nThese exist on the engine API and are omitted on purpose. If a user asks for them, explain that the skill is monitoring-and-configuration only and direct them to the Control Tower UI.\n\n| Endpoint | Why omitted |\n|---|---|\n| `DELETE /api/positions/{token_id}` | Removes a tracked position |\n| `POST /api/positions/manual-exit` | Places a real exit order (`intl` builds only) |\n| `POST /api/positions/sync` | Mutates position records from chain state (`intl` builds only) |\n| `POST /api/squadrons/deploy` | Commits capital to a new market |\n| `/api/setup/*` (GET/PUT/POST), `POST /api/auth/login` | Reads and writes venue credentials and admin tokens |\n| `GET /api/trades/export` | Bulk CSV of the full tradelog; download from the UI instead |\n\nFile v1.5.1:_meta.json\n\n{\n  \"ownerId\": \"kn7f5jmhpsv3snxa93fesspj1d86vcx4\",\n  \"slug\": \"dradis-tactical-command\",\n  \"version\": \"1.5.1\",\n  \"publishedAt\": 1786404824693\n}\n\nFile v1.5.1:skill-card.md\n\n## Description:\n\nReal-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[mbordash](https://clawhub.ai/user/mbordash)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to monitor DRADIS trading status, portfolio data, telemetry, logs, and pending LLM recommendations, and to make explicitly approved configuration changes for DRADIS instances they control.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Monitoring and configuration actions affect a DRADIS trading system where real money can be at risk.\n\nMitigation: Install only for a DRADIS instance the user controls, prefer read-only mode where appropriate, and require explicit human approval before any configuration change.\n\nRisk: A DRADIS_API_KEY can authorize protected DRADIS routes.\n\nMitigation: Use a dedicated least-privilege API key and review every proposed configuration or LLM-action approval before accepting it.\n\nRisk: Incorrect strategy configuration patches can appear successful if unknown keys are ignored.\n\nMitigation: Validate editable fields against the config schema and confirm the changed value from the response before reporting success.\n\n## Reference(s):\n\n- [DRADIS project repository](https://github.com/mbordash/DRADIS)\n- [ClawHub skill listing](https://clawhub.ai/mbordash/skills/dradis-tactical-command)\n- [Publisher profile](https://clawhub.ai/user/mbordash)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, configuration, guidance]\n\n**Output Format:** [Markdown and concise text with JSON configuration fragments when needed]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can propose and verify DRADIS configuration changes only after explicit human approval.]\n\n## Skill Version(s):\n\n1.5.1 (source: server release metadata and skill H1)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.5.0: 3 files, 9483 bytes\n\nFiles: skill-card.md (2226b), SKILL.md (21721b), _meta.json (142b)\n\nFile v1.5.0:SKILL.md\n\n---\nname: dradis-tactical-command\ndescription: Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication.\nhomepage: https://github.com/mbordash/DRADIS\nuser-invocable: true\n---\n\n# Skill: DRADIS Tactical Command (v1.5.0)\n\nFull-featured autonomous supervisor for the **DRADIS** high-frequency prediction market execution engine.\n\n> **What's new in v1.5.0**\n> - **Corrected PATCH contract.** Config PATCH bodies are a *flat* partial object, not a wrapped `updates` object. A wrapped body is silently ignored and still returns `200 OK` — see [Applying config changes](#applying-config-changes) for the mandatory verification step.\n> - **Corrected squadron ids.** Ids are `{asset}-{cadence}` (e.g. `btc-hourly`), never a bare asset name. Always read them from `list_squadrons`.\n> - **`patch_dynamic_config` no longer affects trading.** Strategy execution reads squadron-scoped config exclusively; the global endpoint now only governs the LLM advisor. Use `patch_squadron_config` for anything that changes trading behaviour.\n> - **New read tools:** `get_viper_status` (why isn't it trading?), `get_llm_actions` + approve/reject (the AI action queue), `get_telemetry`, `get_telemetry_history`, `get_telemetry_assets`, `get_logs`, `get_latency`, `get_taxonomy_raptors`, `get_taxonomy_vipers`, `get_available_markets`, `get_deployments`, `get_deployment_region`.\n> - Documented `DRADIS_READ_ONLY` (403 on writes), public vs. protected routes, query-param defaults and clamps, and per-venue endpoint availability.\n\n## About DRADIS\n\nDRADIS is an open-source, low-latency Rust trading engine for crypto prediction markets.\nIt features a Viper strategy engine, real-time equity curve, dynamic config hot-reloading, and a built-in LLM advisor.\n\n**Project repository:** [https://github.com/mbordash/DRADIS](https://github.com/mbordash/DRADIS)\n\n### Venues\n\nDRADIS builds against exactly one venue at a time (mutually exclusive Cargo features):\n\n| Build | Venue | Notes |\n|---|---|---|\n| `intl_clob` (default) | Polymarket International | Self-custody; on-chain wallet balance available |\n| `us_retail` | Polymarket US | Custodial; no on-chain wallet probe |\n| `kalshi` | Kalshi | Custodial; no on-chain wallet probe |\n\nThe agent cannot tell which build is running from the venue name alone — call `get_deployment_region` to find out. This matters because a few endpoints are build-specific (noted per tool below).\n\n### Architecture the agent should understand\n\n- A **CAG** (Commander Air Group) runs one or more **Squadrons**, one per market.\n- Each Squadron owns **Raptors** (signal feeds) and **Vipers** (strategies), plus **its own `DynamicConfig`**.\n- **Squadron config is the only config that affects trading.** The global `/api/config` object is a separate, legacy-scope record that now only feeds the LLM advisor.\n\n## Publisher Note (Addressing ClawScan Findings)\n\nClawScan has flagged two medium-risk items (as expected for any live-trading integration):\n- Ability to PATCH live strategy parameters\n- Forwarding of a sensitive `DRADIS_API_KEY`\n\nThese are intentional and documented. The skill **never** applies config changes without explicit human confirmation.\n\nThis skill is **monitoring and configuration only, by design.** It deliberately exposes no tool that opens, closes, or settles a position, and none that deploys a squadron. The engine's API does offer such endpoints (`DELETE /api/positions/{token_id}`, `POST /api/positions/manual-exit`, `POST /api/positions/sync`, `POST /api/squadrons/deploy`) — they are omitted here so that no agent turn can spend money or flatten a position. Perform those actions in the Control Tower UI.\n\nI strongly recommend using a dedicated, least-privilege API key and only running this skill against your own trusted DRADIS instance.\n\n## Authentication\n\nDRADIS supports optional API key authentication via the `X-API-Key` header.\n\n- Set `DRADIS_API_KEY` in your OpenClaw configuration.\n- The skill automatically adds the header to every request.\n- Local use works without a key; remote/production use strongly recommends it.\n\n**Public vs. protected routes.** `check_engine_status` (`/api/health`) and `list_assets` (`/api/assets`) are intentionally unauthenticated so that container health checks and load balancers can probe them. Every other tool requires the key when `DRADIS_API_KEY` is set. A healthy `/api/health` alongside 401s elsewhere means *the key is wrong*, not that the engine is down — report it that way.\n\n### Error codes the agent must distinguish\n\n| Code | Meaning | What to tell the user |\n|---|---|---|\n| `401` | Missing/incorrect `X-API-Key` | Configure `DRADIS_API_KEY` to match the engine's env var |\n| `403` | `DRADIS_READ_ONLY=true` — the engine rejects **every** non-GET request | This is a read-only/demo instance; config changes are disabled at the engine, not by the skill |\n| `404` (squadron routes) | Unknown squadron id | Re-read ids from `list_squadrons`; do not retry with a guessed id |\n| `409` (LLM actions) | Action is not in `proposed` state, or failed apply-time revalidation | Re-read `get_llm_actions`; the proposal was already handled or is stale |\n| `400` (config PATCH) | Body was not valid JSON, or a value failed type coercion | Show the engine's error text verbatim |\n\n## Safety & Usage Guidelines (Critical)\n\n**This skill controls a live trading system with real money at risk.**\nThe agent **must** follow these guardrails at all times:\n\n- **Never** apply any configuration change without first explicitly confirming the exact update with the human user and receiving clear approval.\n- Always call `get_config_schema` before proposing a patch, to validate the field name, type, unit, and min/max bounds.\n- Never construct a squadron id. Read ids from `list_squadrons` and use them verbatim.\n- Only call tools when the user's request directly relates to monitoring or configuration.\n- When reporting numbers, carry the engine's own caveats through: `prices_live: false` in `get_portfolio_value` means positions are marked with stale prices, and `get_viper_status` rows older than 120 seconds mean the evaluation loop is not reporting.\n\n### Applying config changes\n\nThe PATCH body is a **flat JSON object containing only the fields to change**. It is *not* wrapped in an `updates` key.\n\n```jsonc\n// CORRECT\n{\"time_decay_position_size_usdc\": \"8.0\", \"enable_basis\": false}\n\n// WRONG — silently ignored, still returns 200 OK with the UNCHANGED config\n{\"updates\": {\"time_decay_position_size_usdc\": \"8.0\"}}\n```\n\nThe engine merges the body over the current config and **ignores keys it does not recognise**. A misspelled field, or a wrapped body, therefore produces a successful-looking response in which nothing changed.\n\n**Mandatory verification step:** a `200 OK` does **not** mean the change was applied. Both PATCH endpoints return the full resulting config. After every patch, read back the specific field you changed from the response body and confirm it holds the new value. Report success only if it does; if it does not, tell the user the patch was rejected as an unknown field and did not take effect.\n\n### Which config endpoint to use\n\n| Goal | Tool |\n|---|---|\n| Change how a strategy trades (size, thresholds, enable/disable a viper) | `patch_squadron_config` |\n| Change LLM advisor behaviour or autonomy settings | `patch_dynamic_config` |\n\n`patch_dynamic_config` writes the global config record, which **no squadron reads**. Strategy execution loops read a per-squadron config handle, and newly deployed squadrons seed from compile-time defaults rather than the global record. Patching global config to change trading behaviour will appear to succeed and will change nothing. If the user asks to change a strategy parameter without naming a squadron, list the squadrons and ask which one — do not fall back to the global endpoint.\n\n## Example Natural Language Commands\n\n- \"What's the current status of DRADIS?\"\n- \"Why isn't DRADIS trading right now?\"\n- \"Show me open positions and session P&L\"\n- \"What markets is each strategy currently trading?\"\n- \"List the last 10 trades\"\n- \"What does the LLM advisor recommend right now?\"\n- \"Are there any AI config changes waiting for my approval?\"\n- \"Show me the last 200 log lines\"\n- \"What's our current latency to the venue?\"\n- \"List my squadrons and their P&L\"\n- \"Show me the btc-hourly squadron's config\"\n- \"What's my total portfolio value right now?\"\n- \"Show pending vs confirmed positions for ETH\"\n- \"Can you increase the adverse block threshold on btc-hourly? Show me the current value first and confirm before patching.\"\n\n## Configuration\n\n- `DRADIS_API_URL`: Base URL for the engine API (Default: `http://localhost:9000/api`)\n- `DRADIS_API_KEY`: API key for authentication (optional locally, **recommended** for remote/production)\n\n---\n\n## Tools\n\nAll tools send `X-API-Key: {{DRADIS_API_KEY}}`.\n\n### Engine health & inventory\n\n### 1. check_engine_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/health`\n- **Response:** the literal text `ok`\n- **Note:** Public — succeeds without an API key. Use it to separate \"engine down\" from \"key wrong\".\n\n### 2. list_assets\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/assets`\n- **Response:** JSON array of asset symbols with an initialised database, e.g. `[\"btc\", \"eth\", \"sol\"]`\n- **Note:** Public. Includes venue-only databases (e.g. `\"kalshi\"`) that carry no raptor signal data; `get_telemetry_assets` returns the narrower set that does.\n\n### 3. get_deployment_region\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/deployment/region`\n- **Response:** `{\"region\": \"intl\" | \"us\" | \"kalshi\", \"available_types\": [\"politics\", \"sports\", \"crypto\"]}`\n- **Note:** Call this first when a venue-specific behaviour matters.\n\n### 4. get_strategy_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/status`\n- **Response:** `{\"strategy_markets\": {…}, \"session_started_at\": \"…\", \"raptors\": {…}}` — the strategy→market mapping, the current session id, and per-asset raptor connection health.\n\n### 5. get_viper_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/vipers/status`\n- **Query Param:** `asset` (optional, e.g. `btc`; omit for all squadrons)\n- **Response:** JSON array of `{asset, strategy, last_eval_at, last_eval_secs_ago, last_outcome, last_reason, last_reason_secs_ago, last_signal_at, last_signal_secs_ago}`\n- **Note:** **This is the correct tool for \"why isn't DRADIS trading?\"** `last_outcome` is one of `signal | no_signal | error | timeout`. `last_reason` is the named gate that vetoed the most recent entry attempt (\"edge below required\", \"cooldown active\"); only instrumented vipers populate it, so `null` means \"reports liveness only\", not \"no veto\". Interpretation rules:\n  - All vipers evaluating recently with named reasons → the engine is healthy and correctly sitting out. Say so; do not imply a fault.\n  - `last_eval_secs_ago > 120` → the evaluation loop is not reporting. Flag as a probable fault.\n  - `last_outcome` of `error` or `timeout` → flag as a fault regardless of age.\n  - The registry is in-memory and empty after a restart, so an absent viper means \"not yet evaluated\", not \"never trades\".\n\n### Positions & performance\n\n### 6. get_open_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions`\n- **Query Param:** `asset` (optional, e.g. `btc`)\n- **Response:** JSON array of all open position records (pending + confirmed)\n\n### 7. get_pending_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions/pending`\n- **Query Param:** `asset` (optional)\n- **Response:** JSON array of positions placed but not yet confirmed on-chain\n\n### 8. get_confirmed_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions/confirmed`\n- **Query Param:** `asset` (optional)\n- **Response:** JSON array of confirmed open positions\n\n### 9. get_portfolio_value\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/portfolio`\n- **Response:** `{\"collateral\", \"positions_value\", \"total_value\", \"unrealized_pnl\", \"position_count\", \"prices_live\"}` (decimal values as strings)\n- **Note:** On `intl` builds, `collateral` is probed live on-chain. On `us` and `kalshi` builds there is no wallet probe, so it falls back to the database-tracked snapshot. If `prices_live` is `false`, positions are marked at stale prices — say so when quoting `total_value` or `unrealized_pnl`.\n\n### 10. check_session_pnl\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/pnl/history`\n- **Query Params:** `asset` (optional), `limit` (optional, default 200, clamped 1–1000)\n- **Response:** JSON array of equity snapshots\n- **Note:** Omitting `asset` returns the **aggregated** curve across all assets, not the primary asset's. Pass `asset` explicitly whenever the user asks about one asset.\n\n### 11. get_recent_trades\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/trades`\n- **Query Params:** `asset` (optional), `limit` (optional, default 100, clamped 1–500)\n- **Note:** A `limit` above 500 is silently clamped; never claim more trades were returned than the array contains.\n\n### Squadrons\n\n### 12. list_squadrons\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons`\n- **Response:** JSON array of squadron summaries (id, asset, market class, state, market names, active raptors/vipers)\n- **Note:** **The only valid source of squadron ids.** Ids are `{asset}-{cadence}`, e.g. `btc-hourly`, `btc-open`. Call this before any other squadron tool.\n\n### 13. get_squadron\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons/{id}`\n- **Path Param:** `id` — a squadron id from `list_squadrons`, e.g. `btc-hourly`\n- **Response:** JSON squadron summary, or 404 if unknown\n\n### 14. get_squadron_config\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons/{id}/config`\n- **Path Param:** `id`, e.g. `btc-hourly`\n- **Response:** flat JSON object of the squadron's `DynamicConfig`, or 404 if no config row exists for that id\n- **Note:** A 404 here means the id is wrong or the squadron has never been deployed — not that config is unavailable.\n\n### 15. patch_squadron_config\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons/{id}/config`\n- **Path Param:** `id`, e.g. `btc-hourly`\n- **Payload Type:** `application/json`\n- **Body:** a **flat** partial object of only the fields to change, e.g. `{\"time_decay_position_size_usdc\": \"8.0\"}`\n- **Response:** the full resulting config\n- **Safety Note:** Requires explicit user confirmation before executing. Validate field names and bounds with `get_config_schema` first. **Unknown keys are ignored and still return 200** — read the changed field back out of the response and confirm it before reporting success. Applied changes reach the patrol loop on its next tick.\n- **This is the tool that changes trading behaviour.**\n\n### Global config (LLM advisor scope)\n\n### 16. get_current_config\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Response:** flat JSON object of the global `DynamicConfig`\n- **Note:** This is the global record, not any squadron's live config. To report what a strategy is actually running, use `get_squadron_config`.\n\n### 17. patch_dynamic_config\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Payload Type:** `application/json`\n- **Body:** a **flat** partial object, e.g. `{\"llm_autonomy_tier\": 1}`\n- **Response:** the full resulting config\n- **Safety Note:** Requires explicit user confirmation before executing. Same unknown-key caveat and same mandatory read-back as `patch_squadron_config`.\n- **Scope warning:** This affects the LLM advisor only. **No squadron reads this record**, so it will not change how any strategy trades. Do not use it as a fallback when a squadron id is unknown — ask the user which squadron instead.\n\n### 18. get_config_schema\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config/schema`\n- **Response:** JSON array describing every editable field: `{key, group, enable_key, label, type, unit, min, max, step, advanced}`\n- **Note:** `key` is exactly what a PATCH body expects. `type` is one of `usd | price | pct | decimal | secs | bool`. Use before any PATCH to validate the field name and bounds.\n\n### LLM advisor\n\n### 19. get_llm_recommendations\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/recommendations`\n- **Query Params:** `asset` (optional), `limit` (optional, default 10, clamped 1–50)\n\n### 20. get_llm_actions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/actions`\n- **Query Param:** `limit` (optional, default 100, clamped 1–500)\n- **Response:** JSON array of the AI action audit trail, newest first: `{id, batch_id, ts, expires_at, model, tier, ghost_mode, field, from_value, to_value, clamped, delta_pct, reason, status, status_detail, …}`\n- **Note:** `status` is one of `proposed | approved | applied | rejected | expired | reverted | failed`. Rows with `status: \"proposed\"` are awaiting human approval. Depending on the configured autonomy tier the engine may have **already applied** changes on its own (`status: \"applied\"`) — surface those when the user asks what changed. Reads the primary database only; the `asset` param is ignored here.\n\n### 21. approve_llm_action\n- **Method:** `POST`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/actions/{id}/approve`\n- **Path Param:** `id` — the numeric action id from `get_llm_actions`\n- **Safety Note:** This applies a live config change. Requires explicit user confirmation, quoting the field, the from→to values, and the LLM's stated reason. The engine revalidates the proposal against the *current* config at approval time and returns `409` if it is no longer valid — report that as \"the proposal went stale\", not as an error to retry.\n- **Scope warning:** Approval applies through the global config path, which carries the same scope limitation as `patch_dynamic_config`.\n\n### 22. reject_llm_action\n- **Method:** `POST`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/actions/{id}/reject`\n- **Path Param:** `id`\n- **Note:** Only `proposed` actions can be rejected (`409` otherwise). Rejections feed the model's negative-example corpus.\n\n### Telemetry & diagnostics\n\n### 23. get_telemetry\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/telemetry`\n- **Response:** live raptor signal snapshot keyed by asset — connection flags plus `oracle_price`, `velocity_5s`, `velocity_1s`, `acceleration`, `drift_60m`, `drift_10m`, `funding_rate`\n\n### 24. get_telemetry_history\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/telemetry/history`\n- **Query Params:** `asset` (optional, defaults to the primary asset), `limit` (optional, defaults to the full retained window ≈ 1 hour)\n- **Response:** JSON array of telemetry samples, oldest → newest\n\n### 25. get_telemetry_assets\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/telemetry/assets`\n- **Response:** JSON array of assets that actually have raptor telemetry — a narrower set than `list_assets`\n\n### 26. get_logs\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/logs`\n- **Query Param:** `tail` (optional, default 500, clamped 1–2000)\n- **Response:** `{\"count\": n, \"lines\": [...]}` from the in-memory ring buffer, oldest first\n- **Note:** Log lines print in US/Eastern. They may contain market names and order details; quote only what is relevant.\n\n### 27. get_latency\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/latency`\n- **Response:** rolling round-trip latency from the engine host to the trading venue\n\n### Taxonomy & deployment inventory (read-only)\n\n### 28. get_taxonomy_raptors\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/taxonomy/raptors`\n- **Query Param:** `market_class` (**required**, e.g. `crypto`, `sports`, `politics`)\n- **Response:** JSON array of `{id, display, implemented}`\n\n### 29. get_taxonomy_vipers\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/taxonomy/vipers`\n- **Query Param:** `market_class` (**required**)\n- **Response:** JSON array of `{id, display, venue_agnostic}`\n\n### 30. get_available_markets\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/markets/available`\n- **Query Params:** `market_type` (**required**: `crypto` | `sports` | `politics`), `expiry_window` (optional: `1h` | `4h` | `24h` | `7d`; default varies by type — 24h sports, 30d crypto, 90d politics), `min_liquidity` (optional, default 500)\n- **Response:** `{\"markets\": [...]}` — candidate markets for deployment\n- **Note:** Informational only. This skill exposes no deployment tool; deploy from the Control Tower UI.\n\n### 31. get_deployments\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/deployments`\n- **Response:** JSON array of deployment requests with status: `{id, market_id, market_type, raptors, vipers, status, squadron_id, error, created_at}`\n\n---\n\n## Endpoints deliberately NOT exposed\n\nThese exist on the engine API and are omitted on purpose. If a user asks for them, explain that the skill is monitoring-and-configuration only and direct them to the Control Tower UI.\n\n| Endpoint | Why omitted |\n|---|---|\n| `DELETE /api/positions/{token_id}` | Removes a tracked position |\n| `POST /api/positions/manual-exit` | Places a real exit order (`intl` builds only) |\n| `POST /api/positions/sync` | Mutates position records from chain state (`intl` builds only) |\n| `POST /api/squadrons/deploy` | Commits capital to a new market |\n| `/api/setup/*` (GET/PUT/POST), `POST /api/auth/login` | Reads and writes venue credentials and admin tokens |\n| `GET /api/trades/export` | Bulk CSV of the full tradelog; download from the UI instead |\n\nFile v1.5.0:_meta.json\n\n{\n  \"ownerId\": \"kn7f5jmhpsv3snxa93fesspj1d86vcx4\",\n  \"slug\": \"dradis-tactical-command\",\n  \"version\": \"1.5.0\",\n  \"publishedAt\": 1786404258914\n}\n\nFile v1.5.0:skill-card.md\n\n## Description:\n\nReal-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[mbordash](https://clawhub.ai/user/mbordash)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal developers and operators use this skill to monitor DRADIS prediction-market trading deployments, inspect positions, telemetry, logs, latency, and recommendations, and apply confirmed configuration changes through the DRADIS API.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can monitor and adjust a live trading engine where configuration changes may affect real-money trading.\n\nMitigation: Use a dedicated least-privilege API key, prefer DRADIS_READ_ONLY for demos or audits, and review any proposed configuration change before approving it.\n\nRisk: A configuration request can appear successful even when an unknown field or wrong endpoint leaves trading behavior unchanged.\n\nMitigation: Validate editable fields with the configuration schema, use squadron-scoped configuration for trading behavior, and verify the returned field value after every patch.\n\n## Reference(s):\n\n- [DRADIS project repository](https://github.com/mbordash/DRADIS)\n- [ClawHub skill page](https://clawhub.ai/mbordash/skills/dradis-tactical-command)\n- [Publisher profile](https://clawhub.ai/user/mbordash)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, configuration, guidance]\n\n**Output Format:** [Markdown text with API-backed status summaries and configuration guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include JSON-derived trading status, telemetry, logs, configuration values, and confirmation prompts before changes are applied.]\n\n## Skill Version(s):\n\n1.5.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.4.0: 3 files, 4100 bytes\n\nFiles: skill-card.md (2069b), SKILL.md (7964b), _meta.json (142b)\n\nFile v1.4.0:SKILL.md\n\n---\nname: dradis-tactical-command\ndescription: Real-time supervisor and control interface for the DRADIS Polymarket high-frequency trading engine. Full support for DRADIS_API_KEY authentication.\nhomepage: https://github.com/mbordash/DRADIS\nuser-invocable: true\n---\n\n# Skill: DRADIS Tactical Command (v1.4.0)\n\nFull-featured autonomous supervisor for the **DRADIS** high-frequency prediction market execution engine.\n\n> **What's new in v1.4.0**\n> - Per-squadron monitoring & control: `list_squadrons`, `get_squadron`, `get_squadron_config`, `patch_squadron_config` (matches the CAG → Squadron architecture; the global `/config` is now the coarse fallback).\n> - Config introspection: `get_config_schema` exposes the field schema so the agent can validate a parameter before patching.\n> - Portfolio & position lifecycle: `get_portfolio_value`, `get_pending_positions`, `get_confirmed_positions`, `list_assets`.\n\n## About DRADIS\n\nDRADIS is an open-source, low-latency Rust-based trading engine for Polymarket.  \nIt features a Viper strategy engine, real-time equity curve, dynamic config hot-reloading, and a built-in LLM advisor.\n\n**Project repository:** [https://github.com/mbordash/DRADIS](https://github.com/mbordash/DRADIS)\n\n## Publisher Note (Addressing ClawScan Findings)\n\nClawScan has flagged two medium-risk items (as expected for any live-trading integration):\n- Ability to PATCH live strategy parameters\n- Forwarding of a sensitive `DRADIS_API_KEY`\n\nThese are intentional and documented. The skill **never** applies config changes without explicit human confirmation. I strongly recommend using a dedicated, least-privilege API key and only running this skill against your own trusted DRADIS instance.\n\n## Authentication\n\nDRADIS supports optional API key authentication via the `X-API-Key` header.\n\n- Set `DRADIS_API_KEY` in your OpenClaw configuration.\n- The skill automatically adds the header to every request.\n- Local use works without a key; remote/production use strongly recommends it.\n\n## Safety & Usage Guidelines (Critical)\n\n**This skill controls a live trading system with real money at risk.**  \nThe agent **must** follow these guardrails at all times:\n\n- `patch_dynamic_config` and `patch_squadron_config` change live strategy parameters without restarting the engine.\n  **Never** apply any configuration change without first explicitly confirming the exact update with the human user and receiving clear approval. Prefer `get_config_schema` to validate field names, units, and min/max bounds before proposing a patch.\n- Only call tools when the user’s request directly relates to monitoring or configuration.\n- If the engine returns 401 Unauthorized, tell the user to configure the `DRADIS_API_KEY`.\n\n## Example Natural Language Commands\n\n- “What’s the current status of DRADIS?”\n- “Show me open positions and session P&L”\n- “What markets is each strategy currently trading?”\n- “List the last 10 trades”\n- “What does the LLM advisor recommend right now?”\n- “Show me the current config”\n- “List my squadrons and their P&L”\n- “Show me the BTC squadron’s config”\n- “What’s my total portfolio value right now?”\n- “Show pending vs confirmed positions for ETH”\n- “Can you increase the adverse block threshold? Show me the current config first and confirm before patching.”\n\n## Configuration\n\n- `DRADIS_API_URL`: Base URL for the engine API (Default: `http://localhost:9000/api`)\n- `DRADIS_API_KEY`: API key for authentication (optional locally, **recommended** for remote/production)\n\n## Tools\n\n### 1. check_engine_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/health`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** Text or JSON\n\n### 2. get_current_config\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON object of all configurable fields\n\n### 3. patch_dynamic_config\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Payload Type:** `application/json`\n- **Parameters:** `updates` object (e.g. `{\"gboost_obi_adverse_block\": -0.15, \"enable_basis\": false}`)\n- **Safety Note:** Requires explicit user confirmation before executing.\n\n### 4. check_session_pnl\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/pnl/history`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON array of equity snapshots\n\n### 5. get_recent_trades\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/trades`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Params:** `asset` (optional, e.g. `btc`), `limit` (optional, default 100)\n\n### 6. get_open_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `asset` (optional, e.g. `btc`)\n- **Response Format:** JSON array of open position records\n\n### 7. get_strategy_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/status`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON object of strategy → market mapping\n\n### 8. get_llm_recommendations\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/recommendations`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `limit` (optional, default 10)\n\n### 9. list_squadrons\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON array of squadron summaries (id, asset/market class, P&L, active raptors/vipers)\n\n### 10. get_squadron\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons/{id}`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Path Param:** `id` (squadron identifier, e.g. `btc`)\n- **Response Format:** JSON squadron summary, or 404 if unknown\n\n### 11. get_squadron_config\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons/{id}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Path Param:** `id` (squadron identifier)\n- **Response Format:** JSON object of the squadron's DynamicConfig, or 404 if unknown\n\n### 12. patch_squadron_config\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/squadrons/{id}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Path Param:** `id` (squadron identifier)\n- **Payload Type:** `application/json`\n- **Parameters:** partial `updates` object with only the fields to change (e.g. `{\"time_decay_position_size_usdc\": \"8.0\"}`)\n- **Safety Note:** Requires explicit user confirmation before executing. Validate field names/bounds with `get_config_schema` first.\n\n### 13. get_config_schema\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config/schema`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON schema describing every editable config field (group, label, type, unit, min/max, advanced flag). Use before any PATCH to validate the change.\n\n### 14. get_portfolio_value\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/portfolio`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON object with total portfolio / collateral value\n\n### 15. get_pending_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions/pending`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `asset` (optional, e.g. `btc`)\n- **Response Format:** JSON array of positions awaiting on-chain confirmation\n\n### 16. get_confirmed_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions/confirmed`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `asset` (optional, e.g. `btc`)\n- **Response Format:** JSON array of confirmed open positions\n\n### 17. list_assets\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/assets`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON array of asset symbols, e.g. `[\"btc\", \"eth\", \"sol\"]`\n\nFile v1.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn7f5jmhpsv3snxa93fesspj1d86vcx4\",\n  \"slug\": \"dradis-tactical-command\",\n  \"version\": \"1.4.0\",\n  \"publishedAt\": 1782072130219\n}\n\nFile v1.4.0:skill-card.md\n\n## Description: <br>\nReal-time supervisor and control interface for the DRADIS Polymarket high-frequency trading engine. Full support for DRADIS_API_KEY authentication. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[mbordash](https://clawhub.ai/user/mbordash) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and developers use this skill to monitor a DRADIS Polymarket trading engine, inspect portfolio and position state, and request approved changes to live strategy parameters. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can view trading data and change live DRADIS strategy settings. <br>\nMitigation: Install only for DRADIS trading engines you control and review every proposed PATCH before approving it. <br>\nRisk: A reused or overprivileged DRADIS_API_KEY could expand the impact of an agent or configuration mistake. <br>\nMitigation: Use a dedicated least-privilege API key and point DRADIS_API_URL only at a trusted instance. <br>\n\n\n## Reference(s): <br>\n- [DRADIS project repository](https://github.com/mbordash/DRADIS) <br>\n- [ClawHub skill page](https://clawhub.ai/mbordash/dradis-tactical-command) <br>\n- [Publisher profile](https://clawhub.ai/user/mbordash) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [guidance, API calls, configuration, shell commands, text] <br>\n**Output Format:** [Markdown and structured API request guidance] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include live trading status, portfolio summaries, position data, and human-confirmed configuration updates.] <br>\n\n## Skill Version(s): <br>\n1.4.0 (source: server release metadata and artifact SKILL.md heading) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.3.0: 3 files, 3258 bytes\n\nFiles: skill-card.md (2040b), SKILL.md (4476b), _meta.json (142b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: dradis-tactical-command\ndescription: Real-time supervisor and control interface for the DRADIS Polymarket high-frequency trading engine. Full support for DRADIS_API_KEY authentication.\nhomepage: https://github.com/mbordash/DRADIS\nuser-invocable: true\n---\n\n# Skill: DRADIS Tactical Command (v1.3.0)\n\nFull-featured autonomous supervisor for the **DRADIS** high-frequency prediction market execution engine.\n\n## About DRADIS\n\nDRADIS is an open-source, low-latency Rust-based trading engine for Polymarket.  \nIt features a Viper strategy engine, real-time equity curve, dynamic config hot-reloading, and a built-in LLM advisor.\n\n**Project repository:** [https://github.com/mbordash/DRADIS](https://github.com/mbordash/DRADIS)\n\n## Publisher Note (Addressing ClawScan Findings)\n\nClawScan has flagged two medium-risk items (as expected for any live-trading integration):\n- Ability to PATCH live strategy parameters\n- Forwarding of a sensitive `DRADIS_API_KEY`\n\nThese are intentional and documented. The skill **never** applies config changes without explicit human confirmation. I strongly recommend using a dedicated, least-privilege API key and only running this skill against your own trusted DRADIS instance.\n\n## Authentication\n\nDRADIS supports optional API key authentication via the `X-API-Key` header.\n\n- Set `DRADIS_API_KEY` in your OpenClaw configuration.\n- The skill automatically adds the header to every request.\n- Local use works without a key; remote/production use strongly recommends it.\n\n## Safety & Usage Guidelines (Critical)\n\n**This skill controls a live trading system with real money at risk.**  \nThe agent **must** follow these guardrails at all times:\n\n- `patch_dynamic_config` changes live strategy parameters without restarting the engine.  \n  **Never** apply any configuration change without first explicitly confirming the exact update with the human user and receiving clear approval.\n- Only call tools when the user’s request directly relates to monitoring or configuration.\n- If the engine returns 401 Unauthorized, tell the user to configure the `DRADIS_API_KEY`.\n\n## Example Natural Language Commands\n\n- “What’s the current status of DRADIS?”\n- “Show me open positions and session P&L”\n- “What markets is each strategy currently trading?”\n- “List the last 10 trades”\n- “What does the LLM advisor recommend right now?”\n- “Show me the current config”\n- “Can you increase the adverse block threshold? Show me the current config first and confirm before patching.”\n\n## Configuration\n\n- `DRADIS_API_URL`: Base URL for the engine API (Default: `http://localhost:9000/api`)\n- `DRADIS_API_KEY`: API key for authentication (optional locally, **recommended** for remote/production)\n\n## Tools\n\n### 1. check_engine_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/health`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** Text or JSON\n\n### 2. get_current_config\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON object of all configurable fields\n\n### 3. patch_dynamic_config\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Payload Type:** `application/json`\n- **Parameters:** `updates` object (e.g. `{\"gboost_obi_adverse_block\": -0.15, \"enable_basis\": false}`)\n- **Safety Note:** Requires explicit user confirmation before executing.\n\n### 4. check_session_pnl\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/pnl/history`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON array of equity snapshots\n\n### 5. get_recent_trades\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/trades`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `limit` (optional, default 100)\n\n### 6. get_open_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON array of open position records\n\n### 7. get_strategy_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/status`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON object of strategy → market mapping\n\n### 8. get_llm_recommendations\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/recommendations`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `limit` (optional, default 10)\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn7f5jmhpsv3snxa93fesspj1d86vcx4\",\n  \"slug\": \"dradis-tactical-command\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1778940739799\n}\n\nFile v1.3.0:skill-card.md\n\n## Description: <br>\nReal-time supervisor and control interface for the DRADIS Polymarket high-frequency trading engine with support for DRADIS_API_KEY authentication. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[mbordash](https://clawhub.ai/user/mbordash) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal developers and trading-system operators use this skill to monitor a trusted DRADIS engine, review positions, P&L, trades, strategy status, and LLM recommendations, and prepare live configuration changes that require explicit human confirmation. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can interact with a live trading engine where mistakes may affect real-money trading. <br>\nMitigation: Use it only with a trusted DRADIS instance and manually review every proposed live configuration patch before approval. <br>\nRisk: The skill forwards a sensitive DRADIS_API_KEY to the configured DRADIS API endpoint. <br>\nMitigation: Use a dedicated least-privilege API key and avoid untrusted DRADIS_API_URL endpoints. <br>\n\n\n## Reference(s): <br>\n- [Openclaw on ClawHub](https://clawhub.ai/mbordash/dradis-tactical-command) <br>\n- [DRADIS project homepage](https://github.com/mbordash/DRADIS) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, API calls, configuration] <br>\n**Output Format:** [Markdown and structured API responses from the DRADIS engine] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May include proposed live configuration patches that require explicit user confirmation before execution.] <br>\n\n## Skill Version(s): <br>\n1.3.0 (source: release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.2.0: 2 files, 1970 bytes\n\nFiles: SKILL.md (4090b), _meta.json (142b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: dradis-tactical-command\ndescription: Real-time supervisor and control interface for the DRADIS Polymarket high-frequency trading engine. Full support for DRADIS_API_KEY authentication.\nhomepage: https://github.com/mbordash/DRADIS\nuser-invocable: true\n---\n\n# Skill: DRADIS Tactical Command (v1.1.0)\n\nFull-featured autonomous supervisor for the **DRADIS** high-frequency PolyMarket high-frequency trading engine.\n\n## About DRADIS\n\nDRADIS is an open-source, low-latency Rust-based trading engine for Polymarket.  \nIt features a Viper strategy engine, real-time equity curve, dynamic config hot-reloading, and a built-in LLM advisor.\n\n**Project repository:** [https://github.com/mbordash/DRADIS](https://github.com/mbordash/DRADIS)\n\n## Authentication (New in v1.1.0)\n\nDRADIS now supports optional API key authentication (see your README).\n\n- Set `DRADIS_API_KEY` in your OpenClaw configuration.\n- The skill **automatically** adds the header `X-API-Key: {{DRADIS_API_KEY}}` to **every** request.\n- Local development works without a key. Remote or production deployments **should** use the key.\n\n## Safety & Usage Guidelines (Critical)\n\n**This skill controls a live trading system with real money at risk.**  \nThe agent **must** follow these guardrails at all times:\n\n- `patch_dynamic_config` changes live strategy parameters without restarting the engine.  \n  **Never** apply any configuration change without first explicitly confirming the exact update with the human user and receiving clear approval.\n- Only call tools when the user’s request directly relates to monitoring or configuration.\n- If the engine returns 401 Unauthorized, immediately tell the user they need to configure the `DRADIS_API_KEY`.\n\n## Example Natural Language Commands\n\n- “What’s the current status of DRADIS?”\n- “Show me open positions and session P&L”\n- “What markets is each strategy currently trading?”\n- “List the last 10 trades”\n- “What does the LLM advisor recommend right now?”\n- “Show me the current config”\n- “Can you increase the adverse block threshold? Show me the current config first and confirm before patching.”\n\n## Configuration\n\n- `DRADIS_API_URL`: Base URL for the engine API (Default: `http://localhost:9000/api`)\n- `DRADIS_API_KEY`: API key for authentication (optional locally, **recommended** for remote/production)\n\n## Tools\n\n### 1. check_engine_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/health`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** Text or JSON\n\n### 2. get_current_config\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON object of all configurable fields\n\n### 3. patch_dynamic_config\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Payload Type:** `application/json`\n- **Parameters:** `updates` object (e.g. `{\"gboost_obi_adverse_block\": -0.15, \"enable_basis\": false}`)\n- **Safety Note:** Requires explicit user confirmation before executing.\n\n### 4. check_session_pnl\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/pnl/history`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON array of equity snapshots\n\n### 5. get_recent_trades\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/trades`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `limit` (optional, default 100)\n\n### 6. get_open_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON array of open position records\n\n### 7. get_strategy_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/status`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON object of strategy → market mapping\n\n### 8. get_llm_recommendations\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/recommendations`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `limit` (optional, default 10)\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn7f5jmhpsv3snxa93fesspj1d86vcx4\",\n  \"slug\": \"dradis-tactical-command\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1778937918416\n}\n\nArchive v1.1.0: 2 files, 1828 bytes\n\nFiles: SKILL.md (3739b), _meta.json (142b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: dradis-tactical-command\ndescription: Real-time supervisor and control interface for the DRADIS Polymarket high-frequency trading engine. Full support for DRADIS_API_KEY authentication via X-API-Key header.\nuser-invocable: true\n---\n\n# Skill: DRADIS Tactical Command (v1.1.0)\n\nFull-featured autonomous supervisor for the DRADIS high-frequency prediction market execution engine.\n\n## Authentication (New in v1.1.0)\n\nDRADIS now supports optional API key authentication (see your README).\n\n- Set `DRADIS_API_KEY` in your OpenClaw configuration.\n- The skill **automatically** adds the header `X-API-Key: {{DRADIS_API_KEY}}` to **every** request.\n- Local development works without a key. Remote or production deployments **should** use the key.\n\n## Safety & Usage Guidelines (Critical)\n\n**This skill controls a live trading system with real money at risk.**  \nThe agent **must** follow these guardrails at all times:\n\n- `patch_dynamic_config` changes live strategy parameters without restarting the engine.  \n  **Never** apply any configuration change without first explicitly confirming the exact update with the human user and receiving clear approval.\n- Only call tools when the user’s request directly relates to monitoring or configuration.\n- If the engine returns 401 Unauthorized, immediately tell the user they need to configure the `DRADIS_API_KEY`.\n\n## Example Natural Language Commands\n\n- “What’s the current status of DRADIS?”\n- “Show me open positions and session P&L”\n- “What markets is each strategy currently trading?”\n- “List the last 10 trades”\n- “What does the LLM advisor recommend right now?”\n- “Show me the current config”\n- “Can you increase the adverse block threshold? Show me the current config first and confirm before patching.”\n\n## Configuration\n\n- `DRADIS_API_URL`: Base URL for the engine API (Default: `http://localhost:9000/api`)\n- `DRADIS_API_KEY`: API key for authentication (optional locally, **recommended** for remote/production)\n\n## Tools\n\n### 1. check_engine_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/health`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** Text or JSON\n\n### 2. get_current_config\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON object of all configurable fields\n\n### 3. patch_dynamic_config\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Payload Type:** `application/json`\n- **Parameters:** `updates` object (e.g. `{\"gboost_obi_adverse_block\": -0.15, \"enable_basis\": false}`)\n- **Safety Note:** Requires explicit user confirmation before executing.\n\n### 4. check_session_pnl\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/pnl/history`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON array of equity snapshots\n\n### 5. get_recent_trades\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/trades`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `limit` (optional, default 100)\n\n### 6. get_open_positions\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON array of open position records\n\n### 7. get_strategy_status\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/status`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Response Format:** JSON object of strategy → market mapping\n\n### 8. get_llm_recommendations\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/recommendations`\n- **Headers:** `X-API-Key: {{DRADIS_API_KEY}}`\n- **Query Param:** `limit` (optional, default 10)\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7f5jmhpsv3snxa93fesspj1d86vcx4\",\n  \"slug\": \"dradis-tactical-command\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1778937585652\n}\n\nArchive v1.0.0: 2 files, 2218 bytes\n\nFiles: SKILL.md (4399b), _meta.json (142b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: dradis-tactical-command\ndescription: Real-time supervisor and control interface for the DRADIS Polymarket high-frequency trading engine. Monitor health, positions, P&L, trades, config, strategy markets, and LLM recommendations. Dynamically adjust parameters via natural language.\nuser-invocable: true\n---\n\n# Skill: DRADIS Tactical Command\n\nFull-featured autonomous supervisor for the DRADIS high-frequency prediction market execution engine.\n\n## Safety & Usage Guidelines (Critical)\n\n**This skill controls a live trading system with real money at risk.**  \nThe agent **must** follow these guardrails at all times:\n\n- `patch_dynamic_config` changes live strategy parameters without restarting the engine.  \n  **Never** apply any configuration change without first explicitly confirming the exact update with the human user and receiving clear approval (e.g., “Do you want me to set gboost_obi_adverse_block to -0.15? Yes/No”).\n- Only call tools when the user’s request directly relates to monitoring status, checking P&L/trades/positions, viewing config, or requesting a specific parameter adjustment.\n- Respect DRADIS’s built-in circuit breakers, rate limits, and safety mechanisms — the engine will reject unsafe changes.\n- If the engine returns an error or unhealthy state, immediately report it and **do not** attempt further config changes until the user is informed.\n- The agent should be conservative: prefer status/monitoring tools over config changes.\n\n## Example Natural Language Commands\n\nThe skill is designed to respond naturally to commands like:\n\n- “What’s the current status of DRADIS?”\n- “Show me open positions and session P&L”\n- “What markets is each strategy currently trading?”\n- “List the last 10 trades”\n- “What does the LLM advisor recommend right now?”\n- “Show me the current config”\n- “Can you increase the adverse block threshold? Show me the current config first and confirm before patching.”\n- “Patch the config to disable basis trading and confirm with me”\n\n## Configuration\n\n- `DRADIS_API_URL`: Base URL for the engine API (Default: `http://localhost:9000/api`)\n\n## Tools\n\n### 1. check_engine_status\nQueries overall engine health/liveness.\n\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/health`\n- **Response Format:** Plain text `\"ok\"` (or error)\n\n### 2. get_current_config\nReturns the full current dynamic configuration (all Viper parameters).\n\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Response Format:** JSON object of all configurable fields\n\n### 3. patch_dynamic_config\nDynamically updates Viper strategy parameters on the fly without an engine restart.\n\n- **Method:** `PATCH`\n- **Endpoint:** `{{DRADIS_API_URL}}/config`\n- **Payload Type:** `application/json`\n- **Parameters:**  \n  `updates`: Object containing modified strategy variables (e.g. `{\"gboost_obi_adverse_block\": -0.15, \"enable_basis\": false}`)\n- **Safety Note:** This tool **requires explicit user confirmation** before sending the PATCH request. The agent must summarize the exact change and wait for approval.\n\n### 4. check_session_pnl\nRetrieves the real-time equity curve and session P&L snapshots.\n\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/pnl/history`\n- **Response Format:** JSON array of objects (`{ \"ts\": number, \"session_pnl\": number, \"collateral\": number }`)\n\n### 5. get_recent_trades\nReturns a list of recently completed trades.\n\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/trades`\n- **Query Param:** `limit` (optional, default 100, clamped 1–500)\n- **Response Format:** JSON array of trade objects\n\n### 6. get_open_positions\nReturns all currently open positions across strategies.\n\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/positions`\n- **Response Format:** JSON array of open position records\n\n### 7. get_strategy_status\nShows which market each strategy is currently attached to.\n\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/status`\n- **Response Format:** JSON object `{ \"strategy_markets\": { \"strategy_name\": \"market_name\", ... } }`\n\n### 8. get_llm_recommendations\nReturns recent recommendations and analyses from the built-in LLM Advisor.\n\n- **Method:** `GET`\n- **Endpoint:** `{{DRADIS_API_URL}}/llm/recommendations`\n- **Query Param:** `limit` (optional, default 10, clamped 1–50)\n- **Response Format:** JSON array of recommendation objects\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7f5jmhpsv3snxa93fesspj1d86vcx4\",\n  \"slug\": \"dradis-tactical-command\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778936566893\n}","readmeExcerpt":"Skill: DRADIS PolyMarket & Kalshi Trading Automation Owner: mbordash Summary: Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication. Tags: defi:1.0.0, finance:1.0.0, high-frequency:1.0.0, latest:1.5.1, polymarket:1.0.0, trading:1.0.0 Version history: v1.5.1 | 2026-08-10T23:33:44.6","codeSnippets":[],"executableExamples":[{"language":"jsonc","snippet":"// CORRECT\n{\"time_decay_position_size_usdc\": \"8.0\", \"enable_basis\": false}\n\n// WRONG — silently ignored, still returns 200 OK with the UNCHANGED config\n{\"updates\": {\"time_decay_position_size_usdc\": \"8.0\"}}"},{"language":"jsonc","snippet":"// CORRECT\n{\"time_decay_position_size_usdc\": \"8.0\", \"enable_basis\": false}\n\n// WRONG — silently ignored, still returns 200 OK with the UNCHANGED config\n{\"updates\": {\"time_decay_position_size_usdc\": \"8.0\"}}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: dradis-tactical-command\ndescription: Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication.\nhomepage: https://github.com/mbordash/DRADIS\nuser-invocable: true\n---\n\n# Skill: DRADIS Tactical Command (v1.5.1)\n\nFull-featured autonomous supervisor for the **DRADIS** high-frequency prediction market execution engine.\n\n> **What's new in v1.5.1**\n> - **Corrected PATCH contract.** Config PATCH bodies are a *flat* partial object, not a wrapped `updates` object. A wrapped body is silently ignored and still returns `200 OK` — see [Applying config changes](#applying-config-changes) for the mandatory verification step.\n> - **Corrected squadron ids.** Ids are `{asset}-{cadence}` (e.g. `btc-hourly`), never a bare asset name. Always read them from `list_squadrons`.\n> - **`patch_dynamic_config` no longer affects trading.** Strategy execution reads squadron-scoped config exclusively; the global endpoint now only governs the LLM advisor. Use `patch_squadron_config` for anything that changes trading behaviour.\n> - **New read tools:** `get_viper_status` (why isn't it trading?), `get_llm_actions` + approve/reject (the AI action queue), `get_telemetry`, `get_telemetry_history`, `get_telemetry_assets`, `get_logs`, `get_latency`, `get_taxonomy_raptors`, `get_taxonomy_vipers`, `get_available_markets`, `get_deployments`, `get_deployment_region`.\n> - Documented `DRADIS_READ_ONLY` (403 on writes), public vs. protected routes, query-param defaults and clamps, and per-venue endpoint availability.\n\n## About DRADIS\n\nDRADIS is an open-source, low-latency Rust trading engine for crypto prediction markets.\nIt features a Viper strategy engine, real-time equity curve, dynamic config hot-reloading, and a built-in LLM advisor.\n\n**Project repository:** [https://github.com/mbordash/DRADIS](https://github.com/mbordash/DRADIS)\n\n### Venues\n\nDRADIS builds against exactly one venue at a time (mutually exclusive Cargo features):\n\n| Build | Venue | Notes |\n|---|---|---|\n| `intl_clob` (default) | Polymarket International | Self-custody; on-chain wallet balance available |\n| `us_retail` | Polymarket US | Custodial; no on-chain wallet probe |\n| `kalshi` | Kalshi | Custodial; no on-chain wallet probe |\n\nThe agent cannot tell which build is running from the venue name alone — call `get_deployment_region` to find out. This matters because a few endpoints are build-specific (noted per tool below).\n\n### Architecture the agent should understand\n\n- A **CAG** (Commander Air Group) runs one or more **Squadrons**, one per market.\n- Each Squadron owns **Raptors** (signal feeds) and **Vipers** (strategies), plus **its own `DynamicConfig`**.\n- **Squadron config is the only config that affects trading.** The global `/api/config` object is a separate, legacy-scope record that now only feeds the LLM advisor.\n\n## Publisher Note (Addressing ClawScan Findings)\n\nClawScan h"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7f5jmhpsv3snxa93fesspj1d86vcx4\",\n  \"slug\": \"dradis-tactical-command\",\n  \"version\": \"1.5.1\",\n  \"publishedAt\": 1786404824693\n}"},{"path":"skill-card.md","content":"## Description:\n\nReal-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[mbordash](https://clawhub.ai/user/mbordash)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to monitor DRADIS trading status, portfolio data, telemetry, logs, and pending LLM recommendations, and to make explicitly approved configuration changes for DRADIS instances they control.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Monitoring and configuration actions affect a DRADIS trading system where real money can be at risk.\n\nMitigation: Install only for a DRADIS instance the user controls, prefer read-only mode where appropriate, and require explicit human approval before any configuration change.\n\nRisk: A DRADIS_API_KEY can authorize protected DRADIS routes.\n\nMitigation: Use a dedicated least-privilege API key and review every proposed configuration or LLM-action approval before accepting it.\n\nRisk: Incorrect strategy configuration patches can appear successful if unknown keys are ignored.\n\nMitigation: Validate editable fields against the config schema and confirm the changed value from the response before reporting success.\n\n## Reference(s):\n\n- [DRADIS project repository](https://github.com/mbordash/DRADIS)\n- [ClawHub skill listing](https://clawhub.ai/mbordash/skills/dradis-tactical-command)\n- [Publisher profile](https://clawhub.ai/user/mbordash)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, configuration, guidance]\n\n**Output Format:** [Markdown and concise text with JSON configuration fragments when needed]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can propose and verify DRADIS configuration changes only after explicit human approval.]\n\n## Skill Version(s):\n\n1.5.1 (source: server release metadata and skill H1)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication. Skill: DRADIS PolyMarket & Kalshi Trading Automation Owner: mbordash Summary: Real-time supervisor and control interface for the DRADIS prediction-market trading engine (Polymarket International, Polymarket US, and Kalshi). Full support for DRADIS_API_KEY authentication. Tags: defi:1.0.0, finance:1.0.0, high-frequency:1.0.0, latest:1.5.1, polymarket:1.0.0, trading:1.0.0 Version history: v1.5.1 | 2026-08-10T23:33:44.6","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1397,"uniquenessScore":47,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T20:52:08.110Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T20:52:08.110Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T23:45:42.696Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}