[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CB40KA1HVA3NHTQN1YRCDM":3,"skill-same:01M6CB40KA1HVA3NHTQN1YRCDM":73},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":6,"ownerHtmlUrl":57,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":58,"install":59,"resources":72},"01M6CB40KA1HVA3NHTQN1YRCDM","product-price-monitor",null,"Watch product, flight, or listing prices; alert on target.","adnichols\u002Fai-configs","adnichols","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F493746?v=4","01M6C33VRY9WF6XWYPT1AFA7JJ","Aaron Nichols","01M6C33VWTNKGRM92E9G643V4W",5,"MIT","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fproduct-price-monitor\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34],"monitor","product","product price monitor","macos","linux","windows","hermes","hermes agent","alert","travel","maps","2026-11-10 10:12:30",false,"---\nname: product-price-monitor\ndescription: \"Watch product, flight, or listing prices; alert on target.\"\nversion: 0.1.0\nauthor: Ben Barclay (benbarclay), Hermes Agent\nlicense: MIT\nplatforms: [linux, macos, windows]\nmetadata:\n  hermes:\n    tags: [Prices, Availability, Shopping, Travel, Alerts]\n    related_skills: [maps]\n---\n\n# Product Price Monitor\n\nMonitor 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).\n\n## When to Use\n\n- \"Alert me when this laptop drops below $1,000.\"\n- \"Watch these flights for a fare under $500.\"\n- \"Tell me when this hotel has a refundable room.\"\n- \"Track ticket\u002Flisting availability.\"\n- A cron tick fires for an existing price watch (steps 4-6).\n\nDon't use for: one-off \"what does this cost right now\" lookups (use `web_search`\u002F`web_extract` directly).\n\n## Procedure — Setup (foreground, once)\n\n### 1. Define the exact item\n\nRecord source URL\u002Fprovider, product\u002Flisting ID where available, variant, quantity, location, dates, travelers\u002Fguests, membership\u002Flogin assumptions, condition, seller, and acceptable substitutes. Done when two variants cannot be confused.\n\n### 2. Define the alert condition\n\nSpecify currency, all-in vs pre-tax price, maximum price, availability\u002Fstock rule, shipping, refundability, cabin\u002Froom\u002Fticket class, cooldown, and notification destination. Done when synthetic examples have deterministic alert decisions.\n\n### 3. Establish a live baseline, then schedule\n\nFetch a bounded live result with `web_extract` or `browser_navigate` and record retrieval time, source price, fees\u002Ftaxes, availability, and terms. Do not schedule until one foreground fetch works. Write the watch contract (item, condition, baseline observation) to a state file under `~\u002F.hermes\u002Fprice-watches\u002F\u003Cwatch-slug>.json`, then create the job:\n\n```\ncronjob(action=\"create\",\n        schedule=\"every 6h\",\n        prompt=\"Load the product-price-monitor skill and run the tick for the watch contract at ~\u002F.hermes\u002Fprice-watches\u002F\u003Cwatch-slug>.json.\",\n        deliver=\u003Cuser's destination>)\n```\n\nPick a cadence that respects rate limits and site terms. Done when the baseline matches the exact item contract and the job exists.\n\n## Procedure — Tick (each scheduled run)\n\n### 4. Fetch and normalize\n\nRe-fetch the source. Convert currency only with a timestamped rate and retain the source currency. Separate base price, mandatory fees, shipping\u002Ftaxes, 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.\n\n### 5. Compare and suppress duplicates\n\nAlert 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.\n\n### 6. Deliver or stay silent\n\nWhen a condition is met, the alert includes: exact item\u002Fvariant, observed all-in price and source currency, availability\u002Fterms, 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.\n\n## Pitfalls\n\n- Comparing a base fare with an all-in threshold.\n- Alerting on the wrong size, seller, cabin, dates, or room terms.\n- Overwriting a last-known-good value with an error page.\n- Polling aggressively enough to trigger blocking or violate site terms.\n- Scheduling before a single foreground fetch has succeeded.\n\n## Verification\n\n- [ ] The watch contract pins the item so two variants cannot be confused.\n- [ ] One foreground fetch succeeded before any job was created.\n- [ ] Alert decisions replay deterministically from the state file; duplicates suppressed.\n- [ ] Failed fetches never replaced last-known-good state.\n- [ ] Alerts carry all-in price, source currency, timestamp, and source link.\n","# Product Price Monitor\n\nMonitor 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).\n\n## When to Use\n\n- \"Alert me when this laptop drops below $1,000.\"\n- \"Watch these flights for a fare under $500.\"\n- \"Tell me when this hotel has a refundable room.\"\n- \"Track ticket\u002Flisting availability.\"\n- A cron tick fires for an existing price watch (steps 4-6).\n\nDon't use for: one-off \"what does this cost right now\" lookups (use `web_search`\u002F`web_extract` directly).\n\n## Procedure — Setup (foreground, once)\n\n### 1. Define the exact item\n\nRecord source URL\u002Fprovider, product\u002Flisting ID where available, variant, quantity, location, dates, travelers\u002Fguests, membership\u002Flogin assumptions, condition, seller, and acceptable substitutes. Done when two variants cannot be confused.\n\n### 2. Define the alert condition\n\nSpecify currency, all-in vs pre-tax price, maximum price, availability\u002Fstock rule, shipping, refundability, cabin\u002Froom\u002Fticket class, cooldown, and notification destination. Done when synthetic examples have deterministic alert decisions.\n\n### 3. Establish a live baseline, then schedule\n\nFetch a bounded live result with `web_extract` or `browser_navigate` and record retrieval time, source price, fees\u002Ftaxes, availability, and terms. Do not schedule until one foreground fetch works. Write the watch contract (item, condition, baseline observation) to a state file under `~\u002F.hermes\u002Fprice-watches\u002F\u003Cwatch-slug>.json`, then create the job:\n\n```\ncronjob(action=\"create\",\n        schedule=\"every 6h\",\n        prompt=\"Load the product-price-monitor skill and run the tick for the watch contract at ~\u002F.hermes\u002Fprice-watches\u002F\u003Cwatch-slug>.json.\",\n        deliver=\u003Cuser's destination>)\n```\n\nPick a cadence that respects rate limits and site terms. Done when the baseline matches the exact item contract and the job exists.\n\n## Procedure — Tick (each scheduled run)\n\n### 4. Fetch and normalize\n\nRe-fetch the source. Convert currency only with a timestamped rate and retain the source currency. Separate base price, mandatory fees, shipping\u002Ftaxes, 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.\n\n### 5. Compare and suppress duplicates\n\nAlert 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.\n\n### 6. Deliver or stay silent\n\nWhen a condition is met, the alert includes: exact item\u002Fvariant, observed all-in price and source currency, availability\u002Fterms, 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.\n\n## Pitfalls\n\n- Comparing a base fare with an all-in threshold.\n- Alerting on the wrong size, seller, cabin, dates, or room terms.\n- Overwriting a last-known-good value with an error page.\n- Polling aggressively enough to trigger blocking or violate site terms.\n- Scheduling before a single foreground fetch has succeeded.\n\n## Verification\n\n- [ ] The watch contract pins the item so two variants cannot be confused.\n- [ ] One foreground fetch succeeded before any job was created.\n- [ ] Alert decisions replay deterministically from the state file; duplicates suppressed.\n- [ ] Failed fetches never replaced last-known-good state.\n- [ ] Alerts carry all-in price, source currency, timestamp, and source link.\n",{"name":5,"author":40,"license":15,"version":41,"metadata":42,"platforms":51,"description":7},"Ben Barclay (benbarclay), Hermes Agent","0.1.0",{"hermes":43},{"tags":44,"related_skills":50},[45,46,47,48,49],"Prices","Availability","Shopping","Travel","Alerts",[34],[28,27,29],"main","64e2fc9afa7bb3da1138eb73399144d0e7e73e9d","_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fproduct-price-monitor",4,"https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs","https:\u002F\u002Fgithub.com\u002Fadnichols","2026-11-06 00:28:38",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add adnichols\u002Fai-configs --skill product-price-monitor",{"tool":65,"command":66},"bunx","bunx skills add adnichols\u002Fai-configs --skill product-price-monitor",{"tool":68,"command":69},"pnpm","pnpm dlx skills add adnichols\u002Fai-configs --skill product-price-monitor","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fproductivity\u002Fproduct-price-monitor\u002FSKILL.md",true,[],[74,91,123,148,159,175],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":35},"01M6CB7RN791P5RRRCJWWC7DAR","blocked-page-recovery","Use when a fetch fails: 403\u002F429, paywall, WAF, bot wall.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fweb\u002Fblocked-page-recovery\u002FSKILL.md",[],[81,82,83,84,85,86,87,31,30,88,89,29,90,28,27],"recovery","page","blocked page recovery","bot","fallback","use","fetch","Citations","waf","research",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":108,"publishedAt":35},"01M6CB7NQY2VVYCQJ1QBXACQF4","writing-plans","Use when creating or updating executable software plans. Keep plans as local files unless the user explicitly asks to register them in Doct.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fwriting-plans\u002FSKILL.md",[97,102,105],{"categoryNo":98,"categoryName":99,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":103,"categoryName":104,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":106,"categoryName":107,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000036","内容创作者",[109,110,111,112,113,114,115,116,117,118,119,120,86,121,31,30,122],"writing","writing plans","documentation","test","workflow","design","user","development","planning","files","implementation","html","ops","plan",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":138,"publishedAt":35},"01M6CB7JME246KZQHP73Z2STDF","test-driven-development","TDD: enforce RED-GREEN-REFACTOR, tests before code.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Ftest-driven-development\u002FSKILL.md",[129,132,135],{"categoryNo":130,"categoryName":131,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":133,"categoryName":134,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":136,"categoryName":137,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务",[112,116,139,140,141,31,30,142,122,143,144,145,27,146,28,147,29],"test driven development","red-green-refactor","superpowers","quality","refactor","code","debugging","tdd","testing",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":155,"publishedAt":35},"01M6CB7FQ407KQTD4Z9VAWKY54","systematic-debugging","4-phase root cause debugging: understand bugs before fixing.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fsystematic-debugging\u002FSKILL.md",[154],{"categoryNo":133,"categoryName":134,"taxonomyType":100,"taxonomyTypeDesc":101},[145,156,116,141,31,30,157,122,158,29,112,28,27],"systematic debugging","troubleshooting","investigation",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":168,"publishedAt":35},"01M6CB7D57MK88HE5YPZHKH68Q","spike","Throwaway experiments to validate an idea before build.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fspike\u002FSKILL.md",[165],{"categoryNo":166,"categoryName":167,"taxonomyType":100,"taxonomyTypeDesc":101},"01JBSEEDCAT000000000000021","资料检索与研究",[161,29,169,170,90,171,28,27,172,173,174,31,30,122,117],"validate","experiments","prototype","feasibility","sketch","experiment",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":185,"publishedAt":35},"01M6CB7APAQ37YE5YE1MAAFT42","simplify-code","Parallel 3-agent cleanup of recent code changes.","https:\u002F\u002Fgithub.com\u002Fadnichols\u002Fai-configs\u002Fblob\u002Fmain\u002F_hermes\u002Fdefault\u002Fskills\u002Fsoftware-development\u002Fsimplify-code\u002FSKILL.md",[181,182],{"categoryNo":103,"categoryName":104,"taxonomyType":100,"taxonomyTypeDesc":101},{"categoryNo":183,"categoryName":184,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师",[186,187,144,188,31,30,189,122,143,190,191,192,116,29,112,28,193,27],"simplify code","simplify","subagent","parallel","code-review","delegation","cleanup","review"]