TalentDelta

Our site is fully accessible by humans and agents (via WebMCP).

Hermes Trading Research Agent — US-Equity Research Profile

A Hermes profile for a human US-equity trader: research, journaling and risk review that run on their own — and no order placement, no signals, no scheduled trades.

A Hermes profile distribution that turns a library of trading skills into an always-on research, journaling and risk-review assistant for a human US-equity trader - explicitly not an automated trading system: no order placement, no signal service, no hidden scheduled jobs, and every entry and exit decision stays with the human reviewer. Ships the profile manifest and alias, config and cron presets, ten skill bundles, schemas, English and Japanese docs, and a test suite.

Uploaded by TalentDelta Team Member (Scout) · via TalentDelta

build 1.0.0 · 2977.4 KB · published 2026-10-06 · 622 files

Licence: MIT

Provenance

Scouted from github.com/tradermonty/hermes-trading-research-agent-work-package at commit 9598a9cc21e465438b194e43f35b52d4adf7fe3d (2026-06-05). Licence MIT. Upstream credit: TradeMonty. Packaged byte-identical to the pin apart from the provenance record appended to README.md. Upstream code and licence stay upstream's.

Brought into the catalogue by TalentDelta Team Member (Scout).

Our review

What we like

Installs cleanly: validation exits 0, the profile, its bundles and its alias command all land, and a live pre-market run produced the full seven-section brief with provenance and the human decision gate, no order calls. Its scheduled job ran end to end with a model key.

Potential improvements

The shipped suite is not green as packed: 204 passed, 4 failed; one script arrives without its exec bit, and three index tests flag upstream drift past the pinned commit. The README's provider command and test count are stale; the scheduled job declares required keys, so a keyless first run stops at preflight.

Minimum requirements

Met: archive hash matches, install and removal clean.

Security risks

None found; licence is MIT and the vendored skill set is disclosed with its source commit. Placeholder credential strings only. Not tested: paid market-data keys.

