← EdgePilot ResearchCONTENT HISTORY

Update to EdgePilot Research

Snapshot Sep 30, 2026 · 23:14 UTC · version 0.1.15

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "edgepilot-research",
  "description": "Discover public market strategies, install reviewed research packages, run offline or public-data historical backtests, and explain reproducible research results. Use only for research and backtesting; it has no accounts, credentials, paper, demo, live trading, or order execution workflow.",
  "included_files": [
    {
      "relative_path": "agents/openai.yaml",
      "size_in_bytes": 426
    },
    {
      "relative_path": "scripts/install_runtime.py",
      "size_in_bytes": 989
    }
  ],
  "skill_md_contents": "---\nname: edgepilot-research\ndescription: Discover public market strategies, install reviewed research packages, run offline or public-data historical backtests, and explain reproducible research results. Use only for research and backtesting; it has no accounts, credentials, paper, demo, live trading, or order execution workflow.\n---\n\n# EdgePilot Research\n\n## First-run strategy guidance\n\nTreat `Help me choose a strategy` and `Show me the available strategies` as onboarding routes, not one-shot answers. Reply in the user's current conversation language. If the user changes language, switch immediately without discarding confirmed answers. Keep offering one concrete next action until the user chooses an exact strategy version, ends the flow, or a real capability boundary prevents the handoff. Do not check the runtime, request login, open the Dashboard, download a package, or install anything during discovery and matching.\n\nStart with a short, naturally translated welcome carrying this meaning: EdgePilot Research helps clarify a strategy idea and test it with historical data; it can help choose when the user has no direction or help test an existing idea. Chinese wording is only an example, never a fixed response for every language.\n\nFor `Help me choose a strategy`, immediately begin the existing V2 questionnaire. Ask one unanswered question at a time, using three localized choices and mapping only unambiguous answers to these canonical values in order:\n\n1. `profit_style`: `trend | reversal | relative_value`\n2. `holding_period`: `intraday | multi_day | multi_week`\n3. `pain_point`: `loss_streak | inactivity | tail_loss`\n4. `max_drawdown_pct`: `5 | 15 | 20`\n5. `trading_mode`: `long_only_no_leverage | long_short_low_leverage | long_short_high_leverage`\n6. `allocation_band`: `under_25k | 25k_100k | over_100k`\n7. `universe`: `majors | altcoins | any`\n\nReuse answers already clear from the conversation and ask the user to choose among the current three options when meaning is ambiguous. After all seven answers, show a localized summary and accept an optional note of at most 500 Unicode code points for user review only. Do not send the note, free text, derived fields, custom weights, or unknown fields to the recommendation tool. Map locale to `en`, `ko`, `zh-CN`, or `zh-TW`; for other languages keep conversing in that language, submit `locale=en`, and disclose that strategy names or summaries may fall back to English.\n\nWhen the current surface can send an anonymous HTTPS POST, submit only `questionnaire_version: \"2.0\"`, the seven confirmed canonical answers, and `locale` to `https://edge-pilot.rivendell.capital/api/research/recommendations`. This endpoint uses only the anonymous Research catalog; never send credentials, cookies, runtime-lock metadata, free text, or a machine identifier. Accept only a complete three-card response with distinct slugs and the unchanged roles and order `best_fit`, `safer`, `more_aggressive`. Preserve the top-level recommendation identity, versions, snapshot, normalized profile, candidate and exclusion counts, and `fallbacks`. For every card preserve the exact `slug`, `version`, `preset`, `role`, `match_score`, `score_breakdown`, `strategy_profile`, `evidence`, `matched_reasons`, `tradeoffs`, and `warnings`; translate controlled explanations without changing their meaning. Never score, rank, fill, reorder, replace, or relax constraints. On `CATALOG_COVERAGE_INSUFFICIENT`, rate limiting, network failure, or a partial response, explain the failure and do not fabricate a recommendation.\n\nIf the current surface cannot send the anonymous POST, preserve and summarize the canonical answers, explain that this surface can browse the anonymous Research catalog but cannot produce the formal three-card match, and offer continued catalog exploration. Guide the user to **Find the right strategy** only when a current Research Dashboard or generated launcher is already available. Never install or check the native runtime merely to obtain a recommendation. Do not require login, silently switch to the Live product, claim a formal recommendation, or reproduce the scoring algorithm.\n\nFor `Show me the available strategies`, immediately query the anonymous Research catalog without checking or installing the runtime. On a fresh plugin with no generated launcher, use an available network-capable tool to GET `https://edge-pilot.rivendell.capital/api/research/strategies?sort=published&limit=5&locale=LOCALE` directly; never install the runtime merely to obtain the CLI. If the launcher already exists, its `marketplace search` command remains valid. Show at most five items in default published order with name, summary, assets, timeframes, risk profile, and available return, maximum drawdown, and Sharpe. If any of those three benchmark metrics is `null`, label the benchmark unavailable rather than inferring it. End the list with localized actions to filter by asset/category/risk, start the seven-question match, or inspect one exact strategy version. Switch into the questionnaire as soon as the user asks what fits them or expresses a risk, capital, trading-mode, or holding-period preference; do not keep listing indefinitely or call a catalog item the best fit.\n\nWhen the user already has an idea, summarize it, map only unambiguous preferences, and ask only the missing required questions. Public catalog search may help explain nearby strategies but never substitutes for formal matching. For non-English ideas, do not treat an empty default-English query as proof that no related strategy exists; use localized results or retrieve an unfiltered catalog and compare semantics. If none is related, turn the idea into a testable specification and explain that Research does not generate or execute arbitrary strategy code.\n\nAfter the user chooses a catalog item, inspect its exact `slug@version`; never silently follow `latest`. On a fresh plugin without the launcher, inspect through the anonymous GET `/api/research/strategies/SLUG/VERSION` endpoint instead of installing the runtime. Cards from the anonymous Research recommendation endpoint are Research-visible at their response snapshot, but distribution changes or an emergency withdrawal can make an exact version unavailable later. If inspect or install reports that the exact version is no longer available, do not check the runtime, substitute another version, or choose another card: preserve the result, explain that the catalog changed, and offer to rerun the match or browse the anonymous Research catalog.\n\nFor an exact version confirmed visible in Research, offer factual comparison, details, or a historical backtest. Use `best_fit` and its returned preset by default only when the user has not selected another card. An unspecified request to \"run\" means historical backtesting, never Paper, Demo, or Live. Check or install the isolated runtime only after the user explicitly asks to backtest or open the Research Dashboard, then follow the consent and runtime procedure below.\n\nKeep all state under `~/.edgepilot-research/` on macOS/Linux or `%APPDATA%\\EdgePilotResearch` on Windows. Never read `~/.edgepilot/`. If `EDGEPILOT_RESEARCH_HOME` is set, use that directory instead.\n\nHost Python may run only the bundled installer. After installation, every CLI and Dashboard command must use the generated launcher by absolute path; the installer does not add it to `PATH`. In this Skill, `edgepilot-research` always means that launcher:\n\n- macOS/Linux: `~/.edgepilot-research/bin/edgepilot-research`\n- Windows: `%APPDATA%\\EdgePilotResearch\\bin\\edgepilot-research.cmd`\n\nDo not start the CLI or Dashboard with host `python`/`python3`/`py`, `python -m edgepilot_research`, or a `PYTHONPATH` that points at the plugin `src/`. Those invocations skip the locked venv. The Dashboard can then show a local Research runtime while backtests fail with `edgepilot-backtest-core is unavailable`.\n\nBefore a backtest command or Dashboard launch, install or check the isolated native runtime. Marketplace catalog requests are independent of runtime installation and never send a runtime-lock header. Treat this as the plugin's first-use setup: own the complete check, disclosed consent, installation, verification, and requested operation instead of asking the user to find or run scripts. On the first runtime-dependent request in each newly installed or upgraded plugin version, run the bundled installer from this Skill's plugin root even when `runtime status` says an older release exists. The installer is content-addressed and idempotent: a matching release is only verified and reactivated, while a changed plugin digest or lock creates a new release. This prevents the stable launcher from silently continuing to use an older plugin copy.\n\nOn a fresh runtime installation, run the bundled installer with host Python first:\n\n```bash\npython3 skills/edgepilot-research/scripts/install_runtime.py\n```\n\n```bat\npy -3 skills\\edgepilot-research\\scripts\\install_runtime.py\n```\n\nThen verify with the launcher, not host Python:\n\n```bash\n~/.edgepilot-research/bin/edgepilot-research runtime status\n```\n\n```bat\n%APPDATA%\\EdgePilotResearch\\bin\\edgepilot-research.cmd runtime status\n```\n\nIf the Windows `.cmd` exits with a syntax error, re-run the installer; an already-installed matching release still rewrites the launcher.\n\nIf reviewed wheel files are already available locally, pass their directory without changing the lock:\n\n```bash\npython3 skills/edgepilot-research/scripts/install_runtime.py --wheelhouse /path/to/wheels\n```\n\nThe installer displays the exact platform, native-code notice, per-platform total, actual download bytes, download origins, cache hits, state directory, and live stages for cache/download processing, venv creation, locked installation, verification, and activation. Continue only after the user explicitly agrees. Host permission prompts remain separate and must not be bypassed. It follows the bundled lock exactly: the customized NautilusTrader wheel comes from EdgePilot, while locked public dependency wheels come directly from `files.pythonhosted.org`. Never add custom indexes, URLs, hashes, mirrors, dependencies, or a dynamic PyPI resolver. Never `pip install nautilus_trader` / `nautilus-trader` from PyPI, GitHub, or any other public index, on macOS, Windows, or Linux. Unsupported platforms fail before download; do not install system Python automatically.\n\nEdgePilot HTTPS (runtime wheels and the public catalog) is behind Cloudflare Bot Fight Mode on every OS. Default Python `urllib` (`Python-urllib/3.x`) returns HTTP 403 with body `error code: 1010`. That is a blocked User-Agent, not a missing file. Do not replace the locked EdgePilot Nautilus URL with a PyPI wheel. Retry the **same** locked URL with an explicit browser-like User-Agent:\n\n```bash\n# macOS / Linux — save using the exact filename from runtime-lock.json\ncurl -L --fail -A \"Mozilla/5.0\" -o \"$LOCKED_FILENAME\" \"$LOCKED_NAUTILUS_URL\"\npython3 skills/edgepilot-research/scripts/install_runtime.py --wheelhouse \"$PWD\"\n```\n\n```bat\ncurl.exe -L --fail -A \"Mozilla/5.0\" -o \"%LOCKED_FILENAME%\" \"%LOCKED_NAUTILUS_URL%\"\npy -3 skills\\edgepilot-research\\scripts\\install_runtime.py --wheelhouse %CD%\n```\n\nCatalog GETs that bypass the CLI must use the same `-A \"Mozilla/5.0\"` (or `curl.exe` on Windows). Do not download EdgePilot URLs with Python `urllib` unless that User-Agent is set.\n\nAfter installation, use only the stable launcher under the Research state directory for backtests and the Dashboard. On Windows use `%APPDATA%\\EdgePilotResearch\\bin\\edgepilot-research.cmd`. Do not run `edgepilot_research.cli` directly with the bootstrap/system Python. If the user requested only a CLI backtest, do not start the Dashboard.\n\nIn the command examples below, `edgepilot-research` means that resolved stable launcher, not an unrelated executable found earlier on `PATH`.\n\nUse exact installed strategy versions:\n\n```bash\nedgepilot-research strategies list\nedgepilot-research backtest STRATEGY_SLUG --version 1.0.0 --days 90\nedgepilot-research runs list\nedgepilot-research runs show RUN_ID\n```\n\nFor online discovery, use only the anonymous Research catalog:\n\n```bash\nedgepilot-research marketplace search \"momentum\"\nedgepilot-research marketplace versions STRATEGY_SLUG\nedgepilot-research marketplace inspect STRATEGY_SLUG --version 1.0.0\nedgepilot-research marketplace install STRATEGY_SLUG --version 1.0.0\n```\n\nAccess the public Research catalog over HTTPS whenever current catalog data is needed. Prefer the CLI, but treat network failures as channel-specific: if terminal DNS is restricted, retry the same command with the environment's network permission or outside the sandbox; if the in-app browser returns `ERR_BLOCKED_BY_CLIENT`, use another available network-capable web/search tool or the permitted command-line request. For example, `curl -A \"Mozilla/5.0\"` (Windows: `curl.exe`) `https://edge-pilot.rivendell.capital/api/research/strategies` when the strategy list is required. Default Python `urllib` is rejected with 403/`1010`; do not treat that as a missing catalog or switch to PyPI. Do not ask the user to copy a public JSON response unless every available network-capable tool has failed. Do not use this fallback for authenticated endpoints, arbitrary third-party URLs, exchange adapters, or order execution.\n\nWhen the user asks to open or use the Research Dashboard, outbound network permission is a startup requirement, not a retry optimization. First verify the anonymous catalog using the environment's network permission, then start the generated launcher as a long-running process with that same permission:\n\n```bash\n~/.edgepilot-research/bin/edgepilot-research ui --host 127.0.0.1 --port 8686\n```\n\n```bat\n%APPDATA%\\EdgePilotResearch\\bin\\edgepilot-research.cmd ui --host 127.0.0.1 --port 8686\n```\n\nDo not start the Dashboard with host Python, in an ordinary network-restricted subprocess, or from a cached page of a stopped backend. Keep the process session alive while the user uses the Dashboard and verify that `/api/health` matches the local `dashboard.json` instance, active release, runtime ID, Python executable, and plugin digest before opening it in any browser. The Dashboard performs its own catalog preflight before binding the port; if it exits with `DNS_FAILED`, `CONNECT_TIMEOUT`, or `REMOTE_CONNECTION_FAILED`, obtain the required network permission and restart it instead of bypassing the preflight. Browser choice does not change this requirement because strategy installation is performed by the local Dashboard backend.\n\nThe Dashboard is single-instance across ports. To restart a current Dashboard, run the stable launcher with `ui --stop`; it verifies the private instance record against health, obtains the local CSRF token, requests self-stop, refuses queued/running backtests, and returns the exact host/port to reuse. Then start that host/port through the same stable launcher and verify health again. Never call the endpoint with hand-built data or kill an arbitrary PID. A Dashboard started before this protocol is legacy: stop it through the host process handle only when this workflow owns that handle, otherwise ask the user to close it before restarting through the stable launcher.\n\nDownloaded Research packages are executable Python code. Only install first-party packages returned by the reviewed Research catalog. The runtime executes the formal `strategy.py` with NautilusTrader and the Manifest V2 benchmark preset; it never executes `research.py`.\n\nBacktests accept only `--days 90` or `--days 365` (default 90). Before execution, Research reads the selected preset's instrument, bar type, venue and Futures account type, then atomically fills that exact period from the reviewed Binance public market-data client. It never accepts an arbitrary data URL, reads credentials, initializes an execution client, or places orders. Automatic download currently supports Binance Futures bar markets only; return `PUBLIC_DATA_UNSUPPORTED` for other venues or data types.\n\nUsers may still import a local CSV explicitly:\n\n```bash\nedgepilot-research data import --strategy STRATEGY_SLUG --version 1.0.0 --market 0 --csv bars.csv --instrument-json instrument.json\n```\n\nIf automatic download fails, report the exact public-data error and retain the previous catalog. If imported catalog data is missing, return the exact import command.\n\nExplain the dataset, period, parameters, fee assumption, return, maximum drawdown, Sharpe ratio, trade count, and reproduction command. Historical performance does not predict future results and is not investment advice.\n\nNever request login, account details, exchange credentials, API keys, secrets, passphrases, or permission to place orders. If the user asks to trade, explain that EdgePilot Research supports historical research only.\n\nThis Skill is a release candidate until the target public directory completes its own review. Do not tell users that runtime downloads, native installation, or local process execution are supported on a ChatGPT/Codex surface unless that exact surface has passed the release checklist. If local execution is unavailable, explain the limitation; do not silently switch to PyPI, arbitrary code execution, or a remote trading service.\n"
}

SHA-256: 729be68b13253677475f43660ee44623094d28c18890441172f31149f481571a