{"id":"5acb0c90-fa89-403a-b708-c7dba2880533","shortId":"xFKFxF","kind":"skill","title":"hackernews-intel","tagline":"Monitors Hacker News for user-configured keywords, deduplicates against a local SQLite cache, and sends Slack alerts for new matching posts. Use when asked to monitor Hacker News for mentions, track keywords on HN, get alerts when something is posted about a topic on Hacker News,","description":"# Hacker News Intel\n\nMonitor Hacker News for keywords. On each run, fetch new posts via the HN Algolia API, deduplicate against a local SQLite cache, and send Slack alerts for unseen matches. Run manually or schedule via cron or GitHub Actions.\n\n---\n\n## Step 1: Check Setup\n\n**1a. Verify required environment variables**\n\nCheck that these are set:\n- `HN_KEYWORDS` (required): comma-separated list of keywords to monitor\n- `SLACK_WEBHOOK` (required): Slack Incoming Webhook URL for alerts\n\nIf either is missing, stop and tell the user:\n- `HN_KEYWORDS`: list the topics you want to monitor, comma-separated. Example: `claude code,LLM agents,deno runtime`\n- `SLACK_WEBHOOK`: create an Incoming Webhook at https://api.slack.com/apps. Select your workspace, enable Incoming Webhooks, and copy the URL.\n\n**1b. Verify script dependencies**\n\n```bash\nls /Users/ksd/Desktop/Varnan_skills/hackernews-intel/node_modules/better-sqlite3 2>/dev/null\n```\n\nIf missing:\n\n```bash\ncd /Users/ksd/Desktop/Varnan_skills/hackernews-intel && npm install\n```\n\n---\n\n## Step 2: Run the Monitor\n\n```bash\ncd /Users/ksd/Desktop/Varnan_skills/hackernews-intel && node scripts/monitor-hn.js\n```\n\n**Flags:**\n- `--dry-run`: print matches to stdout without sending any Slack alerts. Use this to preview what would be alerted before committing.\n- `--days=N`: on the first run, look back N days (default: 1). Only applies when the SQLite cache is empty.\n- `--reset`: clear the cache and start fresh. Use when you change your keyword list significantly.\n\n**What the script does:**\n1. Reads `HN_KEYWORDS` from environment, splits by comma, trims whitespace\n2. Opens (or creates) a SQLite database at the path in `HN_DB_PATH` (default: `./hn-intel.db`)\n3. For each keyword, calls `https://hn.algolia.com/api/v1/search_by_date` with `numericFilters=created_at_i>lastSeen`\n4. For each result, checks if the `objectID` is already in `seen_posts` — skips if yes\n5. If `HN_MIN_POINTS` is set, skips posts below that threshold\n6. For new matching posts, sends a Slack alert and inserts the `objectID` into the cache\n7. Updates `poll_log` with the run summary\n8. Prints a summary to stdout\n\n---\n\n## Step 3: Review Results\n\nAfter the script runs, read its stdout output. It will report:\n\n```\nRun complete.\n  Keywords checked: N\n  Posts found: N\n  Posts alerted: N\n  Posts skipped (already seen): N\n  Errors: N\n```\n\nIf `Posts found: 0` and you expect results, check:\n- Are the keywords specific enough? Very broad terms (e.g. \"AI\") may return 0 results if HN Algolia returns too many and the time window is narrow\n- Is the `--days` window large enough for the first run? Try `--days=7`\n- Is the DB cache too aggressive? Try `--reset` to clear it and rerun\n\nIf `Posts alerted: 0` but `Posts found: N`, the deduplication is working — those posts were seen in a previous run.\n\n---\n\n## Step 4: Schedule the Monitor\n\n**Option A: cron (macOS/Linux)**\n\nAdd to crontab to run every 4 hours:\n\n```bash\ncrontab -e\n```\n\nAdd this line (adjust the path to match your install):\n\n```\n0 */4 * * * cd /Users/ksd/Desktop/Varnan_skills/hackernews-intel && node scripts/monitor-hn.js >> /tmp/hn-intel.log 2>&1\n```\n\n**Option B: GitHub Actions (recommended for teams)**\n\nCreate `.github/workflows/hn-intel.yml` in any repo:\n\n```yaml\nname: HN Intel Monitor\non:\n  schedule:\n    - cron: '0 */4 * * *'\n  workflow_dispatch:\n\njobs:\n  monitor:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: '20'\n      - name: Install dependencies\n        run: npm install\n        working-directory: hackernews-intel\n      - name: Run monitor\n        run: node scripts/monitor-hn.js\n        working-directory: hackernews-intel\n        env:\n          HN_KEYWORDS: ${{ secrets.HN_KEYWORDS }}\n          SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}\n          HN_MIN_POINTS: ${{ secrets.HN_MIN_POINTS }}\n```\n\nAdd `HN_KEYWORDS`, `SLACK_WEBHOOK`, and optionally `HN_MIN_POINTS` as repository secrets.\n\nNote: GitHub Actions does not persist files between runs, so the SQLite cache resets each run. This means every run will find all posts within the default 1-day lookback window again. For persistent dedup on GitHub Actions, store the DB in a persistent location (S3, artifact cache, or a dedicated branch).\n\n---\n\n## Step 5: Tune Keywords and Thresholds\n\n**Adding or changing keywords:**\nUpdate `HN_KEYWORDS` in your `.env` or environment. No restart needed — the script reads it fresh each run.\n\n**Setting a minimum points threshold:**\nSet `HN_MIN_POINTS=10` to only alert on posts with 10 or more points. This cuts noise for broad keywords.\n\n**Including comments (not just stories):**\nSet `HN_INCLUDE_COMMENTS=true` to also monitor comments mentioning the keyword. Off by default — comments generate significantly more volume.\n\n**Resetting the cache:**\nRun `node scripts/monitor-hn.js --reset` to clear `seen_posts` and `poll_log`. The next run fetches fresh from the lookback window.\n\n**Testing a new keyword:**\nRun `node scripts/monitor-hn.js --dry-run --days=7` to see the last 7 days of matching posts without alerting anyone.","tags":["hackernews","intel","opendirectory","varnan-tech","agent-skills","gtm","hermes-agent","openclaw-skills","skills","technical-seo"],"capabilities":["skill","source-varnan-tech","skill-hackernews-intel","topic-agent-skills","topic-gtm","topic-hermes-agent","topic-openclaw-skills","topic-skills","topic-technical-seo"],"categories":["opendirectory"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Varnan-Tech/opendirectory/hackernews-intel","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Varnan-Tech/opendirectory","source_repo":"https://github.com/Varnan-Tech/opendirectory","install_from":"skills.sh"}},"qualityScore":"0.511","qualityRationale":"deterministic score 0.51 from registry signals: · indexed on github topic:agent-skills · 123 github stars · SKILL.md body (5,127 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T00:55:50.137Z","embedding":null,"createdAt":"2026-04-18T22:18:28.361Z","updatedAt":"2026-05-02T00:55:50.137Z","lastSeenAt":"2026-05-02T00:55:50.137Z","tsv":"'/4':506,535 '/api/v1/search_by_date':296 '/apps.':163 '/dev/null':182 '/hn-intel.db':288 '/tmp/hn-intel.log':511 '/users/ksd/desktop/varnan_skills/hackernews-intel':187,197,508 '/users/ksd/desktop/varnan_skills/hackernews-intel/node_modules/better-sqlite3':180 '0':397,415,458,505,534 '1':93,234,262,513,637 '10':699,706 '1a':96 '1b':174 '2':181,191,273,512 '20':557 '3':289,362 '4':303,476,490 '5':319,663 '6':331 '7':347,441,775,780 '8':355 'action':91,517,612,647 'actions/checkout':548 'actions/setup-node':551 'ad':668 'add':484,495,597 'adjust':498 'agent':151 'aggress':447 'ai':412 'alert':21,40,79,125,212,220,339,385,457,702,786 'algolia':68,419 'alreadi':312,389 'also':727 'anyon':787 'api':69 'api.slack.com':162 'api.slack.com/apps.':161 'appli':236 'artifact':656 'ask':28 'b':515 'back':230 'bash':178,185,195,492 'branch':661 'broad':409,714 'cach':17,75,240,246,346,445,622,657,743 'call':293 'cd':186,196,507 'chang':253,670 'check':94,101,307,379,402 'claud':148 'clear':244,451,749 'code':149 'comma':110,145,270 'comma-separ':109,144 'comment':717,724,729,736 'commit':222 'complet':377 'configur':10 'copi':171 'creat':156,276,299,521 'cron':88,482,533 'crontab':486,493 'cut':711 'databas':279 'day':223,232,431,440,638,774,781 'db':285,444,650 'dedic':660 'dedup':644 'dedupl':12,70,464 'default':233,287,636,735 'deno':152 'depend':177,560 'directori':566,578 'dispatch':537 'dri':202,772 'dry-run':201,771 'e':494 'e.g':411 'either':127 'empti':242 'enabl':167 'enough':407,434 'env':582,677 'environ':99,267,679 'error':392 'everi':489,628 'exampl':147 'expect':400 'fetch':62,758 'file':616 'find':631 'first':227,437 'flag':200 'found':382,396,461 'fresh':249,687,759 'generat':737 'get':39 'github':90,516,611,646 'github/workflows/hn-intel.yml':522 'hacker':5,31,49,51,55 'hackernew':2,568,580 'hackernews-intel':1,567,579 'hn':38,67,106,135,264,284,321,418,528,583,591,598,604,673,696,722 'hn.algolia.com':295 'hn.algolia.com/api/v1/search_by_date':294 'hour':491 'includ':716,723 'incom':121,158,168 'insert':341 'instal':189,504,559,563 'intel':3,53,529,569,581 'job':538 'keyword':11,36,58,107,114,136,255,265,292,378,405,584,586,599,665,671,674,715,732,767 'larg':433 'last':779 'lastseen':302 'latest':545 'line':497 'list':112,137,256 'llm':150 'local':15,73 'locat':654 'log':350,754 'look':229 'lookback':639,762 'ls':179 'macos/linux':483 'mani':422 'manual':84 'match':24,82,205,334,502,783 'may':413 'mean':627 'mention':34,730 'min':322,592,595,605,697 'minimum':692 'miss':129,184 'monitor':4,30,54,116,143,194,479,530,539,572,728 'n':224,231,380,383,386,391,393,462 'name':527,558,570 'narrow':428 'need':682 'new':23,63,333,766 'news':6,32,50,52,56 'next':756 'node':198,509,555,574,745,769 'node-vers':554 'nois':712 'note':610 'npm':188,562 'numericfilt':298 'objectid':310,343 'open':274 'option':480,514,603 'output':372 'path':282,286,500 'persist':615,643,653 'point':323,593,596,606,693,698,709 'poll':349,753 'post':25,44,64,315,327,335,381,384,387,395,456,460,468,633,704,751,784 'preview':216 'previous':473 'print':204,356 'read':263,369,685 'recommend':518 'repo':525 'report':375 'repositori':608 'requir':98,108,119 'rerun':454 'reset':243,449,623,741,747 'restart':681 'result':306,364,401,416 'return':414,420 'review':363 'run':61,83,192,203,228,353,368,376,438,474,488,541,561,571,573,618,625,629,689,744,757,768,773 'runs-on':540 'runtim':153 's3':655 'schedul':86,477,532 'script':176,260,367,684 'scripts/monitor-hn.js':199,510,575,746,770 'secret':609 'secrets.hn':585,594 'secrets.slack':589 'see':777 'seen':314,390,470,750 'select':164 'send':19,77,209,336 'separ':111,146 'set':105,325,690,695,721 'setup':95 'signific':257,738 'skill' 'skill-hackernews-intel' 'skip':316,326,388 'slack':20,78,117,120,154,211,338,587,600 'someth':42 'source-varnan-tech' 'specif':406 'split':268 'sqlite':16,74,239,278,621 'start':248 'stdout':207,360,371 'step':92,190,361,475,546,662 'stop':130 'store':648 'stori':720 'summari':354,358 'team':520 'tell':132 'term':410 'test':764 'threshold':330,667,694 'time':425 'topic':47,139 'topic-agent-skills' 'topic-gtm' 'topic-hermes-agent' 'topic-openclaw-skills' 'topic-skills' 'topic-technical-seo' 'track':35 'tri':439,448 'trim':271 'true':725 'tune':664 'ubuntu':544 'ubuntu-latest':543 'unseen':81 'updat':348,672 'url':123,173 'use':26,213,250,547,550 'user':9,134 'user-configur':8 'v4':549,552 'variabl':100 'verifi':97,175 'version':556 'via':65,87 'volum':740 'want':141 'webhook':118,122,155,159,169,588,590,601 'whitespac':272 'window':426,432,640,763 'within':634 'without':208,785 'work':466,565,577 'workflow':536 'working-directori':564,576 'workspac':166 'would':218 'yaml':526 'yes':318","prices":[{"id":"b2d28e3b-3f1e-4e80-8f1b-12960f599e76","listingId":"5acb0c90-fa89-403a-b708-c7dba2880533","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Varnan-Tech","category":"opendirectory","install_from":"skills.sh"},"createdAt":"2026-04-18T22:18:28.361Z"}],"sources":[{"listingId":"5acb0c90-fa89-403a-b708-c7dba2880533","source":"github","sourceId":"Varnan-Tech/opendirectory/hackernews-intel","sourceUrl":"https://github.com/Varnan-Tech/opendirectory/tree/main/skills/hackernews-intel","isPrimary":false,"firstSeenAt":"2026-04-18T22:18:28.361Z","lastSeenAt":"2026-05-02T00:55:50.137Z"}],"details":{"listingId":"5acb0c90-fa89-403a-b708-c7dba2880533","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Varnan-Tech","slug":"hackernews-intel","github":{"repo":"Varnan-Tech/opendirectory","stars":123,"topics":["agent-skills","gtm","hermes-agent","openclaw-skills","skills","technical-seo"],"license":null,"html_url":"https://github.com/Varnan-Tech/opendirectory","pushed_at":"2026-04-30T18:54:05Z","description":" AI Agent Skills built for GTM, Technical Marketing, and growth automation.","skill_md_sha":"8c097bcefa64a71ae39b4d58cb947c4b4fe88b90","skill_md_path":"skills/hackernews-intel/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Varnan-Tech/opendirectory/tree/main/skills/hackernews-intel"},"layout":"multi","source":"github","category":"opendirectory","frontmatter":{"name":"hackernews-intel","description":"Monitors Hacker News for user-configured keywords, deduplicates against a local SQLite cache, and sends Slack alerts for new matching posts. Use when asked to monitor Hacker News for mentions, track keywords on HN, get alerts when something is posted about a topic on Hacker News, or set up HN keyword monitoring. Trigger when a user mentions Hacker News alerts, HN monitoring, keyword tracking on HN, or wants to know when a topic appears on Hacker News.","compatibility":"[claude-code, gemini-cli, github-copilot]"},"skills_sh_url":"https://skills.sh/Varnan-Tech/opendirectory/hackernews-intel"},"updatedAt":"2026-05-02T00:55:50.137Z"}}