622 files · 6938.3 KB · previews are generated at approval and never executed

  • hermes-trading-research-agent/.env.EXAMPLEtext · 1.4 KB
    # Model provider. Configure whichever provider your Hermes installation uses.
    ANTHROPIC_API_KEY=
    OPENAI_API_KEY=
    OPENROUTER_API_KEY=
    
    # Canonical Claude Trading Skills checkout for external-linked mode.
    # Example: /home/monty/src/claude-trading-skills
    CLAUDE_TRADING_SKILLS_REPO=
    
    # Market-data integrations. Optional, but some skills require them for full functionality.
    FMP_API_KEY=
    FINVIZ_API_KEY=
    
    # Brokerage/account integration. Keep paper/read-only by default.
    ALPACA_API_KEY=
    ALPACA_SECRET_KEY=
    ALPACA_PAPER=true
    
    # Cron delivery target: local, telegram, discord, slack, origin, etc.
    HERMES_CRON_DELIVER=local
    
    # Reporting preferences.
    HERMES_TRADING_TIMEZONE=America/Los_Angeles
    HERMES_TRADING_REPORT_DIR=reports
    
    # /trade-ticket persistence (TICKET-010, v0.1.6+). The /trade-ticket bundle
    # emits a YAML document and a "Suggested save path" hint pointing at this
    # directory with the basename <ticket_id>.ticket.yaml. The bundle never
    # writes to disk on its own — persistence is operator-confirmed. The literal
    # ${HOME} is left as-is here; consumers should expand with
    # os.path.expandvars(os.path.expanduser(value)) (the .env parser returns the
    # literal). Recommended: a profile-external root so trade artifacts (tickets,
    # journal entries, screenshots, soak logs) live together and survive Hermes
    # profile reinstall.
    HERMES_TRADE_TICKET_DIR=${HOME}/trading-research/tickets
    
  • hermes-trading-research-agent/.github/workflows/ci.ymlcode · 1.2 KB
    name: CI
    
    on:
      push:
        branches: [main]
        tags: ["v*"]
      pull_request:
      workflow_dispatch:
    
    jobs:
      validate:
        runs-on: ubuntu-latest
    
        steps:
          - name: Checkout profile repo
            uses: actions/checkout@v6
    
          # Upstream skills repo cloned into the workspace (GitHub Actions does not
          # allow writes outside $GITHUB_WORKSPACE). The validator only reads
          # `skills-index.yaml` and `skills/*/SKILL.md`, so no auth is required.
          - name: Checkout claude-trading-skills (default branch)
            uses: actions/checkout@v6
            with:
              repository: tradermonty/claude-trading-skills
              path: claude-trading-skills
    
          - name: Set up Python
            uses: actions/setup-python@v6
            with:
              python-version: "3.11"
    
          - name: Install dev dependencies
            run: |
              python -m pip install -U pip
              python -m pip install -e ".[dev]"
    
          - name: Validate package structure
            run: make validate
    
          - name: Validate upstream skill references
            env:
              CLAUDE_TRADING_SKILLS_REPO: ${{ github.workspace }}/claude-trading-skills
            run: make validate-upstream
    
          - name: Run tests
            run: make test
    
  • hermes-trading-research-agent/.github/workflows/pages.ymlcode · 0.6 KB
    name: Deploy GitHub Pages
    
    on:
      push:
        branches: [main]
        paths:
          - "docs/**"
          - ".github/workflows/pages.yml"
      workflow_dispatch:
    
    permissions:
      contents: write
    
    concurrency:
      group: pages
      cancel-in-progress: false
    
    jobs:
      deploy:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout
            uses: actions/checkout@v6
    
          - name: Deploy docs to gh-pages branch
            uses: peaceiris/actions-gh-pages@v4
            with:
              github_token: ${{ secrets.GITHUB_TOKEN }}
              publish_dir: ./docs
              publish_branch: gh-pages
              cname: ""
    
  • hermes-trading-research-agent/.gitignoretext · 0.5 KB
    .env
    .env.*
    !.env.EXAMPLE
    __pycache__/
    .pytest_cache/
    .venv/
    dist/
    build/
    *.egg-info/
    reports/
    *.log
    .DS_Store
    vendor-manifest.json
    skills/vendor/
    
    # Runtime /trade-ticket output (TICKET-010). Operator-managed; never committed.
    # Default location is HERMES_TRADE_TICKET_DIR=${HOME}/trading-research/tickets,
    # but the *.ticket.yaml suffix matches the bundle's suggested basename
    # (<ticket_id>.ticket.yaml) so an accidental in-repo save is caught here too.
    # `reports/` above already protects the cron output convention.
    tickets/
    *.ticket.yaml
    
  • hermes-trading-research-agent/AGENTS.mdmarkdown · 18.0 KB

    Work Order for Coding Agents

    Status (as of v0.1.6 — 2026-05-24)

    This document was originally written as a pre-v0.1.0 coding handoff. The MVP (v0.1.0), CI / docs polish (v0.1.1), cron timezone single-source refactor (v0.1.2), the {{TIMEZONE}} prompt template + verified-Hermes-v0.14.0 docs round (v0.1.3), the generator-ownership + determinism round (v0.1.4 / TICKET-004a / B-2a), the trade-ticket primitive + Operational soak procedure + audit-field polish (v0.1.5 / TICKET-009 / B-3), and the trade-ticket persistence + journal bridge + upstream workflows drift guard + typo-guard polish (v0.1.6 / TICKET-010 / TICKET-004b / B-2b) have all shipped. Phase 2 is now ✓ done (B-2a + B-2b shipped). The bundle catalogue is 10 (/trade-ticket added in v0.1.5). The Phase / Ticket structure below is kept for historical context — it captures the original intent and the canonical source-of-truth ordering. For current state, this table is authoritative; the Phase bodies below are not.

    Phase / TicketStatusWhere it landed
    Phase 0 — Verify Hermes capabilities✓ donedocs/03-hermes-compatibility-notes.md (verified table + operational findings, Hermes v0.14.0; v0.1.3 added verified entries for bundles reload, MCP config location, and cron toolset restrictions)
    Phase 1 — External-linked skill integration✓ doneconfig.yaml:skills.external_dirs, scripts/validate_upstream_index.py, docs/04-skill-integration-strategy.md
    Phase 2 — Bundle generation✓ done (B-2a + B-2b shipped)Canonical index validation (scripts/validate_upstream_index.py) + generator ownership (x-generated: contract, write-if-changed, update_external_config idempotent, --force-overwrite escape hatch double-gated by REQUIRE_SYNC_WRITE=1 + REQUIRE_FORCE_OVERWRITE=1) + 7 determinism tests in tests/test_sync_determinism.py shipped as TICKET-004a / B-2a. B-2b (TICKET-004b) closes Phase 2: upstream workflows/*.yaml read-only drift guard for the 3 overlap workflows + 2 ignored-with-reason workflows; sync() write path unchanged (all 3 overlap bundles are x-generated: false). See tests/test_upstream_workflow_adapter.py for the 5 drift checks and docs/04 "Current bundle-composition SoT (as of B-2b)".
    Phase 3 — Cron presets✓ donedata/schedule-presets.yaml (single source of truth for schedule / name / skills / prompt_file / timezone), cron/create_cron_jobs.py (host-TZ warning + {{TIMEZONE}} prompt template expansion from v0.1.3, priority shell env > .env > preset YAML > LA), cron/create_cron_jobs.sh wrapper, tests/test_schedule_drift.py, tests/test_prompt_template.py. cron run requires a job_id rather than a human name in Hermes v0.14.0 — documented in docs/03-hermes-compatibility-notes.md.
    Phase 4 — Safety and policy gates✓ doneSOUL.md, tests/test_output_safety.py, tests/test_required_sections.py, tests/fixtures/sample_outputs/
    Phase 5 — Optional vendored modescoped (008a), impl deferred (008b)TICKET-008a documented the three-mode model + vendor-manifest.json shape + destructive-skeleton warning in docs/04. TICKET-008b (the actual non-destructive writer + manifest provenance + patches pipeline + skills drift detection) remains open.
    Phase 6 — Release and documentation✓ donev0.1.0 / v0.1.1 / v0.1.2 / v0.1.3 / v0.1.4 / v0.1.5 / v0.1.6 published on GitHub Releases. README + README.ja + CHANGELOG ship with each release.
    TICKET-001..003, 005..007✓ doneSee v0.1.0 changelog.
    TICKET-004a (generator ownership + determinism)✓ done (shipped in v0.1.4)See the [0.1.4] section of CHANGELOG.md; docs/09-coding-tickets.md for the 004a/004b split rationale; tests/test_sync_determinism.py for the contract tests.
    TICKET-004b / B-2b (upstream workflows adapter, closes Phase 2)✓ done (shipped in v0.1.6)scripts/sync_claude_trading_skills.py adds 3 public symbols (UPSTREAM_OVERLAP_SLUGS, UPSTREAM_IGNORED_WORKFLOW_SLUGS, load_upstream_workflow); sync() write path unchanged. tests/test_upstream_workflow_adapter.py adds 5 named drift tests (13 parametrize cases): file-exists × 3, required-subset × 3, optional-in-mapping × 3, canonical_source marker × 3, inventory-classified × 1 (filesystem-side, also disjoint-checks the two slug sets). docs/04 carries SoT split + projection-vs-drift-check table (display_name / cadence are documented but not drift-checked; artifacts → required_outputs / steps / decision_gate / manual_review / when_to_run are not projected in v0.1.x — B-2c candidates) + inventory classification table (overlap: 3, ignored: 2 with reasons). Makefile sync-external-write comment fixed "nine → ten SKIP lines". With CLAUDE_TRADING_SKILLS_REPO: 162 → 175 passing (further +1 to 176 from the TICKET-010 polish fixture). Without: 162 passing, 14 skipped (13 new B-2b env-gated + 1 pre-existing B-2a env-gated case; the polish fixture is schema-only and runs in both modes). See docs/09-coding-tickets.md TICKET-004b entry.
    TICKET-008a (vendored mode scope, docs)✓ done (on main, folds into next release)docs/04 "Vendored mode (TICKET-008)" section + docs/09 008a/008b split. Documents the three-mode model and the destructive-skeleton warning. No code.
    TICKET-008b (vendored mode implementation)open (deferred)Contract is the 008a docs. Surface: manifest schema + non-destructive re-vendor + patches pipeline + skills drift detection. See docs/09-coding-tickets.md TICKET-008.
    TICKET-015 (upstream status inspection)✓ done (on main, folds into next release)scripts/upstream_status.sh + make upstream-status (working-tree-safe pre-pull inspection: resolved ref / dirty / incoming / risk label). tests/test_upstream_status.py (presence + behavioral temp-git fixture). Docs in docs/03, docs/04 (three-layer table), docs/09, README EN/JA. Complements TICKET-004b drift guard (before-pull vs after-pull). Deferred: TICKET-015b read-only /upstream-status slash command.
    TICKET-009 / B-3 (/trade-ticket bundle + schema + audit-field polish)✓ done (shipped in v0.1.5)schemas/trade-ticket.schema.json (5-value status enum, approval.required: const true, APPROVED branch tightens numeric fields to non-null, approval.reviewer: minLength 1, created_at / decided_at carry both format: date-time and an explicit ISO-8601 pattern), skill-bundles/trade-ticket.yaml (x-generated: false, 5 operator verbs, positive boundary, confirmed.* re-type, mismatch handling), data/skill-mapping.yaml entry, escalation pointers in /swing-opportunity-daily + /pre-market-routine, tests/test_trade_ticket_schema.py (22 cases — validator built with format_checker=FORMAT_CHECKER; 9 schema negatives including blank-reviewer + invalid-timestamp) + 14 fixtures. Bundle count goes from 9 to 10. See docs/04-skill-integration-strategy.md "Trade ticket primitive" and docs/09-coding-tickets.md.
    TICKET-010 (Trade ticket persistence + journal bridge, + typo-guard polish)✓ done (shipped in v0.1.6).gitignore adds tickets/ + *.ticket.yaml safety net. .env.EXAMPLE + distribution.yaml:env_requires declare HERMES_TRADE_TICKET_DIR (optional, default ${HOME}/trading-research/tickets). schemas/trade-ticket.schema.json adds optional journal_bridge object (target: const trader-memory-core, action: enum [register_thesis, update_thesis, postmortem], optional thesis_status / notes, additionalProperties: false). skill-bundles/trade-ticket.yaml instruction body gains save-path hint, journal-bridge handoff, silent-write positive form. tests/test_trade_ticket_schema.py +5 tests +2 parametrize rows (matrix 9 → 11 including the v0.1.6 typo-guard polish row); tests/test_package_structure.py +1 manifest declaration test. 3 new fixtures (14 → 17 with the polish). Suite 155 → 163 schema-only contribution (162 → 163 over the v0.1.5 baseline net of the polish). See docs/04-skill-integration-strategy.md "Ticket persistence and journal bridge" and docs/09-coding-tickets.md.

    Open work items are reflected in CHANGELOG.md under [Unreleased] once a fix lands; right now [Unreleased] carries:

    • TICKET-012 — operational-soak docs + monthly workflow drift fix (v0.1.6 operational soak findings promoted to docs/03-hermes-compatibility-notes.md, docs/08-release-playbook.md soak procedure refined, README "Required step" callout, plus data/skill-mapping.yaml gains trade-performance-coach for monthly-performance-review).
    • TICKET-013 — pre-market-routine session state vs posture basis + Source/Skill provenance heading. Triggered by the v0.1.6 day-2 soak (2026-05-26 Tue, post-Memorial-Day) where the existing output rendered Risk posture: risk-off / REDUCE_ONLY ambiguously across the holiday bridge. Bundle instruction + cron prompt body gain a two-line preamble (Session state: / Posture basis:) with three labels (based on fresh latest completed regular-session close / carried forward from <date> / pending fresh data / degraded); tests/test_pre_market_session_state_rule.py pins 12 parametrize cases (6 phrases × 2 files). Pre-market only — horizontal rollout to other bundles is TICKET-014 candidate.
    • TICKET-008a — vendored mode scope clarification (docs only). docs/04 gains a full "Vendored mode (TICKET-008)" section (three-mode model, per-mode Hermes-edit ownership, vendor-manifest.json shape, and the danger note that today's copy_vendor_skills() skeleton shutil.rmtrees vendored skills). docs/09 TICKET-008 split into 008a (docs) and 008b (deferred implementation). No code.
    • TICKET-015 — upstream status inspection. scripts/upstream_status.sh + make upstream-status give a working-tree-safe, before-pull view of the external-linked $CLAUDE_TRADING_SKILLS_REPO checkout (resolved ref, dirty files, incoming commits, incoming skills//workflows/ changes, local-edit risk NONE/LOW/MEDIUM/HIGH). Never pulls/merges/rebases/stashes or touches a skill file. tests/test_upstream_status.py adds presence + behavioral-temp-git-fixture layers. Complements the TICKET-004b drift guard (before-pull vs after-pull). Deferred: TICKET-015b read-only /upstream-status slash command.

    The D: prod-alias operational soak procedure is codified in docs/08-release-playbook.md for the operator to run in real time — v0.1.6 latest-tag soak: day-1 (2026-05-25 Mon Memorial Day) macOS PASS (pre-market-routine fired at 06:13:59 PDT, all required sections, degraded mode explicit, research-only posture due to no cash-market session); day-2 (2026-05-26 Tue post-Memorial-Day) macOS PASS (cron fired 06:17:51 PDT, ~17m51s latency within 0–30 min PASS window codified in TICKET-012; ## Response forbidden-phrase count = 0; surfaced the posture-wording ambiguity that TICKET-013 addresses); Linux MISS explained by cron presets not being registered (operator needs to run bash cron/create_cron_jobs.sh). Still open: TICKET-008b (vendored mode implementation; 008a scope docs landed this round); TICKET-014 candidate (horizontal rollout of TICKET-013 wording); a Linux-side follow-up soak after the cron script is run.

    For a current-state walkthrough, start with README.md → docs/01-architecture.md → docs/03-hermes-compatibility-notes.md. Use this file for the original intent.


    Mission

    Build a Hermes Profile Distribution named trading-research-assistant that packages a disciplined US equity trading research assistant. It must integrate with tradermonty/claude-trading-skills and expose opinionated presets so users do not need to decide which individual skill to use.

    Primary source of truth

    Use this priority order whenever sources disagree:

    1. Current Hermes official docs and CLI behavior.
    2. tradermonty/claude-trading-skills/skills-index.yaml.
    3. tradermonty/claude-trading-skills/workflows/*.yaml.
    4. This package's data/skill-mapping.yaml and docs.
    5. README copy and human-facing prose.

    Do not invent skill names when the canonical index is available. Missing skills should be reported clearly and skipped only when the workflow can still produce a degraded result.

    Hard constraints

    • The product is a research/process assistant, not a signal service.
    • Do not add live trading execution as a default capability.
    • If Alpaca support is implemented, default to paper mode and read-only portfolio/risk review unless the user explicitly opts into something else.
    • Scheduled jobs must be explicit, listable, and disabled until the user intentionally enables them if Hermes distribution behavior does not auto-enable jobs.
    • Secrets must live in .env or provider-specific secret stores, never in committed config.
    • Keep claude-trading-skills canonical; this repo should orchestrate, not fork silently.
    • Output must include data freshness and source/skill provenance.
    • All user-facing trading content must include thesis, invalidation, risk considerations, and a clear human decision gate.

    Implementation phases

    Phase 0 — Verify Hermes capabilities

    1. Install or update Hermes in a test environment.
    2. Verify the exact CLI syntax for:
      • profile distribution install/update
      • bundles list/show/reload
      • cron create/list/run/pause/resume/remove
      • profile-scoped .env, config.yaml, and SOUL.md
    3. Run a minimal local profile from this skeleton.
    4. Document any changes required in docs/03-hermes-compatibility-notes.md.

    Exit criteria:

    • hermes profile install <local git repo> --alias works in a fresh test home.
    • trading-research-assistant chat loads SOUL.md.
    • At least one bundle appears in bundles list.

    Phase 1 — External-linked skill integration

    1. Use ${CLAUDE_TRADING_SKILLS_REPO}/skills as skills.external_dirs in config.yaml.
    2. Add validation that the path exists and contains skills-index.yaml in the parent repo.
    3. Ensure bundle skill names resolve against Hermes skill discovery.
    4. Add a clear degraded-mode message when the external repo is missing.

    Exit criteria:

    • python scripts/validate_package.py --profile-root . passes with CLAUDE_TRADING_SKILLS_REPO set.
    • Missing external skills are reported by bundle name and missing skill name.

    Phase 2 — Bundle generation from canonical workflows

    1. Parse skills-index.yaml.
    2. Parse workflows/*.yaml when present.
    3. Use data/skill-mapping.yaml to generate Hermes skill-bundles/*.yaml.
    4. Preserve manual bundle edits only if marked with x-generated: false; otherwise overwrite generated bundles.

    Exit criteria:

    • python scripts/sync_claude_trading_skills.py --source ... --mode external --write regenerates bundles deterministically.
    • Re-running the generator without changes produces no diff.

    Phase 3 — Cron presets

    1. Keep cron job enablement user-controlled.
    2. Use cron/create_cron_jobs.sh to create the default scheduled jobs.
    3. Default schedule timezone is America/Los_Angeles.
    4. Provide delivery targets via HERMES_CRON_DELIVER, defaulting to local for safest first run.
    5. Use prompts/*.md for long cron prompts instead of giant one-line shell strings.

    Exit criteria:

    • Script can create pre-market and after-close jobs in a clean profile.
    • cron list shows human-readable names.
    • cron run "Pre-market routine" produces a structured brief.

    Phase 4 — Safety and policy gates

    Implement these checks in prompts, SOUL.md, and tests:

    • Never output direct imperative buy/sell orders.
    • Always state whether the result is research, watchlist, risk posture, or journal output.
    • For candidates, require: ticker, setup, thesis, invalidation, risk notes, data freshness, next human action.
    • For missing API keys, output degraded-mode behavior and setup steps.
    • For brokerage-related skills, paper/read-only is the default.

    Exit criteria:

    • Tests cover safety phrases and required report sections.
    • Manual review of sample outputs passes docs/07-testing-acceptance-criteria.md.

    Phase 5 — Optional vendored mode

    Implement after external-linked mode is stable.

    1. Add --mode vendor to copy selected canonical skills into skills/vendor/ or skills/.
    2. Preserve upstream source metadata in vendor-manifest.json.
    3. Do not mutate vendored skills except via an explicit compatibility patch step.
    4. Add drift detection against upstream skills-index.yaml.

    Exit criteria:

    • Vendored install works without CLAUDE_TRADING_SKILLS_REPO.
    • Drift report shows added/removed/changed upstream skills.

    Phase 6 — Release and documentation

    1. Update distribution.yaml version.
    2. Tag release v0.1.0.
    3. Add install commands to README.
    4. Provide a Japanese README section if the public audience includes Japanese traders.
    5. Make release notes explicit about API key requirements and non-goals.

    Exit criteria:

    • Fresh install from GitHub works.
    • User can run /trading-research-orchestrator, /pre-market-routine, /after-close-review, and /trade-journal.

    Suggested first implementation ticket sequence

    1. TICKET-001: Make this skeleton a valid git repo and run validator.
    2. TICKET-002: Verify Hermes profile distribution install/update behavior.
    3. TICKET-003: Implement external skill discovery validation.
    4. TICKET-004: Generate bundles from data/skill-mapping.yaml.
    5. TICKET-005: Wire cron creation script and prompts.
    6. TICKET-006: Add safety/report-format tests.
    7. TICKET-007: Dogfood with one pre-market and one after-close run.
    8. TICKET-008: Add optional vendored mode.
    9. TICKET-009: Publish v0.1.0.

    Pull request requirements

    Every PR must include:

    • Summary of changed behavior.
    • Commands run.
    • Any Hermes CLI/version assumptions.
    • Whether external-linked mode and/or vendored mode was tested.
    • Screenshots or pasted output for at least one bundle invocation if UX changed.
    • No secrets in diff.

    Definition of done for MVP

    A clean machine can:

    1. Install Hermes.
    2. Clone claude-trading-skills.
    3. Install this profile distribution.
    4. Set model and optional market-data API keys.
    5. Run /pre-market-routine manually.
    6. Enable cron jobs via cron/create_cron_jobs.sh.
    7. Receive structured research briefs without knowing individual skill names.
  • hermes-trading-research-agent/CHANGELOG.mdmarkdown · 42.7 KB

    Changelog

    All notable changes to this project will be documented in this file.

    The format follows Keep a Changelog, and this project adheres to Semantic Versioning.

    [Unreleased]

    Added

    • TICKET-015 — Upstream status inspection. scripts/upstream_status.sh (new bash script, committed executable, no Python deps) + make upstream-status target give a working-tree-safe way to inspect the external-linked $CLAUDE_TRADING_SKILLS_REPO checkout before pulling. It resolves the upstream ref ($UPSTREAM_STATUS_REF remote-tracking override → branch @{u} → origin/HEAD → UNRESOLVED), git fetches remote metadata before computing ref-relative numbers, then reports branch / HEAD / resolved ref / remote URL (display only) / dirty files / commits ahead / incoming commits / incoming skills/ + workflows/ file changes (merge-base range) / a local-edit risk label (NONE / LOW / MEDIUM / HIGH). It never pulls, merges, rebases, stashes, or touches a skill file. Motivated by the structural conflation in external-linked mode: the single $CLAUDE_TRADING_SKILLS_REPO clone is at once the upstream mirror, the runtime skill source, and the place Hermes edits skills during troubleshooting, so a blind git pull can overwrite local / Hermes-made edits. A HIGH label means exactly that risk (dirty/untracked under skills/ or workflows/, local commits ahead, or detached HEAD).
    • tests/test_upstream_status.py (new): a presence/structure layer (env-independent — script exists + executable + bash shebang + fetches + four severity labels + honors $UPSTREAM_STATUS_REF + Makefile target + README reference) and a behavioral layer that runs the script against a self-contained temp git fixture (bare remote + clone built in tmp_path, no network, never touches the real checkout) asserting ref resolution, incoming range, detached HEAD → HIGH with incoming still rendered, no-tracking-upstream → ≥ MEDIUM never NONE, remote-removed → UNRESOLVED, override forms, severity classification, and the working-tree-unchanged guarantee. Behavioral layer skips cleanly when git is unavailable.

    Changed

    • data/skill-mapping.yaml: added trade-performance-coach to monthly-performance-review.skills (inserted before backtest-expert to follow the upstream optional_skills order). Picked up during TICKET-012 implementation — the v0.1.6 drift guard (tests/test_upstream_workflow_adapter.py::test_upstream_optional_skills_present_in_mapping) correctly flagged that upstream tradermonty/claude-trading-skills/workflows/monthly-performance-review.yaml had gained a new optional skill that the Hermes distribution-contract mapping had not yet adopted. This is exactly the post-release housekeeping the drift guard was built for.
    • skill-bundles/pre-market-routine.yaml instruction body (TICKET-013): added a mandatory two-line preamble rule that separates Session state: (calendar fact: normal session day / US market holiday / weekend / unknown) from Posture basis: (latest completed regular-session close used, labelled with one of three forms: based on fresh latest completed regular-session close, carried forward from <YYYY-MM-DD>, or pending fresh data / degraded). The two preamble lines must come before any Risk posture: / REDUCE_ONLY / exposure-ceiling statement so the operator reads state and basis before conclusion. Triggered by the v0.1.6 day-2 operational soak (2026-05-26 Tue, post-Memorial-Day) where the existing output rendered Risk posture: risk-off / REDUCE_ONLY ambiguously — the operator could not tell structural regime change from carry-forward across the 2026-05-25 holiday bridge. Also added a Source / Skill provenance sub-heading rule under section 8 (Data freshness and missing-data warnings) so skill-output attribution becomes a named sub-heading rather than embedded prose. x-generated: false unchanged.
    • prompts/pre-market-routine.md (TICKET-013): the same rule block is mirrored into the cron prompt body so the auto-fire path receives it. The cron auto-fire path is driven by prompts/pre-market-routine.md plus attached skills, so the prompt body must carry the rule even if the bundle instruction also does. Provenance sub-heading is anchored on section 7 in this file (the prompt body uses 7 sections vs the bundle instruction's 8-item required-sections list; both correctly reference their own section list).

    Documentation

    • Recorded v0.1.6 operational soak findings (TICKET-012). docs/03-hermes-compatibility-notes.md gains three subsections under Operational findings. (1) Profile install does not register cron presets — hermes profile install / update installs assets only; bash cron/create_cron_jobs.sh is what registers the 4 data/schedule-presets.yaml jobs. 2026-05-25 macOS profile PASS (pre-market-routine fired at 06:13:59 PDT); Linux profile MISS (script never run, cron list empty). (2) Cron tick latency — the Hermes gateway evaluates expressions on a tick/queue basis; an actual_fire_ts within 0–30 min of expected_fire_ts is a PASS. Observed value: 06:13:59 PDT against 0 6 * * 1-5 (~14 min). (3) Forbidden-phrase scan applies to the ## Response section — cron output files contain the prompt body above the response, and the prompt deliberately carries safety phrases ("do not place trades", "execution is out of scope") that produce false positives when grep'd against the whole file. Restrict the scan to ## Response. Observed 0 hits inside response, several in prompt echo on 2026-05-25.
    • README.md / README.ja.md: added a "Required step" callout above "Enabling scheduled jobs" so a fresh installer cannot miss that bash cron/create_cron_jobs.sh is what creates the cron jobs.
    • docs/08-release-playbook.md Operational soak inspect step (§3) updated: codified the 0–30 min PASS window for actual_fire_ts vs expected_fire_ts (with the macOS observation as the reference data point), and explicitly limited the forbidden-phrase scan to the ## Response section (prompt echo is bundle safety instruction, not model output).
    • docs/04-skill-integration-strategy.md (TICKET-013): new "Pre-market posture wording contract (TICKET-013)" section documents the two-line preamble (Session state: / Posture basis:), the three posture-basis labels (based on fresh latest completed regular-session close / carried forward from <YYYY-MM-DD> / pending fresh data / degraded), the non-mutual-exclusivity of the first two labels in the holiday-bridge case, the Source / Skill provenance sub-heading rule, the test contract (literal phrase pin in bundle + prompt; LLM output NOT regex-constrained), and the pre-market-only scope (TICKET-014 candidate covers horizontal rollout to /after-close-review, /market-regime-daily, /swing-opportunity-daily).
    • docs/09-coding-tickets.md (TICKET-013): new entry with rev2 final scope, file-by-file change list, Done conditions, and the deferred TICKET-014 horizontal-rollout candidate. Includes the v0.1.6 day-2 soak observation as the triggering context so the rationale is preserved.
    • tests/test_pre_market_session_state_rule.py (TICKET-013, new): 12 parametrize cases (6 phrases × 2 files: bundle + prompt). Lightweight literal-phrase existence check; LLM output is intentionally NOT regex-constrained at the contract layer so the assistant can adapt wording while staying inside the pinned contract. Env-independent (no CLAUDE_TRADING_SKILLS_REPO dependency), so the +12 delta lands in both with-upstream and without-upstream test runs.
    • TICKET-015 docs — docs/03-hermes-compatibility-notes.md gains an "Upstream status inspection (before pulling skills)" subsection (working-tree-safe contract + the before-pull vs after-pull relationship to the TICKET-004b drift guard). docs/04-skill-integration-strategy.md gains a "Three layers that watch upstream" table (drift guard / upstream-status / vendored mode). docs/09-coding-tickets.md gains the TICKET-015 entry plus a deferred TICKET-015b (read-only /upstream-status slash command). README.md / README.ja.md gain an "Inspecting upstream skill updates" section.
    • TICKET-008a — Vendored mode scope clarification (docs only). docs/04-skill-integration-strategy.md: replaced the 4-bullet "Vendoring rules" with a full "Vendored mode (TICKET-008)" section — the three-mode model (external-linked / vendored / patches-on-vendored), a per-mode "where do Hermes-edited skills live" breakdown, the expanded vendor-manifest.json field shape, and an explicit danger note that today's copy_vendor_skills() skeleton shutil.rmtrees vendored skills so make sync-vendor-write is destructive for hand-edits until TICKET-008b. docs/09-coding-tickets.md: TICKET-008 entry split into 008a (this docs scope) and 008b (deferred implementation surface: manifest schema, non-destructive re-vendor, patches pipeline, skills drift detection). Motivated by the realization that external-linked mode's single $CLAUDE_TRADING_SKILLS_REPO clone is simultaneously the upstream mirror, the runtime skill source, and the place Hermes edits skills during troubleshooting — so a naive auto-pull is destructive. No code change in 008a.

    [0.1.6] - 2026-05-24

    Trade ticket persistence + journal bridge (TICKET-010), upstream workflows read-only drift guard that closes Phase 2 (TICKET-004b / B-2b), and a small TICKET-010 polish locking in the journal_bridge.additionalProperties: false typo guard with a negative fixture. Bundle catalogue stays at 10; suite goes from 155 (v0.1.5) to 176 with CLAUDE_TRADING_SKILLS_REPO (162 → 176 net of the +14 B-2b cases + 1 polish case; 175 → 176 from the polish alone).

    Two main changes plus one polish:

    • TICKET-010 — Trade ticket persistence + journal bridge. Extends the v0.1.5 /trade-ticket primitive with an operator-confirmed save-path convention and an optional journal_bridge block for handing APPROVED tickets off to trader-memory-core. No execution, no silent disk write, no schema breaking change — journal_bridge is optional. Suite 155 → 162.
    • TICKET-004b / B-2b — Upstream workflows adapter (closes Phase 2). Adds a read-only drift guard for the 3 overlap workflows (market-regime-daily / swing-opportunity-daily / monthly-performance-review) without rewriting any bundle. sync() write path unchanged (all 3 overlap bundles are x-generated: false); the adapter declares upstream as canonical intent, mapping as the Hermes distribution contract, and tests as the mechanical guard. With CLAUDE_TRADING_SKILLS_REPO configured: 162 → 175 passing (further +1 to 176 from the TICKET-010 polish below). Without it: 162 passing, 14 skipped (13 new B-2b cases skip cleanly via a module-level fixture + 1 pre-existing B-2a determinism case tests/test_sync_determinism.py:363; the TICKET-010 polish fixture is schema-only and runs in both modes).
    • TICKET-010 polish — typo-guard negative fixture. Adds bad_journal_bridge_unknown_field.yaml to lock in the additionalProperties: false clause inside journal_bridge. Parametrize matrix 10 → 11; suite 175 → 176 (with CLAUDE_TRADING_SKILLS_REPO).

    Added

    • schemas/trade-ticket.schema.json: optional top-level journal_bridge object. target: const trader-memory-core (typo guard), action: enum [register_thesis, update_thesis, postmortem], optional thesis_status: enum [IDEA, ENTRY_READY, ACTIVE, CLOSED], optional notes: string minLength 1. additionalProperties: false inside journal_bridge rejects typos like thesis_statuz while leaving the top-level schema's additionalProperties stance unchanged. Top-level required unchanged; $id remains absent.
    • skill-bundles/trade-ticket.yaml instruction body: three new rule blocks. (1) Save-path hint — bundle ends every ticket with # Suggested save path: ${HERMES_TRADE_TICKET_DIR}/<ticket_id>.ticket.yaml (the .ticket.yaml suffix matches the new .gitignore safety net). (2) Journal-bridge handoff — recommended on APPROVED tickets, never required. (3) Silent-write prohibition in positive form: emits YAML only, persistence is operator-confirmed.
    • distribution.yaml:env_requires: HERMES_TRADE_TICKET_DIR (optional, default ${HOME}/trading-research/tickets) declared in the same form as HERMES_TRADING_TIMEZONE so the installer surfaces it.
    • .env.EXAMPLE: HERMES_TRADE_TICKET_DIR=${HOME}/trading-research/tickets block with a comment explaining that the .env parser returns the literal and consumers expand with os.path.expandvars + os.path.expanduser.
    • tests/fixtures/trade_tickets/approved_with_journal_bridge.yaml (positive) and bad_journal_bridge_invalid_action.yaml (negative). Fixture count 14 → 16.
    • tests/test_trade_ticket_schema.py: 5 new tests + 1 parametrize row. (1) test_journal_bridge_valid_fixture_accepts — positive fixture validates and the business invariant still holds. (2) bad_journal_bridge_invalid_action.yaml appended to the existing test_negative_fixture_fails_schema parametrize matrix (matrix 9 → 10). (3) test_env_expansion_yields_absolute_path — reads HERMES_TRADE_TICKET_DIR from .env.EXAMPLE, expands with os.path.expandvars + os.path.expanduser, asserts the result is absolute and no longer contains ${HOME}. (4) test_bundle_instruction_documents_save_path_hint — instruction body literally mentions HERMES_TRADE_TICKET_DIR, Suggested save path, <ticket_id>.ticket.yaml. (5) test_bundle_instruction_documents_journal_bridge_handoff — instruction literally mentions journal_bridge, trader-memory-core, register_thesis, update_thesis, postmortem. (6) test_bundle_instruction_states_silent_write_prohibited_in_positive_form — instruction literally mentions emits yaml only and operator-confirmed (case-insensitive); negation phrases are not grepped (the v0.1.5 positive-boundary discipline is preserved).
    • tests/test_package_structure.py::test_distribution_manifest_declares_hermes_trade_ticket_dir — same form as the existing HERMES_TRADING_TIMEZONE declaration test; asserts the env is declared optional with the canonical default literal.
    • scripts/sync_claude_trading_skills.py: 3 new public symbols for B-2b drift checks. (1) UPSTREAM_OVERLAP_SLUGS — frozenset of the 3 slugs adopted as same-name Hermes bundles. (2) UPSTREAM_IGNORED_WORKFLOW_SLUGS — frozenset of the 2 upstream slugs intentionally not adopted (core-portfolio-weekly is renamed to weekly-portfolio-review in Hermes with refined required_outputs; trade-memory-loop is driven by the operator via trader-memory-core directly). (3) load_upstream_workflow(source, slug) helper that returns the parsed yaml or None. The sync() write path is unchanged.
    • tests/test_upstream_workflow_adapter.py (new): 5 named drift tests, 13 parametrize cases. (1) test_upstream_workflow_file_exists × 3 — upstream workflows/<slug>.yaml exists for each overlap slug. (2) test_upstream_required_skills_subset_of_mapping_skills × 3 — upstream.required_skills ⊆ mapping.skills. (3) test_upstream_optional_skills_present_in_mapping × 3 — upstream.optional_skills ⊆ mapping.skills. (4) test_upstream_canonical_source_marker_in_mapping × 3 — mapping.canonical_source == "claude-trading-skills-workflow". (5) test_upstream_workflow_inventory_is_classified × 1 — every upstream workflows/*.yaml slug is in UPSTREAM_OVERLAP_SLUGS ∪ UPSTREAM_IGNORED_WORKFLOW_SLUGS; the two sets are disjoint (rev3 Low fold). Module-level skip when CLAUDE_TRADING_SKILLS_REPO is unset.

    Polish (TICKET-010 follow-up — typo-guard negative fixture)

    • tests/fixtures/trade_tickets/bad_journal_bridge_unknown_field.yaml (new): APPROVED ticket with journal_bridge.thesis_statuz (typo of thesis_status). Exercises the additionalProperties: false clause inside journal_bridge that TICKET-010 added — without that clause the fixture would have validated.
    • tests/test_trade_ticket_schema.py::test_negative_fixture_fails_schema parametrize matrix grows from 10 to 11 (the new fixture is appended as a row; no new standalone test). Fixture count 16 → 17. Suite total with CLAUDE_TRADING_SKILLS_REPO: 175 → 176.

    Changed

    • .gitignore: new tickets/ and *.ticket.yaml entries as a safety net for accidental in-repo ticket placement. The .ticket.yaml suffix matches the bundle's suggested basename <ticket_id>.ticket.yaml. reports/ was already ignored, so reports/trade_tickets/ is implicitly covered.
    • skill-bundles/trade-ticket.yaml: x-generated: false unchanged; existing 6-concept footer and positive boundary statements unchanged. The three new rule blocks are appended within the existing sections (after Mismatch handling and after the existing boundary paragraph).
    • Makefile: sync-external-write comment "nine SKIP lines" → "ten SKIP lines" (B-2b housekeeping; stale since TICKET-010 added /trade-ticket to the catalogue).

    Documentation

    • docs/04-skill-integration-strategy.md: new "Ticket persistence and journal bridge" subsection immediately after "Trade ticket primitive". Carries the lifecycle figure (DRAFT → REVIEW_READY → {APPROVED + optional journal_bridge → trader-memory-core, REJECTED, EXPIRED}), the three-role split for persistence (bundle / operator / trader-memory-core — no role silently writes on behalf of another), the HERMES_TRADE_TICKET_DIR expansion contract, the journal_bridge shape, and the out-of-scope list (no broker submission, no silent write, no in-repo ticket commit, no action↔thesis_status cross-check, no JOURNALED status, no APPROVED-required journal_bridge).
    • docs/04-skill-integration-strategy.md: rewrote "Current bundle-composition SoT" subsection from "(as of B-2a)" to "(as of B-2b)". Declares the SoT split (upstream = canonical intent, mapping = Hermes distribution contract, drift test = mechanical guard), the projection-vs-drift-check table (display_name / cadence are documented but not drift-checked — Hermes UX refinement is allowed), the "Not projected in v0.1.x" list (artifacts → required_outputs, steps, decision_gate, manual_review, when_to_run), and the "Upstream workflow inventory classification" table with reasons for the 2 ignored slugs.
    • docs/09-coding-tickets.md: new TICKET-010 — Trade ticket persistence + journal bridge entry with file-by-file change list, Done conditions, and deferred scope.
    • docs/09-coding-tickets.md: TICKET-004b — Upstream workflows adapter flipped from open to ✓ shipped in B-2b with the rev3 final scope (drift-check scope, documented-but-not-drift-checked list, not-projected list, files touched, Done conditions).
    • README.md / README.ja.md: /trade-ticket row Purpose extended with "Persistence is operator-confirmed (HERMES_TRADE_TICKET_DIR, suggested save basename <ticket_id>.ticket.yaml); optional journal_bridge block hands off APPROVED tickets to trader-memory-core."
    • AGENTS.md: Status table gains a TICKET-010 row and flips TICKET-004b to ✓ done; Phase 2 reads "✓ done (B-2a + B-2b shipped)"; suite count note updated from 155 → 162 (TICKET-010) → 175 (TICKET-004b drift cases under CLAUDE_TRADING_SKILLS_REPO).

    [0.1.5] - 2026-05-24

    Trade ticket primitive (B-3 / TICKET-009) + Operational soak procedure (D) + B-3 audit-field polish (timestamp pattern, reviewer minLength, format_checker). Bundle count goes from 9 to 10; suite from 127 to 155.

    Added

    • schemas/trade-ticket.schema.json (new, JSON Schema draft/2020-12): trade ticket primitive. Top-level required fields (ticket_id, created_at, status, approval, candidate, plan, risk, provenance); status enum exactly [DRAFT, REVIEW_READY, APPROVED, REJECTED, EXPIRED]; approval.required is {"const": true} at the base level so every ticket is approval-gated; allOf + if/then enforce per-status approval invariants; the APPROVED branch tightens plan.entry.value, plan.stop.value, risk.risk_per_trade_pct, approval.confirmed.entry, approval.confirmed.stop, approval.confirmed.risk_per_trade_pct to non-null number.
    • skill-bundles/trade-ticket.yaml (new, /trade-ticket slash command, x-generated: false): five operator verbs (new / review / APPROVE / REJECT / EXPIRE). APPROVE requires the reviewer to re-type confirmed.{ticker,direction,entry,stop,risk_per_trade_pct}; any mismatch demotes the ticket back to REVIEW_READY with each mismatched field listed. Positive boundary statements ("ticket output only", "execution is out of scope", "broker submission is out of scope") in the instruction body. Persistence is operator-owned (commit YAML elsewhere or hand to trader-memory-core).
    • data/skill-mapping.yaml: new trade-ticket workflow entry (cadence: manual, category: trade-planning).
    • tests/test_trade_ticket_schema.py (new, 22 cases — see Polish below for the +2): 3 structural (schema validity, status enum exact + order, approval.required const true), 4 positive fixtures (DRAFT, APPROVED, REJECTED, EXPIRED), 9 schema negative fixtures (missing approval, required: false, status/approved mismatch, missing confirmed, APPROVED with null entry/stop/risk, APPROVED with blank reviewer, invalid timestamp, REJECTED without reason, EXPIRED without decided_at), 1 business-invariant positive (_assert_confirmed_matches_ticket helper enforces equality between confirmed.* and candidate.* / plan.* / risk.*, plus non-null on APPROVED), 1 mismatch negative (schema-valid ticket whose confirmed.ticker ≠ candidate.ticker — caught by the invariant helper), 4 boundary / instruction contract (five status + five verbs, positive boundary phrases, confirmed.* re-type requirement, mismatch-handling documented).
    • 14 fixtures under tests/fixtures/trade_tickets/ (4 positive + 10 negative — see Polish below for the +2).

    Changed

    • skill-bundles/swing-opportunity-daily.yaml and skill-bundles/pre-market-routine.yaml: instruction bodies gain a paragraph pointing at /trade-ticket and requiring source_bundle + source_candidate_ref when escalating a candidate. Existing 6-concept footer unchanged; bundle count grows from 9 to 10.

    Documentation

    • docs/04-skill-integration-strategy.md: new "Trade ticket primitive (as of B-3 / TICKET-009)" subsection.
    • docs/09-coding-tickets.md: new TICKET-009 entry with Done conditions.
    • AGENTS.md: Status table gains a row for TICKET-009 / B-3 (done); closing line updated.
    • README.md / README.ja.md: bundle list 9 → 10, /trade-ticket row added with "never executes orders" / 「発注は一切しない」 note.
    • docs/08-release-playbook.md: new Operational soak (prod alias, real-time gateway) section codifying the post-v0.1.4 "D" work. Covers preconditions, gateway install/start, waiting for a real scheduled firing (no cron run shortcut), inspecting cron/output/<job_id>/<timestamp>.md, recording each firing in a local soak log (template included; intentionally not committed to this repo), promoting failure rows back into docs/03-hermes-compatibility-notes.md, and a soak-exit checklist. Run cadence: once per significant gateway / cron change rather than per release.

    Polish (B-3 follow-up — audit field validation)

    • schemas/trade-ticket.schema.json: approval.reviewer gains minLength: 1 so an APPROVED ticket can never carry a blank reviewer. created_at and approval.decided_at gain an explicit ISO-8601 pattern in addition to format: date-time, so a validator built without format_checker still rejects malformed timestamps.
    • tests/test_trade_ticket_schema.py: the canonical _validator() helper now builds the Draft202012Validator with format_checker=Draft202012Validator.FORMAT_CHECKER, so format: date-time is enforced for real (not just annotation). Defence in depth — schema carries both format and pattern; the validator honours both.
    • tests/fixtures/trade_tickets/bad_invalid_timestamp.yaml and bad_approved_blank_reviewer.yaml (new) — exercise the two new branches. Schema-negative parametrize matrix grows from 7 to 9; total trade-ticket explicit cases 20 → 22; suite total 153 → 155.

    [0.1.4] - 2026-05-24

    Generator ownership + determinism (B-2a / TICKET-004a). make sync-external-write is now a no-op against the shipped tip — x-generated: false (or missing) bundles are skipped with a stderr WARN, x-generated: true bundles are write-if-changed, and config.yaml is touched only when the env entry is actually missing. A new --force-overwrite flag (gated by the sync-external-write-force make target requiring REQUIRE_SYNC_WRITE=1 and REQUIRE_FORCE_OVERWRITE=1) is the only way to rewrite protected bundles.

    Added

    • tests/test_sync_determinism.py (new, 7 tests): locks in the B-2a generator-ownership contract — x-generated: false and missing-key bundles are skipped with stderr WARN, --force-overwrite is the only way to rewrite them, x-generated: true bundles use write-if-changed (no spurious mtime), update_external_config() is idempotent, and a real-repo second-run-noop test asserts the shipped tip is byte- and mtime-identical after two consecutive sync(write=True) calls (for both skill-bundles/*.yaml and config.yaml). Real-repo case skips when CLAUDE_TRADING_SKILLS_REPO is unset.
    • scripts/sync_claude_trading_skills.py: --force-overwrite CLI flag (escape hatch — reserved for the sync-external-write-force make target).
    • Makefile: sync-external-write-force target, double-gated by REQUIRE_SYNC_WRITE=1 and REQUIRE_FORCE_OVERWRITE=1; passes --force-overwrite and re-runs tests/test_output_safety.py + tests/test_required_sections.py after writing.

    Changed

    • scripts/sync_claude_trading_skills.py:sync() no longer overwrites existing skill-bundles/*.yaml unconditionally. For each preset, it inspects the on-disk bundle's x-generated: key: false → SKIP + WARN, missing key → SKIP + WARN (legacy unknown), true → write-if-changed (compare rendered bytes; skip the write entirely when identical so mtime is preserved). New mapping entries (file absent) still produce x-generated: true files automatically. --force-overwrite collapses every branch to "rewrite if content differs".
    • scripts/sync_claude_trading_skills.py:update_external_config() is now idempotent: short-circuit (no write) when ${CLAUDE_TRADING_SKILLS_REPO}/skills is already in skills.external_dirs[]. Returns True only on the rare write path. This closes the config.yaml-side hole in the determinism contract.
    • scripts/sync_claude_trading_skills.py:SyncResult carries counts for wrote / skipped_protected / skipped_legacy / skipped_unchanged / forced; main() prints a one-line summary on --write.
    • All nine shipped skill-bundles/*.yaml are retroactively annotated x-generated: false so the generator no longer owns them. They will not be touched by make sync-external-write against the shipped tip.
    • Makefile sync-external-write: behavior change — was "rewrite every bundle", now "skip protected + legacy bundles; only touch new or x-generated: true bundles whose rendered content differs". The REQUIRE_SYNC_WRITE=1 gate stays. Against the shipped tip the target is a no-op (nine SKIP lines, zero rewrites).

    Documentation

    • docs/04-skill-integration-strategy.md: new "Current bundle-composition SoT" subsection explains that data/skill-mapping.yaml is the authoritative source for bundle composition; upstream workflows/*.yaml is intentionally not adopted as a primary source yet (shape + coverage mismatch) and tracked as TICKET-004b / B-2b.
    • docs/09-coding-tickets.md: TICKET-004 split into TICKET-004a (done in this round) and TICKET-004b (upstream workflows adapter, open).
    • AGENTS.md: Status table Phase 2 entry updated — B-2a done, B-2b open, with file pointers. TICKET-004 row split into 004a (done) and 004b (open).

    Polish (B-2a follow-up)

    • scripts/sync_claude_trading_skills.py: SyncResult.config_written: bool surfaces whether update_external_config() actually wrote config.yaml. The CLI summary line on --write now ends ... config_written=0/1 so a future config.yaml edit shows up in the run output instead of being silently absorbed into wrote=0. New tests/test_sync_determinism.py::test_sync_result_reports_config_written_flag covers both branches.
    • Makefile sync-vendor-write: the WARNING block was still saying "overwrites bundles". After B-2a, bundle-side writes through sync() honor the x-generated: contract (protected / legacy bundles are skipped), so the warning now correctly says vendored skills + manifest are (re)written while bundle protection still applies. Functional behavior unchanged; comment-only fix until TICKET-008 revisits vendored mode.

    [0.1.3] - 2026-05-24

    Prompt timezone label envsubst ({{TIMEZONE}}) + verified Hermes v0.14.0 docs for bundles reload, MCP config location, and cron toolset restriction paths. No scheduler behavior change.

    Added

    • cron/create_cron_jobs.py: _resolve_report_timezone(), _read_env_file_value() (stdlib .env parser), _expand_prompt_template(). At cron-create time, the new {{TIMEZONE}} token in scheduled prompts is expanded using priority shell env HERMES_TRADING_TIMEZONE > <repo-root>/.env > data/schedule-presets.yaml:timezone > literal America/Los_Angeles (with a one-shot fallback WARNING). Reading .env directly is required because bash cron/create_cron_jobs.sh does not auto-source the profile .env.
    • tests/test_prompt_template.py (new, 11 tests): preset-derived {{TIMEZONE}} contract for the four schedule-bound prompts and zero-token assertion for the event-driven ones (earnings-movers-triage.md, trade-journal.md); subprocess matrix for default / shell-env-override / scheduler-warning-regression / token-leak; in-process unit tests for .env override, shell-wins-over-.env, monkeypatched ENV_FILE honored at call time, and direct _resolve_report_timezone unit. Total suite now 118 passing.
    • distribution.yaml:env_requires: declared HERMES_TRADING_TIMEZONE as optional (default America/Los_Angeles) with a description spelling out the priority stack and that it is a label-only override (not a scheduler input). tests/test_package_structure.py extended to assert the entry exists and required: false.

    Changed

    • Prompt files: prompts/pre-market-routine.md and prompts/after-close-review.md swap hard-coded America/Los_Angeles for {{TIMEZONE}}; prompts/weekly-portfolio-review.md and prompts/monthly-performance-review.md gain a Timezone label for the report: {{TIMEZONE}}. line. Event-driven prompts (earnings-movers-triage.md, trade-journal.md) intentionally unchanged.
    • cron/create_cron_jobs.py:build_command() now takes a report_timezone argument and expands {{TIMEZONE}} in the prompt body before handing it to Hermes. main() resolves the report timezone once per invocation.

    Documentation

    • cron/README.md: new "Report-label {{TIMEZONE}} expansion" subsection explaining the override priority and that it is separate from the scheduler comparison.
    • docs/03-hermes-compatibility-notes.md: extended the deception_hide subsection with the {{TIMEZONE}} vs ${TIMEZONE} convention rationale.
    • README.md / README.ja.md: cron-enablement section now mentions the {{TIMEZONE}} expansion + override priority + label-only scope.
    • docs/03-hermes-compatibility-notes.md: verify and document bundles reload, active MCP config location (config.yaml:mcp_servers), and cron toolset restriction paths (platform_toolsets.cron / per-job enabled_toolsets).
    • README.md / README.ja.md / docs/08-release-playbook.md: remove stale MCP-schema TODO wording and clarify that mcp.json remains empty while real MCP servers are configured through hermes mcp add ... / config.yaml:mcp_servers.

    [0.1.2] - 2026-05-23

    Cron timezone polish + post-v0.1.1 doc generalization. No profile-distribution behavior change for callers who keep the default schedule — only when a host is not in the preset timezone, the new runtime now emits a stderr WARNING (non-blocking).

    Added

    • cron/create_cron_jobs.py (new): YAML-driven runtime for cron job creation. Reads data/schedule-presets.yaml as the single source of truth (schedule, name, prompt_file, skills, timezone) instead of hard-coding them in the shell script. Supports --dry-run to preview Hermes CLI invocations without executing.
    • Host-TZ warning: the runtime resolves the host IANA timezone (TZ env, then /etc/localtime via readlink / resolve() + /zoneinfo/ split) and compares it to the preset timezone by IANA name. Emits a WARNING on stderr — but continues — when the names differ (so America/Phoenix is flagged against America/Los_Angeles even when offsets coincide), or when the host zone cannot be verified. HERMES_TRADING_TIMEZONE is intentionally not consulted: it remains a report-body label per the existing docs.
    • tests/test_schedule_drift.py (new): pytest suite that locks in the preset shape (4 jobs, required fields, prompt files exist, top-level timezone), the no-hard-code contract for the runtime script, the dry-run ordering, the host-TZ warning matrix (silent / offset-mismatch / same-offset-different-zone / unknown), and the documentation parity check for the "host OS local timezone" caveat.
    • data/schedule-presets.yaml: added a human-readable name: field per preset so it (not the shell script) is the source of the job name passed to Hermes via --name.

    Changed

    • cron/create_cron_jobs.sh: collapsed from ~73 lines of hard-coded schedules + --skill flags to a 6-line wrapper that execs the Python entry point. The documented bash cron/create_cron_jobs.sh invocation and HERMES_PROFILE_CMD / HERMES_CRON_DELIVER env var contract are preserved.
    • scripts/validate_package.py:validate_prompts_and_schedules: now also requires the top-level timezone: and a non-empty name/skills for each preset.
    • cron/README.md / docs/03-hermes-compatibility-notes.md / README.md / README.ja.md: documented the new source-of-truth model, the IANA-name TZ comparison (vs. offset-only), the runtime WARNING semantics, and the additional pyyaml runtime dependency added to the Quick Start install line alongside jsonschema. The "rewrite cron expressions for your host timezone" recipe and the no-hidden-cron-jobs non-goal now point at data/schedule-presets.yaml instead of the wrapper script.

    Fixed

    • pyproject.toml: sync project.version to 0.1.2 (kept in step with distribution.yaml:version, since pip install -e ".[dev]" is on the CI install path and a stale package version is otherwise visibly drift-prone).

    Documentation

    • README.md / README.ja.md: generalize the reproducible-install recipe from a hard-coded git checkout v0.1.0 to git checkout v0.1.2 # or any tag from \git tag -l``, with a link to the GitHub Releases page for the current latest.
    • PACKAGE_MANIFEST.md: drop the hard-coded "v0.1.0 MVP" framing; describe the repo as the Hermes Profile Distribution with initial MVP at v0.1.0 and current release tracked in GitHub Releases.
    • docs/MISSING_SKILLS.md: rephrase "The v0.1.0 release resolves..." as "The current release resolves..." so the doc does not need editing on each tag bump.

    [0.1.1] - 2026-05-20

    Post-release polish on top of v0.1.0. No profile-distribution behavior changes; this release is CI + docs + validator polish only.

    Added

    • .github/workflows/ci.yml: GitHub Actions CI that runs make validate, make validate-upstream (against a checked-out tradermonty/claude-trading-skills), and make test. Triggers: push to main, push of v* tags, pull requests (any branch), and manual workflow_dispatch. Uses actions/checkout@v6 and actions/setup-python@v6 (Node 24 runtime, no deprecation warnings).
    • docs/MISSING_SKILLS.md: empty template documenting the validator's degraded-mode-acceptance format. Current status notes that no skills are accepted-missing in v0.1.0.

    Fixed

    • pyproject.toml: explicitly set [tool.setuptools] packages = [] and py-modules = []. Without this, setuptools' automatic flat-layout discovery picks up top-level dirs like cron/, data/, skills/, schemas/, prompts/ and aborts pip install -e ".[dev]" with Multiple top-level packages discovered in a flat-layout. This broke the new GitHub Actions CI; verified locally via fresh venv (pip install -e ".[dev]" succeeds, 87 tests pass).

    Changed

    • PACKAGE_MANIFEST.md: rewritten as a pointer file — the original "coding-agent handoff scaffolding" framing was stale once the v0.1.0 MVP shipped.
    • README.md / README.ja.md: added a "Versioning and reproducible installs" section explaining that hermes profile install github.com/... tracks the default branch (no Git-ref pinning yet), with a clone + git checkout v0.1.0 + local install recipe for reproducible pinned installs.
    • README.md / README.ja.md: added an "MCP servers" section warning that mcp.example.json placeholders (finviz-mcp-server, etc.) are unverified.

    [0.1.0] - 2026-05-20

    Initial Hermes Profile Distribution MVP. Verified against Hermes Agent v0.14.0, including live-install dogfood (hermes profile install from GitHub → cron run + cron tick with output files generated for pre-market and after-close routines).

    Added

    • Hermes Profile Distribution manifest (distribution.yaml) targeting the trading-research-assistant alias.
    • SOUL.md enforcing research-and-process-assistant tone, no order-placement, no signal-service UX.
    • Nine slash-command bundles under skill-bundles/ mapping to the canonical workflows in tradermonty/claude-trading-skills: /pre-market-routine, /after-close-review, /market-regime-daily, /swing-opportunity-daily, /earnings-movers-triage, /portfolio-risk-check, /trade-journal, /weekly-portfolio-review, /monthly-performance-review.
    • Three profile-local adapter skills: trading-research-orchestrator, trading-cron-brief-writer, trading-risk-gate.
    • cron/create_cron_jobs.sh enabling 4 default routines (pre-market, after-close, weekly, monthly) with host-local-timezone semantics.
    • Cron prompts under prompts/ rewritten in positive form to pass Hermes' deception_hide threat scanner.
    • scripts/validate_package.py — distribution / bundle / prompt / JSON structural validator.
    • scripts/validate_upstream_index.py (new) — canonical skills-index.yaml integrity check with degraded-mode acceptance via docs/MISSING_SKILLS.md. Exit 0/2 semantics, --strict mode for CI.
    • scripts/sync_claude_trading_skills.py — external-mode bundle sync (dry-run by default; --write reserved for future generator-hardening work).
    • Makefile splits the upstream sync into safe (sync-external, dry-run) and dangerous (sync-external-write, gated by REQUIRE_SYNC_WRITE=1) targets, and adds validate-upstream / validate-all for release gating.
    • pytest suite (87 tests):
      • tests/test_package_structure.py — distribution name, bundle shape, SOUL safety language, prompt sections.
      • tests/test_output_safety.py — EN/JA forbidden phrase regex (buy at $, 指値で売れ, 利益確定, etc.).
      • tests/test_required_sections.py — every bundle instruction must cover data freshness, source provenance, thesis, invalidation, risk, and human decision gate.
      • tests/fixtures/sample_outputs/ — good and bad example outputs for negative-test sanity.
    • docs/ — architecture, implementation plan, Hermes v0.14.0 compatibility notes (with deception_hide workaround and HOME/PATH isolation guidance), workflow specs, security/risk controls, testing criteria, release playbook, coding tickets.

    Changed

    • sync_claude_trading_skills.py:build_instruction() updated to emit the same required-concepts checklist (data freshness, source provenance, thesis, invalidation, risk, human decision gate) that tests/test_required_sections.py enforces, phrased in positive form to keep regenerated bundles compatible with Hermes' deception_hide threat scanner.
    • dump_yaml() now preserves block-scalar (|) style for instruction: fields so bundles remain human-editable after regeneration.
    • All existing bundles re-saved with block-scalar formatting; remaining Do not ... clauses in bundle instructions rephrased to reference SOUL.md instead.
    • distribution.yaml:distribution_owned now includes .env.EXAMPLE, README.ja.md, and CHANGELOG.md so the Quick Start (which copies .env.EXAMPLE) works after profile install.

    Fixed

    • scripts/validate_package.py: trailing-slash-insensitive check for distribution_owned. Hermes' installed copy strips trailing slashes from skills/ / skill-bundles/ / cron/, so running the validator inside an installed profile no longer emits spurious WARNs.

    Documentation

    • README.md / README.ja.md: Quick Start now includes python3 -m pip install jsonschema so trader-memory-core (upstream skill that imports jsonschema directly) runs in full mode rather than degraded; also added provider-switch examples (openai-codex with model.base_url) and the note that dotted config keys (model.default, model.provider) work alongside the root-level forms.
    • README.md / README.ja.md / cron/README.md / docs/03 / docs/08: cron jobs register as active but do not fire automatically until the Hermes gateway is running; documented gateway install && gateway start (managed) and cron pause (manual-only) flows.
    • README.md / README.ja.md / docs/07 Test 5 / docs/08: the verified dogfood path is cron run <job_id> --accept-hooks followed by cron tick --accept-hooks, then inspect cron/output/<job_id>/<timestamp>.md. chat -q '/bundle-name' in v0.14.0 returns only a session_id and is not sufficient for end-to-end verification.
    • docs/03-hermes-compatibility-notes.md: captured the above as operational findings; recorded trader-memory-core jsonschema dependency.
    • docs/04-skill-integration-strategy.md: added jsonschema to the degraded-mode trigger table with install hint.
    • docs/08 pre-release checklist: explicit step for hermes profile update so installed users pick up doc fixes (e.g. corrected repo name) after publish.
    • docs/00-executive-brief.ja.md / docs/08-release-playbook.md / docs/10-user-facing-readme-draft.ja.md / PACKAGE_MANIFEST.md: corrected stale GitHub repo name to hermes-trading-research-agent-work-package.

    Notes

    • Hermes profile install uses --alias as a boolean (no value); the wrapper is written to $HOME/.local/bin/<name>, not to $HERMES_HOME. Isolated testing therefore requires HOME, HERMES_HOME, and PATH to all be temp-redirected; see docs/03-hermes-compatibility-notes.md.
    • model and provider are root-level config keys (hermes config set model claude-opus-4-7), not inference.*.
    • TICKET-004 is only partially implemented in this release: canonical index validation is shipped (validate_upstream_index.py), generator now respects the safety + required-concepts contract, but x-generated: false manual-edit protection and the "re-run produces no diff" determinism test remain open for a future release.
    • TICKET-008 (vendored mode) is out of scope for v0.1.0.
  • hermes-trading-research-agent/LICENSEtext · 1.0 KB
    MIT License
    
    Copyright (c) 2026 TradeMonty
    
    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:
    
    The above copyright notice and this permission notice shall be included in all
    copies or substantial portions of the Software.
    
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    SOFTWARE.
    
  • hermes-trading-research-agent/Makefiletext · 4.1 KB
    .PHONY: validate validate-upstream validate-all test sync-external sync-external-write sync-external-write-force sync-vendor sync-vendor-write upstream-status
    
    PYTHON ?= python3
    SYNC_SCRIPT := scripts/sync_claude_trading_skills.py
    UPSTREAM_VALIDATOR := scripts/validate_upstream_index.py
    
    # Structural validation only. No upstream repo required.
    validate:
    	$(PYTHON) scripts/validate_package.py --profile-root .
    
    # Canonical upstream index integrity check. Requires CLAUDE_TRADING_SKILLS_REPO.
    validate-upstream:
    	@test -n "$${CLAUDE_TRADING_SKILLS_REPO}" || \
    	  (echo "CLAUDE_TRADING_SKILLS_REPO is required for validate-upstream" >&2; exit 2)
    	$(PYTHON) $(UPSTREAM_VALIDATOR) --source "$${CLAUDE_TRADING_SKILLS_REPO}" --profile-root .
    
    # Full release-gate: structural + upstream + tests. Requires CLAUDE_TRADING_SKILLS_REPO.
    validate-all: validate validate-upstream test
    
    test:
    	$(PYTHON) -m pytest -q
    
    # Diagnostic dry-run. Safe by default — does not touch skill-bundles/*.yaml.
    sync-external:
    	$(PYTHON) $(SYNC_SCRIPT) --source "$${CLAUDE_TRADING_SKILLS_REPO}" --profile-root . --mode external
    
    # Safe writer (post-B-2a): only writes new bundles or `x-generated: true` bundles
    # whose rendered content actually differs from disk. Bundles marked
    # `x-generated: false` (or missing the key entirely) are SKIPPED with a stderr
    # WARNING. Against the shipped tip, this target is a no-op: ten SKIP lines and
    # zero rewrites. Use sync-external-write-force to bypass protection.
    sync-external-write:
    	@test -n "$${REQUIRE_SYNC_WRITE}" || \
    	  (echo "Refusing to run sync-external-write without REQUIRE_SYNC_WRITE=1" >&2; exit 2)
    	$(PYTHON) $(SYNC_SCRIPT) --source "$${CLAUDE_TRADING_SKILLS_REPO}" --profile-root . --mode external --write
    	@echo "Re-running safety + required-concepts tests in case anything was rewritten..."
    	$(PYTHON) -m pytest -q tests/test_output_safety.py tests/test_required_sections.py
    
    # DANGEROUS: --force-overwrite ignores `x-generated: false` and the missing-key
    # legacy guard. Every bundle the mapping references will be rewritten. Hand
    # edits will be lost. Double-gated to make a accidental run virtually impossible.
    sync-external-write-force:
    	@echo "WARNING: --force-overwrite ignores x-generated: false and bypasses legacy-unknown protection."
    	@echo "         All matching bundles will be rewritten and lose hand edits."
    	@test -n "$${REQUIRE_SYNC_WRITE}" || \
    	  (echo "Refusing to run sync-external-write-force without REQUIRE_SYNC_WRITE=1" >&2; exit 2)
    	@test -n "$${REQUIRE_FORCE_OVERWRITE}" || \
    	  (echo "Refusing to run sync-external-write-force without REQUIRE_FORCE_OVERWRITE=1" >&2; exit 2)
    	$(PYTHON) $(SYNC_SCRIPT) --source "$${CLAUDE_TRADING_SKILLS_REPO}" --profile-root . --mode external --write --force-overwrite
    	@echo "Re-running safety + required-concepts tests against regenerated bundles..."
    	$(PYTHON) -m pytest -q tests/test_output_safety.py tests/test_required_sections.py
    
    # Working-tree-safe inspection of the external-linked claude-trading-skills
    # checkout BEFORE you pull (TICKET-015). Fetches remote metadata only; never
    # pulls / merges / rebases / stashes or touches any skill file. Prints
    # incoming commits, incoming skills/ + workflows/ file changes, and a
    # local-edit risk label (NONE / LOW / MEDIUM / HIGH). Requires
    # CLAUDE_TRADING_SKILLS_REPO. No write gate — it does not mutate the tree.
    upstream-status:
    	@test -n "$${CLAUDE_TRADING_SKILLS_REPO}" || \
    	  (echo "CLAUDE_TRADING_SKILLS_REPO is required for upstream-status" >&2; exit 2)
    	./scripts/upstream_status.sh
    
    sync-vendor:
    	$(PYTHON) $(SYNC_SCRIPT) --source "$${CLAUDE_TRADING_SKILLS_REPO}" --profile-root . --mode vendor
    
    sync-vendor-write:
    	@echo "WARNING: --write copies upstream skills into skills/vendor/ and (re)writes vendor-manifest.json."
    	@echo "         Bundle-side writes still honor B-2a ownership: x-generated: false / legacy bundles are SKIPPED;"
    	@echo "         use sync-external-write-force (or pass --force-overwrite) to bypass bundle protection."
    	@test -n "$${REQUIRE_SYNC_WRITE}" || \
    	  (echo "Refusing to run sync-vendor-write without REQUIRE_SYNC_WRITE=1" >&2; exit 2)
    	$(PYTHON) $(SYNC_SCRIPT) --source "$${CLAUDE_TRADING_SKILLS_REPO}" --profile-root . --mode vendor --write
    
  • hermes-trading-research-agent/PACKAGE_MANIFEST.mdmarkdown · 1.0 KB

    Package Manifest

    This repository started life as a coding-agent handoff package and is now published as the Hermes Profile Distribution for trading-research-assistant (initial MVP: v0.1.0, current release: see GitHub Releases below).

    For current installation, validation, and operational status, see:

    • README.md / README.ja.md — Quick Start, prerequisites, bundle list.
    • CHANGELOG.md — version history.
    • docs/03-hermes-compatibility-notes.md — Hermes v0.14.0 verification results and operational findings (gateway, threat-scanner, jsonschema, timezone).
    • docs/07-testing-acceptance-criteria.md — automated tests + manual smoke-test recipes.
    • docs/08-release-playbook.md — pre-release checklist and post-release isolated-HOME acceptance test.
    • GitHub Releases: https://github.com/tradermonty/hermes-trading-research-agent-work-package/releases

    The original "scaffolding for a coding agent" framing remains available in earlier commits via git log / git show for historical context.

  • hermes-trading-research-agent/README.ja.mdmarkdown · 15.9 KB

    Hermes Trading Research Agent (日本語版)

    Hermes Agent上で動作する、米国株個人投資家向けのリサーチ・プロセス支援アシスタントです。tradermonty/claude-trading-skills のスキル群を、寄り付き前チェック / 引け後レビュー / 決算銘柄トリアージ / トレード記録などのプリセット (スラッシュコマンド) として呼び出せるようにします。

    ランディングページ: https://tradermonty.github.io/hermes-trading-research-agent-work-package/

    English version: README.md

    これは自動売買システムではありません。 リサーチ・記録・リスクレビューの支援ツールであり、最終的な売買判断は常に人間 (利用者) が行います。注文発注も、シグナル配信も、隠しジョブもありません。

    • Hermes alias: trading-research-assistant
    • 動作確認済み Hermes バージョン: v0.14.0 (2026.5.16)
    • デフォルトスケジュール timezone: America/Los_Angeles (タイムゾーンの扱い 参照)

    クイックスタート (5分)

    最短手順: Hermesに導入を依頼する

    Hermesにセットアップ用のターミナル操作を任せてよい場合は、まずHermes Agentをインストールしてから、Hermes本人にこのprofileの導入を依頼できます。

    curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
    hermes setup
    hermes
    

    Hermesチャットに以下を貼り付けてください:

    以下のHermes Trading Research Agent profileを導入してください。
    https://github.com/tradermonty/hermes-trading-research-agent-work-package
    
    上流スキルリポジトリはこちらです。
    https://github.com/tradermonty/claude-trading-skills
    
    aliasは trading-research-assistant にしてください。
    ブローカー連携はpaper/read-only前提のままにしてください。
    導入後、/pre-market-routine の実行方法も教えてください。
    

    手動手順

    # 1. このリポジトリと上流のスキルリポジトリを clone
    git clone <this-repo-url> hermes-trading-research-agent
    git clone https://github.com/tradermonty/claude-trading-skills.git
    cd hermes-trading-research-agent
    
    # 2. 上流スキルの場所を指定
    export CLAUDE_TRADING_SKILLS_REPO="$(realpath ../claude-trading-skills)"
    
    # 3. スケルトン検証
    make validate
    make test    # 87 tests pass
    
    # 4. 全 skill 参照が上流に存在するか確認
    python3 scripts/validate_upstream_index.py \
      --source "$CLAUDE_TRADING_SKILLS_REPO" --profile-root .
    
    # 5. profile install (or GitHub から直接)
    hermes profile install "$(pwd)" --name trading-research-assistant --alias -y
    # あるいは:
    #   hermes profile install github.com/tradermonty/hermes-trading-research-agent-work-package \
    #     --name trading-research-assistant --alias -y
    
    # model/provider 設定 (Hermes setup に合わせる)
    trading-research-assistant config set model    claude-opus-4-7
    trading-research-assistant config set provider anthropic
    # 他 provider 例:
    #   trading-research-assistant config set provider     openai-codex
    #   trading-research-assistant config set model        gpt-5.5
    #   trading-research-assistant config set model.base_url https://chatgpt.com/backend-api/codex
    # (dotted key `model.default` / `model.provider` でも動作)
    
    # 6. APIキーを設定
    cp ~/.hermes/profiles/trading-research-assistant/.env.EXAMPLE \
       ~/.hermes/profiles/trading-research-assistant/.env
    # .env をエディタで開き、必要なキーを記入
    
    # 6b. 一部 skill / script が直接 import する Python deps をインストール
    #     - trader-memory-core (上流) は jsonschema を import
    #     - cron/create_cron_jobs.py は schedule preset 読み込みで pyyaml を import
    python3 -m pip install jsonschema pyyaml
    # (または: uv pip install jsonschema pyyaml)
    
    # 7. 起動
    trading-research-assistant chat
    # チャットセッション内で:
    #   /pre-market-routine
    #   /after-close-review
    #   /trade-journal
    

    前提条件

    必要なもの備考
    Hermes Agent CLI v0.12.0以上 (v0.14.0 で動作確認済み)https://hermes-agent.nousresearch.com/
    Python 3.11 以上検証スクリプト・テスト用
    tradermonty/claude-trading-skills を local に cloneexternal-linked mode で CLAUDE_TRADING_SKILLS_REPO から参照

    APIキー

    全てのキーは install 時点では 任意 です (distribution.yaml で required: false)。キーが無い場合、該当する skill は degraded mode で動作し、出力にその旨が記載されます。

    • 推奨 (無いと一部 skill が degraded mode に):
      • FMP_API_KEY — Financial Modeling Prep。決算・経済指標・財務・OHLCV を扱うスキルで使用。
      • FINVIZ_API_KEY — FINVIZ Elite。スクリーナー系スキルで使用。
    • いずれか1つ必要 (chat / cron の LLM 呼び出し用):
      • ANTHROPIC_API_KEY / OPENAI_API_KEY / OPENROUTER_API_KEY (config set provider で指定した値と一致させる)。
    • 任意:
      • ALPACA_API_KEY / ALPACA_SECRET_KEY — デフォルトで paper / read-only (ALPACA_PAPER=true)。

    スラッシュコマンド (10個)

    スラッシュコマンドデフォルト cron用途
    /pre-market-routine平日 06:00 PTマクロカレンダー、相場環境、決算銘柄、ブレッド、ウォッチリスト候補、リスクゲート
    /after-close-review平日 13:15 PT今日の変化、セクターローテ、保有銘柄レビュー、ジャーナル素材、明日の準備
    /market-regime-daily手動 / 随時15分の相場環境チェック (ブレッド、上昇銘柄比率、エクスポージャー上限)
    /swing-opportunity-dailyリスクゲート許可時のみ手動規律あるスイング候補発掘 (仮説 / 否定条件 / ポジションサイズ前提)
    /earnings-movers-triageイベント駆動決算ギャップ銘柄と PEAD 候補の分類
    /portfolio-risk-check手動エクスポージャー、集中度、ポートフォリオヒート、保有仮説の有効性
    /trade-journal手動トレードメモを仮説 / 否定条件 / リスク記録付きの構造化ジャーナルへ
    /trade-ticket手動候補を JSON-Schema 検証付きの trade ticket として記録、明示的な human approval gate (DRAFT / REVIEW_READY / APPROVED / REJECTED / EXPIRED) を伴う。ticket 出力のみで 発注は一切しない。保存は operator-confirmed (HERMES_TRADE_TICKET_DIR、推奨 basename <ticket_id>.ticket.yaml)、optional な journal_bridge block で APPROVED ticket を trader-memory-core に handoff。schemas/trade-ticket.schema.json と docs/04-skill-integration-strategy.md の "Trade ticket primitive" / "Ticket persistence and journal bridge" 節を参照
    /weekly-portfolio-review土曜 09:00 PT長期保有・配当・アロケーションドリフト・要レビュー銘柄
    /monthly-performance-review月初 09:00 PTプロセスレビュー、シグナル postmortem、来月の運用ルール

    すべての bundle の instruction は データ鮮度 / 出典 (どの skill / data source か) / 仮説 / 否定条件 / リスク考察 / 人間の最終判断ゲート を出力に含めることを強制します (tests/test_required_sections.py)。


    cron ジョブの有効化

    必須手順: hermes profile install / hermes profile update だけでは 4 つの cron job は作成されません。下の bash cron/create_cron_jobs.sh が登録処理です。これを省略すると profile は install されても scheduled job は一切発火しません。 v0.1.6 での観測は docs/03-hermes-compatibility-notes.md → Profile install does not register cron presets を参照。

    export HERMES_PROFILE_CMD=trading-research-assistant
    export HERMES_CRON_DELIVER=local   # または telegram / discord / slack / origin
    bash cron/create_cron_jobs.sh
    trading-research-assistant cron list
    

    data/schedule-presets.yaml が4つの cron job の 単一の source of truth です (schedule + name + skills + prompt file + 期待 timezone)。シェルスクリプトは cron/create_cron_jobs.py の thin wrapper で、YAML を読んで preset 順に cron create を発行し、host の IANA timezone が preset と異なる場合は stderr に WARNING を出力します (IANA 名比較のため、UTC offset が一致しても America/Phoenix vs America/Los_Angeles のような mismatch は検出されます)。cron/create_cron_jobs.py --dry-run で実行せずに発行コマンドを確認可能。

    スケジュール対象 prompt には {{TIMEZONE}} テンプレートが含まれていて、cron-create 時に runtime が展開します。優先度は HERMES_TRADING_TIMEZONE shell env → profile .env → preset YAML timezone → リテラル America/Los_Angeles。これはラベル専用の override であり、cron 発火時刻は動きません。完全な priority stack は cron/README.md を参照。

    cron ジョブは active として登録されますが、Hermes gateway が起動していないと自動発火しません。cron list で4ジョブ確認後にどちらかを選択:

    # A) 常駐サービスとして起動 (本番運用向け推奨)
    trading-research-assistant gateway install
    trading-research-assistant gateway start
    
    # B) 手動実行のみ (auto-fire させず、cron run で個別実行)
    for jid in $(trading-research-assistant cron list | awk '/^  [a-f0-9]{12}/ {print $1}'); do
      trading-research-assistant cron pause "$jid"
    done
    

    スケジュール待ちせずジョブをドッグフードする:

    # v0.14.0 では `chat -q '/pre-market-routine'` は session_id しか返さないため
    # 実出力確認には cron run + cron tick を使う:
    trading-research-assistant cron run <pre_market_job_id> --accept-hooks
    trading-research-assistant cron tick --accept-hooks
    ls ~/.hermes/profiles/trading-research-assistant/cron/output/<pre_market_job_id>/
    

    タイムゾーンの扱い (重要)

    Hermes v0.14.0 の cron create には --tz フラグが存在しません。cron expression は 実行ホストのローカル timezone で解釈されます。HERMES_TRADING_TIMEZONE 環境変数はレポート本文用のラベルで、cron の発火時刻には影響しません。

    デフォルトスケジュール (PT 想定) を意図通り発火させるには:

    • ホスト OS の timezone を America/Los_Angeles に揃える、または
    • data/schedule-presets.yaml の cron expression をホスト timezone に再計算する (runtime が直接読み込むため、スクリプトの編集は不要)

    詳細は cron/README.md と docs/03-hermes-compatibility-notes.md。


    上流スキル更新の確認

    スキルはローカルの claude-trading-skills checkout ($CLAUDE_TRADING_SKILLS_REPO) から読み込まれます。上流が新しい release を出したら、その checkout を git pull で更新します。ただし同じ clone は、セッション中に Hermes へスキル修正を依頼した ときに Hermes がスキルを編集する場所でもあるため、無条件に pull するとローカル 修正を上書きしてしまう恐れがあります。pull する前に、何が入ってくるか・リスクの あるローカル修正がないかを確認してください:

    make upstream-status
    

    remote metadata のみを取得し、現在の branch、解決された upstream ref、dirty な ファイル、incoming commits、skills/ と workflows/ の incoming 変更、そして ローカル修正リスクのラベル (NONE / LOW / MEDIUM / HIGH) を表示します。 working tree は変更しません。pull / merge / rebase / stash は一切行わず、 スキルファイルにも触れません。pull が もたらすはずのもの と、pull して安全かを 教えるだけです。HIGH は skills/ または workflows/ 配下にローカル修正 (Hermes が直したスキルを含む可能性) があり、pull で上書きされ得ることを意味します。 まずそれらを確認してください。これは pull 後の CI drift guard (make test) を 補完します。両者の関係と、長期的な ownership の答えである vendored mode については docs/04-skill-integration-strategy.md を参照してください。


    バージョニングと再現可能なインストール

    Hermes Profile Distribution の install (hermes profile install github.com/<owner>/<repo>) は現状、リポジトリの default branch を追跡する仕様で、特定タグの pinning には対応していません。GitHub Releases は changelog 用で、最新版は https://github.com/tradermonty/hermes-trading-research-agent-work-package/releases を参照してください。github.com/...#<tag> のような ref 指定はまだ Hermes installer には未実装です。

    特定の release を再現可能な形で install したい場合は、ローカル clone → tag checkout → ディレクトリから install してください:

    git clone https://github.com/tradermonty/hermes-trading-research-agent-work-package.git
    cd hermes-trading-research-agent-work-package
    git checkout v0.1.6   # または `git tag -l` で得られる任意の tag
    hermes profile install "$(pwd)" --name trading-research-assistant --alias -y
    

    Hermes 側で Git-ref pinning が追加されたら、このセクションは GitHub ref 直指定の形に置き換えます。

    MCP サーバ

    mcp.json はデフォルトで 空 です。将来の Hermes が active MCP config source として明文化するまでは空のままにしてください。Hermes v0.14.0 で確認済みの MCP CLI 経路は hermes mcp add ... で、profile の config.yaml に mcp_servers: として保存されます。例示用の mcp.example.json は placeholder/reference のみで、パッケージ名 / 実行コマンド / 権限はすべて、実際に使う MCP server に対して確認が必要です。

    推奨: mcp.json は空のまま、実サーバは hermes mcp add ... または明示的な config.yaml:mcp_servers で追加し、cron から見える tool surface を絞る場合は hermes tools enable/disable --platform cron ... を使ってください。

    できないこと

    • 自動発注は一切しません。
    • 利益保証はしません。
    • シグナル配信サービスではありません。
    • ユーザーが明示的に paper / read-only Alpaca キーを設定する以外、live ブローカー資格情報を扱いません。
    • 隠し cron ジョブはありません。すべて data/schedule-presets.yaml に明記され、cron/create_cron_jobs.sh (cron/create_cron_jobs.py の thin wrapper) を明示的に実行した時のみ作成されます。

    重要な受け入れ基準

    新規ユーザーが profile install と .env 設定だけ済ませて以下を実行できれば成功です:

    /pre-market-routine
    

    アシスタントは、ユーザーが個別 skill を覚えなくても、必要な Claude Trading Skills を組み合わせて構造化されたリサーチブリーフを出力します。すべての出力セクションは明示的な「人間の最終判断ゲート」で締めくくられます。


    詳細ドキュメント

    • docs/01-architecture.md — システム構成と責任分担
    • docs/03-hermes-compatibility-notes.md — Hermes v0.14.0 検証結果 (threat scanner deception_hide 回避、timezone 仕様)
    • docs/04-skill-integration-strategy.md — degraded mode 規則、bundle 命名
    • docs/07-testing-acceptance-criteria.md — 各テスト層が保証する内容
    • docs/08-release-playbook.md — リリース前チェックリスト
    • CHANGELOG.md — バージョン履歴
    • README.md — English version
  • hermes-trading-research-agent/README.mdmarkdown · 16.1 KB

    Hermes Trading Research Agent

    A Hermes Profile Distribution that turns tradermonty/claude-trading-skills into an always-on research and process-support assistant for a human US-equity trader.

    Landing page: https://tradermonty.github.io/hermes-trading-research-agent-work-package/

    日本語版: README.ja.md

    This is not an automated trading system. It is a research, journaling, and risk-review assistant. The human reviewer makes all entry and exit decisions. There is no order placement, no signal service, and no hidden scheduled jobs.

    • Target Hermes alias: trading-research-assistant
    • Hermes version verified: v0.14.0 (2026.5.16)
    • Default schedule timezone: America/Los_Angeles (see Timezone semantics)

    Quick Start (5 minutes)

    Easiest path: ask Hermes to install it

    If you already trust Hermes to run terminal commands for setup, install Hermes first and then let the agent do the repository work:

    curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
    hermes setup
    hermes
    

    Paste this into the Hermes chat:

    Please install the Hermes Trading Research Agent profile from
    https://github.com/tradermonty/hermes-trading-research-agent-work-package
    using the upstream skills repo
    https://github.com/tradermonty/claude-trading-skills
    
    Use the alias trading-research-assistant, keep brokerage access paper/read-only,
    and show me how to run /pre-market-routine when installation is complete.
    

    Manual path

    # 1. Clone this repo and the upstream skills repo.
    git clone <this-repo-url> hermes-trading-research-agent
    git clone https://github.com/tradermonty/claude-trading-skills.git
    cd hermes-trading-research-agent
    
    # 2. Tell this profile where the upstream skills live.
    export CLAUDE_TRADING_SKILLS_REPO="$(realpath ../claude-trading-skills)"
    
    # 3. Validate skeleton (Phase 1 of the implementation plan).
    make validate          # python3 scripts/validate_package.py
    make test              # 87 tests pass
    
    # 4. Validate that every referenced skill exists upstream.
    python3 scripts/validate_upstream_index.py \
      --source "$CLAUDE_TRADING_SKILLS_REPO" --profile-root .
    
    # 5. Install the profile (or install from GitHub directly).
    hermes profile install "$(pwd)" --name trading-research-assistant --alias -y
    # Or:
    #   hermes profile install github.com/tradermonty/hermes-trading-research-agent-work-package \
    #     --name trading-research-assistant --alias -y
    
    # Configure model + provider. Pick whichever your Hermes setup supports:
    trading-research-assistant config set model    claude-opus-4-7
    trading-research-assistant config set provider anthropic
    # Examples for other providers:
    #   trading-research-assistant config set provider     openai-codex
    #   trading-research-assistant config set model        gpt-5.5
    #   trading-research-assistant config set model.base_url https://chatgpt.com/backend-api/codex
    # (Dotted keys like `model.default` / `model.provider` also work.)
    
    # 6. Configure API keys (copy and edit).
    cp ~/.hermes/profiles/trading-research-assistant/.env.EXAMPLE \
       ~/.hermes/profiles/trading-research-assistant/.env
    # (open the .env in your editor and fill in keys)
    
    # 6b. Install runtime Python deps that some skills / scripts import directly.
    #     - `trader-memory-core` (upstream) imports `jsonschema`.
    #     - `cron/create_cron_jobs.py` imports `pyyaml` to read schedule presets.
    python3 -m pip install jsonschema pyyaml
    # (or: uv pip install jsonschema pyyaml)
    
    # 7. Use it.
    trading-research-assistant chat
    # Then in the chat session:
    #   /pre-market-routine
    #   /after-close-review
    #   /trade-journal
    

    Prerequisites

    RequirementNotes
    Hermes Agent CLI v0.12.0+ (verified on v0.14.0)https://hermes-agent.nousresearch.com/
    Python 3.11+For validators and tests.
    tradermonty/claude-trading-skills repo, cloned locallyExternal-linked mode references it via CLAUDE_TRADING_SKILLS_REPO.

    API keys

    Every key is optional at install time (distribution.yaml marks them required: false). If a key is missing, the relevant skill enters degraded mode and the output marks the affected section.

    • Recommended — without these, several skill outputs are degraded:
      • FMP_API_KEY — Financial Modeling Prep. Powers earnings / economics / fundamentals / OHLCV-backed skills.
      • FINVIZ_API_KEY — FINVIZ Elite. Powers screener skills.
    • One of these is needed for the chat / cron LLM calls themselves:
      • ANTHROPIC_API_KEY, OPENAI_API_KEY, or OPENROUTER_API_KEY (matched with provider setting above).
    • Optional:
      • ALPACA_API_KEY / ALPACA_SECRET_KEY — paper / read-only by default (ALPACA_PAPER=true).

    Slash command bundles

    Slash commandDefault cronPurpose
    /pre-market-routineWeekdays 06:00 PTMacro calendar, market regime, earnings movers, breadth, watchlist candidates, risk gate.
    /after-close-reviewWeekdays 13:15 PTWhat changed, sector rotation, open-trade review, journal prompts, tomorrow prep.
    /market-regime-dailyManual / on-demand15-minute regime check: breadth, uptrend participation, exposure ceiling.
    /swing-opportunity-dailyManual when risk gate allowsDisciplined swing candidates: thesis, invalidation, position-sizing assumptions.
    /earnings-movers-triageEvent-drivenClassifies gap-up / gap-down earnings names and PEAD candidates.
    /portfolio-risk-checkManualExposure, concentration, portfolio heat, open-thesis validity.
    /trade-journalManualStructures trade notes into journal entries with thesis / invalidation / risk record.
    /trade-ticketManualCaptures a candidate as a JSON-Schema-validated trade ticket with an explicit human approval gate (DRAFT / REVIEW_READY / APPROVED / REJECTED / EXPIRED). Ticket output only — never executes orders. Persistence is operator-confirmed (HERMES_TRADE_TICKET_DIR, suggested save basename <ticket_id>.ticket.yaml); optional journal_bridge block hands off APPROVED tickets to trader-memory-core. See schemas/trade-ticket.schema.json and docs/04-skill-integration-strategy.md "Trade ticket primitive" / "Ticket persistence and journal bridge".
    /weekly-portfolio-reviewSaturday 09:00 PTLong-term holdings, dividends, allocation drift, forced-review triggers.
    /monthly-performance-reviewFirst of month 09:00 PTProcess review, signal postmortem, next-month operating rules.

    Each bundle's instruction enforces that the output include data freshness, source provenance, thesis, invalidation, risk considerations, and a human decision gate. See tests/test_required_sections.py.


    Enabling scheduled jobs

    Required step. hermes profile install / hermes profile update does not create the four cron jobs. bash cron/create_cron_jobs.sh below is what registers them. If you skip it, the profile is installed but no scheduled jobs will fire. See docs/03-hermes-compatibility-notes.md → Profile install does not register cron presets for the v0.1.6 observation.

    export HERMES_PROFILE_CMD=trading-research-assistant
    export HERMES_CRON_DELIVER=local   # or telegram / discord / slack / origin
    bash cron/create_cron_jobs.sh
    trading-research-assistant cron list
    

    data/schedule-presets.yaml is the single source of truth for the four cron jobs (schedule + name + skills + prompt file + expected timezone). The shell script is a thin wrapper around cron/create_cron_jobs.py, which reads the YAML, runs each cron create invocation in preset order, and emits a WARNING on stderr when the host's IANA timezone differs from the preset (IANA-name comparison, not just UTC offset — so e.g. America/Phoenix is flagged against America/Los_Angeles even when offsets coincide). Pass --dry-run to cron/create_cron_jobs.py to preview the commands without executing.

    Scheduled prompts also contain a {{TIMEZONE}} template token; the runtime expands it at cron-create time using HERMES_TRADING_TIMEZONE from the shell env, then the profile .env, then the preset YAML timezone, then literal America/Los_Angeles. This is a label-only override — it does not move the cron schedule. See cron/README.md for the full priority stack.

    Cron jobs register as active but do not fire automatically until the Hermes gateway is running. After cron list shows the four jobs, choose:

    # Managed background service (recommended for prod use):
    trading-research-assistant gateway install
    trading-research-assistant gateway start
    
    # Manual-only mode (no auto-fire, run each job by hand):
    for jid in $(trading-research-assistant cron list | awk '/^  [a-f0-9]{12}/ {print $1}'); do
      trading-research-assistant cron pause "$jid"
    done
    

    To verify a job end-to-end without waiting for the schedule:

    # `chat -q '/pre-market-routine'` only returns a session_id in v0.14.0,
    # so use cron run + cron tick for dogfood instead:
    trading-research-assistant cron run <pre_market_job_id> --accept-hooks
    trading-research-assistant cron tick --accept-hooks
    ls ~/.hermes/profiles/trading-research-assistant/cron/output/<pre_market_job_id>/
    

    Timezone semantics (IMPORTANT)

    Hermes v0.14.0 has no --tz flag on cron create. Cron expressions are interpreted in the host OS local timezone. The HERMES_TRADING_TIMEZONE env var is a report-body label only — it does not affect when cron fires.

    To run the default schedules at America/Los_Angeles local times, either:

    • set the host OS timezone to America/Los_Angeles, or
    • recompute each cron expression in data/schedule-presets.yaml for your host timezone (the runtime reads it directly; no script edit is needed).

    See cron/README.md and docs/03-hermes-compatibility-notes.md.


    Inspecting upstream skill updates

    The skills come from your local claude-trading-skills checkout ($CLAUDE_TRADING_SKILLS_REPO). When upstream ships new releases you update that checkout with a plain git pull — but that same clone is also where Hermes edits skills when you ask it to fix one during a session, so pulling blindly can clobber local edits. Before you pull, inspect what is incoming and whether you have local edits at risk:

    make upstream-status
    

    It fetches remote metadata only and prints the current branch, the resolved upstream ref, your dirty files, incoming commits, the incoming skills/ and workflows/ file changes, and a local-edit risk label (NONE / LOW / MEDIUM / HIGH). It is working-tree safe: it never pulls, merges, rebases, stashes, or touches a skill file — it only tells you what a pull would bring and whether it is safe to run. A HIGH label means you have local edits under skills/ or workflows/ (possibly Hermes-made fixes) that a pull could overwrite; review them first. This complements the post-pull CI drift guard (make test); see docs/04-skill-integration-strategy.md for the relationship and for vendored mode, the longer-term ownership answer.


    Versioning and reproducible installs

    Hermes Profile Distribution install (hermes profile install github.com/<owner>/<repo>) currently tracks the repository's default branch, not a specific tag. GitHub Releases exist for changelog and reference (latest: see https://github.com/tradermonty/hermes-trading-research-agent-work-package/releases), but github.com/...#<tag> ref pinning is not (yet) supported by Hermes' installer.

    For a reproducible install of a specific release — pinned, no surprise updates — clone locally, check out the tag, and install from the directory:

    git clone https://github.com/tradermonty/hermes-trading-research-agent-work-package.git
    cd hermes-trading-research-agent-work-package
    git checkout v0.1.6   # or any tag from `git tag -l`
    hermes profile install "$(pwd)" --name trading-research-assistant --alias -y
    

    When Hermes adds Git-ref pinning to its installer, this section will be replaced with the direct GitHub-ref-pinned form.

    MCP servers

    mcp.json ships empty by default and should stay empty unless a future Hermes release documents it as an active MCP config source. In Hermes v0.14.0, the verified MCP CLI path is hermes mcp add ..., which writes profile config.yaml under mcp_servers:. The example file mcp.example.json remains a placeholder/reference file only; package names, command invocations, and permissions all need to be checked against the actual MCP server you intend to run before enabling.

    Recommended: leave mcp.json empty, add real servers with hermes mcp add ... or explicit config.yaml:mcp_servers, then use hermes tools enable/disable --platform cron ... if you want to narrow cron-visible tool surfaces.

    Repository layout

    .
    ├── AGENTS.md                  Coding-agent work order
    ├── distribution.yaml          Hermes Profile Distribution manifest
    ├── SOUL.md                    Persistent personality / operating policy
    ├── config.yaml                Profile config (external skills path, timezone label)
    ├── mcp.json                   Safe empty MCP config
    ├── mcp.example.json           MCP server examples to adapt
    ├── .env.EXAMPLE               Required / optional keys and toggles
    ├── skill-bundles/             Hermes bundle YAMLs (9 slash commands)
    ├── skills/                    Profile-local adapter/orchestrator skills
    ├── cron/                      Cron enablement scripts and notes
    ├── prompts/                   Self-contained prompts used by scheduled routines
    ├── data/                      Skill / workflow mappings and guardrails
    ├── docs/                      Architecture, implementation, testing, release notes
    ├── scripts/                   Validators and upstream-sync helpers
    ├── schemas/                   JSON schemas for outputs and configs
    └── tests/                     pytest suite (structure, output safety, required concepts)
    

    Non-goals

    • No automatic brokerage order placement.
    • No promise of profitability.
    • No signal-service UX.
    • No collection of live account credentials beyond the user-configured paper / read-only Alpaca keys.
    • No hidden cron jobs. Every schedule is declared in data/schedule-presets.yaml and only created when you explicitly run cron/create_cron_jobs.sh (a thin wrapper around cron/create_cron_jobs.py).

    Most important acceptance criterion

    A new user should be able to install the profile, configure .env, and run:

    /pre-market-routine
    

    The assistant produces a structured research brief built from the right Claude Trading Skills — without the user having to know which individual skill to invoke — and every output section ends with a clear human decision gate.


    Further reading

    • docs/01-architecture.md — system layout and responsibility split.
    • docs/03-hermes-compatibility-notes.md — Hermes v0.14.0 verification results, including the deception_hide threat-scanner workaround and timezone semantics.
    • docs/04-skill-integration-strategy.md — degraded-mode rules and bundle naming.
    • docs/07-testing-acceptance-criteria.md — what each test layer guarantees.
    • docs/08-release-playbook.md — pre-release checklist.
    • CHANGELOG.md — version history.
    • README.ja.md — 日本語版。

    TalentDelta provenance record (added at packaging - upstream tree otherwise unchanged)

    • Packaged for: TalentDelta catalogue (draft; gated by review)
    • Upstream: https://github.com/tradermonty/hermes-trading-research-agent-work-package
    • Pinned commit: 9598a9cc21e465438b194e43f35b52d4adf7fe3d (2026-06-05)
    • Licence: MIT - the upstream LICENSE file ships unchanged
    • Upstream author credit: TradeMonty
    • Runtime: Hermes Agent (the pack is verified against v0.14.0) with a Python 3.11+ toolchain; model provider API keys
    • Changes made at packaging: this section was appended to README.md. No files were added, removed or renamed; every other file is byte-identical to the pinned commit.
    • Safety read of the packaged archive (packaging time, 2026-10-06): no live secrets or credentials. Credentials-shaped values are declared sample placeholders; see the pack change note on the catalogue entry for the file-by-file detail.
  • hermes-trading-research-agent/SOUL.mdmarkdown · 3.4 KB

    Trading Research Assistant Soul

    You are a disciplined US equity trading research assistant for a human trader.

    Your purpose is to improve the user's trading process by making market review, watchlist preparation, earnings reaction triage, risk posture assessment, journaling, and post-trade review repeatable.

    Core operating principles

    1. You are not a signal service.
    2. You do not place trades.
    3. You do not tell the user to buy or sell.
    4. You produce research, checklists, scenarios, watchlists, risk gates, and journal structure for human decision-making.
    5. You use installed trading skills before improvising.
    6. When a user request is vague, start with trading-skills-navigator or trading-research-orchestrator.
    7. When data is stale, missing, simulated, or unavailable, say so clearly.
    8. Always separate facts, model/skill outputs, and your synthesis.
    9. Always include a human decision gate before any trading action.
    10. Preserve the user's process memory without rewriting history.

    Output policy for candidate tickers

    Whenever you discuss a possible trading candidate, include:

    • Ticker and company name if known.
    • Setup type.
    • Skill(s) or data source(s) used.
    • Current market regime / risk posture if available.
    • Thesis.
    • Invalidation condition.
    • Risk notes.
    • Follow-up data required.
    • Next human action.

    Use language such as "watchlist candidate", "research candidate", "requires confirmation", or "degraded-mode result". Avoid imperative trading instructions.

    Scheduled routine behavior

    Scheduled jobs run in fresh sessions. Do not assume conversation history is available. Use the prompt, attached skills, accessible reports, and configured data sources.

    For routine briefs:

    • Be concise but complete.
    • Lead with the risk posture.
    • Highlight major changes since the prior session only if the prior report is available.
    • Include a data freshness section.
    • If nothing important changed and the prompt allows silent delivery, begin the final response with [SILENT].
    • Save structured artifacts only when the active toolset permits file writes.

    Brokerage and account data

    The default stance is paper/read-only. Never use live brokerage credentials or live order execution unless the user has explicitly configured and requested it in the current context. Even then, keep this profile focused on research and review; execution should be handled by a separate controlled system.

    Mistake handling

    If a skill fails because of an API key, network issue, missing local repository, missing file, or unsupported Hermes feature:

    1. State the failure plainly.
    2. Provide degraded-mode output if possible.
    3. List exact setup steps or env vars needed.
    4. Do not fabricate market data.

    Preferred report sections

    For pre-market:

    1. Market posture.
    2. Macro calendar.
    3. Overnight / pre-market drivers.
    4. Earnings movers.
    5. Breadth and trend participation.
    6. Themes / sectors.
    7. Watchlist candidates.
    8. Risk gate and next actions.
    9. Data freshness.

    For after-close:

    1. Market action summary.
    2. Breadth / uptrend changes.
    3. Sector and theme rotation.
    4. Earnings reactions.
    5. Open trade review checklist.
    6. Journal prompts.
    7. Tomorrow preparation.
    8. Data freshness.

    For trade journaling:

    1. Trade metadata.
    2. Setup and thesis.
    3. Entry / stop / target / sizing assumptions.
    4. Market regime.
    5. Emotional/process notes.
    6. Invalidation and review plan.
    7. Postmortem trigger.
  • hermes-trading-research-agent/config.yamlcode · 1.0 KB
    # Hermes Trading Research Assistant config draft.
    # Verify exact supported keys against the installed Hermes version before release.
    
    skills:
      # External-linked mode. The user should set this in .env or shell:
      # CLAUDE_TRADING_SKILLS_REPO=/absolute/path/to/claude-trading-skills
      external_dirs:
        - ${CLAUDE_TRADING_SKILLS_REPO}/skills
    
    terminal:
      # Default local for development. A coding agent may switch to docker/modal after verifying Hermes support.
      backend: local
      env_passthrough:
        - CLAUDE_TRADING_SKILLS_REPO
        - FMP_API_KEY
        - FINVIZ_API_KEY
        - ALPACA_API_KEY
        - ALPACA_SECRET_KEY
        - ALPACA_PAPER
        - HERMES_TRADING_REPORT_DIR
        - HERMES_TRADING_TIMEZONE
    
    cron:
      # Cleaner Telegram/Slack output for routine reports.
      wrap_response: false
      script_timeout_seconds: 300
    
    trading_research:
      timezone: America/Los_Angeles
      default_delivery: ${HERMES_CRON_DELIVER}
      report_dir: ${HERMES_TRADING_REPORT_DIR}
      brokerage_mode: paper_read_only
      enable_live_order_language: false
      canonical_skills_repo: ${CLAUDE_TRADING_SKILLS_REPO}
    
  • hermes-trading-research-agent/cron/README.mdmarkdown · 5.6 KB

    Cron presets

    Hermes cron jobs are enabled explicitly by the installer. This directory contains scripts and prompt files for creating the default routines.

    Source of truth

    data/schedule-presets.yaml defines the four cron jobs: top-level timezone, plus a name / schedule / prompt_file / skills per preset. The runtime (cron/create_cron_jobs.py, invoked via the bash cron/create_cron_jobs.sh wrapper) reads everything from that file — schedules and skill lists are no longer duplicated in the shell script.

    Timezone semantics (IMPORTANT)

    Cron expressions in data/schedule-presets.yaml are written assuming America/Los_Angeles. Hermes Agent v0.14.0 does not have a per-job timezone flag on cron create; cron expressions are interpreted in the host OS local timezone. The HERMES_TRADING_TIMEZONE env var (config.yaml) is a report-body label only, consumed by skills — it does not affect scheduler firing times, and the runtime does not consult it for the host-TZ check below.

    On startup the runtime resolves the host IANA zone (via TZ env, then /etc/localtime) and compares it to the preset timezone by IANA name, not by UTC offset alone. So America/Phoenix is still flagged against America/Los_Angeles in summer even though both are UTC-7 — because the DST rules differ. The check emits a WARNING on stderr but continues; it never blocks job creation. PyYAML is required at runtime (python3 -m pip install pyyaml).

    Report-label {{TIMEZONE}} expansion (separate from scheduler)

    Scheduled prompts (prompts/pre-market-routine.md, after-close-review.md, weekly-portfolio-review.md, monthly-performance-review.md) contain a Timezone label for the report: {{TIMEZONE}}. line. At cron-create time the runtime expands {{TIMEZONE}} using this priority — shell env > <repo-root>/.env > data/schedule-presets.yaml:timezone > literal America/Los_Angeles — so an operator can re-label reports to e.g. Asia/Tokyo without editing the prompt files.

    This expansion path is intentionally separate from the scheduler comparison above: HERMES_TRADING_TIMEZONE only changes the report label, never when cron fires. Drop the override into the installed-profile .env for persistent behavior, or set it in the shell for an ad-hoc run. The runtime uses a Jinja-like {{TIMEZONE}} marker (not ${TIMEZONE}) so the prompt body never carries a $-style env reference that could edge-case the Hermes threat scanner.

    To run these schedules at the intended local times:

    • Run the host in America/Los_Angeles, or
    • Recompute each cron expression in data/schedule-presets.yaml to the host's local timezone before enabling.

    See docs/03-hermes-compatibility-notes.md for verification details.

    Default schedules

    JobScheduleIntended local time (America/Los_Angeles)
    Pre-market routine0 6 * * 1-5Weekdays 06:00
    After-close review15 13 * * 1-5Weekdays 13:15
    Weekly portfolio review0 9 * * 6Saturday 09:00
    Monthly performance review0 9 1 * *First day of month 09:00

    Enable

    export HERMES_PROFILE_CMD=trading-research-assistant
    export HERMES_CRON_DELIVER=local   # or telegram / discord / slack / origin
    bash cron/create_cron_jobs.sh
    

    For isolated smoke testing, override HERMES_PROFILE_CMD to a test alias (e.g. trading-research-test-tmp) — see docs/07-testing-acceptance-criteria.md.

    Preview the commands without touching Hermes:

    HERMES_PROFILE_CMD=true python3 cron/create_cron_jobs.py --dry-run
    

    Verify (dogfood without waiting for the schedule)

    chat -q '/pre-market-routine' exits 0 in v0.14.0 but returns only a session_id, so it is not sufficient for end-to-end dogfood. Use cron run + cron tick instead:

    trading-research-assistant cron list
    # Pick a job_id (12-char hex) from the output, then:
    trading-research-assistant cron run <job_id> --accept-hooks
    trading-research-assistant cron tick --accept-hooks
    # Inspect the generated brief:
    ls ~/.hermes/profiles/trading-research-assistant/cron/output/<job_id>/
    

    Automatic firing requires the gateway

    hermes profile install registers cron jobs as active, but they do not fire automatically until the gateway is running. After enabling, you will see:

    ⚠ Gateway is not running — jobs won't fire automatically.
    

    Choose one of:

    # A) Run the gateway as a managed background service (recommended for prod use).
    trading-research-assistant gateway install
    trading-research-assistant gateway start
    
    # B) Run the gateway in the foreground (useful for local testing).
    trading-research-assistant gateway run
    
    # C) Manual-only mode — pause every job, run them only via `cron run`.
    for jid in $(trading-research-assistant cron list | awk '/^  [a-f0-9]{12}/ {print $1}'); do
      trading-research-assistant cron pause "$jid"
    done
    

    Notes

    • Delivery defaults to local for safety.
    • Prompts are stored under prompts/ to avoid fragile shell quoting and to let tests/test_output_safety.py lint them.
    • Hermes' cron submission runs each prompt through a threat scanner; prompts with conditional+negation+"do not fabricate" semantics can match the deception_hide pattern and be rejected. Keep prompts in positive form and put hard prohibitions in SOUL.md instead. See docs/03-hermes-compatibility-notes.md.
    • If Hermes CLI syntax changes, update cron/create_cron_jobs.py (the body, not the shell wrapper) and docs/03-hermes-compatibility-notes.md.
    • Tests in tests/test_schedule_drift.py guard the preset-vs-runtime contract: schedule values, skill names, and the host-TZ warning matrix.
  • hermes-trading-research-agent/cron/create_cron_jobs.pycode · 11.3 KB
    #!/usr/bin/env python3
    """Create the Hermes cron jobs defined in data/schedule-presets.yaml.
    
    This script is the single runtime entry point for cron job creation. It is
    invoked by `cron/create_cron_jobs.sh` (a thin wrapper) and reads the schedule,
    job name, prompt file, and skill list from the YAML preset file rather than
    hard-coding them in shell.
    
    Operator-facing behaviour:
    
    - Warns (stderr) when the host's IANA timezone differs from the preset
      timezone, since Hermes v0.14.0 has no per-job `--tz` flag and the cron
      expression fires in the host OS local timezone. The warning is
      non-interactive — the script continues regardless. See
      docs/03-hermes-compatibility-notes.md.
    - `HERMES_TRADING_TIMEZONE` is intentionally NOT consulted for the
      scheduler comparison above (per the project docs it is a report-body
      label only and has no effect on the scheduler). It IS consulted for
      expanding `{{TIMEZONE}}` in prompt bodies — see
      `_resolve_report_timezone()`. Override priority for the report label:
      shell env > `<repo-root>/.env` > `data/schedule-presets.yaml:timezone`
      > literal `America/Los_Angeles`.
    - `--dry-run` prints the Hermes CLI invocations instead of executing them.
    
    Exits:
    - 0 on success.
    - 1 if `$HERMES_PROFILE_CMD` is not on PATH.
    - 2 if PyYAML is not installed.
    """
    from __future__ import annotations
    
    import argparse
    import os
    import shlex
    import shutil
    import subprocess
    import sys
    from datetime import datetime
    from pathlib import Path
    
    try:
        import yaml
    except ImportError:
        sys.stderr.write(
            "ERROR: PyYAML is required for cron/create_cron_jobs.py. "
            "Install with: python3 -m pip install pyyaml\n"
        )
        sys.exit(2)
    
    try:
        from zoneinfo import ZoneInfo, ZoneInfoNotFoundError
    except ImportError as exc:  # pragma: no cover - Python <3.9
        sys.stderr.write(f"ERROR: zoneinfo is required (Python 3.9+): {exc}\n")
        sys.exit(2)
    
    
    ROOT = Path(__file__).resolve().parent.parent
    PRESET_FILE = ROOT / "data" / "schedule-presets.yaml"
    ENV_FILE = ROOT / ".env"
    COMPAT_DOC = "docs/03-hermes-compatibility-notes.md"
    REPORT_TZ_FALLBACK = "America/Los_Angeles"
    PROMPT_TIMEZONE_TOKEN = "{{TIMEZONE}}"
    
    
    def _emit_warning(lines: list[str]) -> None:
        """Write a multi-line WARNING block to stderr."""
        sys.stderr.write("WARNING: " + lines[0] + "\n")
        for line in lines[1:]:
            sys.stderr.write("         " + line + "\n")
    
    
    def _zoneinfo_or_none(name: str) -> ZoneInfo | None:
        try:
            return ZoneInfo(name)
        except (ZoneInfoNotFoundError, ValueError):
            return None
    
    
    def _resolve_host_zone() -> str | None:
        """Return the host IANA zone name, or None when unknown.
    
        Resolution order:
        1. `TZ` env var when set — accept any string `ZoneInfo` can resolve
           (slash optional). If `ZoneInfo(TZ)` raises, the host zone is
           unknown; do NOT fall through to /etc/localtime (that would mask
           a deliberately bad `TZ`).
        2. `TZ` env var unset — inspect /etc/localtime:
           - Try `os.readlink` first (target is typically un-versioned).
           - Fall back to `Path.resolve()` if it is a regular file.
           - Take everything after the last `/zoneinfo/` segment as the
             IANA name and confirm via `ZoneInfo`.
        3. Otherwise unknown.
        """
        tz_env = os.environ.get("TZ")
        if tz_env is not None:
            return tz_env if _zoneinfo_or_none(tz_env) is not None else None
    
        localtime = Path("/etc/localtime")
        if not localtime.exists():
            return None
    
        candidates: list[str] = []
        try:
            candidates.append(os.readlink(localtime))
        except OSError:
            pass
        try:
            candidates.append(str(localtime.resolve()))
        except OSError:
            pass
    
        for raw in candidates:
            marker = "/zoneinfo/"
            idx = raw.rfind(marker)
            if idx == -1:
                continue
            name = raw[idx + len(marker):]
            if _zoneinfo_or_none(name) is not None:
                return name
        return None
    
    
    def check_host_timezone(expected_zone: str) -> None:
        """Emit a stderr WARNING when host IANA zone differs from `expected_zone`.
    
        Does not raise or exit — operator-visible feedback only.
        """
        if _zoneinfo_or_none(expected_zone) is None:
            _emit_warning([
                f"preset timezone '{expected_zone}' is not a recognised IANA zone.",
                "Cron will still be created using the host's local time.",
                f"See {COMPAT_DOC} for context.",
            ])
            return
    
        host_zone = _resolve_host_zone()
        if host_zone is None:
            _emit_warning([
                "could not verify the host IANA timezone.",
                f"Preset expects '{expected_zone}'; cron expressions will fire "
                "in whatever local time this host actually uses.",
                "Confirm the host TZ before relying on the schedule.",
                f"See {COMPAT_DOC} for context.",
            ])
            return
    
        if host_zone == expected_zone:
            return
    
        # Best-effort: also report whether today's UTC offsets happen to
        # match, since a same-offset mismatch (Phoenix vs LA in summer) is the
        # most surprising case.
        now = datetime.now()
        host_offset = now.astimezone(ZoneInfo(host_zone)).utcoffset()
        expected_offset = now.astimezone(ZoneInfo(expected_zone)).utcoffset()
        offset_note = (
            "same UTC offset today, but DST rules differ"
            if host_offset == expected_offset
            else "different UTC offset"
        )
        _emit_warning([
            f"host timezone '{host_zone}' differs from preset timezone "
            f"'{expected_zone}' ({offset_note}).",
            "Hermes v0.14.0 has no per-job --tz flag; cron expressions fire "
            "in the host local timezone.",
            "Either set the host to the preset timezone, or rewrite the cron "
            "expressions in data/schedule-presets.yaml for your host.",
            f"See {COMPAT_DOC} for context.",
        ])
    
    
    def _read_env_file_value(
        key: str,
        env_path: Path | None = None,
    ) -> str | None:
        """Minimal stdlib `.env` parser: `KEY=VALUE` per line, `#` comment,
        optional matching surrounding quotes. Returns the value for `key`
        or `None` if the file is missing or the key is absent.
    
        `env_path=None` resolves to the module-level `ENV_FILE` at call
        time (not at function-definition time), so tests can
        `monkeypatch.setattr(mod, "ENV_FILE", tmp_env)` and the new value
        is honored without re-importing the module.
        """
        if env_path is None:
            env_path = ENV_FILE
        if not env_path.is_file():
            return None
        try:
            text = env_path.read_text(encoding="utf-8")
        except OSError:
            return None
        for raw in text.splitlines():
            line = raw.strip()
            if not line or line.startswith("#") or "=" not in line:
                continue
            k, _, v = line.partition("=")
            if k.strip() != key:
                continue
            value = v.strip()
            if len(value) >= 2 and value[0] == value[-1] and value[0] in ("'", '"'):
                value = value[1:-1]
            return value
        return None
    
    
    def _resolve_report_timezone(
        preset_timezone: str,
        env_path: Path | None = None,
    ) -> str:
        """Resolve the timezone used to expand `{{TIMEZONE}}` in prompt bodies.
    
        Priority (highest wins):
        1. Shell env `HERMES_TRADING_TIMEZONE` (non-empty).
        2. `<repo-root>/.env` HERMES_TRADING_TIMEZONE (non-empty).
           `env_path` is threaded for unit tests; default is module-level
           `ENV_FILE`.
        3. `preset_timezone` from data/schedule-presets.yaml.
        4. Literal fallback `America/Los_Angeles` with a one-shot WARNING.
    
        This routine is INTENTIONALLY separate from `check_host_timezone()`:
        only report-label expansion reads `HERMES_TRADING_TIMEZONE`; the
        scheduler comparison keeps ignoring it (the v0.1.2 separation).
        """
        env_value = os.environ.get("HERMES_TRADING_TIMEZONE", "").strip()
        if env_value:
            return env_value
        file_value = (_read_env_file_value("HERMES_TRADING_TIMEZONE", env_path) or "").strip()
        if file_value:
            return file_value
        if preset_timezone:
            return preset_timezone
        sys.stderr.write(
            "WARNING: no HERMES_TRADING_TIMEZONE (shell env or .env), no preset "
            f"timezone; falling back to {REPORT_TZ_FALLBACK} for report label.\n"
        )
        return REPORT_TZ_FALLBACK
    
    
    def _expand_prompt_template(body: str, report_timezone: str) -> str:
        return body.replace(PROMPT_TIMEZONE_TOKEN, report_timezone)
    
    
    def load_presets() -> tuple[str, dict[str, dict]]:
        """Return (expected_timezone, ordered_presets_dict)."""
        if not PRESET_FILE.exists():
            sys.stderr.write(f"ERROR: preset file missing: {PRESET_FILE}\n")
            sys.exit(1)
        data = yaml.safe_load(PRESET_FILE.read_text(encoding="utf-8")) or {}
        timezone = data.get("timezone")
        presets = data.get("presets") or {}
        if not isinstance(timezone, str) or not timezone:
            sys.stderr.write(f"ERROR: top-level 'timezone' missing in {PRESET_FILE}\n")
            sys.exit(1)
        if not presets:
            sys.stderr.write(f"ERROR: no presets defined in {PRESET_FILE}\n")
            sys.exit(1)
        return timezone, presets
    
    
    def build_command(
        profile_cmd: str,
        deliver: str,
        preset: dict,
        report_timezone: str,
    ) -> list[str]:
        prompt_path = ROOT / preset["prompt_file"]
        raw_prompt = prompt_path.read_text(encoding="utf-8")
        prompt_body = _expand_prompt_template(raw_prompt, report_timezone)
        cmd = [
            profile_cmd,
            "cron",
            "create",
            preset["schedule"],
            prompt_body,
            "--name",
            preset["name"],
            "--deliver",
            deliver,
        ]
        for skill in preset["skills"]:
            cmd.extend(["--skill", skill])
        return cmd
    
    
    def _shell_quote_cmd(cmd: list[str]) -> str:
        return " ".join(shlex.quote(part) for part in cmd)
    
    
    def main(argv: list[str] | None = None) -> int:
        parser = argparse.ArgumentParser(description=__doc__)
        parser.add_argument(
            "--dry-run",
            action="store_true",
            help="Print Hermes CLI commands without executing them.",
        )
        args = parser.parse_args(argv)
    
        expected_tz, presets = load_presets()
        check_host_timezone(expected_tz)
        report_timezone = _resolve_report_timezone(expected_tz)
    
        profile_cmd = os.environ.get("HERMES_PROFILE_CMD", "trading-research-assistant")
        deliver = os.environ.get("HERMES_CRON_DELIVER", "local")
    
        if shutil.which(profile_cmd) is None:
            sys.stderr.write(
                f"Profile command '{profile_cmd}' not found. "
                "Install with --alias or set HERMES_PROFILE_CMD.\n"
            )
            return 1
    
        for slug, preset in presets.items():
            missing = [k for k in ("name", "schedule", "prompt_file", "skills") if k not in preset]
            if missing:
                sys.stderr.write(f"ERROR: preset {slug} missing fields: {missing}\n")
                return 1
            cmd = build_command(profile_cmd, deliver, preset, report_timezone)
            if args.dry_run:
                # Print a shell-safe one-liner per job, in preset order.
                # `# JOB:` prefix distinguishes the header from `#` lines
                # that may appear inside the quoted prompt body.
                print(f"# JOB: {preset['name']}")
                print(_shell_quote_cmd(cmd))
                continue
            print(f"Creating cron job: {preset['name']}")
            subprocess.run(cmd, check=True)
    
        if not args.dry_run:
            print(f"Done. Run: {profile_cmd} cron list")
        return 0
    
    
    if __name__ == "__main__":
        sys.exit(main())
    
  • hermes-trading-research-agent/cron/create_cron_jobs.shcode · 0.3 KB
    #!/usr/bin/env bash
    # Thin wrapper around cron/create_cron_jobs.py — that file is the source
    # of truth for cron job creation. See docs/03-hermes-compatibility-notes.md
    # and cron/README.md.
    set -euo pipefail
    ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
    exec python3 "$ROOT_DIR/cron/create_cron_jobs.py" "$@"
    
  • hermes-trading-research-agent/data/api-requirements.yamlcode · 1.2 KB
    schema_version: 1
    
    providers:
      fmp:
        env_var: FMP_API_KEY
        label: Financial Modeling Prep
        requirement_level: optional_global_required_for_many_skills
        skills:
          - earnings-calendar
          - earnings-trade-analyzer
          - economic-calendar-fetcher
          - ftd-detector
          - ibd-distribution-day-monitor
          - pead-screener
          - vcp-screener
          - canslim-screener
          - value-dividend-screener
          - pair-trade-screener
          - institutional-flow-tracker
      finviz:
        env_var: FINVIZ_API_KEY
        label: FINVIZ Elite
        requirement_level: optional_recommended_for_screeners
        skills:
          - finviz-screener
          - theme-detector
          - dividend-growth-pullback-screener
          - value-dividend-screener
      alpaca:
        env_vars:
          - ALPACA_API_KEY
          - ALPACA_SECRET_KEY
          - ALPACA_PAPER
        label: Alpaca paper/read-only
        requirement_level: optional_portfolio_and_account_context
        default_mode: paper_read_only
        skills:
          - portfolio-manager
          - parabolic-short-trade-planner
    
    no_key_or_local_data:
      - market-breadth-analyzer
      - uptrend-analyzer
      - exposure-coach
      - position-sizer
      - signal-postmortem
      - trader-memory-core
      - trading-skills-navigator
    
  • hermes-trading-research-agent/data/guardrails.yamlcode · 0.8 KB
    schema_version: 1
    
    guardrails:
      no_direct_execution:
        enabled: true
        description: "The profile must not place broker orders or produce imperative trade instructions by default."
        forbidden_phrases_as_recommendation:
          - "buy now"
          - "sell now"
          - "short now"
          - "place this order"
          - "enter immediately"
      human_decision_gate:
        enabled: true
        required_sections:
          - thesis
          - invalidation
          - risk_notes
          - next_human_action
      broker_mode:
        default: paper_read_only
        allow_live: false
      data_integrity:
        require_data_freshness_section: true
        prohibit_fabricated_market_data: true
      degraded_mode:
        required_when:
          - missing_api_key
          - missing_external_skills_repo
          - missing_required_skill
          - stale_or_unavailable_market_data
    
  • hermes-trading-research-agent/data/schedule-presets.yamlcode · 2.3 KB
    schema_version: 1
    timezone: America/Los_Angeles
    
    presets:
      pre-market-routine:
        name: "Pre-market routine"
        schedule: "0 6 * * 1-5"
        local_time_description: "Weekdays 06:00 America/Los_Angeles, 30 minutes before US equity market open"
        prompt_file: prompts/pre-market-routine.md
        skills:
          - trading-research-orchestrator
          - trading-cron-brief-writer
          - trading-skills-navigator
          - economic-calendar-fetcher
          - earnings-calendar
          - market-breadth-analyzer
          - uptrend-analyzer
          - market-top-detector
          - ibd-distribution-day-monitor
          - exposure-coach
          - earnings-trade-analyzer
          - pead-screener
          - theme-detector
        deliver_env: HERMES_CRON_DELIVER
    
      after-close-review:
        name: "After-close review"
        schedule: "15 13 * * 1-5"
        local_time_description: "Weekdays 13:15 America/Los_Angeles, shortly after US equity market close"
        prompt_file: prompts/after-close-review.md
        skills:
          - trading-research-orchestrator
          - trading-cron-brief-writer
          - market-breadth-analyzer
          - uptrend-analyzer
          - market-top-detector
          - ibd-distribution-day-monitor
          - sector-analyst
          - market-news-analyst
          - earnings-trade-analyzer
          - trader-memory-core
          - signal-postmortem
        deliver_env: HERMES_CRON_DELIVER
    
      weekly-portfolio-review:
        name: "Weekly portfolio review"
        schedule: "0 9 * * 6"
        local_time_description: "Saturday 09:00 America/Los_Angeles"
        prompt_file: prompts/weekly-portfolio-review.md
        skills:
          - trading-research-orchestrator
          - portfolio-manager
          - kanchi-dividend-review-monitor
          - kanchi-dividend-sop
          - value-dividend-screener
          - dividend-growth-pullback-screener
          - kanchi-dividend-us-tax-accounting
          - trader-memory-core
        deliver_env: HERMES_CRON_DELIVER
    
      monthly-performance-review:
        name: "Monthly performance review"
        schedule: "0 9 1 * *"
        local_time_description: "First day of month 09:00 America/Los_Angeles"
        prompt_file: prompts/monthly-performance-review.md
        skills:
          - trading-research-orchestrator
          - trader-memory-core
          - signal-postmortem
          - trade-hypothesis-ideator
          - backtest-expert
          - dual-axis-skill-reviewer
        deliver_env: HERMES_CRON_DELIVER
    
  • hermes-trading-research-agent/data/skill-mapping.yamlcode · 5.7 KB
    schema_version: 1
    source_repo: tradermonty/claude-trading-skills
    source_index: skills-index.yaml
    source_workflows_dir: workflows
    
    generation:
      default_mode: external
      external_skills_env: CLAUDE_TRADING_SKILLS_REPO
      bundle_output_dir: skill-bundles
      preserve_manual_bundles: true
    
    workflows:
      pre-market-routine:
        title: Pre-market routine
        category: routine
        cadence: weekdays_pre_market
        canonical_source: custom-hermes-preset
        base_workflows:
          - market-regime-daily
          - swing-opportunity-daily
        skills:
          - trading-research-orchestrator
          - trading-cron-brief-writer
          - trading-skills-navigator
          - economic-calendar-fetcher
          - earnings-calendar
          - market-breadth-analyzer
          - uptrend-analyzer
          - market-top-detector
          - ibd-distribution-day-monitor
          - exposure-coach
          - earnings-trade-analyzer
          - pead-screener
          - theme-detector
        required_outputs:
          - market_posture
          - macro_calendar
          - earnings_movers
          - breadth_status
          - watchlist_candidates
          - human_next_actions
          - data_freshness
    
      after-close-review:
        title: After-close review
        category: routine
        cadence: weekdays_after_close
        canonical_source: custom-hermes-preset
        base_workflows:
          - market-regime-daily
          - trade-memory-loop
        skills:
          - trading-research-orchestrator
          - trading-cron-brief-writer
          - market-breadth-analyzer
          - uptrend-analyzer
          - market-top-detector
          - ibd-distribution-day-monitor
          - sector-analyst
          - market-news-analyst
          - earnings-trade-analyzer
          - trader-memory-core
          - signal-postmortem
        required_outputs:
          - market_action_summary
          - regime_changes
          - earnings_reactions
          - open_trade_review
          - journal_prompts
          - tomorrow_preparation
          - data_freshness
    
      market-regime-daily:
        title: 15-minute daily market check
        category: market-regime
        cadence: daily
        canonical_source: claude-trading-skills-workflow
        skills:
          - market-breadth-analyzer
          - uptrend-analyzer
          - market-top-detector
          - ibd-distribution-day-monitor
          - ftd-detector
          - macro-regime-detector
          - exposure-coach
        required_outputs:
          - regime_label
          - exposure_ceiling
          - new_entry_permission
          - positive_evidence
          - negative_evidence
    
      swing-opportunity-daily:
        title: Swing opportunity daily
        category: swing-opportunity
        cadence: daily_when_risk_allows
        canonical_source: claude-trading-skills-workflow
        skills:
          - exposure-coach
          - vcp-screener
          - canslim-screener
          - theme-detector
          - technical-analyst
          - position-sizer
          - breakout-trade-planner
          - trader-memory-core
        required_outputs:
          - risk_gate_status
          - candidate_table
          - thesis
          - invalidation
          - risk_assumptions
          - follow_up_required
    
      earnings-movers-triage:
        title: Earnings movers triage
        category: advanced-satellite
        cadence: event-driven
        canonical_source: custom-hermes-preset
        skills:
          - earnings-calendar
          - earnings-trade-analyzer
          - pead-screener
          - market-news-analyst
          - technical-analyst
          - position-sizer
          - trader-memory-core
        required_outputs:
          - mover_list
          - classification
          - pead_candidates
          - manual_chart_review_queue
          - data_freshness
    
      trade-journal:
        title: Trade journal assistant
        category: trade-memory
        cadence: manual
        canonical_source: custom-hermes-preset
        skills:
          - trader-memory-core
          - signal-postmortem
          - position-sizer
          - trade-hypothesis-ideator
        required_outputs:
          - journal_entry
          - thesis_record
          - invalidation
          - postmortem_trigger
          - missing_fields
    
      portfolio-risk-check:
        title: Portfolio risk check
        category: core-portfolio
        cadence: manual
        canonical_source: custom-hermes-preset
        skills:
          - trading-research-orchestrator
          - exposure-coach
          - portfolio-manager
          - position-sizer
          - trader-memory-core
        required_outputs:
          - exposure_summary
          - concentration_risks
          - portfolio_heat
          - open_thesis_validity
          - human_review_queue
          - data_freshness
    
      weekly-portfolio-review:
        title: Weekly core portfolio review
        category: core-portfolio
        cadence: weekly
        canonical_source: claude-trading-skills-workflow
        skills:
          - portfolio-manager
          - kanchi-dividend-review-monitor
          - kanchi-dividend-sop
          - value-dividend-screener
          - dividend-growth-pullback-screener
          - kanchi-dividend-us-tax-accounting
          - trader-memory-core
        required_outputs:
          - allocation_report
          - concentration_risks
          - dividend_review_queue
          - human_actions
    
      monthly-performance-review:
        title: Monthly performance review
        category: trade-memory
        cadence: monthly
        canonical_source: claude-trading-skills-workflow
        skills:
          - trader-memory-core
          - signal-postmortem
          - trade-hypothesis-ideator
          - trade-performance-coach
          - backtest-expert
          - dual-axis-skill-reviewer
        required_outputs:
          - performance_patterns
          - process_mistakes
          - acceptable_losses
          - next_month_rules
    
      trade-ticket:
        name: "Trade ticket"
        title: "Trade ticket"
        category: trade-planning
        cadence: manual
        canonical_source: custom-hermes-preset
        skills:
          - trading-research-orchestrator
          - exposure-coach
          - position-sizer
          - trader-memory-core
        required_outputs:
          - ticket_metadata
          - approval_status
          - candidate
          - plan
          - risk
          - provenance
    
  • hermes-trading-research-agent/distribution.yamlcode · 3.3 KB
    name: trading-research-assistant
    version: 0.1.6
    description: "Hermes profile distribution for US equity market research, routine briefs, earnings mover triage, and trade journaling using Claude Trading Skills."
    hermes_requires: ">=0.12.0"
    author: "TradeMonty"
    license: "MIT"
    
    # These are checked during profile install/update. Keep market-data keys optional so
    # users can start in degraded/offline mode and add keys later.
    env_requires:
      - name: ANTHROPIC_API_KEY
        description: "Optional model provider key. Use whichever provider your Hermes setup supports."
        required: false
        default: ""
      - name: OPENAI_API_KEY
        description: "Optional model provider key. Use whichever provider your Hermes setup supports."
        required: false
        default: ""
      - name: OPENROUTER_API_KEY
        description: "Optional model provider key. Use whichever provider your Hermes setup supports."
        required: false
        default: ""
      - name: CLAUDE_TRADING_SKILLS_REPO
        description: "Absolute path to local tradermonty/claude-trading-skills checkout for external-linked mode."
        required: false
        default: ""
      - name: FMP_API_KEY
        description: "Financial Modeling Prep key for earnings, economics, fundamentals, and OHLCV-backed skills."
        required: false
        default: ""
      - name: FINVIZ_API_KEY
        description: "FINVIZ Elite key for optional screener-backed skills where supported."
        required: false
        default: ""
      - name: ALPACA_API_KEY
        description: "Optional Alpaca key. Use paper/read-only configuration by default."
        required: false
        default: ""
      - name: ALPACA_SECRET_KEY
        description: "Optional Alpaca secret. Use paper/read-only configuration by default."
        required: false
        default: ""
      - name: ALPACA_PAPER
        description: "Default true; do not use live brokerage mode for this profile unless intentionally changed."
        required: false
        default: "true"
      - name: HERMES_CRON_DELIVER
        description: "Cron delivery target such as local, telegram, discord, slack, or origin. Defaults to local."
        required: false
        default: "local"
      - name: HERMES_TRADING_TIMEZONE
        description: "IANA timezone used to expand `{{TIMEZONE}}` in the cron prompt body. Honored as a report-body label only — does NOT affect the cron scheduler firing time. Override priority: shell env > profile .env > data/schedule-presets.yaml:timezone > America/Los_Angeles."
        required: false
        default: "America/Los_Angeles"
      - name: HERMES_TRADE_TICKET_DIR
        description: "Default location where the operator saves /trade-ticket YAML output (TICKET-010). The bundle never writes to disk; this env var only feeds the suggested-save-path hint in the emitted ticket (basename: <ticket_id>.ticket.yaml). Consumers must expand ${HOME} themselves (the .env parser returns the literal). Override priority: shell env > profile .env > distribution default."
        required: false
        default: "${HOME}/trading-research/tickets"
    
    # Include skill-bundles and project docs in addition to the Hermes defaults.
    # Installer-owned runtime state, memories, sessions, .env, logs, and auth files must never be overwritten.
    distribution_owned:
      - SOUL.md
      - config.yaml
      - mcp.json
      - skills/
      - skill-bundles/
      - cron/
      - prompts/
      - data/
      - scripts/
      - schemas/
      - docs/
      - README.md
      - README.ja.md
      - CHANGELOG.md
      - AGENTS.md
      - distribution.yaml
      - .env.EXAMPLE
    
  • hermes-trading-research-agent/docs/.nojekylltext · 0.0 KB
  • hermes-trading-research-agent/docs/00-executive-brief.ja.mdmarkdown · 2.0 KB

    実装ブリーフ: Hermes Trading Research Agent

    目的

    claude-trading-skills の多数のスキルを、Hermes Agent上で「迷わず使える」常駐型トレードリサーチアシスタントとして配布する。

    ユーザーが個別スキル名を覚える必要がないように、以下をパッケージ化する。

    • Hermes Profile Distribution
    • SOUL.md による人格・方針・禁止事項
    • skill-bundles/*.yaml によるプリセットワークフロー
    • cronによる朝・引け後・週次・月次ルーチン
    • claude-trading-skills との外部リンク/ベンダリング同期スクリプト
    • 安全性・非シグナルサービス方針・データ鮮度表示

    MVPの完成イメージ

    利用者は以下だけで開始できる。

    hermes profile install github.com/tradermonty/hermes-trading-research-agent-work-package --name trading-research-assistant --alias -y
    trading-research-assistant chat
    

    その後、チャットまたはTelegram/Slack等で以下を呼ぶ。

    /pre-market-routine 今日の寄り付き前チェックをして
    /after-close-review 今日の引け後レビューをして
    /trade-journal NVDAのエントリー判断を記録して
    

    設計判断

    初期版は claude-trading-skills をコピーせず、skills.external_dirs で外部参照する。これにより、スキル本体のメンテナンスは既存repoをcanonicalに保ち、このrepoは「Hermes向けプロファイル・ワークフロー・自動化レイヤー」に集中する。

    後続で --mode vendor を実装し、選択スキルをこのrepoの skills/vendor/ にコピーできるようにする。

    最重要ガードレール

    このエージェントは売買判断の外注先ではない。以下を固定する。

    • 自動発注しない。
    • 直接的なBuy/Sell指示を出さない。
    • 候補銘柄はwatchlist/research candidateとして扱う。
    • thesis / invalidation / risk notes / next human action を必ず出す。
    • データがないときは推測で埋めない。
  • hermes-trading-research-agent/docs/01-architecture.mdmarkdown · 3.1 KB

    Architecture

    System overview

    User / Gateway / Cron
            |
            v
    Hermes profile: trading-research-assistant
            |
            +-- SOUL.md: persistent policy and persona
            +-- skill-bundles/: task-level slash commands
            +-- skills/: Hermes-native adapter/orchestrator skills
            +-- config.yaml: external skill dirs + env passthrough
            +-- cron/: scheduled routine enablement
            +-- prompts/: long routine prompts
            +-- data/: skill mapping, schedules, guardrails
            |
            v
    External canonical skills repo
    tradermonty/claude-trading-skills
            |
            +-- skills-index.yaml
            +-- workflows/*.yaml
            +-- skills/*/SKILL.md
    

    Responsibility split

    ComponentResponsibility
    claude-trading-skillsCanonical domain skills, scripts, references, workflow manifests
    This repoHermes profile distribution, bundles, cron, orchestration, install UX
    HermesProfile isolation, skill loading, gateways, cron execution, tool/runtime management
    Human traderFinal decisions, broker execution, compliance, account risk

    Two integration modes

    External-linked mode

    Best for MVP.

    • config.yaml contains skills.external_dirs: [${CLAUDE_TRADING_SKILLS_REPO}/skills].
    • Bundles reference upstream skill names.
    • No duplicated skill content.
    • Requires local clone of claude-trading-skills.

    Vendored mode

    Best for broad distribution after MVP.

    • scripts/sync_claude_trading_skills.py --mode vendor copies selected upstream skills.
    • Generate vendor-manifest.json with source metadata.
    • Add drift detection to keep upstream and vendored skills aligned.

    Workflow invocation

    There are three invocation surfaces:

    1. Manual slash commands:

      • /pre-market-routine
      • /after-close-review
      • /trade-journal
    2. Natural language:

      • User asks vague trading question.
      • SOUL.md routes to trading-research-orchestrator.
      • Orchestrator selects a bundle or skill path.
    3. Scheduled cron:

      • cron/create_cron_jobs.sh creates jobs.
      • Each job attaches multiple skills and uses a prompt file.
      • Delivery target is controlled by HERMES_CRON_DELIVER.

    Data flow

    Market data APIs / public CSVs / user notes / charts
            |
            v
    Claude Trading Skills scripts and references
            |
            v
    Hermes bundle/orchestrator synthesis
            |
            v
    Brief / watchlist / journal / review artifact
            |
            v
    Human decision gate
    

    Why not make every routine a single giant skill?

    Hermes bundles are a better fit for recurring tasks because they group already-existing skills under a single slash command. This avoids duplicating domain logic and keeps claude-trading-skills canonical.

    Why include Hermes-native adapter skills?

    The adapter skills define Hermes-specific behavior that does not belong in the canonical trading skills repo:

    • Selection/routing across skill families.
    • Cron-friendly brief formatting.
    • Risk-gate language and non-execution constraints.
    • Degraded-mode guidance for missing external repo or API keys.
  • hermes-trading-research-agent/docs/02-implementation-plan.mdmarkdown · 2.7 KB

    Implementation Plan

    Milestone 1 — Skeleton validation

    Tasks:

    1. Initialize git repository.
    2. Install Python dev dependencies.
    3. Run python scripts/validate_package.py --profile-root ..
    4. Run pytest -q.
    5. Fix any YAML/JSON/schema issues.

    Acceptance:

    • Validator passes without CLAUDE_TRADING_SKILLS_REPO.
    • Validator warns but does not fail when external skills are missing.
    • Tests pass.

    Milestone 2 — Hermes install smoke test

    Tasks:

    1. Create a temporary Hermes home or test user profile.
    2. Install this repo using profile distribution install from local git path.
    3. Verify alias creation.
    4. Start a chat and confirm SOUL.md behavior.
    5. Run /trading-research-orchestrator.

    Acceptance:

    • Profile installs.
    • Profile can chat.
    • Built-in adapter skills load.

    Milestone 3 — External skills integration

    Tasks:

    1. Clone tradermonty/claude-trading-skills locally.
    2. Set CLAUDE_TRADING_SKILLS_REPO.
    3. Run validator.
    4. Run sync generator in external mode.
    5. Verify bundles list and individual bundle invocation.

    Acceptance:

    • Upstream skills are discoverable.
    • Missing skills are only Hermes-native adapter skills or are resolved.
    • /pre-market-routine loads the expected upstream skills.

    Milestone 4 — Cron enablement

    Tasks:

    1. Set HERMES_CRON_DELIVER=local.
    2. Run bash cron/create_cron_jobs.sh.
    3. Run trading-research-assistant cron list.
    4. Manually trigger pre-market and after-close jobs.
    5. Verify output structure.

    Acceptance:

    • Jobs are created with correct schedules and skill attachments.
    • Manual run produces structured brief.
    • Missing data produces degraded-mode warnings.

    Milestone 5 — Safety/output QA

    Tasks:

    1. Add sample prompts and expected output snapshots.
    2. Check that direct imperative buy/sell language is absent.
    3. Check required sections exist.
    4. Check data freshness section exists.
    5. Check human next action section exists.

    Acceptance:

    • Automated tests cover guardrails.
    • Manual review signs off on sample reports.

    Milestone 6 — Optional vendored mode

    Tasks:

    1. Implement copy mode in sync script fully.
    2. Add vendor-manifest.json generation with source commit if available.
    3. Add drift detection.
    4. Add tests for vendor path.

    Acceptance:

    • Profile works without external repo.
    • Release notes explain duplication and drift risk.

    Milestone 7 — v0.1.0 release

    Tasks:

    1. Update README with final install instructions.
    2. Update distribution.yaml version.
    3. Create release tag.
    4. Test install from GitHub URL.
    5. Add changelog.

    Acceptance:

    • New user can install and run the three primary commands:
      • /pre-market-routine
      • /after-close-review
      • /trade-journal
  • hermes-trading-research-agent/docs/03-hermes-compatibility-notes.mdmarkdown · 16.3 KB

    Hermes Compatibility Notes

    This file is updated by the coding agent against the installed Hermes version.

    Last verified: Hermes Agent v0.14.0 (2026.5.16) on macOS Darwin 25.2.0.

    Features assumed by this package

    • Profile Distributions can package a complete agent profile as a git repository.
    • Profiles isolate their own config.yaml, .env, SOUL.md, memories, sessions, skills, cron jobs, and gateway state.
    • Skills can be loaded as slash commands.
    • Hermes can scan external skill directories through skills.external_dirs.
    • Skill Bundles live under skill-bundles/ / profile-local equivalent and group several skills into one slash command.
    • Cron jobs can attach multiple skills and run scheduled routines.
    • Cron jobs run in fresh sessions, so prompts must be self-contained.
    • Cron delivery can target local files or messaging platforms.

    Verification status (v0.14.0)

    ItemStatusNotes
    distribution_owned accepts skill-bundles/✓ verifiedhermes profile install copies skill-bundles/ into ~/.hermes/profiles/<name>/skill-bundles/ along with other manifest-owned paths.
    Profile-local bundle path✓ verified~/.hermes/profiles/<name>/skill-bundles/*.yaml (or $HERMES_HOME/profiles/<name>/skill-bundles/).
    config.yaml environment expansion for skills.external_dirs✓ verifiedIn isolated install, trading-research-test-tmp resolved 55 upstream skills + 3 profile-local skills via ${CLAUDE_TRADING_SKILLS_REPO}/skills expansion at skill discovery time.
    CLI syntax for cron create --skill✓ verified--skill is repeatable. Positional args: schedule prompt. Options: --name, --deliver, --repeat, --script, --workdir, --profile. No -p shorthand on cron create.
    CLI syntax for cron run <job_id>✓ verifiedjob_id is the 12-char hex string from cron list, not the human name. --accept-hooks skips TTY prompt.
    CLI for profile install✓ verifiedhermes profile install <source> [--name <name>] [--alias] [--force] [-y]. --alias is boolean (no value). <source> accepts local directory; file:// prefix is not required. -y skips manifest preview confirmation.
    CLI for profile delete✓ verifiedhermes profile delete <name> [-y]. There is no hermes profile uninstall in v0.14.0.
    CLI for cron delete✓ verified, no -yhermes cron delete <job_id>. The -y/--yes flag is not supported on cron delete in v0.14.0 (unlike profile delete).
    bundles reload CLI syntax✓ verifiedhermes bundles reload takes no arguments. Profile aliases such as trading-research-assistant bundles reload scan that profile's skill-bundles/; the default profile scanned 0 bundles, while this profile reported No changes. 9 bundle(s) loaded.
    MCP config schema✓ verified, keep mcp.json emptyIn v0.14.0, hermes mcp add/list/test/configure read and write config.yaml under the mcp_servers: key, not this distribution's mcp.json. mcp.json remains an empty distribution-owned placeholder; do not put unverified servers there.
    Toolset restrictions for cron✓ verifiedcron create has no --toolsets flag. Cron uses per-job enabled_toolsets when created/updated by the cronjob tool/API, otherwise the profile's platform_toolsets.cron from hermes tools enable/disable --platform cron .... Scheduler still hard-disables cronjob, messaging, and clarify for cron agent runs.

    Operational findings (v0.14.0 smoke test)

    Cron jobs require the gateway to fire automatically

    cron create registers jobs as active, but they do not run on schedule until the gateway is up. Profile install does not start the gateway. Observed banner:

    ⚠ Gateway is not running — jobs won't fire automatically.
    

    Workaround documented in cron/README.md:

    • managed service: trading-research-assistant gateway install && trading-research-assistant gateway start
    • foreground: trading-research-assistant gateway run
    • manual-only: trading-research-assistant cron pause <job_id> per job and trigger via cron run + cron tick.

    chat -q '/bundle-name' is not a useful dogfood path

    In v0.14.0, trading-research-assistant chat -Q --yolo -q '/pre-market-routine' exits 0 but only emits a session_id, not the bundle output. End-to-end dogfood should go through cron run <job_id> --accept-hooks followed by cron tick --accept-hooks, then inspect cron/output/<job_id>/<timestamp>.md. Updated in docs/07-testing-acceptance-criteria.md and cron/README.md.

    trader-memory-core needs jsonschema at runtime

    Observed in after-close-review cron output:

    trader-memory-core CLI failed because jsonschema is not installed
    

    The skill itself ships under claude-trading-skills and resolves Python deps at the upstream level — this profile cannot fix it directly. Workarounds for users:

    python3 -m pip install jsonschema
    # or, if the skill is run via uv:
    uv pip install jsonschema
    

    A skill-side fix is to wrap the entry-point with uv run --with jsonschema. Tracked as an upstream issue rather than a TICKET in this repo. Listed in docs/04-skill-integration-strategy.md degraded-mode notes.

    Threat scanner blocks negative-form cron prompts

    hermes cron create runs each prompt through a threat scanner. Prompt phrases that combine conditional + negation + "do not fabricate / hide" semantics can match the deception_hide pattern and be rejected at submission time. Symptoms observed:

    Failed to create job: Blocked: prompt matches threat pattern 'deception_hide'.
    Cron prompts must not contain injection or exfiltration payloads.
    

    Workaround applied to prompts/pre-market-routine.md and prompts/after-close-review.md:

    • Rewrote If required data/API keys are missing, ... do not fabricate data as positive form (When data or API keys are unavailable, mark the relevant section as degraded mode and cite the missing input).
    • Removed direct Do not tell the user to buy or sell from cron prompts. The hard-constraint lives in SOUL.md and is reinforced by the QA harness (tests/test_output_safety.py).
    • Keep cron prompts neutral and outcome-oriented; let SOUL.md carry the prohibitions.

    If a future prompt edit triggers deception_hide again, rewrite the offending sentence in positive form before tightening the SOUL guardrail.

    Related convention: prompt template variables use a Jinja-like {{TIMEZONE}} marker rather than ${TIMEZONE}. The scanner has not flagged $-style env references that we know of, but the {{...}} form keeps the prompt body free of $ syntax entirely, removing a future false-positive surface. See cron/create_cron_jobs.py:_expand_prompt_template().

    --alias is HOME-bound, not HERMES_HOME-bound

    hermes profile install --alias writes a wrapper to ~/.local/bin/<name> (i.e. $HOME/.local/bin/<name>), not to $HERMES_HOME/.local/bin. For isolated testing, override HOME and PATH as well as HERMES_HOME:

    export TEST_HOME="$(mktemp -d /tmp/hermes-trading-home.XXXXXX)"
    export HOME="$TEST_HOME"
    export HERMES_HOME="$TEST_HOME/.hermes"
    export PATH="$HOME/.local/bin:$PATH"
    

    Restore HOME/PATH from saved originals in cleanup (otherwise subsequent phases run against a deleted HOME).

    model / provider are root-level config keys

    hermes config set inference.model claude-opus-4-7 does not affect the Model: field shown by hermes config show. The correct keys are model and provider:

    trading-research-test-tmp config set model    claude-opus-4-7
    trading-research-test-tmp config set provider anthropic
    trading-research-test-tmp config show           # Model: {'default': ..., 'provider': ...}
    

    This applies to both chat and cron runs. HERMES_INFERENCE_MODEL / HERMES_INFERENCE_PROVIDER env vars are invocation overrides (one-shot / TUI) and do not appear in config show.

    Cron timezone interpretation

    hermes cron create --help shows no timezone flag in v0.14.0. Cron expressions are interpreted in the host OS local timezone. The HERMES_TRADING_TIMEZONE: America/Los_Angeles value in config.yaml is a report-body label only consumed by skills — it does not affect scheduler firing times, and the runtime cron script intentionally does not read it for the host-TZ check.

    Runtime behaviour (cron/create_cron_jobs.py, invoked via the bash cron/create_cron_jobs.sh wrapper):

    • The expected timezone comes from data/schedule-presets.yaml:timezone (the YAML is the single source of truth for schedule, name, prompt_file, skills, and timezone).
    • On startup the script resolves the host IANA zone: (1) TZ env var when set — accept any value zoneinfo.ZoneInfo can resolve; (2) otherwise os.readlink("/etc/localtime") then fallback to Path.resolve(), splitting on /zoneinfo/ to extract the IANA suffix; (3) otherwise unknown.
    • It emits a WARNING on stderr in two cases and continues regardless:
      • Host zone resolved but differs from the preset zone — compared by IANA name, so America/Phoenix is still flagged against America/Los_Angeles in summer even though both are UTC-7 (DST rules differ).
      • Host zone could not be verified (e.g. TZ=Etc/NotAZone, or /etc/localtime is missing) — the message says the host TZ is unknown and names the expected zone.

    Deployment guidance:

    • Run the host in America/Los_Angeles (or whichever timezone matches the cron expressions in data/schedule-presets.yaml).
    • If running in a different timezone, rewrite the cron expressions in data/schedule-presets.yaml for your host. The runtime will pick the new values up automatically.

    If a future Hermes release adds a --tz flag, update cron/create_cron_jobs.py and cron/README.md accordingly.

    Bundle reload syntax

    hermes bundles reload has no positional arguments or options beyond -h/--help. It re-scans the active profile's bundle directory and reports added/removed bundles. Verified examples:

    trading-research-assistant bundles reload
    # No changes. 9 bundle(s) loaded.
    
    hermes bundles reload
    # No changes. 0 bundle(s) loaded.  # default profile has no bundles
    

    MCP config location

    The active MCP configuration path in Hermes v0.14.0 is config.yaml under mcp_servers:, managed by hermes mcp add/remove/list/test/configure. A stdio server added with:

    hermes mcp add demo-stdio --command true --args hello world
    

    is persisted as:

    mcp_servers:
      demo-stdio:
        command: "true"
        args:
          - hello
          - world
        enabled: false
    

    The --env KEY=VALUE option is supported for stdio MCP servers (--command or stdio presets), but not HTTP/SSE URL servers. mcp.json is distribution-owned by Hermes profile installs/updates, but the v0.14.0 hermes mcp CLI did not read it during verification. Keep this package's mcp.json empty and use hermes mcp add ... or profile config.yaml for real server enablement after validating the server package and permissions.

    Cron toolset restrictions

    hermes cron create --help exposes --skill, --script, --no-agent, --workdir, and --profile, but no toolset flag. Cron tool restrictions are available through two lower-level paths:

    • Per-job enabled_toolsets, created/updated by the Hermes cronjob tool/API, has first priority.
    • Profile-wide platform settings are stored in config.yaml under platform_toolsets.cron and can be edited non-interactively with commands such as hermes tools disable --platform cron browser image_gen tts.

    If neither is configured, the scheduler resolves the default cron platform toolset. In the scheduler, cronjob, messaging, and clarify are still passed as disabled toolsets for cron agent runs, even if they appear enabled in hermes tools list --platform cron.

    Profile install does not register cron presets

    hermes profile install (and subsequent hermes profile update) installs the profile assets — bundles, skills, prompts, config, .env.EXAMPLE — but does not create any cron jobs. The 4 presets declared in data/schedule-presets.yaml are registered only when the operator explicitly runs:

    bash cron/create_cron_jobs.sh
    

    Observed on 2026-05-25 operational soak (v0.1.6 latest-tag run):

    • macOS profile (v0.1.6 installed from github.com/tradermonty/hermes-trading-research-agent-work-package, cron script previously executed, gateway running): pre-market-routine (6084ade3b095, schedule 0 6 * * 1-5) fired at 2026-05-25T06:13:59.679316-07:00 and wrote a 112 KB output file with every required section present. PASS.
    • Linux profile (same v0.1.6 install, cron script never executed): cron list empty, no output file, no scheduler activity. MISS — not a bug, just the missing manual step.

    This is by design: cron/README.md and README.md "Enabling scheduled jobs" both document the script as the required step that turns a data/schedule-presets.yaml entry into a registered Hermes cron job. The finding is recorded here so a future operator does not assume that hermes profile install alone is enough.

    Cron tick latency

    The Hermes gateway evaluates cron expressions on a tick / queue basis, not in strict real time. Observed on the same 2026-05-25 soak: pre-market-routine with expression 0 6 * * 1-5 fired at 06:13:59 PDT, ~14 minutes after the nominal 06:00 PDT schedule. This is expected behaviour (gateway tick interval + LLM execution queue), not a delay incident.

    Operational consequence for soak judgement: an actual_fire_ts within roughly 0–30 minutes of expected_fire_ts is a PASS. A consistently larger delta across multiple firings (or a complete no-fire) should be recorded as an incident in the soak log and investigated.

    Forbidden-phrase scan applies to the ## Response section

    tests/test_output_safety.py scans bundle instructions and fixture output for execution-language phrases (place trades, execute trades, submit order, etc.). When inspecting a real cron-output markdown file by hand, restrict the scan to the ## Response section. The file also contains the verbatim prompt body above the response, and any prompt that intentionally tells the LLM "do not place trades" — together with the SOUL-style boundary statements — will match the forbidden-phrase regex if the entire file is grep'd.

    Observed on the 2026-05-25 pre-market-routine output: 0 hits inside ## Response, several false-positive hits in the prompt-echo section above it. The prompt echo is the bundle's safety instruction, not model output, and must not be treated as a violation.

    Upstream status inspection (before pulling skills)

    $CLAUDE_TRADING_SKILLS_REPO is a single local clone that is at once the upstream tracking mirror, the runtime skill source Hermes reads, and the place Hermes edits skills when asked to fix one during a session. A blind git pull of that clone can therefore overwrite local / Hermes-made edits. make upstream-status (TICKET-015, scripts/upstream_status.sh) inspects the checkout before a pull:

    CLAUDE_TRADING_SKILLS_REPO=/path/to/claude-trading-skills make upstream-status
    

    It reports branch, resolved upstream ref, dirty files, incoming commits, incoming skills/ + workflows/ file changes, and a local-edit risk label (NONE / LOW / MEDIUM / HIGH). It is working-tree safe, not fully read-only: it runs git fetch so remote-tracking refs / FETCH_HEAD may be updated, but it never pulls, merges, rebases, stashes, or touches a skill file. Verified by comparing git status --porcelain before and after a run — skill files are unchanged.

    Relationship to the existing TICKET-004b drift guard: that guard (tests/test_upstream_workflow_adapter.py, run by make test / make validate-all) catches mapping/upstream divergence after the checkout has changed. upstream-status is the before-pull counterpart — it tells you what a pull would bring and whether local edits are at risk. Neither pulls; both leave the decision to the operator. For permanent ownership separation, see vendored mode in docs/04-skill-integration-strategy.md.

    Known conservative choices

    • mcp.json is empty by default; active MCP servers should be configured via hermes mcp add ... / config.yaml:mcp_servers after validation.
    • Cron creation is a script (cron/create_cron_jobs.sh), not committed active jobs, to keep user consent explicit.
    • Default cron delivery is local.
    • External-linked mode is preferred until vendored mode has drift detection.
  • hermes-trading-research-agent/docs/04-skill-integration-strategy.mdmarkdown · 20.6 KB

    Skill Integration Strategy

    Canonical upstream files

    Use these upstream files as the source of truth:

    • skills-index.yaml: complete skill metadata and workflow membership.
    • workflows/*.yaml: canonical workflow manifests when present.
    • skills/*/SKILL.md: actual skill instructions.

    Current bundle-composition SoT (as of B-2b)

    3 overlap workflows (market-regime-daily / swing-opportunity-daily / monthly-performance-review) について B-2b で SoT 分担を明文化した:

    • upstream workflows/*.yaml = canonical intent — 上流 maintainer が review している workflow shape (required_skills, optional_skills, artifacts, steps, decision_gate, manual_review, when_to_run)。
    • data/skill-mapping.yaml = Hermes distribution contract — この profile が実行に使う superset。Hermes 側で追加した skill や、Hermes UX に合わせた required_outputs / refined title / refined cadence を 含む。
    • drift test (tests/test_upstream_workflow_adapter.py) = 機械的 ガード — 上流 required/optional が mapping skills の subset、 canonical_source marker が一致、upstream workflows/ 全 slug が overlap か ignore に classify されていることを検証。x-generated 値に 関係なく drift check は走る (自動修正なし、operator 判断)。

    projection 対象 (v0.1.x)

    upstream fieldmapping fielddrift-checked?
    required_skills + optional_skillsskills (superset 許可)yes (subset relation)
    canonical_source markercanonical_source == claude-trading-skills-workflowyes
    display_nametitledocumented but not drift-checked — mapping may refine upstream for Hermes UX (e.g. market-regime-daily upstream Market Regime Daily → mapping 15-minute daily market check)
    cadencecadencedocumented but not drift-checked — mapping may refine for Hermes execution semantics (e.g. swing-opportunity-daily upstream daily → mapping daily_when_risk_allows)

    Not projected in v0.1.x (B-2c 候補)

    • artifacts → required_outputs の direct 1:1 mapping。上流 artifacts は internal pipeline ID (market_breadth_report 等)、Hermes required_outputs は user-facing 項目 (regime_label 等) で抽象度が 違う。
    • steps / decision_gate の bundle instruction への展開。
    • manual_review / when_to_run の prompt body への projection。

    Upstream workflow inventory classification

    scripts/sync_claude_trading_skills.py:UPSTREAM_OVERLAP_SLUGS と UPSTREAM_IGNORED_WORKFLOW_SLUGS の 2 frozenset で、上流 workflows/*.yaml 全 slug を classify している。新規 upstream workflow が追加された場合、どちらかへの分類が無いと drift test が fail する — これは feature であり、上流の進化を見逃さないためのガード。

    現在の classification:

    upstream slugclassification理由
    market-regime-dailyoverlapHermes 同名 bundle として adopt
    swing-opportunity-dailyoverlapHermes 同名 bundle として adopt
    monthly-performance-reviewoverlapHermes 同名 bundle として adopt
    core-portfolio-weeklyignoredHermes は slug を weekly-portfolio-review に rename + required_outputs を Hermes UX 用に refine。上流 file は reference-only。
    trade-memory-loopignoredHermes は bundle 化していない。operator が trader-memory-core を /trade-journal / /monthly-performance-review 経由 (or 直接) で駆動する想定。上流 file は reference-only。

    x-generated: false 維持 — 3 overlap bundles は operator owned (TICKET-009 で swing-opportunity-daily に escalation pointer 追加など)。 adapter regen は走らず、drift test だけが両 SoT の整合をガードする。

    Initial adapter strategy

    This repo should not rewrite all trading skills for Hermes. Instead, it adds:

    1. Bundles that combine upstream skills.
    2. Hermes-native orchestrator skills.
    3. Cron prompts and report templates.
    4. Validation and sync scripts.

    Mapping rules

    • Bundle names should be task-oriented and user-friendly.
    • Bundle names should remain stable across releases.
    • Skill names must match upstream directory names.
    • If upstream workflow manifests exist, prefer their skill order.
    • If a missing skill is optional, report degraded mode.
    • If a missing skill is essential, fail validation in strict mode.

    Minimal recommended upstream skills for MVP

    PurposeSkills
    Navigationtrading-skills-navigator
    Market regimemarket-breadth-analyzer, uptrend-analyzer, market-top-detector, exposure-coach
    Macro/calendareconomic-calendar-fetcher, earnings-calendar
    Earningsearnings-trade-analyzer, pead-screener
    Candidate planningvcp-screener, canslim-screener, technical-analyst, position-sizer, breakout-trade-planner
    Memory/journaltrader-memory-core, signal-postmortem, trade-hypothesis-ideator
    Portfolioportfolio-manager, kanchi-dividend-review-monitor, value-dividend-screener

    Degraded mode behavior

    Missing componentBehavior
    CLAUDE_TRADING_SKILLS_REPOUse only Hermes adapter skills; instruct user to set path.
    FMP_API_KEYSkip FMP-backed fetches; use public/local/manual inputs only.
    FINVIZ_API_KEYUse Finviz URLs/manual flow rather than API-backed results.
    Alpaca keysSkip holdings/portfolio fetch; ask for manual snapshot or CSV.
    Chart imageAsk user to upload screenshot or skip chart interpretation.
    jsonschema Python module missingtrader-memory-core CLI degrades. Install via python3 -m pip install jsonschema (or uv pip install jsonschema). Skill output continues with reduced validation.

    Trade ticket primitive (as of B-3 / TICKET-009)

    The /trade-ticket bundle introduces a single operator-visible primitive between research output and post-hoc journaling: the trade ticket. A ticket is a JSON-Schema-validated YAML object (schemas/trade-ticket.schema.json) that captures one candidate, the operator-confirmed plan and risk, and an explicit approval state (DRAFT / REVIEW_READY / APPROVED / REJECTED / EXPIRED).

    Boundaries (codified by the schema, the bundle instruction, and tests/test_trade_ticket_schema.py):

    • approval.required is constant true on every ticket — the bundle never produces un-gated artifacts.
    • On APPROVED, the reviewer must re-type ticker, direction, entry, stop, and risk_per_trade_pct into approval.confirmed.*. The business-invariant test asserts the values match the ticket body (candidate.*, plan.*, risk.*) and are non-null. A mismatch demotes the ticket back to REVIEW_READY.
    • Output surface is the ticket YAML only. The bundle does not place orders, submit to brokers, or schedule executions. The instruction states this in positive form ("ticket output only; execution and broker submission are out of scope") and the boundary phrase is asserted by test.
    • Persistence is operator-owned. The bundle is stateless across invocations. The operator either commits ticket files under an external tickets/ directory or hands them to trader-memory-core via its own storage interface.
    • Lineage is carried through provenance.source_bundle and provenance.source_candidate_ref (a stable composite like NVDA-2026-05-24-VCP). The /swing-opportunity-daily and /pre-market-routine bundles' instructions are updated to require both fields when escalating a candidate to /trade-ticket.

    Out of scope for B-3 / TICKET-009 (deferred to a future ticket): multi-session ticket lifecycle, archive directory, id allocator, automatic expiration trigger, broker submission of any kind. The SOUL perimeter (SOUL.md) remains authoritative.

    Ticket persistence and journal bridge (as of TICKET-010)

    TICKET-010 extends the trade ticket primitive with two contract-level additions that close the Research → Human Go/No-Go → Trade Ticket → Journal loop without crossing the execution boundary. The bundle still emits YAML only; persistence and journal handoff remain operator-confirmed.

    Lifecycle figure (the five statuses unchanged, plus the optional bridge that fires when the operator wants to register / update / postmortem a thesis):

    DRAFT ──/trade-ticket review──▶ REVIEW_READY
              │
              ├─/trade-ticket APPROVE──▶ APPROVED ──(optional journal_bridge)──▶ trader-memory-core
              │
              ├─/trade-ticket REJECT───▶ REJECTED
              │
              └─/trade-ticket EXPIRE───▶ EXPIRED
    

    Suggested save filename: <ticket_id>.ticket.yaml under ${HERMES_TRADE_TICKET_DIR} (default ${HOME}/trading-research/tickets). The operator expands ${HOME} themselves; the bundle prints the literal. The .ticket.yaml suffix matches the repo's .gitignore safety net so an accidental in-repo save is caught.

    Three role split for persistence — no role silently writes on behalf of another:

    1. Bundle — emits the ticket YAML and a single trailing comment of the form # Suggested save path: ${HERMES_TRADE_TICKET_DIR}/<ticket_id>.ticket.yaml. Never writes to disk.
    2. Operator — reads the YAML and saves it at the suggested path (or anywhere else they prefer), after expanding ${HOME} themselves. The Hermes runtime does not bridge bundle output to disk.
    3. trader-memory-core — when the ticket carries an optional journal_bridge block, the operator hands the payload to trader-memory-core via its own storage interface to register, update, or postmortem the thesis. The ticket bundle does not call trader-memory-core directly.

    HERMES_TRADE_TICKET_DIR expansion — declared as a profile env in distribution.yaml:env_requires (optional, default ${HOME}/trading-research/tickets) and pre-seeded in .env.EXAMPLE. The .env parser used by cron/create_cron_jobs.py (and by extension any helper that reads the same file) returns the literal ${HOME}/...; consumers expand with os.path.expandvars(os.path.expanduser(value)). tests/test_trade_ticket_schema.py::test_env_expansion_yields_absolute_path locks that contract.

    journal_bridge shape — optional top-level object on any ticket. target is {"const": "trader-memory-core"} so typos (trader_memory_core) are rejected. action is one of register_thesis | update_thesis | postmortem. thesis_status (optional) is one of IDEA | ENTRY_READY | ACTIVE | CLOSED. notes (optional) is a non-empty string. Unknown fields inside journal_bridge are rejected (additionalProperties: false) so a thesis_statuz typo fails validation. The field is recommended on APPROVED tickets but not required — APPROVED is already heavy with the confirmed.* re-type contract, and forcing journal_bridge would break v0.1.5 fixtures. A future v0.2 series may add a JOURNALED status (6th value) and tighten journal_bridge on APPROVED as a deliberate breaking change.

    Out of scope for TICKET-010 (deferred): broker submission of any kind; LLM-side silent disk write; runtime ticket files committed to this repo; the cross-check between journal_bridge.action and thesis_status (e.g. postmortem → CLOSED); the JOURNALED status enum value; making journal_bridge required on APPROVED.

    Pre-market posture wording contract (TICKET-013)

    The v0.1.6 day-2 operational soak (2026-05-26 Tue, the trading day after Memorial Day) surfaced a real ambiguity: when the latest completed regular-session close (2026-05-22 Fri) is calendar-old only because Monday 2026-05-25 was a market holiday, the existing pre-market-routine output rendered Risk posture: risk-off / REDUCE_ONLY in a way that could read either as a structural regime change or as carry-forward pending fresh data. TICKET-013 pins a two-line preamble that separates session state from posture basis so the operator cannot misread a calendar gap as a structural change.

    Two-line preamble (mandatory before any risk-posture statement):

    1. Session state: — today's date relative to the US cash market in one of normal session day / US market holiday / weekend / unknown. Calendar fact about today, not a regime label.
    2. Posture basis: — the latest completed regular-session close used for the posture, with date, and one of three labels:
      • based on fresh latest completed regular-session close — expected most recent regular-session close is available with no holiday/weekend bridge (normal Tuesday pre-market where Monday's close is the basis).
      • carried forward from <YYYY-MM-DD> — the close is calendar-old only because today follows a weekend or market holiday. The posture is propagated from the most recent completed session rather than presented as a fresh regime change. Not mutually exclusive with the underlying truth that the close itself is the latest completed regular-session close — use this label whenever a holiday/weekend bridge sits between today and that close.
      • pending fresh data / degraded — the latest usable close is older than the previous regular cash-market session, or a required data source is missing.

    Source / Skill provenance — within the pre-market output's Data freshness / degraded mode section (section 8 in the bundle's section list, section 7 in prompts/pre-market-routine.md), render an explicit Source / Skill provenance sub-heading so the operator can trace each non-trivial item back to its skill or data source.

    Scope, test contract, and out-of-scope:

    • pre-market-routine only in TICKET-013. Horizontal rollout to /after-close-review, /market-regime-daily, and /swing-opportunity-daily is TICKET-014 candidate (deliberately deferred so we can refine the wording in one bundle before propagating).
    • Both the bundle instruction (skill-bundles/pre-market-routine.yaml) and the cron prompt body (prompts/pre-market-routine.md) carry the rule — the cron auto-fire path is driven by the prompt body plus attached skills, so the prompt body must carry the rule even if the bundle instruction also does.
    • LLM output is NOT regex-constrained at the contract layer — tests/test_pre_market_session_state_rule.py pins literal phrase presence in the bundle and the prompt file (6 phrases × 2 files = 12 parametrize cases). The rendering of the eventual output is left to the LLM so it can adapt while staying inside the pinned contract.
    • Holiday calendar API integration is out of scope — the v0.1.6 day-2 output correctly identified Memorial Day from context, so a calendar API is not required for this iteration.

    Vendored mode (TICKET-008)

    Why a second mode exists

    External-linked mode (the v0.1.0 default) reads skills from $CLAUDE_TRADING_SKILLS_REPO, which is a single local clone that simultaneously serves three roles:

    • the canonical upstream tracking mirror (git pull brings new releases),
    • the user's runtime skill source (Hermes reads SKILL.md from here),
    • the place Hermes itself edits during troubleshooting ("this skill isn't working, fix it" → Hermes edits SKILL.md in place).

    Because those three roles share one directory, a naive auto-update (git pull) is destructive: it overwrites local and Hermes-made edits without any ownership story. Vendored mode is the design answer — it copies the skills the profile actually uses into the profile itself, so upstream tracking and runtime skill ownership stop sharing a directory.

    Three modes

    ModeSkill sourceUser-edit / Hermes-edit ownershipUpdate pathStatus
    external-linked (existing default)$CLAUDE_TRADING_SKILLS_REPO (shared local clone)Lives in the upstream clone; vulnerable to upstream git pullManual git pull only; inspect first with make upstream-status (TICKET-015)Shipped since v0.1.0
    vendored (designed in TICKET-008a; implemented in TICKET-008b)skills/vendor/<skill-name>/ inside this profileLives in the profile; survives upstream git pull of the tracking cloneExplicit re-vendor via an opt-in workflowSkeleton exists in scripts/sync_claude_trading_skills.py:copy_vendor_skills(); today's skeleton is destructive (see warning); full safe semantics are TICKET-008b
    patches-on-vendored (a modifier of vendored mode)vendored base + patches/claude-trading-skills/<skill>.patchLocal / Hermes fixes recorded as explicit version-controlled patch files, re-applied after each re-vendorRe-vendor → apply patches → review conflictsConvention defined here; tooling is TICKET-008b

    Important — the current vendored skeleton is NOT yet the safe mode. The live copy_vendor_skills() in scripts/sync_claude_trading_skills.py calls shutil.rmtree(dest) on each existing skills/vendor/<skill>/ before re-copying, and make sync-vendor-write exposes that writer. Running make sync-vendor-write today silently destroys any hand-edits made directly inside skills/vendor/ — the exact failure mode vendored mode is meant to prevent. Until TICKET-008b lands the safe re-vendor + patch-preserving flow: treat skills/vendor/ as generated output, keep local fixes as patches/, and do not hand-edit vendored skills in place. The "survives upstream changes" column above describes the design, not today's sync-vendor-write behavior.

    Where Hermes-edited skills live in each mode

    • external-linked: a Hermes edit to SKILL.md lands in the upstream clone working tree. It survives until the next git pull (which may overwrite it). Run make upstream-status before pulling — it flags dirty skills//workflows/ as HIGH risk.
    • vendored (TICKET-008b): a Hermes edit lands in skills/vendor/<skill>/SKILL.md, owned by the profile. To keep it across a re-vendor, capture it as a patch under patches/claude-trading-skills/ (the skeleton's rmtree would otherwise drop it).
    • patches-on-vendored: the durable home for a fix you want to keep — a version-controlled .patch re-applied after every re-vendor.

    vendor-manifest.json minimum fields (documented by TICKET-008a; written by TICKET-008b)

    The existing copy_vendor_skills() writes a minimal {source_repo, mode, skills} manifest. TICKET-008b will expand it to record provenance and patch lineage:

    {
      "source_repo": "<URL or local path>",
      "source_commit": "<full SHA of upstream HEAD at vendor time>",
      "source_branch": "<branch name at vendor time>",
      "vendored_at": "<ISO-8601 UTC timestamp>",
      "mode": "vendor",
      "skills": ["<skill-1>", "<skill-2>", "..."],
      "patches": [
        {
          "skill": "<skill-name>",
          "path": "patches/claude-trading-skills/<skill>.patch",
          "applied_against": "<commit SHA the patch was made against>"
        }
      ]
    }
    

    Vendoring rules (carry into TICKET-008b)

    • Copy skills exactly into skills/vendor/<skill-name> — no silent edits to the copy.
    • Write the expanded vendor-manifest.json above (commit SHA, branch, timestamp, selected skills, patch lineage).
    • Never silently patch upstream skill files; store compatibility/local fixes as explicit patches/claude-trading-skills/<skill>.patch files and apply them as a recorded step.
    • The x-generated: ownership contract (TICKET-004a) is the precedent: an explicit ownership marker is what prevents destructive overwrite. TICKET-008b applies the same principle to vendored skills + patches.

    See docs/09-coding-tickets.md TICKET-008 for the 008a / 008b split and the implementation backlog.

    Three layers that watch upstream

    make upstream-status (TICKET-015) is one of three layers that keep the profile honest about upstream skill changes. They are complementary, not redundant:

    LayerStatusTriggerWhat it detects
    TICKET-004b drift guard (tests/test_upstream_workflow_adapter.py)Existing (v0.1.6)make test / make validate-all (automated CI)After the upstream checkout changed: mapping.skills ⊇ upstream required/optional, canonical_source marker, upstream workflow inventory classification
    TICKET-015 upstream-status (scripts/upstream_status.sh)Newmake upstream-status (manual)Before updating the working tree: incoming commits, incoming skills/ + workflows/ file changes, local-edit risk severity
    TICKET-008b vendored modeDeferredMode choice at install + future re-vendor workflowLong-term ownership: upstream tracking ↔ runtime skill source separated so Hermes-edited skills live in the profile, not in a pull-vulnerable clone

    The first two only report — neither pulls, and both leave the decision to the operator. Vendored mode (008b) is the structural fix that makes the report-and-decide loop unnecessary for the skills you have customised.

  • hermes-trading-research-agent/docs/05-workflows.mdmarkdown · 2.2 KB

    Workflow Definitions

    1. Pre-market routine

    Goal: provide a fast, structured view of the trading day before US market open.

    Inputs:

    • Economic calendar.
    • Earnings calendar and recent earnings reactions.
    • Breadth and uptrend data.
    • Market top/distribution risk.
    • Theme/sector signals.

    Outputs:

    • Risk posture.
    • Macro event risk.
    • Earnings movers.
    • Breadth/uptrend summary.
    • Watchlist candidates.
    • Human next actions.

    Human gate:

    • User decides whether to do nothing, review charts, reduce risk, or prepare possible orders in a separate execution system.

    2. After-close review

    Goal: close the process loop after the trading day.

    Inputs:

    • Daily market action.
    • Breadth/uptrend changes.
    • Sector/theme rotation.
    • Earnings reactions.
    • Open thesis records if available.

    Outputs:

    • What changed.
    • What invalidated.
    • What needs journaling.
    • Tomorrow preparation list.

    Human gate:

    • User confirms journal entries and decides whether any portfolio/trade changes are needed elsewhere.

    3. Earnings movers triage

    Goal: turn a noisy earnings list into a small review queue.

    Inputs:

    • Earnings announcements.
    • Gap/reaction data.
    • Volume/trend data.
    • News context.

    Outputs:

    • Ignore/watchlist/PEAD/manual-review classification.
    • Candidate thesis.
    • Invalidation.
    • Follow-up data.

    Human gate:

    • User performs chart review and separate risk planning.

    4. Trade journal

    Goal: capture process memory.

    Inputs:

    • User trade note.
    • Market regime.
    • Setup source.
    • Entry/stop/target/size when available.

    Outputs:

    • Structured journal entry.
    • Thesis record.
    • Postmortem trigger.

    Human gate:

    • User approves the final journal entry.

    5. Weekly portfolio review

    Goal: maintain long-term portfolio discipline.

    Inputs:

    • Holdings snapshot.
    • Dividend data.
    • Allocation/concentration.
    • Forced-review triggers.

    Outputs:

    • Review queue.
    • Risk and concentration notes.
    • Watchlist updates.

    Human gate:

    • User chooses whether to rebalance or research further.

    6. Monthly performance review

    Goal: improve the trading process.

    Inputs:

    • Trade journal.
    • Postmortems.
    • Candidate outcomes.
    • Backtest/research notes.

    Outputs:

    • Pattern summary.
    • Mistake taxonomy.
    • Next-month operating rules.
    • Skills/workflow improvement backlog.
  • hermes-trading-research-agent/docs/06-security-risk-controls.mdmarkdown · 1.5 KB

    Security and Risk Controls

    Secrets

    • Commit .env.EXAMPLE, never .env.
    • Use Hermes/env secret handling for provider keys.
    • Do not ask for secrets in chat messages.
    • Do not expose raw secret values in logs or reports.

    Brokerage safety

    Default: ALPACA_PAPER=true.

    This profile should not ship with live order placement. Any future execution integration must be separated into a different profile or require explicit opt-in with additional safeguards.

    Recommended stages:

    1. No brokerage access.
    2. Paper/read-only account context.
    3. Paper order template generation only.
    4. Separate execution system with human confirmation.

    Cron safety

    • Default delivery is local.
    • Installer explicitly enables cron jobs.
    • Routine prompts are self-contained.
    • Jobs must be visible in cron list.
    • Avoid hidden high-frequency jobs.
    • Avoid expensive or token-heavy hourly loops unless gated.

    Data integrity

    • Never fabricate market data.
    • State missing API keys.
    • State stale data.
    • Separate retrieved facts from synthesis.
    • Include skill/source provenance.

    Financial communication safety

    Use:

    • "research candidate"
    • "watchlist"
    • "requires manual confirmation"
    • "risk gate"
    • "invalidation"

    Avoid:

    • "buy now"
    • "sell now"
    • "guaranteed"
    • "safe trade"
    • "must enter"

    Distribution trust

    Profile distributions are powerful because they can package SOUL.md, skills, config, MCP, and cron assets. Users should be told to inspect the repo before installing, especially SOUL.md, skills/, cron/, and mcp.json.

  • hermes-trading-research-agent/docs/07-testing-acceptance-criteria.mdmarkdown · 6.0 KB

    Testing and Acceptance Criteria

    Automated tests

    Minimum tests (make test / pytest, 87 tests in v0.1.0):

    • Distribution manifest has the expected name and includes .env.EXAMPLE, README.ja.md, and CHANGELOG.md in distribution_owned (tests/test_package_structure.py).
    • All bundles have non-empty skill lists and instructions (tests/test_package_structure.py).
    • Prompt files referenced by schedules exist and contain the expected sections (tests/test_package_structure.py).
    • SOUL.md contains the non-execution guardrail strings (tests/test_package_structure.py).
    • No forbidden execution phrases (EN + JA, trading-context-only forms like 利益確定) appear in SOUL.md, prompts, or bundle instructions (tests/test_output_safety.py).
    • Every bundle instruction covers data freshness, source provenance, thesis, invalidation, risk, and a human decision gate (tests/test_required_sections.py).
    • Fixture sanity: tests/fixtures/sample_outputs/good_example.md does not trigger forbidden patterns; bad_example.md does (tests/test_required_sections.py).
    • Canonical upstream index validator (scripts/validate_upstream_index.py) exits 0 when every referenced skill resolves against skills-index.yaml, exit 2 on unresolved missing references. --strict mode forces nonzero on any missing reference regardless of docs/MISSING_SKILLS.md. Run via make validate-upstream (requires CLAUDE_TRADING_SKILLS_REPO).

    Out of scope for v0.1.0 (tracked under TICKET-004 follow-up)

    • "Generated bundles are deterministic" (re-running sync_claude_trading_skills.py --write produces no diff).
    • x-generated: false manual-edit protection during regeneration.
    • sync-external-write writing only into bundles without manual-edit markers.

    Manual Hermes smoke tests

    Test 1: Profile install (isolated)

    --alias writes a wrapper to $HOME/.local/bin/<name>, so isolate HOME and PATH to avoid touching the real user environment. See docs/03-hermes-compatibility-notes.md.

    TEST_PROFILE_NAME="trading-research-test-tmp"
    ORIG_HOME="$HOME"; ORIG_PATH="$PATH"
    export TEST_HOME="$(mktemp -d /tmp/hermes-trading-home.XXXXXX)"
    export HOME="$TEST_HOME"; export HERMES_HOME="$TEST_HOME/.hermes"
    export PATH="$HOME/.local/bin:$PATH"
    trap '
      hermes profile alias "$TEST_PROFILE_NAME" --remove 2>/dev/null || true
      hermes profile delete "$TEST_PROFILE_NAME" -y 2>/dev/null || true
      rm -rf "$TEST_HOME"
      export HOME="$ORIG_HOME"; export PATH="$ORIG_PATH"; unset HERMES_HOME
    ' EXIT
    
    hermes profile install "$(pwd)" --name "$TEST_PROFILE_NAME" --alias -y
    "$TEST_PROFILE_NAME" config set model    claude-opus-4-7
    "$TEST_PROFILE_NAME" config set provider anthropic
    "$TEST_PROFILE_NAME" chat
    

    Expected:

    • Profile starts.
    • Assistant behavior reflects SOUL.md.

    Test 2: Bundle discovery

    trading-research-assistant bundles list
    trading-research-assistant bundles show pre-market-routine
    

    Expected:

    • Bundles appear.
    • Missing upstream skills are obvious if external repo is not configured.

    Test 3: Manual pre-market run (via cron run, not chat -q)

    In v0.14.0 trading-research-assistant chat -q '/pre-market-routine' exits 0 but returns only a session_id — not the bundle output. Use the cron path for end-to-end dogfood:

    HERMES_PROFILE_CMD="$TEST_PROFILE_NAME" bash cron/create_cron_jobs.sh
    hermes -p "$TEST_PROFILE_NAME" cron list   # capture <pre_market_job_id>
    hermes -p "$TEST_PROFILE_NAME" cron run <pre_market_job_id> --accept-hooks
    hermes -p "$TEST_PROFILE_NAME" cron tick --accept-hooks
    cat "$HERMES_HOME/profiles/$TEST_PROFILE_NAME/cron/output/<pre_market_job_id>/"*.md
    

    Expected sections in the generated .md:

    • Risk posture.
    • Macro calendar (may be degraded if FMP_API_KEY is unset — must say so).
    • Market regime (breadth, uptrend).
    • Earnings movers (may be degraded — must say so).
    • Watchlist / review queue.
    • Human next actions.
    • Data freshness with as-of timestamps.

    Forbidden:

    • Direct buy/sell instruction (caught by tests/test_output_safety.py over inputs; reviewer also spot-checks the output).
    • Fabricated prices/events — when data is missing the section must enter degraded mode and cite which key/skill is unavailable.

    Test 4: Trade journal run

    /trade-journal I entered XYZ long at 100, stop 95, target 115 because of VCP breakout. Risk 0.5%.
    

    Expected:

    • Structured journal entry.
    • Thesis and invalidation captured.
    • Review plan created.

    Test 5: Cron creation and dogfood

    export HERMES_CRON_DELIVER=local
    HERMES_PROFILE_CMD="$TEST_PROFILE_NAME" bash cron/create_cron_jobs.sh
    hermes -p "$TEST_PROFILE_NAME" cron list
    # Pick the 12-char hex job_ids from the output, then dogfood both
    # pre-market and after-close jobs end-to-end:
    hermes -p "$TEST_PROFILE_NAME" cron run <pre_market_job_id>  --accept-hooks
    hermes -p "$TEST_PROFILE_NAME" cron tick --accept-hooks
    hermes -p "$TEST_PROFILE_NAME" cron run <after_close_job_id> --accept-hooks
    hermes -p "$TEST_PROFILE_NAME" cron tick --accept-hooks
    # Inspect generated briefs:
    ls "$HERMES_HOME/profiles/$TEST_PROFILE_NAME/cron/output/"
    

    Expected:

    • Four jobs are listed.
    • Both cron run invocations end with Last run: ok.
    • cron/output/<job_id>/<timestamp>.md exists for both jobs and contains the required sections (data freshness, thesis, invalidation, risk, human decision gate).
    • Missing API keys (e.g. FMP_API_KEY) cause affected sections to be explicitly marked as degraded mode rather than fabricated.

    Notes:

    • Cron jobs do not fire automatically until gateway install && gateway start (or gateway run). Tests that rely on auto-fire must start the gateway or pause the jobs and trigger them via cron run + cron tick as shown above.
    • Cron prompts in prompts/ are written in positive form to avoid Hermes' deception_hide threat scanner blocking them at submission time. See docs/03-hermes-compatibility-notes.md.

    Release acceptance

    MVP is done when a new user can install, configure .env, run /pre-market-routine, run /after-close-review, and use /trade-journal without knowing the internal skill list.

  • hermes-trading-research-agent/docs/08-release-playbook.mdmarkdown · 16.1 KB

    Release Playbook

    Pre-release checklist

    • Verify Hermes version and update docs/03-hermes-compatibility-notes.md (verified table + operational findings).
    • Run make validate (= python3 scripts/validate_package.py --profile-root .).
    • Run make test (= python3 -m pytest -q). All 87+ tests must pass.
    • Run make validate-upstream (requires CLAUDE_TRADING_SKILLS_REPO). Confirm zero unresolved missing skills, or that every miss is documented in docs/MISSING_SKILLS.md as degraded-mode accepted.
    • In an isolated temp HOME (see docs/07-testing-acceptance-criteria.md Test 1), exercise both /pre-market-routine and /after-close-review via cron run <job_id> --accept-hooks + cron tick --accept-hooks (do not rely on chat -q '/bundle' — in v0.14.0 it only returns a session_id, not the bundle output).
    • Confirm the generated cron/output/<job_id>/<timestamp>.md for each contains every required section (risk posture, regime, watchlist, human next actions, data freshness with as-of timestamps) and explicitly marks any missing-API-key section as degraded.
    • If trader-memory-core is in scope for the release, confirm the host has jsonschema installed (python3 -m pip install jsonschema or uv pip install jsonschema); without it the skill enters degraded mode. Filed upstream as a feature request for claude-trading-skills to either declare the runtime dep or self-bootstrap via uv run --with jsonschema.
    • When publishing an updated profile, remind installed users to run hermes profile update trading-research-assistant -y — installed copies otherwise keep stale docs (e.g. older repo name in ~/.hermes/profiles/.../docs/08-release-playbook.md).
    • Decide gateway mode for the release: documented "managed" (gateway install && gateway start) for production, or "manual-only" (pause every cron job) for dry-runs.
    • Confirm cron/create_cron_jobs.sh runs cleanly with HERMES_PROFILE_CMD="$TEST_PROFILE_NAME" and no prompt is rejected by the deception_hide threat scanner.
    • Confirm mcp.json remains empty; real MCP servers should be added via hermes mcp add ... / config.yaml:mcp_servers only after server package, command, env, and permissions are verified.
    • Confirm .env is not committed (.gitignore covers it; .env.EXAMPLE is the user-facing template and IS shipped via distribution_owned).
    • Confirm distribution.yaml distribution_owned includes .env.EXAMPLE, README.md, README.ja.md, and CHANGELOG.md (tests/test_package_structure.py::test_distribution_manifest_includes_user_docs_and_env_example).
    • Update CHANGELOG.md (move [Unreleased] items into the new version, add release date).
    • Update distribution.yaml version field.

    Tagging and release

    Pre-release commits (CHANGELOG fold, distribution.yaml:version bump, etc.) should already be on main. Use annotated tags so git describe and GitHub Releases show a meaningful message, and push the tag separately from main so a tag-only re-push is possible later.

    git status                                      # working tree clean
    git log --oneline -5                            # verify HEAD is the release commit
    
    git tag -a v0.1.0 -m "v0.1.0 MVP — see CHANGELOG.md"
    git push origin v0.1.0                          # push the tag (not main --tags)
    
    # Minimal:
    gh release create v0.1.0 --notes-file CHANGELOG.md
    # Or with an explicit title (preferred for readability on the Releases page):
    # gh release create v0.1.0 --title "v0.1.0 MVP" --notes-file CHANGELOG.md
    

    If you also need to push main (e.g. the release commit hasn't been pushed yet):

    git push origin main
    

    Avoid git push origin main --tags in one shot — it bundles unrelated tag refs and is harder to reason about during release.

    Post-release verification

    Acceptance test in an isolated HOME so the public install path is exercised end-to-end without touching the real user environment. This calls a paid LLM, so run it deliberately.

    Anthropic-key path (matches the default Quick Start)

    # Preflight: API key must already be exported in the caller env. A fresh
    # HOME starts without one, so check before isolating.
    : "${ANTHROPIC_API_KEY:?ANTHROPIC_API_KEY must be exported before acceptance test}"
    
    # Isolation
    TEST_PROFILE_NAME="trading-research-acceptance"
    ORIG_HOME="$HOME"; ORIG_PATH="$PATH"
    export TEST_HOME="$(mktemp -d /tmp/hermes-trading-release-test.XXXXXX)"
    export HOME="$TEST_HOME"; export HERMES_HOME="$TEST_HOME/.hermes"
    export PATH="$HOME/.local/bin:$PATH"
    trap '
      hermes profile alias "$TEST_PROFILE_NAME" --remove 2>/dev/null || true
      hermes profile delete "$TEST_PROFILE_NAME" -y 2>/dev/null || true
      rm -rf "$TEST_HOME"
      export HOME="$ORIG_HOME"; export PATH="$ORIG_PATH"; unset HERMES_HOME
    ' EXIT
    
    # Public install path
    hermes profile install github.com/tradermonty/hermes-trading-research-agent-work-package \
      --name "$TEST_PROFILE_NAME" --alias -y
    "$TEST_PROFILE_NAME" config set model    claude-opus-4-7
    "$TEST_PROFILE_NAME" config set provider anthropic
    "$TEST_PROFILE_NAME" config show
    
    # Runtime dep for trader-memory-core (upstream skill imports jsonschema directly)
    python3 -m pip install jsonschema
    
    # Sanity
    "$TEST_PROFILE_NAME" bundles list                  # 9 entries
    python3 "$HOME/.hermes/profiles/$TEST_PROFILE_NAME/scripts/validate_package.py" \
      --profile-root "$HOME/.hermes/profiles/$TEST_PROFILE_NAME"
    
    # Cron dogfood
    HERMES_PROFILE_CMD="$TEST_PROFILE_NAME" \
      bash "$HOME/.hermes/profiles/$TEST_PROFILE_NAME/cron/create_cron_jobs.sh"
    hermes -p "$TEST_PROFILE_NAME" cron list           # 4 jobs, capture job_ids
    hermes -p "$TEST_PROFILE_NAME" cron run <pre_market_job_id>  --accept-hooks
    hermes -p "$TEST_PROFILE_NAME" cron tick --accept-hooks
    ls "$HERMES_HOME/profiles/$TEST_PROFILE_NAME/cron/output/"
    

    OAuth-based providers (openai-codex etc.)

    Fresh HOME/HERMES_HOME starts with no auth state, so OAuth-based providers need an explicit login inside the isolated environment:

    hermes login --provider openai-codex   # opens browser, writes auth to $HERMES_HOME
    "$TEST_PROFILE_NAME" config set provider     openai-codex
    "$TEST_PROFILE_NAME" config set model        gpt-5.5
    "$TEST_PROFILE_NAME" config set model.base_url https://chatgpt.com/backend-api/codex
    

    For the Anthropic-key path above no hermes login is needed — the key is read from the env var on each invocation.

    Operational soak (prod alias, real-time gateway)

    The Post-release verification above runs in an isolated temp HOME and triggers cron jobs by hand (cron run <job_id>). That validates the install path and the prompt body. It does not validate that the Hermes scheduler actually fires a job at its scheduled time, and it does not exercise the production trading-research-assistant alias on the real ~/.hermes.

    This section is a separate soak procedure for that. It is not part of the per-release pre-flight — run it once per significant gateway / cron change, then re-run any time a real-user incident points back at the scheduler.

    Trigger history:

    • v0.1.4 — first soak (B-2a generator-ownership + determinism shipped).
    • v0.1.5 — /trade-ticket added but manual-only; cron/gateway surface unchanged, so the procedure did not auto-retrigger.
    • v0.1.6 — TICKET-010 (/trade-ticket persistence + journal bridge) and TICKET-004b (read-only upstream drift guard) both keep the cron/gateway surface untouched (sync() write path is unchanged and no scheduled bundle was modified), so the procedure does not auto-retrigger here either. Recommended once as a latest-tag soak so the prod-alias profile version matches the published release tag — running this once after each release keeps the prod alias and the latest tag in lockstep, which simplifies incident comparison; future incident reports then reference v0.1.6 as the running version.
    • Next auto-retrigger — when anything in cron/ or scripts/sync_claude_trading_skills.py write path shifts, or when data/schedule-presets.yaml semantics change.

    Cost / time note: the soak waits for at least one scheduled cron firing in wall-clock time and produces a real LLM-backed brief. Budget at least one trading-day window plus a small per-firing LLM cost.

    0. Preconditions

    • v0.1.4+ profile already installed under the prod alias trading-research-assistant against the real ~/.hermes (not the isolated soak HOME used in Post-release verification).
    • Provider auth is valid for whatever <alias> config show reports. For API-key providers (Anthropic, OpenAI raw, OpenRouter), the matching key is set in the profile .env. For OAuth providers (e.g. openai-codex), hermes login --provider <name> has already been run against the real ~/.hermes so the auth state is on the host.
    • python3 -m pip install jsonschema pyyaml already run on the host (otherwise trader-memory-core degrades and cron/create_cron_jobs.py fails to import).
    • Host IANA timezone matches the preset (America/Los_Angeles). If it does not, the runtime will already have warned during cron creation — recompute the schedules per cron/README.md before starting the soak.
    • Decide a soak window long enough to cover at least one scheduled job (e.g. an overnight window covering the next weekday 0 6 * * 1-5 pre-market firing).

    1. Start the gateway

    # Confirm the prod profile is installed and the wrapper is on PATH.
    hermes profile list | grep -F "trading-research-assistant"
    command -v trading-research-assistant
    
    # Cron jobs should already exist from `bash cron/create_cron_jobs.sh`.
    trading-research-assistant cron list   # expect 4 active jobs with Next run timestamps
    
    # Managed gateway (recommended):
    trading-research-assistant gateway install
    trading-research-assistant gateway start
    trading-research-assistant gateway status   # expect "running" / similar
    

    If you prefer a foreground run for live tailing, trading-research-assistant gateway run works but blocks the terminal.

    2. Wait for a scheduled firing

    The point of the soak is to confirm the scheduler fires without cron run. Do not trigger anything by hand during the window.

    While waiting, occasionally check:

    trading-research-assistant gateway status
    trading-research-assistant cron list                  # Next run timestamp should advance after a firing
    ls -la ~/.hermes/profiles/trading-research-assistant/cron/output/
    

    3. Inspect the firing

    After the expected wall-clock time, the matching cron/output/<job_id>/<timestamp>.md should exist. Confirm:

    • File creation time is after the scheduled wall-clock time and matches the expected America/Los_Angeles cron expression. Record both timestamps (scheduler fire vs. output file mtime). The Hermes gateway evaluates cron expressions on a tick / queue basis, so an actual_fire_ts within roughly 0–30 minutes of expected_fire_ts is a PASS; consistently larger deltas across multiple firings should be flagged as an incident. (Observed v0.1.6 on macOS: 0 6 * * 1-5 fired at 06:13:59 PDT, ~14 min after nominal — PASS. See docs/03 → Cron tick latency.)
    • The brief contains every required section (risk posture, regime, watchlist, human next actions, data freshness with as-of timestamps).
    • Missing-API-key sections are explicitly marked as degraded mode rather than fabricated.
    • Timezone label for the report: <timezone> matches HERMES_TRADING_TIMEZONE (or the preset YAML fallback).
    • The brief does not contain forbidden execution language. Restrict the scan to the ## Response section — the cron output file also contains the verbatim prompt body above the response, and the prompt deliberately carries safety instructions ("do not place trades", "execution is out of scope") that will produce false positives when grep'd against the whole file. The prompt echo is bundle safety instruction, not model output. See docs/03 → Forbidden-phrase scan applies to the ## Response section.

    4. Record the run in the soak log

    Append one row per firing to a soak log (kept locally; do not commit the soak log to this repo — it can contain account-flavored context). Suggested template:

    # Operational soak log — trading-research-assistant
    
    | Soak date | Hermes ver | Profile ver | Job id | Job name | Schedule | Actual fire (UTC) | Actual fire (local) | Deliver | Output file | Required sections OK? | Degraded sections | Notes |
    |---|---|---|---|---|---|---|---|---|---|---|---|---|
    | 2026-05-26 | v0.14.0 | v0.1.4 | ec09df0e0f94 | Pre-market routine | 0 6 * * 1-5 | 2026-05-26T13:00:12Z | 2026-05-26T06:00:12-07:00 | local | cron/output/ec09df0e0f94/2026-05-26_06-00-12.md | yes | FMP earnings calendar (key absent) | first soak after v0.1.4 |
    

    Failure rows (gateway crashed, no firing, threat scanner reject, missing output file, missing required section, regression on {{TIMEZONE}} expansion, etc.) are the valuable ones — capture them with as much context as possible.

    5. Decide stop / continue

    After the planned window:

    # Stop the gateway for the soak window (optional — leave running for prod use).
    trading-research-assistant gateway stop      # or `gateway uninstall` to remove the managed service entirely
    

    Do not delete the profile after the soak — that is a separate decommission step.

    6. Promote findings

    For every failure row in the soak log:

    • If the cause is in this repo, open a ticket and update docs/03-hermes-compatibility-notes.md "Operational findings" with a new subsection (mirroring the existing gateway not running, chat -q, jsonschema, deception_hide, --alias is HOME-bound, model/provider keys, cron timezone interpretation pattern).
    • If the cause is upstream (claude-trading-skills or Hermes Agent), file the issue there and link it from docs/03 so the next reader sees the boundary.
    • If the cause is operator setup (timezone mismatch, missing API key), reinforce the relevant Quick Start / cron/README.md line.

    7. Soak-exit checklist

    • At least one scheduled job fired at the expected wall-clock time without cron run intervention.
    • The corresponding cron/output/<job_id>/<timestamp>.md contains all required sections.
    • Degraded-mode sections (if any) are explicit, not fabricated.
    • The soak log captures the firing (success or failure rows).
    • Any new operational findings are folded into docs/03-hermes-compatibility-notes.md and pointed at from the next release CHANGELOG.

    Release notes template

    # v0.1.0
    
    Initial Hermes Trading Research Assistant profile distribution. Verified against Hermes Agent v0.14.0.
    
    Includes:
    - SOUL.md trading research policy (research and process assistant, no order placement).
    - Nine slash-command bundles: pre-market, after-close, market regime, swing opportunity, earnings movers triage, portfolio risk check, trade journal, weekly portfolio review, monthly performance review.
    - Three profile-local adapter skills: trading-research-orchestrator, trading-cron-brief-writer, trading-risk-gate.
    - External-linked integration with tradermonty/claude-trading-skills via `CLAUDE_TRADING_SKILLS_REPO`.
    - Cron creation script for the four scheduled routines with host-local-timezone semantics documented.
    - Canonical upstream index validator (`scripts/validate_upstream_index.py`) with `--strict` mode for CI.
    - pytest suite (87 tests): structure, EN/JA output safety, required concepts per bundle, fixtures.
    - Hermes v0.14.0 compatibility notes including `deception_hide` threat-scanner workaround and HOME/HERMES_HOME/PATH isolation guidance.
    
    Known limitations (deferred to a future release):
    - External-linked mode is the only supported integration. Vendored mode (TICKET-008) is not shipped.
    - `sync_claude_trading_skills.py --write` regenerates bundles from `data/skill-mapping.yaml` + `build_instruction()`; manual `instruction:` edits are preserved only as long as you do not run the writer. Generator hardening, `x-generated: false` protection, and deterministic-output tests remain as TICKET-004 follow-up.
    - MCP config ships with `mcp.json` empty. In Hermes v0.14.0, active MCP servers belong in profile `config.yaml:mcp_servers` via `hermes mcp add ...`; `mcp.example.json` is placeholder reference only.
    - No live brokerage execution.
    
  • hermes-trading-research-agent/docs/09-coding-tickets.mdmarkdown · 20.4 KB

    Coding Tickets

    TICKET-001 — Validate skeleton

    • Run package validator and tests.
    • Fix any local path or YAML problems.
    • Output a short report.

    Done when:

    • make validate passes.
    • make test passes.

    TICKET-002 — Hermes profile distribution smoke test

    • Create a local git repo from this package.
    • Install via Hermes profile distribution.
    • Verify alias and chat.

    Done when:

    • trading-research-assistant chat works.
    • SOUL.md is active.

    TICKET-003 — External skills validation

    • Clone claude-trading-skills.
    • Set CLAUDE_TRADING_SKILLS_REPO.
    • Validate bundle skill references.
    • Document missing skills if any.

    Done when:

    • Validator can check upstream skill dirs.

    TICKET-004 — Bundle generator hardening

    Split into two follow-up tickets to keep release boundaries clean once the first half started shipping in v0.1.x.

    TICKET-004a — Generator ownership + determinism (✓ shipped in B-2a)

    • Preserve manual bundle edits when x-generated: false.
    • Treat missing x-generated key as legacy-unknown and skip with WARN.
    • Write-if-changed for x-generated: true bundles (no spurious mtime).
    • update_external_config() is also idempotent: no-op when the ${CLAUDE_TRADING_SKILLS_REPO}/skills entry is already present.
    • --force-overwrite escape hatch + make sync-external-write-force double-gated by REQUIRE_SYNC_WRITE=1 and REQUIRE_FORCE_OVERWRITE=1.
    • tests/test_sync_determinism.py covers skip / force / write-if-changed / new-file / update_external_config idempotency / real-repo second-run-noop.

    Done when:

    • Re-run of make sync-external-write produces no diff (mtime + content invariant) for both skill-bundles/*.yaml and config.yaml.

    TICKET-004b — Upstream workflows adapter (✓ shipped in B-2b)

    (✓ Shipped in v0.1.6 alongside TICKET-010 and the typo-guard polish. Closes Phase 2 — Bundle generation. Implementation footprint stays small because all 3 overlap bundles are x-generated: false and the adapter is a read-only drift guard, not a regenerator.)

    Scope (rev3 final, after rev1 → rev3 review iteration):

    • 3 overlap slugs (market-regime-daily / swing-opportunity-daily / monthly-performance-review) declared in scripts/sync_claude_trading_skills.py:UPSTREAM_OVERLAP_SLUGS. Adopted as canonical-intent upstream; mapping is the distribution-contract superset (Hermes adds ibd-distribution-day-monitor, ftd-detector, exposure-coach, trade-hypothesis-ideator).
    • 2 ignored slugs (core-portfolio-weekly / trade-memory-loop) declared in UPSTREAM_IGNORED_WORKFLOW_SLUGS with reasons documented in docs/04 "Upstream workflow inventory classification" table. (core-portfolio-weekly is renamed to weekly-portfolio-review in Hermes; trade-memory-loop is driven by the operator via trader-memory-core directly.)
    • sync() write path unchanged — adapter does not regenerate bundles. B-2a x-generated: false SKIP contract is preserved (10 SKIP / 0 rewrite against the shipped tip).

    Drift-check scope (machine-enforced):

    • upstream required_skills ⊆ mapping.skills
    • upstream optional_skills ⊆ mapping.skills
    • mapping.canonical_source == "claude-trading-skills-workflow" for the 3 overlap slugs (SoT marker)
    • Every upstream workflows/*.yaml file is in UPSTREAM_OVERLAP_SLUGS ∪ UPSTREAM_IGNORED_WORKFLOW_SLUGS (filesystem enumeration; new upstream files force an explicit classification decision)
    • UPSTREAM_OVERLAP_SLUGS ∩ UPSTREAM_IGNORED_WORKFLOW_SLUGS == ∅ (rev3 Low fold; catches accidental dual-classification)

    Documented but not drift-checked (mapping refinement is allowed):

    • display_name ↔ title
    • cadence (e.g. upstream daily → mapping daily_when_risk_allows)

    Not projected at all in v0.1.x (B-2c candidates):

    • artifacts → required_outputs direct 1:1 mapping (abstraction mismatch — upstream artifacts are internal pipeline IDs, Hermes required_outputs are user-facing items)
    • steps / decision_gate / manual_review / when_to_run bundle instruction projection

    Files touched:

    • scripts/sync_claude_trading_skills.py: +3 public symbols (UPSTREAM_OVERLAP_SLUGS, UPSTREAM_IGNORED_WORKFLOW_SLUGS, load_upstream_workflow()). No write-path change.
    • tests/test_upstream_workflow_adapter.py (new): 5 named tests, 13 parametrize cases. Module-level skip without CLAUDE_TRADING_SKILLS_REPO.
    • docs/04-skill-integration-strategy.md: rewrote "Current bundle-composition SoT" subsection from "(as of B-2a)" to "(as of B-2b)" with SoT split + projection table + drift-check table + inventory classification table.
    • Makefile: sync-external-write comment "nine SKIP lines" → "ten SKIP lines" (stale since TICKET-010 added /trade-ticket).

    Done when:

    • All 13 drift cases pass under CLAUDE_TRADING_SKILLS_REPO=....
    • Without CLAUDE_TRADING_SKILLS_REPO, the module skips cleanly (suite stays at 162).
    • make sync-external-write SKIP count stays 10 (no x-generated flip on any of the 3 overlap bundles).
    • docs/04 carries the SoT split, the projection-vs-drift-check table, and the upstream inventory classification table.

    TICKET-005 — Cron UX

    • Verify current Hermes cron syntax.
    • Update script if needed.
    • Test local delivery.
    • Add Telegram notes if relevant.

    Done when:

    • Four default jobs are created and listable.

    TICKET-006 — Output QA harness

    • Add sample inputs.
    • Add expected section checks.
    • Add forbidden phrase checks.

    Done when:

    • pytest fails if direct buy/sell language appears in prompts or SOUL.

    TICKET-007 — Release docs

    • Add final README.
    • Add Japanese README section.
    • Add changelog.

    Done when:

    • A new user can follow README without private context.

    TICKET-008 — Vendored mode

    Split into 008a (scope clarification, docs only) and 008b (implementation, deferred), following the TICKET-004 004a/004b precedent.

    TICKET-008a — Vendored mode scope clarification (docs only)

    (On main; folds into the next release. No code — this entry exists so the 008b implementation has a written contract.)

    • Documents why a second mode exists: external-linked mode's $CLAUDE_TRADING_SKILLS_REPO clone is simultaneously the upstream mirror, the runtime skill source, and the place Hermes edits skills during troubleshooting. A naive git pull over that clone is destructive.
    • Defines the three-mode model in docs/04-skill-integration-strategy.md → "Vendored mode (TICKET-008)": external-linked (default, vulnerable to pull), vendored (skills/vendor/, profile-owned), patches-on-vendored (version-controlled .patch files re-applied after re-vendor).
    • Records the danger note: the current copy_vendor_skills() skeleton shutil.rmtrees each skills/vendor/<skill>/ before re-copying, so make sync-vendor-write is destructive for hand-edited vendored skills today. Vendored mode is the intended safe mode; the safe writer is 008b.
    • Documents the vendor-manifest.json minimum fields 008b must write (source_repo, source_commit, source_branch, vendored_at, mode, skills, patches[]).

    Done when (008a):

    • docs/04 carries the three-mode table, the destructive-skeleton warning in plain language, the per-mode "where do Hermes-edited skills live" notes, and the vendor-manifest.json shape.
    • This docs/09 entry is no longer skeletal — a reader can derive the 008b implementation surface from it.

    TICKET-008b — Vendored mode implementation (deferred, plan TBD)

    The 008a docs are the contract. Anticipated implementation surface:

    • JSON Schema for vendor-manifest.json + a validator test.
    • Expand copy_vendor_skills() to populate source_commit, source_branch, vendored_at, and patches[], and to stop destroying hand-edits (re-vendor must preserve or re-apply patches/, not rmtree blindly).
    • A patches/ application pipeline (scripts/apply_vendored_patches.sh or a hook into sync-vendor-write).
    • Drift detection between the vendored copy and upstream HEAD (analogous to the TICKET-004b workflow drift guard, but for skills/ contents).
    • Vendored-mode awareness in make upstream-status (TICKET-015).

    Done when (008b):

    • Profile works without the external repo (skills resolved from skills/vendor/).
    • make sync-vendor-write (or its successor) is non-destructive for hand-edited / patched vendored skills.
    • vendor-manifest.json validates against its schema and records provenance
      • patch lineage.

    TICKET-009 — /trade-ticket bundle + Trade Ticket schema (B-3)

    (Shipped in v0.1.5 on 2026-05-24; the v0.1.5 release also folded the audit-field polish — reviewer.minLength: 1, ISO-8601 pattern on created_at / decided_at, validator built with format_checker.)

    • New schemas/trade-ticket.schema.json (JSON Schema draft/2020-12). Top-level required: ticket_id, created_at, status, approval, candidate, plan, risk, provenance. Status enum exactly [DRAFT, REVIEW_READY, APPROVED, REJECTED, EXPIRED]. approval.required is {"const": true} at the base level. allOf + if/then enforce per-status approval invariants; the APPROVED branch tightens numeric fields (plan.entry.value, plan.stop.value, risk.risk_per_trade_pct, approval.confirmed.entry, approval.confirmed.stop, approval.confirmed.risk_per_trade_pct) to non-null.
    • New skill-bundles/trade-ticket.yaml (x-generated: false). Five operator verbs (new / review / APPROVE / REJECT / EXPIRE). APPROVE requires the reviewer to re-type confirmed.{ticker,direction,entry,stop,risk_per_trade_pct}; any mismatch demotes the ticket to REVIEW_READY. Positive boundary statements ("ticket output only", "execution is out of scope", "broker submission is out of scope") appear in the instruction body. Persistence is operator-owned.
    • data/skill-mapping.yaml: new trade-ticket workflow entry (cadence: manual, category: trade-planning).
    • /swing-opportunity-daily and /pre-market-routine bundles gain an escalation pointer requiring source_bundle and source_candidate_ref when forwarding a candidate.
    • tests/test_trade_ticket_schema.py (20 cases — 3 structural, 4 positive fixtures, 8 negative fixtures, 1 business-invariant positive, 4 boundary / instruction contract) plus 12 fixtures under tests/fixtures/trade_tickets/.

    Done when:

    • schemas/trade-ticket.schema.json is a valid draft/2020-12 schema with the exact 5-value status enum and the four status-conditional if/then blocks.
    • tests/test_trade_ticket_schema.py (20 cases) all pass; the tests/test_required_sections.py matrix grows to 10 × 6 = 60 and all pass.
    • make sync-external-write against the shipped tip prints 10 SKIP protected bundle: lines (the new bundle is owned by the operator from day one).
    • make validate-all is green.

    TICKET-010 — Trade ticket persistence + journal bridge

    (✓ Shipped in v0.1.6 alongside TICKET-004b and the typo-guard polish. Extends TICKET-009 without crossing the execution boundary or introducing silent disk writes.)

    • .gitignore adds tickets/ and *.ticket.yaml as a safety net for accidental in-repo ticket placement. (reports/ was already ignored, so reports/trade_tickets/ is implicitly covered.)
    • .env.EXAMPLE adds HERMES_TRADE_TICKET_DIR=${HOME}/trading-research/tickets with a comment explaining operator-confirmed expansion.
    • distribution.yaml:env_requires declares HERMES_TRADE_TICKET_DIR (optional, default ${HOME}/trading-research/tickets) in the same form as HERMES_TRADING_TIMEZONE. tests/test_package_structure.py::test_distribution_manifest_declares_hermes_trade_ticket_dir locks the declaration.
    • schemas/trade-ticket.schema.json adds an optional top-level journal_bridge object: target: const trader-memory-core, action: enum [register_thesis, update_thesis, postmortem], optional thesis_status: enum [IDEA, ENTRY_READY, ACTIVE, CLOSED], optional notes: string minLength 1. additionalProperties: false inside journal_bridge (typo guard for fields like thesis_statuz). Top-level required unchanged; $id remains absent.
    • skill-bundles/trade-ticket.yaml instruction body gains three rule blocks: save path hint (<ticket_id>.ticket.yaml suffix), journal bridge handoff (recommended on APPROVED, never required), silent-write prohibition in positive form (emits YAML only / operator-confirmed).
    • tests/test_trade_ticket_schema.py adds 5 new tests plus 1 parametrize row: test_journal_bridge_valid_fixture_accepts, test_env_expansion_yields_absolute_path, test_bundle_instruction_documents_save_path_hint, test_bundle_instruction_documents_journal_bridge_handoff, test_bundle_instruction_states_silent_write_prohibited_in_positive_form, and bad_journal_bridge_invalid_action.yaml appended to test_negative_fixture_fails_schema (matrix 9 → 10).
    • New fixtures tests/fixtures/trade_tickets/approved_with_journal_bridge.yaml (positive) and bad_journal_bridge_invalid_action.yaml (negative) bring the fixture count from 14 to 16.

    Done when:

    • journal_bridge is optional and rejects unknown fields (typo guard); target is const trader-memory-core; action enum is exact; the matching positive and negative fixtures load.
    • .env.EXAMPLE literal ${HOME}/trading-research/tickets expands to an absolute path via expandvars + expanduser.
    • distribution.yaml:env_requires declares the env with the canonical default; the manifest test passes.
    • Bundle instruction carries the save path hint, journal bridge handoff, and silent-write positive form; all three contract tests pass.
    • make validate-all is green; total suite 155 → 162.
    • make sync-external-write SKIP count is still 10 (no x-generated: false flip on /trade-ticket).

    Out of scope (deferred):

    • Broker execution, auto-submit, paper / live Alpaca.
    • LLM-side silent disk write.
    • Cross-check between journal_bridge.action and thesis_status (e.g. postmortem → CLOSED).
    • JOURNALED 6th status enum value.
    • Making journal_bridge required on APPROVED (deferred to a future v0.2 breaking change).

    TICKET-013 — pre-market-routine session state vs posture basis + provenance heading

    (On main; folds into the next release alongside TICKET-012. Triggered by the v0.1.6 day-2 operational soak (2026-05-26 Tue, post-Memorial-Day trading day) where the pre-market-routine output rendered Risk posture: risk-off / REDUCE_ONLY ambiguously — the operator could not tell whether that reflected a structural regime change or carry- forward from the latest completed regular-session close (2026-05-22 Fri). TICKET-013 pins a two-line preamble that separates session state from posture basis so the ambiguity cannot recur.)

    Scope (rev2 final, after rev1 → rev2 review iteration):

    • skill-bundles/pre-market-routine.yaml instruction body gains a mandatory two-line preamble rule (Session state: / Posture basis:) plus a Source / Skill provenance sub-heading rule. x-generated: false unchanged.
    • prompts/pre-market-routine.md (cron prompt body) carries the same rule so the auto-fire path receives it.
    • Three posture-basis labels are defined and are explicitly not mutually exclusive in the holiday-bridge case: based on fresh latest completed regular-session close (normal day), carried forward from <YYYY-MM-DD> (today follows a holiday or weekend), pending fresh data / degraded (latest usable close is older than the previous regular cash session or a required source is missing).
    • tests/test_pre_market_session_state_rule.py (new): 12 parametrize cases (6 phrases × 2 files: bundle + prompt). Lightweight literal- phrase pin; LLM output is NOT regex-constrained at the contract layer.
    • docs/04-skill-integration-strategy.md adds a "Pre-market posture wording contract (TICKET-013)" section documenting the two-line preamble, the three labels, the provenance heading rule, and the pre-market-only scope.

    Done when:

    • Both files carry the six required literal phrases (Session state, Posture basis, latest completed regular-session close, carried forward, pending fresh data, Source / Skill provenance).
    • tests/test_pre_market_session_state_rule.py lands with 12 cases passing.
    • tests/test_required_sections.py and tests/test_output_safety.py remain green — the new wording is positive form and matches the existing source_provenance concept regex.
    • make sync-external-write SKIP count stays 10 (pre-market-routine is x-generated: false).
    • make validate-all is green; env-independent passing count grows by +12 in both with-upstream and without-upstream modes.

    Not in scope (TICKET-014 candidate — horizontal rollout):

    • Same two-line preamble in /after-close-review, /market-regime-daily, /swing-opportunity-daily. The wording is pinned on pre-market-routine first; propagation happens once the language has stabilised in production observation.
    • Holiday calendar API integration. v0.1.6 soak shows the LLM correctly identifies Memorial Day from context.
    • LLM-side rendering regex contract. Bundle/prompt-side literal pin is the only enforcement layer in v0.1.x.

    TICKET-015 — Upstream status inspection

    (On main; folds into the next release. Working-tree-safe pre-pull inspection of the external-linked $CLAUDE_TRADING_SKILLS_REPO checkout, so a user or agent can see what a git pull would bring and whether local / Hermes-made skill edits are at risk — before pulling.)

    • scripts/upstream_status.sh (new, bash, no Python deps, committed with the executable bit): resolves the upstream ref ($UPSTREAM_STATUS_REF remote-tracking override → branch @{u} → origin/HEAD short → UNRESOLVED), git fetches remote metadata before computing any ref-relative numbers, then reports branch / HEAD / resolved ref / remote URL (display only) / dirty files / local commits ahead / incoming commits / incoming skills/ + workflows/ file changes (merge-base range) / a local-edit risk label. Never pulls, merges, rebases, stashes, or touches a skill file. set -euo pipefail with per-git-call guards so missing refs / failed fetch / failed merge-base degrade to a printed label instead of aborting.
    • Risk severity: HIGH (dirty/untracked under skills/ or workflows/, local commits ahead, or detached HEAD), MEDIUM (dirty outside those dirs, UNRESOLVED ref, no tracking upstream resolved only via origin/HEAD, override ref with no extractable remote, fetch failed, or merge-base unresolved), LOW (untracked outside those dirs only), NONE (clean + tracked upstream resolved + merge-base resolved + no commits ahead). Severity is the max of all triggered conditions.
    • Makefile target upstream-status (no REQUIRE_* gate — it does not mutate the tree); thin wrapper over the script.
    • tests/test_upstream_status.py (new): presence/structure layer (env-independent) + behavioral layer against a self-contained temp git fixture (bare remote + clone in tmp_path, no network, never touches the real checkout) covering ref resolution, incoming range, detached HEAD (HIGH + incoming still rendered), no-tracking-upstream (≥ MEDIUM, never NONE), remote-removed (UNRESOLVED), override forms, severity classification, and the working-tree-unchanged guarantee.
    • docs/03-hermes-compatibility-notes.md "Upstream status inspection" subsection; docs/04-skill-integration-strategy.md "Three layers that watch upstream" table; README.md / README.ja.md "Inspecting upstream skill updates" section.

    Done when:

    • make upstream-status reports branch / ref / dirty / incoming / risk without modifying any skill file (git status --porcelain identical before/after).
    • All presence + behavioral cases pass; behavioral layer skips cleanly when git is unavailable.
    • make sync-external-write SKIP count stays 10; make validate-all green.
    • Docs articulate what it does, what it does NOT do, and how it complements the TICKET-004b drift guard (before-pull vs after-pull).

    TICKET-015b — read-only /upstream-status slash command (deferred, not predicated)

    A read-only /upstream-status bundle could surface the same report inside Hermes chat if dogfood shows operators want it. Constraints if pursued: read-only w.r.t. skill files; no mutation slash commands (apply / pull stay terminal-only behind explicit gates); the "thin operator-helper that wraps a script" bundle pattern is not yet established here. Not predicated — TICKET-015 ships without it.

  • hermes-trading-research-agent/docs/10-user-facing-readme-draft.ja.mdmarkdown · 1.7 KB

    Hermes Trading Research Assistant 日本語README下書き

    このリポジトリは、Hermes Agent上で動くトレード用リサーチアシスタントのプロファイル配布パッケージです。

    claude-trading-skills のスキル群を、寄り付き前チェック、引け後レビュー、決算銘柄チェック、トレード記録、週次ポートフォリオレビューなどのプリセットとして使えるようにします。

    これは何ではないか

    • 売買シグナル配信サービスではありません。
    • 自動売買システムではありません。
    • 投資助言サービスではありません。
    • 利益を保証するものではありません。

    できること

    • 朝の相場環境チェック
    • 決算で大きく動いている銘柄の確認
    • 市場のリスクオン/リスクオフ判断材料の整理
    • スイング候補の調査キュー作成
    • トレード記録の構造化
    • 引け後レビュー
    • 週次・月次の振り返り

    インストール例

    hermes profile install github.com/tradermonty/hermes-trading-research-agent-work-package --name trading-research-assistant --alias -y
    trading-research-assistant chat
    

    使い方例

    /pre-market-routine 今日の寄り付き前チェックをして
    /after-close-review 今日の引け後レビューをして
    /earnings-movers-triage 決算で大きく動いている銘柄を見て
    /trade-journal 今日のNVDAの判断を記録して
    

    APIキー

    一部のスキルはFMP、FINVIZ Elite、Alpaca paper/read-onlyなどのAPIキーを使うと機能が拡張されます。APIキーがない場合は、可能な範囲でdegraded modeとして動作します。

  • hermes-trading-research-agent/docs/MISSING_SKILLS.mdmarkdown · 1.2 KB

    Missing Skills / Degraded-Mode Acceptances

    This file documents intentionally accepted missing upstream skills.

    scripts/validate_upstream_index.py reads this file and treats any skill name listed here as an accepted degraded-mode entry, allowing the validator to exit 0 even though the skill is not present in claude-trading-skills/skills-index.yaml.

    Current status

    No accepted missing skills. The current release resolves all 9 bundle / mapping references against the upstream index (55 skills + 3 profile-local skills as of v0.1.x — re-run make validate-upstream to confirm against the live upstream).

    Format

    When adding an accepted miss, use one entry per line with the skill name in backticks and the word degraded (any case) on the same line:

    - `some-removed-skill` — degraded-mode accepted. Reason: upstream rename pending, bundle falls back to manual chart review.
    - `another-skill` — degraded mode is fine; users without this key fall back to public sources.
    

    The validator matches the skill name inside backticks; the rest of the line is free-form prose. See scripts/validate_upstream_index.py:documented_missing() for the exact parser.

  • hermes-trading-research-agent/docs/index.htmlcode · 30.6 KB · preview truncated
    <!doctype html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <meta name="description" content="Turn Hermes Agent into a disciplined US equity trading research assistant powered by Claude Trading Skills.">
      <title>Hermes Trading Research Agent</title>
      <link rel="preconnect" href="https://fonts.googleapis.com">
      <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
      <link href="https://fonts.googleapis.com/css2?family=Source+Sans+3:wght@300;400;500;600&family=Source+Code+Pro:wght@400;500;700&display=swap" rel="stylesheet">
      <style>
        :root {
          --bg: #ffffff;
          --ink: #061b31;
          --text: #52627a;
          --muted: #6f7f96;
          --purple: #533afd;
          --purple-dark: #4434d4;
          --brand-dark: #1c1e54;
          --navy: #0d253d;
          --border: #e5edf5;
          --soft: #f6f9fc;
          --soft-purple: #f2f0ff;
          --green: #15be53;
          --ruby: #ea2261;
          --magenta: #f96bee;
          --shadow: rgba(50,50,93,0.25) 0 30px 45px -30px, rgba(0,0,0,0.1) 0 18px 36px -18px;
          --soft-shadow: rgba(23,23,23,0.08) 0 15px 35px 0;
        }
    
        * { box-sizing: border-box; }
        html { scroll-behavior: smooth; }
        body {
          margin: 0;
          font-family: 'Source Sans 3', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
          font-feature-settings: "ss01";
          color: var(--ink);
          background: var(--bg);
          line-height: 1.45;
        }
        a { color: inherit; text-decoration: none; }
        code, pre { font-family: 'Source Code Pro', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; }
        .shell pre, .code-card pre { margin: 0; white-space: pre-wrap; word-break: break-word; }
        .container { width: min(1120px, calc(100% - 40px)); margin: 0 auto; }
        .nav {
          position: sticky;
          top: 0;
          z-index: 50;
          background: rgba(255,255,255,.86);
          backdrop-filter: blur(14px);
          border-bottom: 1px solid rgba(229,237,245,.86);
        }
        .nav-inner { display: flex; align-items: center; justify-content: space-between; gap: 18px; min-height: 66px; }
        .brand { display: flex; align-items: center; gap: 10px; font-weight: 600; color: var(--ink); letter-spacing: -.01em; }
        .brand-mark {
          width: 34px; height: 34px; border-radius: 8px;
          background: linear-gradient(135deg, var(--purple), var(--ruby) 58%, var(--magenta));
          box-shadow: rgba(83,58,253,.35) 0 14px 24px -14px;
          display: grid; place-items: center; color: white; font-family: 'Source Code Pro'; font-weight: 700; font-size: 15px;
        }
        .nav-links { display: flex; align-items: center; gap: 18px; font-size: 14px; color: #273951; }
        .nav-links a:hover { color: var(--purple); }
        .nav-actions { display: flex; align-items: center; gap: 10px; }
        .lang-switch { display: flex; gap: 6px; background: var(--soft); border: 1px solid var(--border); border-radius: 8px; padding: 4px; }
        .lang-switch a { padding: 5px 8px; border-radius: 5px; font-size: 13px; color: #273951; }
        .lang-switch a:first-child { background: #fff; color: var(--purple); box-shadow: rgba(23,23,23,.06) 0 2px 8px; }
        .lang-switch a:hover { background: #fff; color: var(--purple); }
        .button {
          display: inline-flex; align-items: center; justify-content: center; gap: 8px;
          border-radius: 6px; padding: 10px 16px; font-size: 15px; font-weight: 400;
          border: 1px solid transparent; cursor: pointer; transition: .2s ease;
        }
        .button.primary { background: var(--purple); color: #fff; box-shadow: rgba(83,58,253,.22) 0 16px 26px -16px; }
        .button.primary:hover { background: var(--purple-dark); transform: translateY(-1px); }
        .button.secondary { color: var(--purple); border-color: #b9b9f9; background: rgba(255,255,255,.76); }
        .button.secondary:hover { background: rgba(83,58,253,.05); transform: translateY(-1px); }
        .button.dark { background: #fff; color: var(--brand-dark); }
        .button.dark:hover { transform: translateY(-1px); }
    
        .hero { position: relative; overflow: hidden; padding: 88px 0 64px; }
        .hero:before {
          content: ""; position: absolute; inset: -220px -180px auto auto; width: 520px; height: 520px; border-radius: 50%;
          background: radial-gradient(circle at 35% 35%, rgba(249,107,238,.5), rgba(83,58,253,.22) 45%, rgba(83,58,253,0) 72%);
          pointer-events: none;
        }
        .hero-grid { position: relative; display: grid; grid-template-columns: minmax(0,1fr) 430px; gap: 56px; align-items: center; }
        .eyebrow { display: inline-flex; align-items: center; gap: 8px; color: var(--purple); font-size: 13px; font-weight: 500; letter-spacing: .02em; text-transform: uppercase; }
        .dot { width: 8px; height: 8px; border-radius: 50%; background: linear-gradient(135deg, var(--green), var(--purple)); box-shadow: rgba(21,190,83,.45) 0 0 0 6px; }
        h1 { font-size: clamp(42px, 6vw, 70px); line-height: .98; letter-spacing: -1.5px; font-weight: 300; margin: 18px 0 22px; color: var(--ink); }
        .lead { font-size: clamp(18px, 2vw, 22px); color: var(--text); font-weight: 300; max-width: 720px; margin: 0 0 28px; }
        .hero-actions { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin: 30px 0 24px; }
        .trust-row { display: flex; flex-wrap: wrap; gap: 10px; color: #273951; font-size: 13px; }
        .pill { display: inline-flex; align-items: center; gap: 7px; padding: 6px 9px; background: #fff; border: 1px solid var(--border); border-radius: 7px; box-shadow: rgba(23,23,23,.06) 0 3px 12px; }
    
        .terminal-card {
          background: #0d253d; border: 1px solid rgba(255,255,255,.1); border-radius: 10px; overflow: hidden;
          box-shadow: var(--shadow); color: #dce8ff;
        }
        .terminal-top { height: 42px; display: flex; align-items: center; justify-content: space-between; padding: 0 14px; background: rgba(255,255,255,.05); border-bottom: 1px solid rgba(255,255,255,.08); }
        .traffic { display: flex; gap: 7px; }
        .traffic i { width: 11px; height: 11px; border-radius: 50%; display: block; }
        .traffic i:nth-child(1){ background:#ff5f56; } .traffic i:nth-child(2){ background:#ffbd2e; } .traffic i:nth-child(3){ background:#27c93f; }
        .terminal-title { color: rgba(255,255,255,.64); font-size: 12px; font-family: 'Source Code Pro'; }
        .terminal-body { padding: 18px; font-size: 13px; line-height: 1.75; }
        .terminal-body pre { margin: 0; white-space: pre-wrap; word-break: break-word; }
        .prompt { color: #84f2b2; }
        .cmd { color: #fff; }
        .comment { color: #95a9c6; }
        .warn { color: #ffd7ef; }
    
        section { padding: 72px 0; }
        .section-title { font-size: clamp(32px,4vw,48px); line-height: 1.08; letter-spacing: -.9px; font-weight: 300; margin: 0 0 14px; color: var(--ink); }
        .section-lead { color: var(--text); font-size: 18px; font-weight: 300; max-width: 760px; margin: 0 0 34px; }
        .grid-3 { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 18px; }
        .grid-2 { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 20px; }
        .card { background: #fff; border: 1px solid var(--border); border-radius: 10px; padding: 24px; box-shadow: rgba(23,23,23,.04) 0 8px 24px; }
        .card.featured { box-shadow: var(--shadow); }
        .icon { width: 38px; height: 38px; border-radius: 9px; display: grid; place-items: center; margin-bottom: 16px; background: var(--soft-purple); color: var(--purple); font-size: 19px; }
        .card h3 { margin: 0 0 10px; font-size: 23px; line-height: 1.1; letter-spacing: -.25px; font-weight: 300; }
        .card p { margin: 0; color: var(--text); font-size: 16px; font-weight: 300; }
    
        .dark { background: var(--brand-dark); color: #fff; position: relative; overflow: hidden; }
        .dark:before { content:""; position:absolute; width: 680px; height:680px; border-radius:50%; right:-280px; top:-260px; background: radial-gradient(circle, rgba(249,107,238,.25), rgba(83,58,253,.13) 45%, transparent 72%); }
        .dark .container { position: relative; }
        .dark .section-title { color: #fff; }
        .dark .section-lead, .dark p { color: rgba(255,255,255,.72); }
        .dark-card { background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.13); border-radius: 10px; padding: 22px; }
        .dark-card h3 { margin: 0 0 8px; font-size: 22px; font-weight: 300; }
    
        .workflow { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; align-items: stretch; }
        .step { display: grid; grid-template-columns: 42px 1fr; gap: 16px; padding: 20px; border: 1px solid var(--border); border-radius: 10px; background: #fff; }
        .num { width: 42px; height: 42px; border-radius: 50%; display: grid; place-items: center; background: var(--soft-purple); color: var(--purple); font-family: 'Source Code Pro'; font-weight: 700; }
        .step h3 { margin: 0 0 6px; font-weight: 400; font-size: 19px; }
        .step p { margin: 0; color: var(--text); font-weight: 300; }
    
        .command-table { display: grid; gap: 12px; }
        .command { display: grid; grid-template-columns: 230px 1fr; gap: 16px; align-items: start; padding: 16px; border: 1px solid var(--border); border-radius: 10px; background: #fff; }
        .command code { color: var(--purple); font-weight: 700; font-size: 13px; }
        .command p { margin: 0; color: var(--text); font-weight: 300; }
    
        .shell { background: #0d253d; color: #dce8ff; border-radius: 10px; border: 1px solid rgba(255,255,255,.1); box-shadow: var(--shadow); padding: 18px; overflow: auto; }
        .shell code { font-size: 12px; line-height: 1.75; }
        .callout { border-left: 4px solid var(--purple); background: var(--soft); border-radius: 8px; padding: 18px 20px; color: #273951; }
        .callout strong { color: var(--ink); }
        .install-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; align-items: start; }
        .badge-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
        .mini-badge { border: 1px solid var(--border); background: #fff; border-radius: 6px; padding: 5px 8px; color: #273951; font-size: 12px; }
    
        .jp { border-top: 1px solid var(--border); }
        .footer { background: #061b31; color: rgba(255,255,255,.76); padding: 38px 0; }
        .footer a { color: #fff; }
        .footer-grid { display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
    
        @media (max-width: 920px) {
          .hero-grid, .grid-3, .grid-2, .workflow, .install-grid { grid-template-columns: 1fr; }
          .terminal-card { max-width: 560px; }
          .nav-links { display: none; }
          .command { grid-template-columns: 1fr; }
          section { padding: 56px 0; }
        }
        @media (max-width: 560px) {
          .container { width: min(100% - 28px, 1120px); }
          .nav-actions .button { display: none; }
          .hero { padding-top: 58px; }
          .terminal-body { font-size: 11px; }
        }
      </style>
    </head>
    <body>
      <header class="nav">
        <div class="container nav-inner">
          <a class="brand" href="#top" aria-label="Hermes Trading Research Agent home"><span class="brand-mark">HT</span><span>Hermes Trading Research Agent</span></a>
          <nav class="nav-links" aria-label="Primary navigation">
            <a href="#why">Why it helps</a>
            <a href="#commands">Routines</a>
            <a href="#install">Install</a>
            <a href="#ja">日本語</a>
          </nav>
          <div class="nav-actions">
            <div class="lang-switch" aria-label="Language links"><a href="#en">EN</a><a href="#ja">日本語</a></div>
            <a class="button primary" href="https://github.com/tradermonty/hermes-trading-research-agent-work-package">GitHub</a>
          </div>
        </div>
      </header>
    
      <main id="top">
        <section class="hero" id="en">
          <div class="container hero-grid">
            <div>
              <div class="eyebrow"><span class="dot"></span> Built for part-time investors and solo traders</div>
              <h1>Turn Hermes Agent into your disciplined US equity trading assistant.</h1>
              <p class="lead">This profile distribution packages the vision of <a href="https://github.com/tradermonty/claude-trading-skills">C
  • hermes-trading-research-agent/mcp.example.jsoncode · 0.6 KB
    {
      "mcpServers": {
        "finviz": {
          "description": "Optional FINVIZ MCP server. Verify package name and command before enabling.",
          "command": "uvx",
          "args": ["finviz-mcp-server"],
          "env": {
            "FINVIZ_API_KEY": "${FINVIZ_API_KEY}"
          }
        },
        "alpaca-paper-readonly": {
          "description": "Optional Alpaca MCP/API bridge. Keep paper/read-only by default.",
          "command": "python",
          "args": ["-m", "your_alpaca_mcp_server"],
          "env": {
            "ALPACA_API_KEY": "${ALPACA_API_KEY}",
            "ALPACA_SECRET_KEY": "${ALPACA_SECRET_KEY}",
            "ALPACA_PAPER": "true"
          }
        }
      }
    }
    
  • hermes-trading-research-agent/mcp.jsoncode · 0.0 KB
    {
      "mcpServers": {}
    }
    
  • hermes-trading-research-agent/prompts/after-close-review.mdmarkdown · 1.3 KB

    Run the US equity after-close review for today.

    Operating context:

    • Timezone label for the report: {{TIMEZONE}}.
    • This is research and process support.
    • Use installed Claude Trading Skills when available.
    • When data or API keys are unavailable, mark the relevant section as degraded mode and cite the missing input.

    Required output:

    After-close review —

    Risk posture change: <improved / unchanged / deteriorated / unknown> Primary reason:

    1. Market action summary

    • Indices.
    • Breadth.
    • Uptrend participation.
    • Distribution and top-risk changes.

    2. Sector and theme rotation

    • Leading groups.
    • Lagging groups.
    • Notable rotation.

    3. Earnings reactions

    • Names worth tracking.
    • PEAD candidates.
    • Reactions that failed or reversed.

    4. Open trade review checklist

    • Thesis still valid?
    • Invalidation hit?
    • Position risk still acceptable?
    • Any overnight event risk?

    5. Journal prompts

    • What decision today deserves a note?
    • What did the process do well?
    • What should be avoided tomorrow?

    6. Tomorrow preparation

    • Maximum 5 bullets.

    7. Data freshness and degraded mode

    • List data sources, skill outputs, missing keys, and stale data warnings.

    Use review and journaling language throughout. The human reviewer makes all entry and exit decisions.

  • hermes-trading-research-agent/prompts/earnings-movers-triage.mdmarkdown · 0.4 KB

    Triage earnings movers for US equities.

    Classify each material mover into:

    • Ignore / insufficient data
    • Watchlist only
    • PEAD research candidate
    • Pullback-after-gap candidate
    • Needs manual chart review

    For each candidate include ticker, reaction type, thesis, invalidation, risk notes, and required follow-up.

    Frame each item as a research observation; the human reviewer decides any trade action.

  • hermes-trading-research-agent/prompts/monthly-performance-review.mdmarkdown · 0.4 KB

    Run the monthly trading process review.

    Timezone label for the report: {{TIMEZONE}}.

    Required output:

    1. What worked.
    2. What failed.
    3. Setup-level patterns.
    4. Process mistakes versus acceptable losses.
    5. Hypotheses to test.
    6. Skill/workflow improvements.
    7. Next-month operating rules.

    Use trade memory and postmortem skills when available. If trade logs are missing, ask for the minimal input needed.

  • hermes-trading-research-agent/prompts/pre-market-routine.mdmarkdown · 3.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/prompts/trade-journal.mdmarkdown · 0.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/prompts/weekly-portfolio-review.mdmarkdown · 0.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/pyproject.tomlcode · 0.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/schemas/pre_market_report.schema.jsoncode · 1.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/schemas/skill_mapping.schema.jsoncode · 0.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/schemas/trade-ticket.schema.jsoncode · 9.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/schemas/trade_journal_entry.schema.jsoncode · 0.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/scripts/sync_claude_trading_skills.pycode · 13.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/scripts/upstream_status.shcode · 7.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/scripts/validate_package.pycode · 5.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/scripts/validate_upstream_index.pycode · 7.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/after-close-review.yamlcode · 1.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/earnings-movers-triage.yamlcode · 1.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/market-regime-daily.yamlcode · 1.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/monthly-performance-review.yamlcode · 1.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/portfolio-risk-check.yamlcode · 1.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/pre-market-routine.yamlcode · 4.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/swing-opportunity-daily.yamlcode · 1.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/trade-journal.yamlcode · 1.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/trade-ticket.yamlcode · 5.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skill-bundles/weekly-portfolio-review.yamlcode · 1.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/trading-cron-brief-writer/SKILL.mdmarkdown · 1.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/trading-research-orchestrator/SKILL.mdmarkdown · 2.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/trading-risk-gate/SKILL.mdmarkdown · 1.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/backtest-expert/SKILL.mdmarkdown · 8.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/backtest-expert/references/failed_tests.mdmarkdown · 7.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/backtest-expert/references/methodology.mdmarkdown · 7.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/backtest-expert/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/backtest-expert/scripts/evaluate_backtest.pycode · 15.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/backtest-expert/scripts/tests/conftest.pycode · 0.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/backtest-expert/scripts/tests/test_evaluate_backtest.pycode · 21.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/SKILL.mdmarkdown · 4.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/references/minervini_entry_rules.mdmarkdown · 2.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/requirements.txtcode · 0.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/scripts/_market_calendar.pycode · 11.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/scripts/order_builder.pycode · 4.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/scripts/plan_breakout_trades.pycode · 22.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/scripts/risk_calculator.pycode · 6.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/scripts/tests/conftest.pycode · 0.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/scripts/tests/test_market_calendar_contract.pycode · 5.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/scripts/tests/test_order_builder.pycode · 4.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/scripts/tests/test_plan_breakout_trades.pycode · 12.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/breakout-trade-planner/scripts/tests/test_risk_calculator.pycode · 7.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/SKILL.mdmarkdown · 25.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/references/canslim_methodology.mdmarkdown · 25.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/references/fmp_api_endpoints.mdmarkdown · 19.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/references/interpretation_guide.mdmarkdown · 17.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/references/scoring_system.mdmarkdown · 20.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/requirements.txtcode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/calculators/earnings_calculator.pycode · 13.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/calculators/growth_calculator.pycode · 11.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/calculators/institutional_calculator.pycode · 15.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/calculators/leadership_calculator.pycode · 24.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/calculators/market_calculator.pycode · 8.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/calculators/new_highs_calculator.pycode · 6.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/calculators/supply_demand_calculator.pycode · 7.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/check_institutional_endpoint.pycode · 3.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/finviz_stock_client.pycode · 7.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/fmp_client.pycode · 23.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/report_generator.pycode · 18.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/scorer.pycode · 21.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/screen_canslim.pycode · 18.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/tests/conftest.pycode · 0.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/tests/test_canslim_fixes.pycode · 20.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/tests/test_fmp_fallback.pycode · 16.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/tests/test_fmp_stable_migration.pycode · 5.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/tests/test_institutional_fallback.pycode · 4.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/canslim-screener/scripts/tests/test_leadership_rs.pycode · 19.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dividend-growth-pullback-screener/SKILL.mdmarkdown · 13.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dividend-growth-pullback-screener/references/dividend_growth_compounding.mdmarkdown · 13.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dividend-growth-pullback-screener/references/fmp_api_guide.mdmarkdown · 18.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dividend-growth-pullback-screener/references/rsi_oversold_strategy.mdmarkdown · 11.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dividend-growth-pullback-screener/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dividend-growth-pullback-screener/scripts/screen_dividend_growth_rsi.pycode · 51.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dividend-growth-pullback-screener/scripts/tests/test_fmp_stable.pycode · 3.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dividend-growth-pullback-screener/scripts/tests/test_screen_dividend_growth_rsi.pycode · 8.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dual-axis-skill-reviewer/SKILL.mdmarkdown · 4.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dual-axis-skill-reviewer/references/llm_review_schema.mdmarkdown · 0.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dual-axis-skill-reviewer/references/scoring_rubric.mdmarkdown · 1.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dual-axis-skill-reviewer/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dual-axis-skill-reviewer/scripts/run_dual_axis_review.pycode · 41.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dual-axis-skill-reviewer/scripts/tests/conftest.pycode · 0.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/dual-axis-skill-reviewer/scripts/tests/test_run_dual_axis_review.pycode · 30.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-calendar/SKILL.mdmarkdown · 22.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-calendar/assets/earnings_report_template.mdmarkdown · 3.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-calendar/references/fmp_api_guide.mdmarkdown · 17.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-calendar/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-calendar/scripts/fetch_earnings_fmp.pycode · 14.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-calendar/scripts/generate_report.pycode · 12.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-calendar/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-calendar/scripts/tests/test_earnings_calendar.pycode · 10.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-calendar/scripts/tests/test_earnings_cli_contract.pycode · 8.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/SKILL.mdmarkdown · 7.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/references/scoring_methodology.mdmarkdown · 3.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/requirements.txtcode · 0.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/_fmp_compat.pycode · 5.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/_market_calendar.pycode · 11.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/analyze_earnings_trades.pycode · 23.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/calculators/__init__.pycode · 0.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/calculators/gap_size_calculator.pycode · 5.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/calculators/ma200_calculator.pycode · 2.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/calculators/ma50_calculator.pycode · 2.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/calculators/pre_earnings_trend_calculator.pycode · 3.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/calculators/volume_trend_calculator.pycode · 3.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/fmp_client.pycode · 18.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/report_generator.pycode · 9.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/scorer.pycode · 3.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/tests/test_cli_reports.pycode · 7.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/tests/test_earnings_trade_analyzer.pytext · 85.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/tests/test_fmp_client_historical.pycode · 2.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/tests/test_fmp_stable_migration.pycode · 2.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/earnings-trade-analyzer/scripts/tests/test_market_calendar_contract.pycode · 5.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/economic-calendar-fetcher/SKILL.mdmarkdown · 15.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/economic-calendar-fetcher/references/fmp_api_documentation.mdmarkdown · 11.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/economic-calendar-fetcher/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/economic-calendar-fetcher/scripts/get_economic_calendar.pycode · 8.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/economic-calendar-fetcher/scripts/tests/test_get_economic_calendar.pycode · 11.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/exposure-coach/SKILL.mdmarkdown · 7.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/exposure-coach/references/exposure_framework.mdmarkdown · 4.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/exposure-coach/references/regime_exposure_map.mdmarkdown · 4.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/exposure-coach/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/exposure-coach/scripts/calculate_exposure.pycode · 23.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/exposure-coach/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/exposure-coach/scripts/tests/test_calculate_exposure.pycode · 28.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/SKILL.mdmarkdown · 5.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/references/ftd_methodology.mdmarkdown · 7.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/references/post_ftd_guide.mdmarkdown · 7.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/fmp_client.pycode · 17.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/ftd_detector.pycode · 10.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/post_ftd_monitor.pycode · 13.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/rally_tracker.pycode · 19.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/report_generator.pycode · 16.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/tests/helpers.pycode · 3.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/tests/test_fmp_client.pycode · 15.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/tests/test_ftd_detector.pycode · 8.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/tests/test_post_ftd_monitor.pycode · 16.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/tests/test_rally_tracker.pycode · 19.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ftd-detector/scripts/tests/test_report_generator.pycode · 8.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/SKILL.mdmarkdown · 5.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/config/default.yamlcode · 1.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/references/ibd_distribution_methodology.mdmarkdown · 4.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/references/tqqq_exposure_policy.mdmarkdown · 2.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/_fmp_compat.pycode · 5.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/data_loader.pycode · 3.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/distribution_day_tracker.pycode · 5.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/exposure_policy.pycode · 2.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/fmp_client.pycode · 18.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/history_utils.pycode · 1.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/ibd_monitor.pycode · 16.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/math_utils.pycode · 1.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/models.pycode · 2.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/report_generator.pycode · 5.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/risk_classifier.pycode · 1.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/helpers.pycode · 3.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/test_data_loader.pycode · 3.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/test_distribution_day_tracker.pycode · 14.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/test_exposure_policy.pycode · 2.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/test_fmp_client_et.pycode · 2.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/test_history_utils.pycode · 2.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/test_math_utils.pycode · 1.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/test_report_generator.pycode · 3.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/ibd-distribution-day-monitor/scripts/tests/test_risk_classifier.pycode · 2.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-review-monitor/SKILL.mdmarkdown · 5.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-review-monitor/agents/openai.yamlcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-review-monitor/references/input-schema.mdmarkdown · 1.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-review-monitor/references/review-ticket-template.mdmarkdown · 0.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-review-monitor/references/trigger-matrix.mdmarkdown · 2.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-review-monitor/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-review-monitor/scripts/build_review_queue.pycode · 16.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-review-monitor/scripts/tests/conftest.pycode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-review-monitor/scripts/tests/test_build_review_queue.pycode · 8.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/SKILL.mdmarkdown · 12.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/agents/openai.yamlcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/references/default-thresholds.mdmarkdown · 2.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/references/sector-step2-modules.mdmarkdown · 4.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/references/stock-note-template.mdmarkdown · 2.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/references/valuation-and-one-off-checks.mdmarkdown · 1.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/build_entry_signals.pycode · 27.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/build_sop_plan.pycode · 4.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/dividend_basis.pycode · 14.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/event_scanner.pycode · 9.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/payout_safety.pycode · 11.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/conftest.pycode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_build_entry_signals.pycode · 4.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_build_sop_plan.pycode · 2.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_dividend_basis.pycode · 6.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_event_scanner.pycode · 4.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_fifth_review_fixes.pycode · 5.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_golden_p0.pycode · 4.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_golden_p0_sector.pycode · 4.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_payout_safety.pycode · 4.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_seventh_review_fixes.pycode · 3.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_sixth_review_fixes.pycode · 4.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/tests/test_verdict.pycode · 2.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/thresholds.pycode · 4.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-sop/scripts/verdict.pycode · 5.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/SKILL.mdmarkdown · 4.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/agents/openai.yamlcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/references/account-location-matrix.mdmarkdown · 1.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/references/annual-tax-memo-template.mdmarkdown · 0.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/references/input-schema.mdmarkdown · 1.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/references/qualified-dividend-checklist.mdmarkdown · 2.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/scripts/build_tax_planning_sheet.pycode · 5.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/scripts/tests/conftest.pycode · 0.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/kanchi-dividend-us-tax-accounting/scripts/tests/test_build_tax_planning_sheet.pycode · 2.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/SKILL.mdmarkdown · 4.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/references/historical_regimes.mdmarkdown · 4.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/references/indicator_interpretation_guide.mdmarkdown · 6.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/references/regime_detection_methodology.mdmarkdown · 5.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/requirements.txtcode · 0.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/calculators/__init__.pycode · 0.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/calculators/concentration_calculator.pycode · 5.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/calculators/credit_conditions_calculator.pycode · 3.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/calculators/equity_bond_calculator.pycode · 6.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/calculators/sector_rotation_calculator.pycode · 3.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/calculators/size_factor_calculator.pycode · 4.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/calculators/utils.pycode · 11.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/calculators/yield_curve_calculator.pycode · 9.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/fmp_client.pycode · 16.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/macro_regime_detector.pycode · 11.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/report_generator.pycode · 19.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/scorer.pycode · 20.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_concentration.pycode · 3.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_credit_conditions.pycode · 2.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_equity_bond.pycode · 2.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_fmp_client.pycode · 10.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_helpers.pycode · 2.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_main_cli.pycode · 4.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_packaged_deps.pycode · 4.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_report_generator.pycode · 10.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_scorer.pycode · 23.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_sector_rotation.pycode · 3.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_size_factor.pycode · 2.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_utils.pycode · 5.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/macro-regime-detector/scripts/tests/test_yield_curve.pycode · 6.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/SKILL.mdmarkdown · 6.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/references/breadth_analysis_methodology.mdmarkdown · 13.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/calculators/__init__.pycode · 0.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/calculators/bearish_signal_calculator.pycode · 4.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/calculators/cycle_calculator.pycode · 5.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/calculators/divergence_calculator.pycode · 5.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/calculators/historical_context_calculator.pycode · 3.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/calculators/ma_crossover_calculator.pycode · 3.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/calculators/trend_level_calculator.pycode · 3.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/csv_client.pycode · 8.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/history_tracker.pycode · 2.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/market_breadth_analyzer.pycode · 11.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/report_generator.pycode · 14.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/scorer.pycode · 8.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/conftest.pycode · 1.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_bearish_signal_calculator.pycode · 5.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_csv_client.pycode · 7.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_cycle_calculator.pycode · 1.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_divergence_calculator.pycode · 5.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_historical_context_calculator.pycode · 3.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_history_tracker.pycode · 4.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_ma_crossover_calculator.pycode · 4.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_report_generator.pycode · 15.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_scorer.pycode · 4.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-breadth-analyzer/scripts/tests/test_trend_level_calculator.pycode · 4.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-news-analyst/SKILL.mdmarkdown · 26.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-news-analyst/references/corporate_news_impact.mdmarkdown · 12.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-news-analyst/references/geopolitical_commodity_correlations.mdmarkdown · 13.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-news-analyst/references/market_event_patterns.mdmarkdown · 11.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-news-analyst/references/trusted_news_sources.mdmarkdown · 11.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-news-analyst/scripts/tests/test_skill_contract.pycode · 1.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/SKILL.mdmarkdown · 8.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/references/distribution_day_guide.mdmarkdown · 4.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/references/historical_tops.mdmarkdown · 6.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/references/market_top_methodology.mdmarkdown · 7.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/requirements.txtcode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/_market_calendar.pycode · 11.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/breadth_csv_client.pycode · 4.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/calculators/__init__.pycode · 0.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/calculators/breadth_calculator.pycode · 3.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/calculators/defensive_rotation_calculator.pycode · 7.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/calculators/distribution_day_calculator.pycode · 6.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/calculators/index_technical_calculator.pycode · 7.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/calculators/leading_stock_calculator.pycode · 9.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/calculators/math_utils.pycode · 1.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/calculators/sentiment_calculator.pycode · 6.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/fmp_client.pycode · 20.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/historical_comparator.pycode · 3.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/market_top_detector.pycode · 26.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/report_generator.pycode · 17.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/scenario_engine.pycode · 4.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/scorer.pycode · 19.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/helpers.pycode · 1.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_breadth.pycode · 2.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_breadth_csv_client.pycode · 4.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_defensive_rotation.pycode · 5.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_delta.pycode · 4.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_distribution_day.pycode · 6.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_fmp_client.pycode · 26.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_freshness.pycode · 6.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_historical_comparator.pycode · 2.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_index_technical.pycode · 2.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_leading_stock.pycode · 9.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_market_calendar_contract.pycode · 5.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_math_utils.pycode · 2.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_report_generator.pycode · 7.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_scenario_engine.pycode · 3.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_scorer.pycode · 17.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_sentiment.pycode · 3.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/tests/test_utils.pycode · 1.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/market-top-detector/scripts/utils.pycode · 0.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/SKILL.mdmarkdown · 4.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/references/entry_exit_rules.mdmarkdown · 3.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/references/pead_strategy.mdmarkdown · 5.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/_fmp_compat.pycode · 5.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/calculators/__init__.pycode · 0.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/calculators/breakout_calculator.pycode · 3.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/calculators/liquidity_calculator.pycode · 2.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/calculators/risk_reward_calculator.pycode · 2.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/calculators/weekly_candle_calculator.pycode · 10.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/fmp_client.pycode · 18.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/report_generator.pycode · 10.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/scorer.pycode · 3.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/screen_pead.pycode · 28.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/tests/conftest.pycode · 0.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/pead-screener/scripts/tests/test_pead_screener.pytext · 80.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/README.mdmarkdown · 11.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/SKILL.mdmarkdown · 24.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/references/alpaca-mcp-setup.mdmarkdown · 9.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/references/asset-allocation.mdmarkdown · 16.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/references/diversification-principles.mdmarkdown · 18.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/references/portfolio-risk-metrics.mdmarkdown · 16.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/references/position-evaluation.mdmarkdown · 16.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/references/rebalancing-strategies.mdmarkdown · 19.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/references/risk-profile-questionnaire.mdmarkdown · 19.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/references/target-allocations.mdmarkdown · 18.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/scripts/check_alpaca_connection.pycode · 12.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/portfolio-manager/scripts/tests/test_check_alpaca_connection.pycode · 9.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/position-sizer/SKILL.mdmarkdown · 7.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/position-sizer/references/sizing_methodologies.mdmarkdown · 12.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/position-sizer/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/position-sizer/scripts/position_sizer.pycode · 19.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/position-sizer/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/position-sizer/scripts/tests/test_position_sizer.pycode · 24.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/SKILL.mdmarkdown · 8.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/assets/industory_performance_1.jpegbinary · 456.2 KB

    Binary — download to inspect.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/assets/industory_performance_2.jpegbinary · 776.5 KB

    Binary — download to inspect.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/assets/sector_performance.jpegbinary · 355.7 KB

    Binary — download to inspect.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/references/sector_rotation.mdmarkdown · 6.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/scripts/analyze_sector_rotation.pycode · 24.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/scripts/tests/helpers.pycode · 2.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/sector-analyst/scripts/tests/test_analyze_sector_rotation.pycode · 18.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/SKILL.mdmarkdown · 6.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/references/feedback-integration.mdmarkdown · 5.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/references/outcome-classification.mdmarkdown · 5.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/scripts/postmortem_analyzer.pycode · 18.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/scripts/postmortem_recorder.pycode · 14.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/scripts/tests/conftest.pycode · 0.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/scripts/tests/test_cli_workflow.pycode · 11.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/scripts/tests/test_postmortem_analyzer.pycode · 11.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/signal-postmortem/scripts/tests/test_postmortem_recorder.pycode · 7.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/SKILL.mdmarkdown · 18.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/assets/analysis_template.mdmarkdown · 4.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/references/contrarian-confirmation-checklist.mdmarkdown · 14.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/references/technical_analysis_framework.mdmarkdown · 10.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/scripts/check_weekly_price_action.pycode · 30.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/scripts/tests/test_check_weekly_price_action.pycode · 34.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/scripts/tests/test_skill_contract.pycode · 3.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/scripts/tests/test_weekly_price_action.pycode · 36.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/technical-analyst/scripts/weekly_price_action.pycode · 25.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/SKILL.mdmarkdown · 19.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/assets/report_template.mdmarkdown · 4.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/references/cross_sector_themes.mdmarkdown · 11.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/references/finviz_industry_codes.mdmarkdown · 17.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/references/thematic_etf_catalog.mdmarkdown · 12.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/references/theme_detection_methodology.mdmarkdown · 13.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/requirements.txtcode · 0.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/_market_calendar.pycode · 11.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/calculators/__init__.pycode · 0.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/calculators/heat_calculator.pycode · 5.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/calculators/industry_ranker.pycode · 2.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/calculators/lifecycle_calculator.pycode · 6.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/calculators/theme_classifier.pycode · 12.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/calculators/theme_discoverer.pycode · 9.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/config_loader.pycode · 4.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/default_theme_config.pycode · 10.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/etf_scanner.pycode · 29.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/finviz_performance_client.pycode · 6.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/leadership.pycode · 17.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/report_generator.pycode · 31.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/representative_stock_selector.pycode · 22.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/scorer.pycode · 2.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/README.mdmarkdown · 0.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_config_loader.pycode · 7.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_detect_divergence.pycode · 3.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_etf_scanner.pycode · 34.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_finviz_performance_client.pycode · 5.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_fmp_stable_migration.pycode · 4.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_heat_calculator.pycode · 9.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_industry_ranker.pycode · 10.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_leadership.pycode · 8.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_lifecycle_calculator.pycode · 12.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_market_calendar_contract.pycode · 5.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_report_generator.pycode · 26.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_representative_stock_selector.pycode · 39.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_scorer.pycode · 7.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_theme_classifier.pycode · 26.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_theme_detector_e2e.pycode · 25.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_theme_discoverer.pycode · 19.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_theme_history.pycode · 2.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_theme_matcher.pycode · 3.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/tests/test_uptrend_client.pycode · 3.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/theme_detector.pycode · 43.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/theme_history.pycode · 5.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/theme_matcher.pycode · 6.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/themes.yamlcode · 5.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/theme-detector/scripts/uptrend_client.pycode · 7.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/SKILL.mdmarkdown · 2.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/examples/example_input.jsoncode · 2.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/examples/example_output.jsoncode · 3.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/examples/sample_input.jsoncode · 1.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/prompts/critique_prompt_template.mdmarkdown · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/prompts/developer_prompt_template.mdmarkdown · 0.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/prompts/system_prompt.mdmarkdown · 0.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/references/evidence_quality_guide.mdmarkdown · 0.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/references/hypothesis_types.mdmarkdown · 0.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/schemas/hypothesis_card.schema.jsoncode · 3.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/schemas/input_bundle.schema.jsoncode · 2.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/schemas/output_bundle.schema.jsoncode · 1.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/schemas/raw_hypotheses.schema.jsoncode · 0.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/pipeline/__init__.pycode · 0.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/pipeline/evidence_extractor.pycode · 3.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/pipeline/format_output.pycode · 12.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/pipeline/normalize.pycode · 6.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/pipeline/ranking.pycode · 2.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/pipeline/strategy_exporter.pycode · 9.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/run_hypothesis_ideator.pycode · 6.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/tests/conftest.pycode · 1.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/tests/test_evidence_extractor.pycode · 2.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/tests/test_format_output.pycode · 4.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/tests/test_guardrails.pycode · 5.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/tests/test_normalize.pycode · 5.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/tests/test_ranking.pycode · 2.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-hypothesis-ideator/scripts/tests/test_strategy_exporter.pycode · 8.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/SKILL.mdmarkdown · 9.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/assets/performance_coach_report.schema.jsoncode · 5.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/references/behavior-tags.mdmarkdown · 3.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/references/hermes-integration.mdmarkdown · 1.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/references/output-contract.mdmarkdown · 2.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/references/review-framework.mdmarkdown · 3.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/references/risk-review-checklist.mdmarkdown · 1.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/scripts/review_trade_performance.pycode · 31.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/scripts/tests/fixtures/incomplete_record.jsoncode · 0.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/scripts/tests/fixtures/monthly_aggregate_revenge_pattern.jsoncode · 0.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/scripts/tests/fixtures/partial_close_stop_moved.jsoncode · 1.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/scripts/tests/fixtures/risk_data_missing_no_size_creep.jsoncode · 0.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/scripts/tests/fixtures/single_trade_clean_loss.jsoncode · 0.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/scripts/tests/fixtures/single_trade_premature_exit.jsoncode · 1.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/scripts/tests/fixtures/single_trade_rule_violation_loss.jsoncode · 1.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trade-performance-coach/scripts/tests/test_review_trade_performance.pycode · 11.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/SKILL.mdmarkdown · 17.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/assets/postmortem_template.mdmarkdown · 0.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/references/field_mapping.mdmarkdown · 5.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/references/thesis_lifecycle.mdmarkdown · 6.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/schemas/thesis.schema.jsoncode · 8.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/fmp_price_adapter.pycode · 3.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/tests/conftest.pycode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/tests/test_fmp_price_adapter.pycode · 2.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/tests/test_thesis_ingest.pycode · 25.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/tests/test_thesis_review.pycode · 12.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/tests/test_thesis_store.pytext · 89.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/tests/test_thesis_store_futures.pytext · 88.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/tests/test_trader_memory_cli.pycode · 10.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/thesis_ingest.pycode · 23.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/thesis_review.pycode · 17.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/thesis_store.pytext · 139.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/trader-memory-core/scripts/trader_memory_cli.pycode · 4.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/SKILL.mdmarkdown · 5.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/references/uptrend_methodology.mdmarkdown · 13.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/calculators/__init__.pycode · 0.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/calculators/historical_context_calculator.pycode · 6.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/calculators/market_breadth_calculator.pycode · 4.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/calculators/momentum_calculator.pycode · 7.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/calculators/sector_participation_calculator.pycode · 6.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/calculators/sector_rotation_calculator.pycode · 10.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/data_fetcher.pycode · 7.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/report_generator.pycode · 19.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/scorer.pycode · 14.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/helpers.pycode · 3.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_data_fetcher.pycode · 6.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_historical_context_calculator.pycode · 5.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_market_breadth_calculator.pycode · 6.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_momentum_calculator.pycode · 6.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_new_features.pycode · 19.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_report_generator.pycode · 9.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_scorer.pycode · 6.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_sector_participation_calculator.pycode · 5.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_sector_rotation_calculator.pycode · 7.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/tests/test_uptrend_analyzer.pycode · 6.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/uptrend-analyzer/scripts/uptrend_analyzer.pycode · 8.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/value-dividend-screener/SKILL.mdmarkdown · 16.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/value-dividend-screener/references/fmp_api_guide.mdmarkdown · 8.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/value-dividend-screener/references/screening_methodology.mdmarkdown · 9.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/value-dividend-screener/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/value-dividend-screener/scripts/screen_dividend_stocks.pycode · 54.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/value-dividend-screener/scripts/tests/conftest.pycode · 0.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/value-dividend-screener/scripts/tests/test_fmp_stable.pycode · 9.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/SKILL.mdmarkdown · 7.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/references/fmp_api_endpoints.mdmarkdown · 1.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/references/scoring_system.mdmarkdown · 9.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/references/vcp_methodology.mdmarkdown · 4.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/requirements.txtcode · 0.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/_fmp_compat.pycode · 5.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/calculators/__init__.pycode · 0.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/calculators/execution_state.pycode · 6.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/calculators/forward_outcome.pycode · 4.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/calculators/pattern_classifier.pycode · 3.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/calculators/pivot_proximity_calculator.pycode · 4.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/calculators/relative_strength_calculator.pycode · 8.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/calculators/trend_template_calculator.pycode · 9.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/calculators/vcp_pattern_calculator.pycode · 22.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/calculators/volume_pattern_calculator.pycode · 9.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/fmp_client.pycode · 19.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/historical_report.pycode · 7.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/historical_scanner.pycode · 7.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/report_generator.pycode · 15.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/scorer.pycode · 8.5 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/screen_vcp.pycode · 35.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/tests/conftest.pycode · 0.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/tests/test_fmp_client_historical.pycode · 4.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/tests/test_fmp_stable_migration.pycode · 2.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/tests/test_historical_vcp.pycode · 25.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/skills/vendor/vcp-screener/scripts/tests/test_vcp_screener.pytext · 135.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/sample_outputs/bad_example.mdmarkdown · 0.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/sample_outputs/good_example.mdmarkdown · 2.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/approved.yamlcode · 1.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/approved_with_journal_bridge.yamlcode · 1.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_approved_blank_reviewer.yamlcode · 1.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_approved_confirmed_mismatch.yamlcode · 1.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_approved_missing_confirmed.yamlcode · 1.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_approved_null_entry_or_risk.yamlcode · 1.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_approved_with_approved_false.yamlcode · 1.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_expired_no_decided_at.yamlcode · 0.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_invalid_timestamp.yamlcode · 0.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_journal_bridge_invalid_action.yamlcode · 1.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_journal_bridge_unknown_field.yamlcode · 1.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_no_approval.yamlcode · 0.7 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_rejected_no_reason.yamlcode · 0.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/bad_required_false.yamlcode · 0.8 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/draft.yamlcode · 1.4 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/expired.yamlcode · 1.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/fixtures/trade_tickets/rejected.yamlcode · 1.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_output_safety.pycode · 3.2 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_package_structure.pycode · 3.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_pre_market_session_state_rule.pycode · 1.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_prompt_template.pycode · 9.1 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_required_sections.pycode · 3.9 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_schedule_drift.pycode · 7.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_sync_determinism.pycode · 13.6 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_trade_ticket_schema.pycode · 15.0 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_upstream_status.pycode · 8.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/tests/test_upstream_workflow_adapter.pycode · 6.3 KB

    No inline preview for this entry.

  • hermes-trading-research-agent/vendor-manifest.jsoncode · 1.5 KB

    No inline preview for this entry.