Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Watch product, flight, or listing prices; alert on target.
.claude/skills/nousresearch-product-price-monitor/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 2% | 0% |
| case-14 | ✓→✗ | ▼ Worse | 229% | 0% |
| case-10 | ✓→✓ | = Same ✓ | -18% | 0% |
Monitor a concrete purchasable item and alert on a normalized all-in price or availability condition. Handle variants, taxes, fees, currencies, stock, cancellation terms, and duplicate alerts explicitly. Setup runs once in the foreground; the recurring check runs as a cronjob tick (the price-watch automation blueprint scaffolds this).
Don't use for: one-off "what does this cost right now" lookups (use web_search/web_extract directly).
Record source URL/provider, product/listing ID where available, variant, quantity, location, dates, travelers/guests, membership/login assumptions, condition, seller, and acceptable substitutes. Done when two variants cannot be confused.
Specify currency, all-in vs pre-tax price, maximum price, availability/stock rule, shipping, refundability, cabin/room/ticket class, cooldown, and notification destination. Done when synthetic examples have deterministic alert decisions.
Fetch a bounded live result with web_extract or browser_navigate and record retrieval time, source price, fees/taxes, availability, and terms. Do not schedule until one foreground fetch works. Write the watch contract (item, condition, baseline observation) to a state file under ~/.hermes/price-watches/<watch-slug>.json, then create the job:
cronjob(action="create",
schedule="every 6h",
prompt="Load the product-price-monitor skill and run the tick for the watch contract at ~/.hermes/price-watches/<watch-slug>.json.",
deliver=<user's destination>)Pick a cadence that respects rate limits and site terms. Done when the baseline matches the exact item contract and the job exists.
Re-fetch the source. Convert currency only with a timestamped rate and retain the source currency. Separate base price, mandatory fees, shipping/taxes, total, and availability. Exclude volatile page metadata. A failed fetch means unknown state: report or skip, but never overwrite the last good observation with an error page. Done when the observation is comparable to the baseline or explicitly marked failed.
Alert on threshold entry, qualifying availability, material lower price, or recovery as requested. Store the last good observation and last alert fingerprint in the state file. Replaying the same offer must send no second alert; respect the cooldown. Done when the alert decision is deterministic against stored state.
When a condition is met, the alert includes: exact item/variant, observed all-in price and source currency, availability/terms, threshold, retrieval timestamp, source link, and important uncertainty. Never claim inventory is reserved. When nothing qualifies, stay silent — no "still watching" noise unless a periodic all-clear was requested. Done when the state file reflects this run.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | fail→pass | 12,216 | 15,856 | +30% | 1 | 1 | 0% | 2,256 | 3,660 | +62% | 0 | 0 | — |
case-01 | fail→fail | 11,789 | 13,300 | +13% | 1 | 1 | 0% | 2,138 | 1,546 | -28% | 0 | 0 | — |
case-02 | fail→fail | 8,292 | 9,449 | +14% | 1 | 1 | 0% | 1,262 | 1,658 | +31% | 0 | 0 | — |
case-03 | fail→fail | 7,876 | 7,770 | -1% | 1 | 1 | 0% | 1,259 | 1,505 | +20% | 0 | 0 | — |
case-04 | fail→fail | 2,750 | 5,946 | +116% | 1 | 1 | 0% | 410 | 1,198 | +192% | 0 | 0 | — |
case-05 | fail→fail | 5,897 | 6,967 | +18% | 1 | 1 | 0% | 863 | 1,351 | +57% | 0 | 0 | — |
case-06 | fail→fail | 5,356 | 9,339 | +74% | 1 | 1 | 0% | 776 | 1,491 | +92% | 0 | 0 | — |
case-08 | fail→fail | 24,600 | 6,604 | -73% | 1 | 1 | 0% | 3,191 | 1,311 | -59% | 0 | 0 | — |
case-09 | fail→pass | 24,114 | 2,612 | -89% | 1 | 1 | 0% | 1,130 | 1,418 | +25% | 0 | 0 | — |
case-10 | pass→pass | 11,162 | 3,699 | -67% | 1 | 1 | 0% | 1,847 | 1,519 | -18% | 0 | 0 | — |
case-11 | pass→pass | 6,100 | 3,374 | -45% | 1 | 1 | 0% | 1,016 | 1,497 | +47% | 0 | 0 | — |
case-12 | pass→pass | 5,028 | 3,602 | -28% | 1 | 1 | 0% | 932 | 1,592 | +71% | 0 | 0 | — |
case-13 | fail→pass | 14,065 | 8,536 | -39% | 1 | 1 | 0% | 2,359 | 2,405 | +2% | 0 | 0 | — |
case-14 | pass→fail | 3,223 | 3,399 | +5% | 1 | 1 | 0% | 434 | 1,426 | +229% | 0 | 0 | — |
case-15 | pass→pass | 10,385 | 4,840 | -53% | 1 | 1 | 0% | 2,155 | 1,631 | -24% | 0 | 0 | — |
case-16 | pass→pass | 9,754 | 3,192 | -67% | 1 | 1 | 0% | 1,443 | 1,447 | +0% | 0 | 0 | — |
case-17 | pass→pass | 5,015 | 3,148 | -37% | 1 | 1 | 0% | 786 | 1,369 | +74% | 0 | 0 | — |
case-18 | pass→pass | 11,314 | 6,794 | -40% | 1 | 1 | 0% | 1,906 | 2,075 | +9% | 0 | 0 | — |
case-19 | pass→pass | 12,281 | 6,448 | -47% | 1 | 1 | 0% | 1,894 | 1,978 | +4% | 0 | 0 | — |
case-20 | pass→pass | 18,007 | 7,110 | -61% | 1 | 1 | 0% | 2,991 | 2,033 | -32% | 0 | 0 | — |
case-21 | pass→pass | 6,288 | 4,425 | -30% | 1 | 1 | 0% | 1,010 | 1,697 | +68% | 0 | 0 | — |
case-22 | pass→pass | 2,926 | 3,183 | +9% | 1 | 1 | 0% | 550 | 1,478 | +169% | 0 | 0 | — |
case-23 | pass→pass | 14,222 | 6,822 | -52% | 1 | 1 | 0% | 2,290 | 1,990 | -13% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 15 counted toward the lift figure. The other 8 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 15 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.