| name | nave-ism-ranking-workflow |
| description | Generate ISM manufacturing/services rankings using official /root/nave commands and snapshots. |
| version | 1.0.0 |
| author | Hermes Agent |
| license | MIT |
| metadata | {"hermes":{"tags":["nave","ism","ranking","trading","cli"]}} |
nave ISM ranking workflow
When to use
Use this workflow whenever the user asks for ISM rankings (current month or prior months) for manufacturing and/or services in the nave project.
Rule
Always use official repo commands from /root/nave. Do not use ad-hoc web-only ranking methods as the primary source.
Commands (official)
Run from repo root:
cd /root/nave
/root/nave/.venv/bin/nave stocks ism-report --kind manufacturing --mode manufacturing --top-n 15 --json
/root/nave/.venv/bin/nave stocks ism-report --kind services --mode services --top-n 15 --json
These commands produce:
- ISM report month + PMI
- hottest/worst industries
- long/short candidates with score/confidence
saved_to path for monthly snapshot JSON
Snapshot locations
By default snapshots are written to:
stocks_history/ism_manufacturing_YYYY-MM.json
stocks_history/ism_services_YYYY-MM.json
For prior-month review, load those snapshot files first if they exist.
Suggested readback checks
- Verify
report_month in JSON output.
- Verify
saved_to path exists.
- Quote recommendations from
candidates.longs / candidates.shorts and include confidence, score, and reason.
- For any user-requested "último ISM" report (manufacturing or services), also run the official X/Twitter analysis for the candidate tickers from
saved_to before answering:
cd /root/nave
set -a; . /root/nave/.env; set +a
NAVE_CLI_STATUS=0 /root/nave/.venv/bin/nave stocks x-analyze --from-snapshot <saved_to> --top 5 --days 7 --limit-per-ticker 50 --json
Synthesize the X payload per ticker: useful points of view, sentiment/crowding, catalysts/risks being discussed, and whether the chatter supports waiting for pullback/trigger vs entry now. Do not replace the official ISM ranking with X sentiment; X is a secondary due-diligence layer.
- If the user asks "cuál comprar" from an ISM report, add an execution filter instead of just repeating the ranking:
- Exclude/adjust tickers the user already bought or says they already own.
- Check live Ondo availability if the user is likely trading tokenized stocks: fetch
https://app.ondo.finance/api/v2/assets with User-Agent: Mozilla/5.0, map ticker, underlyingMarket.ticker, and symbol minus the on suffix, then separate "best overall" from "best if only Ondo".
- Add a basic technical overlay for shortlisted tickers using Yahoo chart data: last price, SMA20/SMA50/SMA200, distance from 52-week high/low, and whether the ticker is extended.
- Prefer a concrete buy/entry zone, invalidation, and initial target over a generic ranking. Flag names near 52-week highs as potentially extended before recommending them.
- Flag names near 52-week highs as potentially extended before calling them "rezagadas".
- When the user asks for a month around a release boundary, distinguish covered month from publication date. Example: Manufacturing April 2026 was published on May 1, 2026, but snapshot/report month is
2026-04 / April 2026; Manufacturing May 2026 is published in June.
Calendar verification
Use the official repo calendar commands when month availability or release timing is ambiguous:
cd /root/nave
/root/nave/.venv/bin/nave stocks ism-calendar show --json
/root/nave/.venv/bin/nave stocks ism-calendar next --json
Check covers_month, release_date, and event. If the requested covered month has not been released yet, say so explicitly and fall back to the latest valid snapshot/report only if useful.
Pitfalls
- ISM naming is easy to confuse: "the May 1 release" usually covers April; "May report" may mean either publication month or covered month. Confirm using
ism-calendar before correcting the user or labeling a report unavailable.
nave stocks ism-report output can be large; terminal may truncate. Re-run with output redirected to file when needed.
- Some candidates appear on both expanding/contracting sector universes due sector overlap; rely on final candidate side in output.
- Data quality depends on upstream provider fields (
yfinance/fmp), so keep source fields in explanations.
Release-day automation with Hermes cron
When automating ISM release-day reports for the user, schedule a daily afternoon Argentina-time cron that first checks the official Nave calendar and exits quietly/minimally when there is no release that day. Do not hardcode release dates as the primary mechanism.
Canonical automated sequence:
- Determine today's date in
America/Argentina/Buenos_Aires (do not assume the VPS local timezone is Argentina).
- From
/root/nave, load repo credentials before running stock workflows:
set -a; . /root/nave/.env; set +a
- Run
NAVE_CLI_STATUS=0 /root/nave/.venv/bin/nave stocks ism-calendar show --json and parse from the first { because the CLI may print a [data_loader] status line before JSON.
- If
release_date == today, run the matching official report command:
NAVE_CLI_STATUS=0 /root/nave/.venv/bin/nave stocks ism-report --kind manufacturing --mode manufacturing --top-n 15 --json
NAVE_CLI_STATUS=0 /root/nave/.venv/bin/nave stocks ism-report --kind services --mode services --top-n 15 --json
- Verify
report_month / saved_to matches the calendar covers_month; if not, report that the new ISM is not available yet and retry later rather than using an old month as if it were new.
- Run the official X/Twitter add-on from the generated snapshot:
NAVE_CLI_STATUS=0 /root/nave/.venv/bin/nave stocks x-analyze --from-snapshot <saved_to> --top 5 --days 7 --limit-per-ticker 50 --json
- Summarize in Spanish: covered month, PMI if available, strong/weak industries, long/short candidates with score/confidence/reason, X sentiment by ticker, entry/trigger/invalidation notes when present.
See references/hermes-cron-ism-release-day.md for a known-good cron prompt pattern and operational notes.
Verification
- Command exits
0.
- Output includes keys:
report_month, hottest_industries, worst_industries, candidates, saved_to.
- Snapshot file exists at
saved_to.
- On release-day automation, calendar
covers_month matches report report_month before presenting the ranking as the new report.