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
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).
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/ticketshermes-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 testhermes-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.yamlhermes-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-ticketadded 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 / Ticket Status Where it landed Phase 0 — Verify Hermes capabilities ✓ done docs/03-hermes-compatibility-notes.md(verified table + operational findings, Hermes v0.14.0; v0.1.3 added verified entries forbundles reload, MCP config location, and cron toolset restrictions)Phase 1 — External-linked skill integration ✓ done config.yaml:skills.external_dirs,scripts/validate_upstream_index.py,docs/04-skill-integration-strategy.mdPhase 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_configidempotent,--force-overwriteescape hatch double-gated byREQUIRE_SYNC_WRITE=1+REQUIRE_FORCE_OVERWRITE=1) + 7 determinism tests intests/test_sync_determinism.pyshipped as TICKET-004a / B-2a. B-2b (TICKET-004b) closes Phase 2: upstreamworkflows/*.yamlread-only drift guard for the 3 overlap workflows + 2 ignored-with-reason workflows;sync()write path unchanged (all 3 overlap bundles arex-generated: false). Seetests/test_upstream_workflow_adapter.pyfor the 5 drift checks anddocs/04"Current bundle-composition SoT (as of B-2b)".Phase 3 — Cron presets ✓ done data/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.shwrapper,tests/test_schedule_drift.py,tests/test_prompt_template.py.cron runrequires ajob_idrather than a human name in Hermes v0.14.0 — documented indocs/03-hermes-compatibility-notes.md.Phase 4 — Safety and policy gates ✓ done SOUL.md,tests/test_output_safety.py,tests/test_required_sections.py,tests/fixtures/sample_outputs/Phase 5 — Optional vendored mode scoped (008a), impl deferred (008b) TICKET-008a documented the three-mode model + vendor-manifest.jsonshape + destructive-skeleton warning indocs/04. TICKET-008b (the actual non-destructive writer + manifest provenance + patches pipeline + skills drift detection) remains open.Phase 6 — Release and documentation ✓ done v0.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 ✓ done See 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.mdfor the 004a/004b split rationale;tests/test_sync_determinism.pyfor the contract tests.TICKET-004b / B-2b (upstream workflows adapter, closes Phase 2) ✓ done (shipped in v0.1.6) scripts/sync_claude_trading_skills.pyadds 3 public symbols (UPSTREAM_OVERLAP_SLUGS,UPSTREAM_IGNORED_WORKFLOW_SLUGS,load_upstream_workflow);sync()write path unchanged.tests/test_upstream_workflow_adapter.pyadds 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/04carries SoT split + projection-vs-drift-check table (display_name/cadenceare documented but not drift-checked;artifacts → required_outputs/steps/decision_gate/manual_review/when_to_runare not projected in v0.1.x — B-2c candidates) + inventory classification table (overlap: 3, ignored: 2 with reasons).Makefilesync-external-writecomment fixed "nine → ten SKIP lines". WithCLAUDE_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). Seedocs/09-coding-tickets.mdTICKET-004b entry.TICKET-008a (vendored mode scope, docs) ✓ done (on main, folds into next release)docs/04"Vendored mode (TICKET-008)" section +docs/09008a/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.mdTICKET-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 indocs/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-statusslash command.TICKET-009 / B-3 ( /trade-ticketbundle + 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_atcarry bothformat: date-timeand an explicit ISO-8601pattern),skill-bundles/trade-ticket.yaml(x-generated: false, 5 operator verbs, positive boundary,confirmed.*re-type, mismatch handling),data/skill-mapping.yamlentry, escalation pointers in/swing-opportunity-daily+/pre-market-routine,tests/test_trade_ticket_schema.py(22 cases — validator built withformat_checker=FORMAT_CHECKER; 9 schema negatives including blank-reviewer + invalid-timestamp) + 14 fixtures. Bundle count goes from 9 to 10. Seedocs/04-skill-integration-strategy.md"Trade ticket primitive" anddocs/09-coding-tickets.md.TICKET-010 (Trade ticket persistence + journal bridge, + typo-guard polish) ✓ done (shipped in v0.1.6) .gitignoreaddstickets/+*.ticket.yamlsafety net..env.EXAMPLE+distribution.yaml:env_requiresdeclareHERMES_TRADE_TICKET_DIR(optional, default${HOME}/trading-research/tickets).schemas/trade-ticket.schema.jsonadds optionaljournal_bridgeobject (target: const trader-memory-core,action: enum [register_thesis, update_thesis, postmortem], optionalthesis_status/notes,additionalProperties: false).skill-bundles/trade-ticket.yamlinstruction 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). Seedocs/04-skill-integration-strategy.md"Ticket persistence and journal bridge" anddocs/09-coding-tickets.md.Open work items are reflected in
CHANGELOG.mdunder[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.mdsoak procedure refined, README "Required step" callout, plusdata/skill-mapping.yamlgainstrade-performance-coachformonthly-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_ONLYambiguously 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.pypins 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/04gains a full "Vendored mode (TICKET-008)" section (three-mode model, per-mode Hermes-edit ownership,vendor-manifest.jsonshape, and the danger note that today'scopy_vendor_skills()skeletonshutil.rmtrees vendored skills).docs/09TICKET-008 split into 008a (docs) and 008b (deferred implementation). No code. - TICKET-015 — upstream status inspection.
scripts/upstream_status.sh+make upstream-statusgive a working-tree-safe, before-pull view of the external-linked$CLAUDE_TRADING_SKILLS_REPOcheckout (resolved ref, dirty files, incoming commits, incomingskills//workflows/changes, local-edit riskNONE/LOW/MEDIUM/HIGH). Never pulls/merges/rebases/stashes or touches a skill file.tests/test_upstream_status.pyadds presence + behavioral-temp-git-fixture layers. Complements the TICKET-004b drift guard (before-pull vs after-pull). Deferred: TICKET-015b read-only/upstream-statusslash command.
The D: prod-alias operational soak procedure is codified in
docs/08-release-playbook.mdfor 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-routinefired 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;## Responseforbidden-phrase count = 0; surfaced the posture-wording ambiguity that TICKET-013 addresses); Linux MISS explained by cron presets not being registered (operator needs to runbash 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-assistantthat packages a disciplined US equity trading research assistant. It must integrate withtradermonty/claude-trading-skillsand 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:
- Current Hermes official docs and CLI behavior.
tradermonty/claude-trading-skills/skills-index.yaml.tradermonty/claude-trading-skills/workflows/*.yaml.- This package's
data/skill-mapping.yamland docs. - 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
.envor provider-specific secret stores, never in committed config. - Keep
claude-trading-skillscanonical; 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
- Install or update Hermes in a test environment.
- 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, andSOUL.md
- Run a minimal local profile from this skeleton.
- Document any changes required in
docs/03-hermes-compatibility-notes.md.
Exit criteria:
hermes profile install <local git repo> --aliasworks in a fresh test home.trading-research-assistant chatloadsSOUL.md.- At least one bundle appears in
bundles list.
Phase 1 — External-linked skill integration
- Use
${CLAUDE_TRADING_SKILLS_REPO}/skillsasskills.external_dirsinconfig.yaml. - Add validation that the path exists and contains
skills-index.yamlin the parent repo. - Ensure bundle skill names resolve against Hermes skill discovery.
- Add a clear degraded-mode message when the external repo is missing.
Exit criteria:
python scripts/validate_package.py --profile-root .passes withCLAUDE_TRADING_SKILLS_REPOset.- Missing external skills are reported by bundle name and missing skill name.
Phase 2 — Bundle generation from canonical workflows
- Parse
skills-index.yaml. - Parse
workflows/*.yamlwhen present. - Use
data/skill-mapping.yamlto generate Hermesskill-bundles/*.yaml. - 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 --writeregenerates bundles deterministically.- Re-running the generator without changes produces no diff.
Phase 3 — Cron presets
- Keep cron job enablement user-controlled.
- Use
cron/create_cron_jobs.shto create the default scheduled jobs. - Default schedule timezone is America/Los_Angeles.
- Provide delivery targets via
HERMES_CRON_DELIVER, defaulting tolocalfor safest first run. - Use
prompts/*.mdfor 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 listshows 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.
- Add
--mode vendorto copy selected canonical skills intoskills/vendor/orskills/. - Preserve upstream source metadata in
vendor-manifest.json. - Do not mutate vendored skills except via an explicit compatibility patch step.
- 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
- Update
distribution.yamlversion. - Tag release
v0.1.0. - Add install commands to README.
- Provide a Japanese README section if the public audience includes Japanese traders.
- 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
TICKET-001: Make this skeleton a valid git repo and run validator.TICKET-002: Verify Hermes profile distribution install/update behavior.TICKET-003: Implement external skill discovery validation.TICKET-004: Generate bundles fromdata/skill-mapping.yaml.TICKET-005: Wire cron creation script and prompts.TICKET-006: Add safety/report-format tests.TICKET-007: Dogfood with one pre-market and one after-close run.TICKET-008: Add optional vendored mode.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:
- Install Hermes.
- Clone
claude-trading-skills. - Install this profile distribution.
- Set model and optional market-data API keys.
- Run
/pre-market-routinemanually. - Enable cron jobs via
cron/create_cron_jobs.sh. - Receive structured research briefs without knowing individual skill names.
- TICKET-012 — operational-soak docs + monthly workflow drift fix (v0.1.6 operational soak findings promoted to
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-statustarget give a working-tree-safe way to inspect the external-linked$CLAUDE_TRADING_SKILLS_REPOcheckout before pulling. It resolves the upstream ref ($UPSTREAM_STATUS_REFremote-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 / incomingskills/+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_REPOclone is at once the upstream mirror, the runtime skill source, and the place Hermes edits skills during troubleshooting, so a blindgit pullcan overwrite local / Hermes-made edits. AHIGHlabel means exactly that risk (dirty/untracked underskills/orworkflows/, 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 intmp_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 whengitis unavailable.
Changed
data/skill-mapping.yaml: addedtrade-performance-coachtomonthly-performance-review.skills(inserted beforebacktest-expertto follow the upstreamoptional_skillsorder). 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 upstreamtradermonty/claude-trading-skills/workflows/monthly-performance-review.yamlhad 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.yamlinstruction body (TICKET-013): added a mandatory two-line preamble rule that separatesSession state:(calendar fact:normal session day/US market holiday/weekend/unknown) fromPosture 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>, orpending fresh data / degraded). The two preamble lines must come before anyRisk 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 renderedRisk posture: risk-off / REDUCE_ONLYambiguously — the operator could not tell structural regime change from carry-forward across the 2026-05-25 holiday bridge. Also added aSource / Skill provenancesub-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: falseunchanged.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 byprompts/pre-market-routine.mdplus 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.mdgains three subsections under Operational findings. (1) Profile install does not register cron presets —hermes profile install/updateinstalls assets only;bash cron/create_cron_jobs.shis what registers the 4data/schedule-presets.yamljobs. 2026-05-25 macOS profile PASS (pre-market-routinefired at 06:13:59 PDT); Linux profile MISS (script never run,cron listempty). (2) Cron tick latency — the Hermes gateway evaluates expressions on a tick/queue basis; anactual_fire_tswithin 0–30 min ofexpected_fire_tsis a PASS. Observed value: 06:13:59 PDT against0 6 * * 1-5(~14 min). (3) Forbidden-phrase scan applies to the## Responsesection — 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 thatbash cron/create_cron_jobs.shis what creates the cron jobs.docs/08-release-playbook.mdOperational soak inspect step (§3) updated: codified the 0–30 min PASS window foractual_fire_tsvsexpected_fire_ts(with the macOS observation as the reference data point), and explicitly limited the forbidden-phrase scan to the## Responsesection (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, theSource / Skill provenancesub-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 (noCLAUDE_TRADING_SKILLS_REPOdependency), so the +12 delta lands in both with-upstream and without-upstream test runs.- TICKET-015 docs —
docs/03-hermes-compatibility-notes.mdgains 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.mdgains a "Three layers that watch upstream" table (drift guard / upstream-status / vendored mode).docs/09-coding-tickets.mdgains the TICKET-015 entry plus a deferred TICKET-015b (read-only/upstream-statusslash command).README.md/README.ja.mdgain 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 expandedvendor-manifest.jsonfield shape, and an explicit danger note that today'scopy_vendor_skills()skeletonshutil.rmtrees vendored skills somake sync-vendor-writeis 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_REPOclone 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: falsetypo guard with a negative fixture. Bundle catalogue stays at 10; suite goes from 155 (v0.1.5) to 176 withCLAUDE_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-ticketprimitive with an operator-confirmed save-path convention and an optionaljournal_bridgeblock for handing APPROVED tickets off totrader-memory-core. No execution, no silent disk write, no schema breaking change —journal_bridgeis 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 arex-generated: false); the adapter declares upstream as canonical intent, mapping as the Hermes distribution contract, and tests as the mechanical guard. WithCLAUDE_TRADING_SKILLS_REPOconfigured: 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 casetests/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.yamlto lock in theadditionalProperties: falseclause insidejournal_bridge. Parametrize matrix 10 → 11; suite 175 → 176 (withCLAUDE_TRADING_SKILLS_REPO).
Added
schemas/trade-ticket.schema.json: optional top-leveljournal_bridgeobject.target: const trader-memory-core(typo guard),action: enum [register_thesis, update_thesis, postmortem], optionalthesis_status: enum [IDEA, ENTRY_READY, ACTIVE, CLOSED], optionalnotes: string minLength 1.additionalProperties: falseinsidejournal_bridgerejects typos likethesis_statuzwhile leaving the top-level schema'sadditionalPropertiesstance unchanged. Top-levelrequiredunchanged;$idremains absent.skill-bundles/trade-ticket.yamlinstruction 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.yamlsuffix matches the new.gitignoresafety net). (2) Journal-bridge handoff — recommended on APPROVED tickets, never required. (3) Silent-write prohibition in positive form:emits YAML only, persistence isoperator-confirmed.distribution.yaml:env_requires:HERMES_TRADE_TICKET_DIR(optional, default${HOME}/trading-research/tickets) declared in the same form asHERMES_TRADING_TIMEZONEso the installer surfaces it..env.EXAMPLE:HERMES_TRADE_TICKET_DIR=${HOME}/trading-research/ticketsblock with a comment explaining that the.envparser returns the literal and consumers expand withos.path.expandvars+os.path.expanduser.tests/fixtures/trade_tickets/approved_with_journal_bridge.yaml(positive) andbad_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.yamlappended to the existingtest_negative_fixture_fails_schemaparametrize matrix (matrix 9 → 10). (3)test_env_expansion_yields_absolute_path— readsHERMES_TRADE_TICKET_DIRfrom.env.EXAMPLE, expands withos.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 mentionsHERMES_TRADE_TICKET_DIR,Suggested save path,<ticket_id>.ticket.yaml. (5)test_bundle_instruction_documents_journal_bridge_handoff— instruction literally mentionsjournal_bridge,trader-memory-core,register_thesis,update_thesis,postmortem. (6)test_bundle_instruction_states_silent_write_prohibited_in_positive_form— instruction literally mentionsemits yaml onlyandoperator-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 existingHERMES_TRADING_TIMEZONEdeclaration 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-weeklyis renamed toweekly-portfolio-reviewin Hermes with refinedrequired_outputs;trade-memory-loopis driven by the operator viatrader-memory-coredirectly). (3)load_upstream_workflow(source, slug)helper that returns the parsed yaml orNone. Thesync()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 — upstreamworkflows/<slug>.yamlexists 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 upstreamworkflows/*.yamlslug is inUPSTREAM_OVERLAP_SLUGS ∪ UPSTREAM_IGNORED_WORKFLOW_SLUGS; the two sets are disjoint (rev3 Low fold). Module-level skip whenCLAUDE_TRADING_SKILLS_REPOis unset.
Polish (TICKET-010 follow-up — typo-guard negative fixture)
tests/fixtures/trade_tickets/bad_journal_bridge_unknown_field.yaml(new): APPROVED ticket withjournal_bridge.thesis_statuz(typo ofthesis_status). Exercises theadditionalProperties: falseclause insidejournal_bridgethat TICKET-010 added — without that clause the fixture would have validated.tests/test_trade_ticket_schema.py::test_negative_fixture_fails_schemaparametrize matrix grows from 10 to 11 (the new fixture is appended as a row; no new standalone test). Fixture count 16 → 17. Suite total withCLAUDE_TRADING_SKILLS_REPO: 175 → 176.
Changed
.gitignore: newtickets/and*.ticket.yamlentries as a safety net for accidental in-repo ticket placement. The.ticket.yamlsuffix matches the bundle's suggested basename<ticket_id>.ticket.yaml.reports/was already ignored, soreports/trade_tickets/is implicitly covered.skill-bundles/trade-ticket.yaml:x-generated: falseunchanged; 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-writecomment "nine SKIP lines" → "ten SKIP lines" (B-2b housekeeping; stale since TICKET-010 added/trade-ticketto 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), theHERMES_TRADE_TICKET_DIRexpansion contract, thejournal_bridgeshape, and the out-of-scope list (no broker submission, no silent write, no in-repo ticket commit, no action↔thesis_status cross-check, noJOURNALEDstatus, no APPROVED-requiredjournal_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/cadenceare 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: newTICKET-010 — Trade ticket persistence + journal bridgeentry with file-by-file change list, Done conditions, and deferred scope.docs/09-coding-tickets.md:TICKET-004b — Upstream workflows adapterflipped fromopento✓ shipped in B-2bwith 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-ticketrow Purpose extended with "Persistence is operator-confirmed (HERMES_TRADE_TICKET_DIR, suggested save basename<ticket_id>.ticket.yaml); optionaljournal_bridgeblock hands off APPROVED tickets totrader-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 underCLAUDE_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.requiredis{"const": true}at the base level so every ticket is approval-gated;allOf+if/thenenforce per-status approval invariants; the APPROVED branch tightensplan.entry.value,plan.stop.value,risk.risk_per_trade_pct,approval.confirmed.entry,approval.confirmed.stop,approval.confirmed.risk_per_trade_pctto non-null number.skill-bundles/trade-ticket.yaml(new,/trade-ticketslash command,x-generated: false): five operator verbs (new/review/APPROVE/REJECT/EXPIRE). APPROVE requires the reviewer to re-typeconfirmed.{ticker,direction,entry,stop,risk_per_trade_pct}; any mismatch demotes the ticket back toREVIEW_READYwith 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 totrader-memory-core).data/skill-mapping.yaml: newtrade-ticketworkflow 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.requiredconst true), 4 positive fixtures (DRAFT, APPROVED, REJECTED, EXPIRED), 9 schema negative fixtures (missing approval,required: false, status/approved mismatch, missingconfirmed, APPROVED with nullentry/stop/risk, APPROVED with blank reviewer, invalid timestamp, REJECTED withoutreason, EXPIRED withoutdecided_at), 1 business-invariant positive (_assert_confirmed_matches_tickethelper enforces equality betweenconfirmed.*andcandidate.*/plan.*/risk.*, plus non-null on APPROVED), 1 mismatch negative (schema-valid ticket whoseconfirmed.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.yamlandskill-bundles/pre-market-routine.yaml: instruction bodies gain a paragraph pointing at/trade-ticketand requiringsource_bundle+source_candidate_refwhen 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-ticketrow 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 (nocron runshortcut), inspectingcron/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 intodocs/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.reviewergainsminLength: 1so an APPROVED ticket can never carry a blank reviewer.created_atandapproval.decided_atgain an explicit ISO-8601patternin addition toformat: date-time, so a validator built withoutformat_checkerstill rejects malformed timestamps.tests/test_trade_ticket_schema.py: the canonical_validator()helper now builds theDraft202012Validatorwithformat_checker=Draft202012Validator.FORMAT_CHECKER, soformat: date-timeis enforced for real (not just annotation). Defence in depth — schema carries bothformatandpattern; the validator honours both.tests/fixtures/trade_tickets/bad_invalid_timestamp.yamlandbad_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-writeis now a no-op against the shipped tip —x-generated: false(or missing) bundles are skipped with a stderr WARN,x-generated: truebundles are write-if-changed, andconfig.yamlis touched only when the env entry is actually missing. A new--force-overwriteflag (gated by thesync-external-write-forcemake target requiringREQUIRE_SYNC_WRITE=1andREQUIRE_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: falseand missing-key bundles are skipped with stderr WARN,--force-overwriteis the only way to rewrite them,x-generated: truebundles 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 consecutivesync(write=True)calls (for bothskill-bundles/*.yamlandconfig.yaml). Real-repo case skips whenCLAUDE_TRADING_SKILLS_REPOis unset.scripts/sync_claude_trading_skills.py:--force-overwriteCLI flag (escape hatch — reserved for thesync-external-write-forcemake target).Makefile:sync-external-write-forcetarget, double-gated byREQUIRE_SYNC_WRITE=1andREQUIRE_FORCE_OVERWRITE=1; passes--force-overwriteand re-runstests/test_output_safety.py+tests/test_required_sections.pyafter writing.
Changed
scripts/sync_claude_trading_skills.py:sync()no longer overwrites existingskill-bundles/*.yamlunconditionally. For each preset, it inspects the on-disk bundle'sx-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 producex-generated: truefiles automatically.--force-overwritecollapses 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}/skillsis already inskills.external_dirs[]. ReturnsTrueonly on the rare write path. This closes theconfig.yaml-side hole in the determinism contract.scripts/sync_claude_trading_skills.py:SyncResultcarries counts forwrote/skipped_protected/skipped_legacy/skipped_unchanged/forced;main()prints a one-line summary on--write.- All nine shipped
skill-bundles/*.yamlare retroactively annotatedx-generated: falseso the generator no longer owns them. They will not be touched bymake sync-external-writeagainst the shipped tip. Makefile sync-external-write: behavior change — was "rewrite every bundle", now "skip protected + legacy bundles; only touch new orx-generated: truebundles whose rendered content differs". TheREQUIRE_SYNC_WRITE=1gate 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 thatdata/skill-mapping.yamlis the authoritative source for bundle composition; upstreamworkflows/*.yamlis 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: boolsurfaces whetherupdate_external_config()actually wroteconfig.yaml. The CLI summary line on--writenow ends... config_written=0/1so a futureconfig.yamledit shows up in the run output instead of being silently absorbed intowrote=0. Newtests/test_sync_determinism.py::test_sync_result_reports_config_written_flagcovers both branches.Makefile sync-vendor-write: the WARNING block was still saying "overwrites bundles". After B-2a, bundle-side writes throughsync()honor thex-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 forbundles 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.envparser),_expand_prompt_template(). At cron-create time, the new{{TIMEZONE}}token in scheduled prompts is expanded using priority shell envHERMES_TRADING_TIMEZONE><repo-root>/.env>data/schedule-presets.yaml:timezone> literalAmerica/Los_Angeles(with a one-shot fallback WARNING). Reading.envdirectly is required becausebash cron/create_cron_jobs.shdoes 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.envoverride, shell-wins-over-.env, monkeypatchedENV_FILEhonored at call time, and direct_resolve_report_timezoneunit. Total suite now 118 passing.distribution.yaml:env_requires: declaredHERMES_TRADING_TIMEZONEas optional (defaultAmerica/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.pyextended to assert the entry exists andrequired: false.
Changed
- Prompt files:
prompts/pre-market-routine.mdandprompts/after-close-review.mdswap hard-codedAmerica/Los_Angelesfor{{TIMEZONE}};prompts/weekly-portfolio-review.mdandprompts/monthly-performance-review.mdgain aTimezone 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 areport_timezoneargument 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 thedeception_hidesubsection 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 documentbundles reload, active MCP config location (config.yaml:mcp_servers), and cron toolset restriction paths (platform_toolsets.cron/ per-jobenabled_toolsets).README.md/README.ja.md/docs/08-release-playbook.md: remove stale MCP-schema TODO wording and clarify thatmcp.jsonremains empty while real MCP servers are configured throughhermes 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. Readsdata/schedule-presets.yamlas the single source of truth (schedule, name, prompt_file, skills, timezone) instead of hard-coding them in the shell script. Supports--dry-runto preview Hermes CLI invocations without executing.- Host-TZ warning: the runtime resolves the host IANA timezone (
TZenv, then/etc/localtimeviareadlink/resolve()+/zoneinfo/split) and compares it to the preset timezone by IANA name. Emits aWARNINGon stderr — but continues — when the names differ (soAmerica/Phoenixis flagged againstAmerica/Los_Angeleseven when offsets coincide), or when the host zone cannot be verified.HERMES_TRADING_TIMEZONEis 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-readablename: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 +--skillflags to a 6-line wrapper thatexecs the Python entry point. The documentedbash cron/create_cron_jobs.shinvocation andHERMES_PROFILE_CMD/HERMES_CRON_DELIVERenv var contract are preserved.scripts/validate_package.py:validate_prompts_and_schedules: now also requires the top-leveltimezone:and a non-emptyname/skillsfor 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 additionalpyyamlruntime dependency added to the Quick Start install line alongsidejsonschema. The "rewrite cron expressions for your host timezone" recipe and the no-hidden-cron-jobs non-goal now point atdata/schedule-presets.yamlinstead of the wrapper script.
Fixed
pyproject.toml: syncproject.versionto0.1.2(kept in step withdistribution.yaml:version, sincepip 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-codedgit checkout v0.1.0togit 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 runsmake validate,make validate-upstream(against a checked-outtradermonty/claude-trading-skills), andmake test. Triggers: push tomain, push ofv*tags, pull requests (any branch), and manualworkflow_dispatch. Usesactions/checkout@v6andactions/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 = []andpy-modules = []. Without this, setuptools' automatic flat-layout discovery picks up top-level dirs likecron/,data/,skills/,schemas/,prompts/and abortspip install -e ".[dev]"withMultiple 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 thathermes 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 thatmcp.example.jsonplaceholders (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 installfrom GitHub →cron run+cron tickwith output files generated for pre-market and after-close routines).Added
- Hermes Profile Distribution manifest (
distribution.yaml) targeting thetrading-research-assistantalias. SOUL.mdenforcing research-and-process-assistant tone, no order-placement, no signal-service UX.- Nine slash-command bundles under
skill-bundles/mapping to the canonical workflows intradermonty/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.shenabling 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_hidethreat scanner. scripts/validate_package.py— distribution / bundle / prompt / JSON structural validator.scripts/validate_upstream_index.py(new) — canonicalskills-index.yamlintegrity check with degraded-mode acceptance viadocs/MISSING_SKILLS.md. Exit 0/2 semantics,--strictmode for CI.scripts/sync_claude_trading_skills.py— external-mode bundle sync (dry-run by default;--writereserved for future generator-hardening work).- Makefile splits the upstream sync into safe (
sync-external, dry-run) and dangerous (sync-external-write, gated byREQUIRE_SYNC_WRITE=1) targets, and addsvalidate-upstream/validate-allfor 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 (withdeception_hideworkaround 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) thattests/test_required_sections.pyenforces, phrased in positive form to keep regenerated bundles compatible with Hermes'deception_hidethreat scanner.dump_yaml()now preserves block-scalar (|) style forinstruction: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_ownednow includes.env.EXAMPLE,README.ja.md, andCHANGELOG.mdso the Quick Start (which copies.env.EXAMPLE) works after profile install.
Fixed
scripts/validate_package.py: trailing-slash-insensitive check fordistribution_owned. Hermes' installed copy strips trailing slashes fromskills//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 jsonschemasotrader-memory-core(upstream skill that importsjsonschemadirectly) runs in full mode rather than degraded; also added provider-switch examples (openai-codexwithmodel.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
activebut do not fire automatically until the Hermes gateway is running; documentedgateway install && gateway start(managed) andcron 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-hooksfollowed bycron tick --accept-hooks, then inspectcron/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-corejsonschema dependency. - docs/04-skill-integration-strategy.md: added
jsonschemato the degraded-mode trigger table with install hint. - docs/08 pre-release checklist: explicit step for
hermes profile updateso 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
--aliasas a boolean (no value); the wrapper is written to$HOME/.local/bin/<name>, not to$HERMES_HOME. Isolated testing therefore requiresHOME,HERMES_HOME, andPATHto all be temp-redirected; seedocs/03-hermes-compatibility-notes.md. modelandproviderare root-level config keys (hermes config set model claude-opus-4-7), notinference.*.- 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, butx-generated: falsemanual-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.
- TICKET-015 — Upstream status inspection.
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 --writehermes-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 showfor 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 hermesHermesチャットに以下を貼り付けてください:
以下の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_bridgeblock で 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 listdata/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/PhoenixvsAmerica/Los_Angelesのような mismatch は検出されます)。cron/create_cron_jobs.py --dry-runで実行せずに発行コマンドを確認可能。スケジュール対象 prompt には
{{TIMEZONE}}テンプレートが含まれていて、cron-create 時に runtime が展開します。優先度はHERMES_TRADING_TIMEZONEshell 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-skillscheckout ($CLAUDE_TRADING_SKILLS_REPO) から読み込まれます。上流が新しい release を出したら、その checkout をgit pullで更新します。ただし同じ clone は、セッション中に Hermes へスキル修正を依頼した ときに Hermes がスキルを編集する場所でもあるため、無条件に pull するとローカル 修正を上書きしてしまう恐れがあります。pull する前に、何が入ってくるか・リスクの あるローカル修正がないかを確認してください:make upstream-statusremote 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 -yHermes 側で 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 scannerdeception_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 alias:
hermes-trading-research-agent/README.mdmarkdown · 16.1 KB
Hermes Trading Research Agent
A Hermes Profile Distribution that turns
tradermonty/claude-trading-skillsinto 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 hermesPaste 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
Requirement Notes 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-skillsrepo, cloned locallyExternal-linked mode references it via CLAUDE_TRADING_SKILLS_REPO.API keys
Every key is optional at install time (
distribution.yamlmarks themrequired: 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, orOPENROUTER_API_KEY(matched withprovidersetting above).
- Optional:
ALPACA_API_KEY/ALPACA_SECRET_KEY— paper / read-only by default (ALPACA_PAPER=true).
Slash command bundles
Slash command Default cron Purpose /pre-market-routineWeekdays 06:00 PT Macro calendar, market regime, earnings movers, breadth, watchlist candidates, risk gate. /after-close-reviewWeekdays 13:15 PT What changed, sector rotation, open-trade review, journal prompts, tomorrow prep. /market-regime-dailyManual / on-demand 15-minute regime check: breadth, uptrend participation, exposure ceiling. /swing-opportunity-dailyManual when risk gate allows Disciplined swing candidates: thesis, invalidation, position-sizing assumptions. /earnings-movers-triageEvent-driven Classifies gap-up / gap-down earnings names and PEAD candidates. /portfolio-risk-checkManual Exposure, concentration, portfolio heat, open-thesis validity. /trade-journalManual Structures trade notes into journal entries with thesis / invalidation / risk record. /trade-ticketManual Captures 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); optionaljournal_bridgeblock hands off APPROVED tickets totrader-memory-core. Seeschemas/trade-ticket.schema.jsonanddocs/04-skill-integration-strategy.md"Trade ticket primitive" / "Ticket persistence and journal bridge"./weekly-portfolio-reviewSaturday 09:00 PT Long-term holdings, dividends, allocation drift, forced-review triggers. /monthly-performance-reviewFirst of month 09:00 PT Process 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 updatedoes not create the four cron jobs.bash cron/create_cron_jobs.shbelow is what registers them. If you skip it, the profile is installed but no scheduled jobs will fire. Seedocs/03-hermes-compatibility-notes.md → Profile install does not register cron presetsfor 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 listdata/schedule-presets.yamlis the single source of truth for the four cron jobs (schedule + name + skills + prompt file + expected timezone). The shell script is a thin wrapper aroundcron/create_cron_jobs.py, which reads the YAML, runs eachcron createinvocation 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/Phoenixis flagged againstAmerica/Los_Angeleseven when offsets coincide). Pass--dry-runtocron/create_cron_jobs.pyto preview the commands without executing.Scheduled prompts also contain a
{{TIMEZONE}}template token; the runtime expands it at cron-create time usingHERMES_TRADING_TIMEZONEfrom the shell env, then the profile.env, then the preset YAML timezone, then literalAmerica/Los_Angeles. This is a label-only override — it does not move the cron schedule. Seecron/README.mdfor the full priority stack.Cron jobs register as
activebut do not fire automatically until the Hermes gateway is running. Aftercron listshows 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" doneTo 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
--tzflag oncron create. Cron expressions are interpreted in the host OS local timezone. TheHERMES_TRADING_TIMEZONEenv var is a report-body label only — it does not affect when cron fires.To run the default schedules at
America/Los_Angeleslocal times, either:- set the host OS timezone to
America/Los_Angeles, or - recompute each cron expression in
data/schedule-presets.yamlfor your host timezone (the runtime reads it directly; no script edit is needed).
See
cron/README.mdanddocs/03-hermes-compatibility-notes.md.
Inspecting upstream skill updates
The skills come from your local
claude-trading-skillscheckout ($CLAUDE_TRADING_SKILLS_REPO). When upstream ships new releases you update that checkout with a plaingit 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-statusIt fetches remote metadata only and prints the current branch, the resolved upstream ref, your dirty files, incoming commits, the incoming
skills/andworkflows/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. AHIGHlabel means you have local edits underskills/orworkflows/(possibly Hermes-made fixes) that a pull could overwrite; review them first. This complements the post-pull CI drift guard (make test); seedocs/04-skill-integration-strategy.mdfor 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), butgithub.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 -yWhen Hermes adds Git-ref pinning to its installer, this section will be replaced with the direct GitHub-ref-pinned form.
MCP servers
mcp.jsonships 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 ishermes mcp add ..., which writes profileconfig.yamlundermcp_servers:. The example filemcp.example.jsonremains 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.jsonempty, add real servers withhermes mcp add ...or explicitconfig.yaml:mcp_servers, then usehermes 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.yamland only created when you explicitly runcron/create_cron_jobs.sh(a thin wrapper aroundcron/create_cron_jobs.py).
Most important acceptance criterion
A new user should be able to install the profile, configure
.env, and run:/pre-market-routineThe 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 thedeception_hidethreat-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
LICENSEfile 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.
- Target Hermes alias:
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
- You are not a signal service.
- You do not place trades.
- You do not tell the user to buy or sell.
- You produce research, checklists, scenarios, watchlists, risk gates, and journal structure for human decision-making.
- You use installed trading skills before improvising.
- When a user request is vague, start with
trading-skills-navigatorortrading-research-orchestrator. - When data is stale, missing, simulated, or unavailable, say so clearly.
- Always separate facts, model/skill outputs, and your synthesis.
- Always include a human decision gate before any trading action.
- 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:
- State the failure plainly.
- Provide degraded-mode output if possible.
- List exact setup steps or env vars needed.
- Do not fabricate market data.
Preferred report sections
For pre-market:
- Market posture.
- Macro calendar.
- Overnight / pre-market drivers.
- Earnings movers.
- Breadth and trend participation.
- Themes / sectors.
- Watchlist candidates.
- Risk gate and next actions.
- Data freshness.
For after-close:
- Market action summary.
- Breadth / uptrend changes.
- Sector and theme rotation.
- Earnings reactions.
- Open trade review checklist.
- Journal prompts.
- Tomorrow preparation.
- Data freshness.
For trade journaling:
- Trade metadata.
- Setup and thesis.
- Entry / stop / target / sizing assumptions.
- Market regime.
- Emotional/process notes.
- Invalidation and review plan.
- 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.yamldefines the four cron jobs: top-leveltimezone, plus aname/schedule/prompt_file/skillsper preset. The runtime (cron/create_cron_jobs.py, invoked via thebash cron/create_cron_jobs.shwrapper) 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.yamlare written assumingAmerica/Los_Angeles. Hermes Agent v0.14.0 does not have a per-job timezone flag oncron create; cron expressions are interpreted in the host OS local timezone. TheHERMES_TRADING_TIMEZONEenv 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
TZenv, then/etc/localtime) and compares it to the presettimezoneby IANA name, not by UTC offset alone. SoAmerica/Phoenixis still flagged againstAmerica/Los_Angelesin summer even though both are UTC-7 — because the DST rules differ. The check emits aWARNINGon 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 aTimezone 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> literalAmerica/Los_Angeles— so an operator can re-label reports to e.g.Asia/Tokyowithout editing the prompt files.This expansion path is intentionally separate from the scheduler comparison above:
HERMES_TRADING_TIMEZONEonly changes the report label, never when cron fires. Drop the override into the installed-profile.envfor 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.yamlto the host's local timezone before enabling.
See
docs/03-hermes-compatibility-notes.mdfor verification details.Default schedules
Job Schedule Intended local time (America/Los_Angeles) Pre-market routine 0 6 * * 1-5Weekdays 06:00 After-close review 15 13 * * 1-5Weekdays 13:15 Weekly portfolio review 0 9 * * 6Saturday 09:00 Monthly performance review 0 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.shFor isolated smoke testing, override
HERMES_PROFILE_CMDto a test alias (e.g.trading-research-test-tmp) — seedocs/07-testing-acceptance-criteria.md.Preview the commands without touching Hermes:
HERMES_PROFILE_CMD=true python3 cron/create_cron_jobs.py --dry-runVerify (dogfood without waiting for the schedule)
chat -q '/pre-market-routine'exits 0 in v0.14.0 but returns only asession_id, so it is not sufficient for end-to-end dogfood. Usecron run+cron tickinstead: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 installregisters cron jobs asactive, 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" doneNotes
- Delivery defaults to
localfor safety. - Prompts are stored under
prompts/to avoid fragile shell quoting and to lettests/test_output_safety.pylint them. - Hermes' cron submission runs each prompt through a threat scanner; prompts with conditional+negation+"do not fabricate" semantics can match the
deception_hidepattern and be rejected. Keep prompts in positive form and put hard prohibitions inSOUL.mdinstead. Seedocs/03-hermes-compatibility-notes.md. - If Hermes CLI syntax changes, update
cron/create_cron_jobs.py(the body, not the shell wrapper) anddocs/03-hermes-compatibility-notes.md. - Tests in
tests/test_schedule_drift.pyguard the preset-vs-runtime contract: schedule values, skill names, and the host-TZ warning matrix.
- Run the host in
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-navigatorhermes-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_datahermes-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_DELIVERhermes-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 - provenancehermes-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.EXAMPLEhermes-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.mdResponsibility split
Component Responsibility claude-trading-skillsCanonical domain skills, scripts, references, workflow manifests This repo Hermes profile distribution, bundles, cron, orchestration, install UX Hermes Profile isolation, skill loading, gateways, cron execution, tool/runtime management Human trader Final decisions, broker execution, compliance, account risk Two integration modes
External-linked mode
Best for MVP.
config.yamlcontainsskills.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 vendorcopies selected upstream skills.- Generate
vendor-manifest.jsonwith source metadata. - Add drift detection to keep upstream and vendored skills aligned.
Workflow invocation
There are three invocation surfaces:
-
Manual slash commands:
/pre-market-routine/after-close-review/trade-journal
-
Natural language:
- User asks vague trading question.
SOUL.mdroutes totrading-research-orchestrator.- Orchestrator selects a bundle or skill path.
-
Scheduled cron:
cron/create_cron_jobs.shcreates 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 gateWhy 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-skillscanonical.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:
- Initialize git repository.
- Install Python dev dependencies.
- Run
python scripts/validate_package.py --profile-root .. - Run
pytest -q. - 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:
- Create a temporary Hermes home or test user profile.
- Install this repo using profile distribution install from local git path.
- Verify alias creation.
- Start a chat and confirm
SOUL.mdbehavior. - Run
/trading-research-orchestrator.
Acceptance:
- Profile installs.
- Profile can chat.
- Built-in adapter skills load.
Milestone 3 — External skills integration
Tasks:
- Clone
tradermonty/claude-trading-skillslocally. - Set
CLAUDE_TRADING_SKILLS_REPO. - Run validator.
- Run sync generator in external mode.
- Verify
bundles listand individual bundle invocation.
Acceptance:
- Upstream skills are discoverable.
- Missing skills are only Hermes-native adapter skills or are resolved.
/pre-market-routineloads the expected upstream skills.
Milestone 4 — Cron enablement
Tasks:
- Set
HERMES_CRON_DELIVER=local. - Run
bash cron/create_cron_jobs.sh. - Run
trading-research-assistant cron list. - Manually trigger pre-market and after-close jobs.
- 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:
- Add sample prompts and expected output snapshots.
- Check that direct imperative buy/sell language is absent.
- Check required sections exist.
- Check data freshness section exists.
- Check human next action section exists.
Acceptance:
- Automated tests cover guardrails.
- Manual review signs off on sample reports.
Milestone 6 — Optional vendored mode
Tasks:
- Implement copy mode in sync script fully.
- Add
vendor-manifest.jsongeneration with source commit if available. - Add drift detection.
- 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:
- Update README with final install instructions.
- Update
distribution.yamlversion. - Create release tag.
- Test install from GitHub URL.
- 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)
Item Status Notes distribution_ownedacceptsskill-bundles/✓ verified hermes profile installcopiesskill-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.yamlenvironment expansion forskills.external_dirs✓ verified In isolated install, trading-research-test-tmpresolved 55 upstream skills + 3 profile-local skills via${CLAUDE_TRADING_SKILLS_REPO}/skillsexpansion at skill discovery time.CLI syntax for cron create --skill✓ verified --skillis repeatable. Positional args:schedule prompt. Options:--name,--deliver,--repeat,--script,--workdir,--profile. No-pshorthand oncron create.CLI syntax for cron run <job_id>✓ verified job_idis the 12-char hex string fromcron list, not the human name.--accept-hooksskips TTY prompt.CLI for profile install✓ verified hermes profile install <source> [--name <name>] [--alias] [--force] [-y].--aliasis boolean (no value).<source>accepts local directory;file://prefix is not required.-yskips manifest preview confirmation.CLI for profile delete✓ verified hermes profile delete <name> [-y]. There is nohermes profile uninstallin v0.14.0.CLI for cron delete✓ verified, no -yhermes cron delete <job_id>. The-y/--yesflag is not supported oncron deletein v0.14.0 (unlikeprofile delete).bundles reloadCLI syntax✓ verified hermes bundles reloadtakes no arguments. Profile aliases such astrading-research-assistant bundles reloadscan that profile'sskill-bundles/; the default profile scanned 0 bundles, while this profile reportedNo changes. 9 bundle(s) loaded.MCP config schema ✓ verified, keep mcp.jsonemptyIn v0.14.0, hermes mcp add/list/test/configureread and writeconfig.yamlunder themcp_servers:key, not this distribution'smcp.json.mcp.jsonremains an empty distribution-owned placeholder; do not put unverified servers there.Toolset restrictions for cron ✓ verified cron createhas no--toolsetsflag. Cron uses per-jobenabled_toolsetswhen created/updated by the cronjob tool/API, otherwise the profile'splatform_toolsets.cronfromhermes tools enable/disable --platform cron .... Scheduler still hard-disablescronjob,messaging, andclarifyfor cron agent runs.Operational findings (v0.14.0 smoke test)
Cron jobs require the gateway to fire automatically
cron createregisters jobs asactive, 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 viacron run+cron tick.
chat -q '/bundle-name'is not a useful dogfood pathIn 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 throughcron run <job_id> --accept-hooksfollowed bycron tick --accept-hooks, then inspectcron/output/<job_id>/<timestamp>.md. Updated indocs/07-testing-acceptance-criteria.mdandcron/README.md.trader-memory-coreneedsjsonschemaat runtimeObserved in
after-close-reviewcron output:trader-memory-core CLI failed because jsonschema is not installedThe skill itself ships under
claude-trading-skillsand 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 jsonschemaA 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 indocs/04-skill-integration-strategy.mddegraded-mode notes.Threat scanner blocks negative-form cron prompts
hermes cron createruns each prompt through a threat scanner. Prompt phrases that combine conditional + negation + "do not fabricate / hide" semantics can match thedeception_hidepattern 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.mdandprompts/after-close-review.md:- Rewrote
If required data/API keys are missing, ... do not fabricate dataas 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 sellfrom cron prompts. The hard-constraint lives inSOUL.mdand is reinforced by the QA harness (tests/test_output_safety.py). - Keep cron prompts neutral and outcome-oriented; let
SOUL.mdcarry the prohibitions.
If a future prompt edit triggers
deception_hideagain, 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. Seecron/create_cron_jobs.py:_expand_prompt_template().--aliasis HOME-bound, not HERMES_HOME-boundhermes profile install --aliaswrites a wrapper to~/.local/bin/<name>(i.e.$HOME/.local/bin/<name>), not to$HERMES_HOME/.local/bin. For isolated testing, overrideHOMEandPATHas well asHERMES_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/PATHfrom saved originals in cleanup (otherwise subsequent phases run against a deleted HOME).model/providerare root-level config keyshermes config set inference.model claude-opus-4-7does not affect theModel:field shown byhermes config show. The correct keys aremodelandprovider: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
chatandcronruns.HERMES_INFERENCE_MODEL/HERMES_INFERENCE_PROVIDERenv vars are invocation overrides (one-shot / TUI) and do not appear inconfig show.Cron timezone interpretation
hermes cron create --helpshows no timezone flag in v0.14.0. Cron expressions are interpreted in the host OS local timezone. TheHERMES_TRADING_TIMEZONE: America/Los_Angelesvalue inconfig.yamlis 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 thebash cron/create_cron_jobs.shwrapper):- 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)
TZenv var when set — accept any valuezoneinfo.ZoneInfocan resolve; (2) otherwiseos.readlink("/etc/localtime")then fallback toPath.resolve(), splitting on/zoneinfo/to extract the IANA suffix; (3) otherwise unknown. - It emits a
WARNINGon stderr in two cases and continues regardless:- Host zone resolved but differs from the preset zone — compared by IANA name, so
America/Phoenixis still flagged againstAmerica/Los_Angelesin summer even though both are UTC-7 (DST rules differ). - Host zone could not be verified (e.g.
TZ=Etc/NotAZone, or/etc/localtimeis missing) — the message says the host TZ is unknown and names the expected zone.
- Host zone resolved but differs from the preset zone — compared by IANA name, so
Deployment guidance:
- Run the host in
America/Los_Angeles(or whichever timezone matches the cron expressions indata/schedule-presets.yaml). - If running in a different timezone, rewrite the cron expressions in
data/schedule-presets.yamlfor your host. The runtime will pick the new values up automatically.
If a future Hermes release adds a
--tzflag, updatecron/create_cron_jobs.pyandcron/README.mdaccordingly.Bundle reload syntax
hermes bundles reloadhas 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 bundlesMCP config location
The active MCP configuration path in Hermes v0.14.0 is
config.yamlundermcp_servers:, managed byhermes mcp add/remove/list/test/configure. A stdio server added with:hermes mcp add demo-stdio --command true --args hello worldis persisted as:
mcp_servers: demo-stdio: command: "true" args: - hello - world enabled: falseThe
--env KEY=VALUEoption is supported for stdio MCP servers (--commandor stdio presets), but not HTTP/SSE URL servers.mcp.jsonis distribution-owned by Hermes profile installs/updates, but the v0.14.0hermes mcpCLI did not read it during verification. Keep this package'smcp.jsonempty and usehermes mcp add ...or profileconfig.yamlfor real server enablement after validating the server package and permissions.Cron toolset restrictions
hermes cron create --helpexposes--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.yamlunderplatform_toolsets.cronand can be edited non-interactively with commands such ashermes 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, andclarifyare still passed as disabled toolsets for cron agent runs, even if they appear enabled inhermes tools list --platform cron.Profile install does not register cron presets
hermes profile install(and subsequenthermes profile update) installs the profile assets — bundles, skills, prompts, config,.env.EXAMPLE— but does not create any cron jobs. The 4 presets declared indata/schedule-presets.yamlare registered only when the operator explicitly runs:bash cron/create_cron_jobs.shObserved on 2026-05-25 operational soak (v0.1.6 latest-tag run):
- macOS profile (
v0.1.6installed fromgithub.com/tradermonty/hermes-trading-research-agent-work-package, cron script previously executed, gateway running):pre-market-routine(6084ade3b095, schedule0 6 * * 1-5) fired at2026-05-25T06:13:59.679316-07:00and wrote a 112 KB output file with every required section present. PASS. - Linux profile (same v0.1.6 install, cron script never
executed):
cron listempty, no output file, no scheduler activity. MISS — not a bug, just the missing manual step.
This is by design:
cron/README.mdandREADME.md"Enabling scheduled jobs" both document the script as the required step that turns adata/schedule-presets.yamlentry into a registered Hermes cron job. The finding is recorded here so a future operator does not assume thathermes profile installalone 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-routinewith expression0 6 * * 1-5fired at06:13:59 PDT, ~14 minutes after the nominal06:00 PDTschedule. This is expected behaviour (gateway tick interval + LLM execution queue), not a delay incident.Operational consequence for soak judgement: an
actual_fire_tswithin roughly0–30 minutesofexpected_fire_tsis 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
## Responsesectiontests/test_output_safety.pyscans 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## Responsesection. 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-routineoutput: 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_REPOis 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 blindgit pullof 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-statusIt 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 runsgit fetchso remote-tracking refs /FETCH_HEADmay be updated, but it never pulls, merges, rebases, stashes, or touches a skill file. Verified by comparinggit status --porcelainbefore 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 bymake test/make validate-all) catches mapping/upstream divergence after the checkout has changed.upstream-statusis 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 indocs/04-skill-integration-strategy.md.Known conservative choices
mcp.jsonis empty by default; active MCP servers should be configured viahermes mcp add .../config.yaml:mcp_serversafter 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/ refinedtitle/ refinedcadenceを 含む。- drift test (
tests/test_upstream_workflow_adapter.py) = 機械的 ガード — 上流 required/optional が mapping skills の subset、 canonical_source marker が一致、upstreamworkflows/全 slug が overlap か ignore に classify されていることを検証。x-generated 値に 関係なく drift check は走る (自動修正なし、operator 判断)。
projection 対象 (v0.1.x)
upstream field mapping field drift-checked? required_skills+optional_skillsskills(superset 許可)yes (subset relation) canonical_source marker canonical_source == claude-trading-skills-workflowyes display_nametitledocumented but not drift-checked — mapping may refine upstream for Hermes UX (e.g. market-regime-dailyupstreamMarket Regime Daily→ mapping15-minute daily market check)cadencecadencedocumented but not drift-checked — mapping may refine for Hermes execution semantics (e.g. swing-opportunity-dailyupstreamdaily→ mappingdaily_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等)、Hermesrequired_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 slug classification 理由 market-regime-dailyoverlap Hermes 同名 bundle として adopt swing-opportunity-dailyoverlap Hermes 同名 bundle として adopt monthly-performance-reviewoverlap Hermes 同名 bundle として adopt core-portfolio-weeklyignored Hermes は slug を weekly-portfolio-reviewに rename +required_outputsを Hermes UX 用に refine。上流 file は reference-only。trade-memory-loopignored Hermes は 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:
- Bundles that combine upstream skills.
- Hermes-native orchestrator skills.
- Cron prompts and report templates.
- 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
Purpose Skills Navigation trading-skills-navigatorMarket regime market-breadth-analyzer,uptrend-analyzer,market-top-detector,exposure-coachMacro/calendar economic-calendar-fetcher,earnings-calendarEarnings earnings-trade-analyzer,pead-screenerCandidate planning vcp-screener,canslim-screener,technical-analyst,position-sizer,breakout-trade-plannerMemory/journal trader-memory-core,signal-postmortem,trade-hypothesis-ideatorPortfolio portfolio-manager,kanchi-dividend-review-monitor,value-dividend-screenerDegraded mode behavior
Missing component Behavior 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 keys Skip holdings/portfolio fetch; ask for manual snapshot or CSV. Chart image Ask user to upload screenshot or skip chart interpretation. jsonschemaPython module missingtrader-memory-coreCLI degrades. Install viapython3 -m pip install jsonschema(oruv pip install jsonschema). Skill output continues with reduced validation.Trade ticket primitive (as of B-3 / TICKET-009)
The
/trade-ticketbundle 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 explicitapprovalstate (DRAFT/REVIEW_READY/APPROVED/REJECTED/EXPIRED).Boundaries (codified by the schema, the bundle instruction, and
tests/test_trade_ticket_schema.py):approval.requiredis constanttrueon every ticket — the bundle never produces un-gated artifacts.- On
APPROVED, the reviewer must re-type ticker, direction, entry, stop, andrisk_per_trade_pctintoapproval.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 toREVIEW_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 totrader-memory-corevia its own storage interface. - Lineage is carried through
provenance.source_bundleandprovenance.source_candidate_ref(a stable composite likeNVDA-2026-05-24-VCP). The/swing-opportunity-dailyand/pre-market-routinebundles' 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───▶ EXPIREDSuggested save filename:
<ticket_id>.ticket.yamlunder${HERMES_TRADE_TICKET_DIR}(default${HOME}/trading-research/tickets). The operator expands${HOME}themselves; the bundle prints the literal. The.ticket.yamlsuffix matches the repo's.gitignoresafety net so an accidental in-repo save is caught.Three role split for persistence — no role silently writes on behalf of another:
- 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. - 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. trader-memory-core— when the ticket carries an optionaljournal_bridgeblock, the operator hands the payload totrader-memory-corevia its own storage interface to register, update, or postmortem the thesis. The ticket bundle does not calltrader-memory-coredirectly.
HERMES_TRADE_TICKET_DIRexpansion — declared as a profile env indistribution.yaml:env_requires(optional, default${HOME}/trading-research/tickets) and pre-seeded in.env.EXAMPLE. The.envparser used bycron/create_cron_jobs.py(and by extension any helper that reads the same file) returns the literal${HOME}/...; consumers expand withos.path.expandvars(os.path.expanduser(value)).tests/test_trade_ticket_schema.py::test_env_expansion_yields_absolute_pathlocks that contract.journal_bridgeshape — optional top-level object on any ticket.targetis{"const": "trader-memory-core"}so typos (trader_memory_core) are rejected.actionis one ofregister_thesis | update_thesis | postmortem.thesis_status(optional) is one ofIDEA | ENTRY_READY | ACTIVE | CLOSED.notes(optional) is a non-empty string. Unknown fields insidejournal_bridgeare rejected (additionalProperties: false) so athesis_statuztypo fails validation. The field is recommended on APPROVED tickets but not required — APPROVED is already heavy with theconfirmed.*re-type contract, and forcingjournal_bridgewould break v0.1.5 fixtures. A future v0.2 series may add aJOURNALEDstatus (6th value) and tightenjournal_bridgeon 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.actionandthesis_status(e.g.postmortem→CLOSED); theJOURNALEDstatus enum value; makingjournal_bridgerequired 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-routineoutput renderedRisk posture: risk-off / REDUCE_ONLYin 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):
Session state:— today's date relative to the US cash market in one ofnormal session day/US market holiday/weekend/unknown. Calendar fact about today, not a regime label.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 explicitSource / Skill provenancesub-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-routineonly in TICKET-013. Horizontal rollout to/after-close-review,/market-regime-daily, and/swing-opportunity-dailyis 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.pypins 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 pullbrings new releases), - the user's runtime skill source (Hermes reads
SKILL.mdfrom here), - the place Hermes itself edits during troubleshooting ("this skill isn't working, fix it" → Hermes edits
SKILL.mdin 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
Mode Skill source User-edit / Hermes-edit ownership Update path Status external-linked (existing default) $CLAUDE_TRADING_SKILLS_REPO(shared local clone)Lives in the upstream clone; vulnerable to upstream git pullManual git pullonly; inspect first withmake 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 pullof the tracking cloneExplicit re-vendor via an opt-in workflow Skeleton exists in scripts/sync_claude_trading_skills.py:copy_vendor_skills(); today's skeleton is destructive (see warning); full safe semantics are TICKET-008bpatches-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-vendor Re-vendor → apply patches → review conflicts Convention defined here; tooling is TICKET-008b Important — the current vendored skeleton is NOT yet the safe mode. The live
copy_vendor_skills()inscripts/sync_claude_trading_skills.pycallsshutil.rmtree(dest)on each existingskills/vendor/<skill>/before re-copying, andmake sync-vendor-writeexposes that writer. Runningmake sync-vendor-writetoday silently destroys any hand-edits made directly insideskills/vendor/— the exact failure mode vendored mode is meant to prevent. Until TICKET-008b lands the safe re-vendor + patch-preserving flow: treatskills/vendor/as generated output, keep local fixes aspatches/, and do not hand-edit vendored skills in place. The "survives upstream changes" column above describes the design, not today'ssync-vendor-writebehavior.Where Hermes-edited skills live in each mode
- external-linked: a Hermes edit to
SKILL.mdlands in the upstream clone working tree. It survives until the nextgit pull(which may overwrite it). Runmake upstream-statusbefore pulling — it flags dirtyskills//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 underpatches/claude-trading-skills/(the skeleton'srmtreewould otherwise drop it). - patches-on-vendored: the durable home for a fix you want to keep — a version-controlled
.patchre-applied after every re-vendor.
vendor-manifest.jsonminimum 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.jsonabove (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>.patchfiles 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.mdTICKET-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:Layer Status Trigger What 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_sourcemarker, upstream workflow inventory classificationTICKET-015 upstream-status ( scripts/upstream_status.sh)New make upstream-status(manual)Before updating the working tree: incoming commits, incoming skills/+workflows/file changes, local-edit risk severityTICKET-008b vendored mode Deferred Mode choice at install + future re-vendor workflow Long-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:
- No brokerage access.
- Paper/read-only account context.
- Paper order template generation only.
- 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, especiallySOUL.md,skills/,cron/, andmcp.json.- Commit
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, andCHANGELOG.mdindistribution_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.mdcontains 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.mddoes not trigger forbidden patterns;bad_example.mddoes (tests/test_required_sections.py). - Canonical upstream index validator (
scripts/validate_upstream_index.py) exits 0 when every referenced skill resolves againstskills-index.yaml, exit 2 on unresolved missing references.--strictmode forces nonzero on any missing reference regardless ofdocs/MISSING_SKILLS.md. Run viamake validate-upstream(requiresCLAUDE_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 --writeproduces no diff). x-generated: falsemanual-edit protection during regeneration.sync-external-writewriting only into bundles without manual-edit markers.
Manual Hermes smoke tests
Test 1: Profile install (isolated)
--aliaswrites a wrapper to$HOME/.local/bin/<name>, so isolate HOME and PATH to avoid touching the real user environment. Seedocs/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" chatExpected:
- Profile starts.
- Assistant behavior reflects
SOUL.md.
Test 2: Bundle discovery
trading-research-assistant bundles list trading-research-assistant bundles show pre-market-routineExpected:
- 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>/"*.mdExpected sections in the generated
.md:- Risk posture.
- Macro calendar (may be degraded if
FMP_API_KEYis 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.pyover 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 runinvocations end withLast run: ok. cron/output/<job_id>/<timestamp>.mdexists 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(orgateway run). Tests that rely on auto-fire must start the gateway or pause the jobs and trigger them viacron run+cron tickas shown above. - Cron prompts in
prompts/are written in positive form to avoid Hermes'deception_hidethreat scanner blocking them at submission time. Seedocs/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-journalwithout knowing the internal skill list.- Distribution manifest has the expected name and includes
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(requiresCLAUDE_TRADING_SKILLS_REPO). Confirm zero unresolved missing skills, or that every miss is documented indocs/MISSING_SKILLS.mdas degraded-mode accepted. - In an isolated temp HOME (see
docs/07-testing-acceptance-criteria.mdTest 1), exercise both/pre-market-routineand/after-close-reviewviacron run <job_id> --accept-hooks+cron tick --accept-hooks(do not rely onchat -q '/bundle'— in v0.14.0 it only returns a session_id, not the bundle output). - Confirm the generated
cron/output/<job_id>/<timestamp>.mdfor 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-coreis in scope for the release, confirm the host hasjsonschemainstalled (python3 -m pip install jsonschemaoruv pip install jsonschema); without it the skill enters degraded mode. Filed upstream as a feature request forclaude-trading-skillsto either declare the runtime dep or self-bootstrap viauv 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.shruns cleanly withHERMES_PROFILE_CMD="$TEST_PROFILE_NAME"and no prompt is rejected by thedeception_hidethreat scanner. - Confirm
mcp.jsonremains empty; real MCP servers should be added viahermes mcp add .../config.yaml:mcp_serversonly after server package, command, env, and permissions are verified. - Confirm
.envis not committed (.gitignorecovers it;.env.EXAMPLEis the user-facing template and IS shipped viadistribution_owned). - Confirm
distribution.yamldistribution_ownedincludes.env.EXAMPLE,README.md,README.ja.md, andCHANGELOG.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.yamlversionfield.
Tagging and release
Pre-release commits (CHANGELOG fold,
distribution.yaml:versionbump, etc.) should already be onmain. Use annotated tags sogit describeand GitHub Releases show a meaningful message, and push the tag separately frommainso 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.mdIf you also need to push
main(e.g. the release commit hasn't been pushed yet):git push origin mainAvoid
git push origin main --tagsin 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_HOMEstarts 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/codexFor the Anthropic-key path above no
hermes loginis 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 productiontrading-research-assistantalias 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-ticketadded but manual-only; cron/gateway surface unchanged, so the procedure did not auto-retrigger. - v0.1.6 — TICKET-010 (
/trade-ticketpersistence + 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/orscripts/sync_claude_trading_skills.pywrite path shifts, or whendata/schedule-presets.yamlsemantics 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-assistantagainst the real~/.hermes(not the isolated soak HOME used in Post-release verification). - Provider auth is valid for whatever
<alias> config showreports. 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~/.hermesso the auth state is on the host. python3 -m pip install jsonschema pyyamlalready run on the host (otherwisetrader-memory-coredegrades andcron/create_cron_jobs.pyfails 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 percron/README.mdbefore 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-5pre-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" / similarIf you prefer a foreground run for live tailing,
trading-research-assistant gateway runworks 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>.mdshould exist. Confirm:- File creation time is after the scheduled wall-clock time and matches the expected
America/Los_Angelescron expression. Record both timestamps (scheduler fire vs. output file mtime). The Hermes gateway evaluates cron expressions on a tick / queue basis, so anactual_fire_tswithin roughly 0–30 minutes ofexpected_fire_tsis a PASS; consistently larger deltas across multiple firings should be flagged as an incident. (Observed v0.1.6 on macOS:0 6 * * 1-5fired at06:13:59 PDT, ~14 min after nominal — PASS. Seedocs/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>matchesHERMES_TRADING_TIMEZONE(or the preset YAML fallback).- The brief does not contain forbidden execution language. Restrict the scan to the
## Responsesection — 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. Seedocs/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 entirelyDo 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 existinggateway not running,chat -q,jsonschema,deception_hide,--alias is HOME-bound,model/provider keys,cron timezone interpretationpattern). - If the cause is upstream (
claude-trading-skillsor Hermes Agent), file the issue there and link it fromdocs/03so the next reader sees the boundary. - If the cause is operator setup (timezone mismatch, missing API key), reinforce the relevant Quick Start /
cron/README.mdline.
7. Soak-exit checklist
- At least one scheduled job fired at the expected wall-clock time without
cron runintervention. - The corresponding
cron/output/<job_id>/<timestamp>.mdcontains 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.mdand 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.- Verify Hermes version and update
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 validatepasses.make testpasses.
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 chatworks.SOUL.mdis 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-generatedkey as legacy-unknown and skip with WARN. - Write-if-changed for
x-generated: truebundles (no spurious mtime). update_external_config()is also idempotent: no-op when the${CLAUDE_TRADING_SKILLS_REPO}/skillsentry is already present.--force-overwriteescape hatch +make sync-external-write-forcedouble-gated byREQUIRE_SYNC_WRITE=1andREQUIRE_FORCE_OVERWRITE=1.tests/test_sync_determinism.pycovers skip / force / write-if-changed / new-file /update_external_configidempotency / real-repo second-run-noop.
Done when:
- Re-run of
make sync-external-writeproduces no diff (mtime + content invariant) for bothskill-bundles/*.yamlandconfig.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: falseand 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 inscripts/sync_claude_trading_skills.py:UPSTREAM_OVERLAP_SLUGS. Adopted as canonical-intent upstream; mapping is the distribution-contract superset (Hermes addsibd-distribution-day-monitor,ftd-detector,exposure-coach,trade-hypothesis-ideator). - 2 ignored slugs (
core-portfolio-weekly/trade-memory-loop) declared inUPSTREAM_IGNORED_WORKFLOW_SLUGSwith reasons documented indocs/04"Upstream workflow inventory classification" table. (core-portfolio-weeklyis renamed toweekly-portfolio-reviewin Hermes;trade-memory-loopis driven by the operator viatrader-memory-coredirectly.) sync()write path unchanged — adapter does not regenerate bundles. B-2ax-generated: falseSKIP contract is preserved (10 SKIP / 0 rewrite against the shipped tip).
Drift-check scope (machine-enforced):
upstream required_skills ⊆ mapping.skillsupstream optional_skills ⊆ mapping.skillsmapping.canonical_source == "claude-trading-skills-workflow"for the 3 overlap slugs (SoT marker)- Every upstream
workflows/*.yamlfile is inUPSTREAM_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↔titlecadence(e.g. upstreamdaily→ mappingdaily_when_risk_allows)
Not projected at all in v0.1.x (B-2c candidates):
artifacts → required_outputsdirect 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_runbundle 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 withoutCLAUDE_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-writecomment "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-writeSKIP count stays 10 (nox-generatedflip on any of the 3 overlap bundles).docs/04carries 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
localdelivery. - 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:
pytestfails 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) and008b(implementation, deferred), following the TICKET-004004a/004bprecedent.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_REPOclone is simultaneously the upstream mirror, the runtime skill source, and the place Hermes edits skills during troubleshooting. A naivegit pullover 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.patchfiles re-applied after re-vendor). - Records the danger note: the current
copy_vendor_skills()skeletonshutil.rmtrees eachskills/vendor/<skill>/before re-copying, somake sync-vendor-writeis destructive for hand-edited vendored skills today. Vendored mode is the intended safe mode; the safe writer is 008b. - Documents the
vendor-manifest.jsonminimum fields 008b must write (source_repo,source_commit,source_branch,vendored_at,mode,skills,patches[]).
Done when (008a):
docs/04carries the three-mode table, the destructive-skeleton warning in plain language, the per-mode "where do Hermes-edited skills live" notes, and thevendor-manifest.jsonshape.- 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 populatesource_commit,source_branch,vendored_at, andpatches[], and to stop destroying hand-edits (re-vendor must preserve or re-applypatches/, notrmtreeblindly). - A
patches/application pipeline (scripts/apply_vendored_patches.shor a hook intosync-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.jsonvalidates against its schema and records provenance- patch lineage.
TICKET-009 —
/trade-ticketbundle + 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-8601patternoncreated_at/decided_at, validator built withformat_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.requiredis{"const": true}at the base level.allOf+if/thenenforce 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-typeconfirmed.{ticker,direction,entry,stop,risk_per_trade_pct}; any mismatch demotes the ticket toREVIEW_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: newtrade-ticketworkflow entry (cadence: manual,category: trade-planning)./swing-opportunity-dailyand/pre-market-routinebundles gain an escalation pointer requiringsource_bundleandsource_candidate_refwhen 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 undertests/fixtures/trade_tickets/.
Done when:
schemas/trade-ticket.schema.jsonis a valid draft/2020-12 schema with the exact 5-value status enum and the four status-conditionalif/thenblocks.tests/test_trade_ticket_schema.py(20 cases) all pass; thetests/test_required_sections.pymatrix grows to 10 × 6 = 60 and all pass.make sync-external-writeagainst the shipped tip prints 10SKIP protected bundle:lines (the new bundle is owned by the operator from day one).make validate-allis 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.)
.gitignoreaddstickets/and*.ticket.yamlas a safety net for accidental in-repo ticket placement. (reports/was already ignored, soreports/trade_tickets/is implicitly covered.).env.EXAMPLEaddsHERMES_TRADE_TICKET_DIR=${HOME}/trading-research/ticketswith a comment explaining operator-confirmed expansion.distribution.yaml:env_requiresdeclaresHERMES_TRADE_TICKET_DIR(optional, default${HOME}/trading-research/tickets) in the same form asHERMES_TRADING_TIMEZONE.tests/test_package_structure.py::test_distribution_manifest_declares_hermes_trade_ticket_dirlocks the declaration.schemas/trade-ticket.schema.jsonadds an optional top-leveljournal_bridgeobject:target: const trader-memory-core,action: enum [register_thesis, update_thesis, postmortem], optionalthesis_status: enum [IDEA, ENTRY_READY, ACTIVE, CLOSED], optionalnotes: string minLength 1.additionalProperties: falseinsidejournal_bridge(typo guard for fields likethesis_statuz). Top-levelrequiredunchanged;$idremains absent.skill-bundles/trade-ticket.yamlinstruction body gains three rule blocks: save path hint (<ticket_id>.ticket.yamlsuffix), journal bridge handoff (recommended on APPROVED, never required), silent-write prohibition in positive form (emits YAML only/operator-confirmed).tests/test_trade_ticket_schema.pyadds 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, andbad_journal_bridge_invalid_action.yamlappended totest_negative_fixture_fails_schema(matrix 9 → 10).- New fixtures
tests/fixtures/trade_tickets/approved_with_journal_bridge.yaml(positive) andbad_journal_bridge_invalid_action.yaml(negative) bring the fixture count from 14 to 16.
Done when:
journal_bridgeis optional and rejects unknown fields (typo guard);targetis consttrader-memory-core;actionenum is exact; the matching positive and negative fixtures load..env.EXAMPLEliteral${HOME}/trading-research/ticketsexpands to an absolute path viaexpandvars+expanduser.distribution.yaml:env_requiresdeclares 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-allis green; total suite 155 → 162.make sync-external-writeSKIP count is still 10 (nox-generated: falseflip on/trade-ticket).
Out of scope (deferred):
- Broker execution, auto-submit, paper / live Alpaca.
- LLM-side silent disk write.
- Cross-check between
journal_bridge.actionandthesis_status(e.g.postmortem→CLOSED). JOURNALED6th status enum value.- Making
journal_bridgerequired 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 thepre-market-routineoutput renderedRisk posture: risk-off / REDUCE_ONLYambiguously — 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.yamlinstruction body gains a mandatory two-line preamble rule (Session state:/Posture basis:) plus aSource / Skill provenancesub-heading rule.x-generated: falseunchanged.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.mdadds 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.pylands with 12 cases passing.tests/test_required_sections.pyandtests/test_output_safety.pyremain green — the new wording is positive form and matches the existingsource_provenanceconcept regex.make sync-external-writeSKIP count stays 10 (pre-market-routine isx-generated: false).make validate-allis 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 onpre-market-routinefirst; 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_REPOcheckout, so a user or agent can see what agit pullwould 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_REFremote-tracking override → branch@{u}→origin/HEADshort →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 / incomingskills/+workflows/file changes (merge-base range) / a local-edit risk label. Never pulls, merges, rebases, stashes, or touches a skill file.set -euo pipefailwith 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/orworkflows/, local commits ahead, or detached HEAD), MEDIUM (dirty outside those dirs,UNRESOLVEDref, no tracking upstream resolved only viaorigin/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. Makefiletargetupstream-status(noREQUIRE_*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 intmp_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-statusreports branch / ref / dirty / incoming / risk without modifying any skill file (git status --porcelainidentical before/after).- All presence + behavioral cases pass; behavioral layer skips cleanly
when
gitis unavailable. make sync-external-writeSKIP count stays 10;make validate-allgreen.- 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-statusslash command (deferred, not predicated)A read-only
/upstream-statusbundle 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.pyreads 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 inclaude-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-upstreamto 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">Chermes-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:
- What worked.
- What failed.
- Setup-level patterns.
- Process mistakes versus acceptable losses.
- Hypotheses to test.
- Skill/workflow improvements.
- 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.