Source profileQuality 74/100Review permissions

sonichi/sutando/skills/deal-finder/SKILL.md

deal-finder

Scan configured sources (Craigslist now; eBay + Facebook Marketplace planned) for used-item listings matching the owner's criteria. Currently configured for a Mac mini search (M2+, 16GB+, 512GB+, ≤$500, near 94566). Notify owner via SMS + Telegram on a match.

Source repository stars
359
Declared platforms
0
Static risk flags
2
Last source update
2026-07-28
Source checked
2026-07-28

Decision brief

What it does—and where it fits

Watches configured sources for second-hand item listings matching owner-defined criteria. Sends an SMS + Telegram DM when a new matching listing appears.

Best for

    Not for

    • Tasks that require unconfirmed production actions or broad system permissions.
    • Environments where the pinned source and install steps cannot be inspected.

    Compatibility matrix

    Platform support, with evidence labels

    PlatformStatusEvidenceWhat to check
    CodexNot declaredNo explicit evidencePortability before use
    Claude CodeNot declaredNo explicit evidencePortability before use
    CursorNot declaredNo explicit evidencePortability before use
    Gemini CLINot declaredNo explicit evidencePortability before use
    Open the compatibility checker

    Installation

    Inspect first. Install second.

    The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.

    Source-detected install commandSource
    npx skills add https://github.com/sonichi/sutando --skill "skills/deal-finder"
    Safe inspection promptEditorial

    Inspect the Agent Skill "deal-finder" from https://github.com/sonichi/sutando/blob/6a8f0fccd32e5aa620a3572c8885544f144bb6fe/skills/deal-finder/SKILL.md at commit 6a8f0fccd32e5aa620a3572c8885544f144bb6fe. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.

    Workflow

    What the source asks the agent to do

    1. 01

      Searches

      V1 keeps the original Mac Mini search inline (state/criteria.json). V2 will move this to a state/searches.json array with one entry per search, so adding "Pelican 1535 case", "Aeron chair size B", etc. becomes a JSON edit rather than a code change.

      Chip family: M2, M3, M4 (M1 explicitly excluded — owner asked for M2+)Min RAM: 16 GBMin storage: 512 GB
    2. 02

      Sources

      V1 (implemented): Craigslist (sfbay.craigslist.org/search/sss?...). Uses an honest User-Agent (Sutando-Personal-Agent/1.0) that identifies the agent rather than cosplaying a browser — Craigslist can decide whether to allow.

      eBay — browse.ebay.com has a local-pickup filter; HTML scraping works without auth.Facebook Marketplace — requires a headless browser (Playwright via the macos-use skill, or the browser-automation MCP) because the page is JS-rendered and gated.V1 (implemented): Craigslist (sfbay.craigslist.org/search/sss?...). Uses an honest User-Agent (Sutando-Personal-Agent/1.0) that identifies the agent rather than cosplaying a browser — Craigslist can decide whether to al…
    3. 03

      Behavior

      1. Fetch the Craigslist search results page with the honest UA. 2. Parse each listing: title, URL, price, neighborhood. 3. For each listing not in state/seen.json: - Fetch the listing detail page (one extra HTTP req per listing — cheap, only on first sight). - Apply criteria fil…

      Fetch the Craigslist search results page with the honest UA.Parse each listing: title, URL, price, neighborhood.For each listing not in state/seen.json:
    4. 04

      Notification format

      SMS goes via TWILIO env vars to OWNERNUMBER. Telegram goes via results/proactive-deal-finder-{ts}.txt (the bridge picks it up).

      SMS goes via TWILIO env vars to OWNERNUMBER. Telegram goes via results/proactive-deal-finder-{ts}.txt (the bridge picks it up).

    Permission review

    Static risk signals and limitations

    Network access

    medium · line 45

    The documentation includes network, browsing, or remote request actions.

    https://sfbay.craigslist.org/...

    Runs scripts

    medium · line 53

    The documentation asks the agent to run terminal commands or scripts.

    python3 scripts/scan.py # one-shot scan with default criteria

    Runs scripts

    medium · line 54

    The documentation asks the agent to run terminal commands or scripts.

    python3 scripts/scan.py --dry-run # don't notify, print what would notify

    Evidence record

    Why each signal appears

    EvidenceSourceComputedTestedEditorial
    SignalValueEvidence typeMeaning
    Quality score74/100ComputedDocumentation, specificity, maintenance, and trust rules
    Repository stars359SourceRepository attention, not individual Skill quality
    Compatibility0 platformsSourceDeclared in the catalog source record
    Usage guideautomated source guideEditorialGenerated or reviewed according to the visible evidence level

    Pinned source

    Provenance and original SKILL.md

    Repository
    sonichi/sutando
    Skill path
    skills/deal-finder/SKILL.md
    Commit
    6a8f0fccd32e5aa620a3572c8885544f144bb6fe
    License
    MIT
    Collected
    2026-07-28
    Default branch
    main
    View the original SKILL.md

    Deal Finder

    Watches configured sources for second-hand item listings matching owner-defined criteria. Sends an SMS + Telegram DM when a new matching listing appears.

    Usage: /deal-finder (one-shot scan) — typically run from cron every 60 min.

    Searches

    V1 keeps the original Mac Mini search inline (state/criteria.json). V2 will move this to a state/searches.json array with one entry per search, so adding "Pelican 1535 case", "Aeron chair size B", etc. becomes a JSON edit rather than a code change.

    Current Mac Mini search criteria (from state/criteria.json):

    • Chip family: M2, M3, M4 (M1 explicitly excluded — owner asked for M2+)
    • Min RAM: 16 GB
    • Min storage: 512 GB
    • Max price: $500
    • ZIP: 94566 (Pleasanton, CA), search radius 50 mi

    Edit state/criteria.json to retune the Mac Mini search; v2 will lift this into a per-search config.

    Sources

    V1 (implemented): Craigslist (sfbay.craigslist.org/search/sss?...). Uses an honest User-Agent (Sutando-Personal-Agent/1.0) that identifies the agent rather than cosplaying a browser — Craigslist can decide whether to allow.

    V2 (planned, not yet implemented):

    • eBaybrowse.ebay.com has a local-pickup filter; HTML scraping works without auth.
    • Facebook Marketplace — requires a headless browser (Playwright via the macos-use skill, or the browser-automation MCP) because the page is JS-rendered and gated.

    Behavior

    1. Fetch the Craigslist search results page with the honest UA.
    2. Parse each listing: title, URL, price, neighborhood.
    3. For each listing not in state/seen.json:
      • Fetch the listing detail page (one extra HTTP req per listing — cheap, only on first sight).
      • Apply criteria filter (chip, RAM, storage, price). Listings missing fields fall through to "soft match" — flagged but still notified, since Craigslist sellers often omit specs.
      • On match: notify (SMS + Telegram), record URL in seen.json.
    4. Trim seen.json deterministically to the last 1000 entries (a deque(maxlen=1000) ordered by insertion — replaces the prior set-slicing trim which was non-deterministic).

    Notification format

    [Mac Mini Deal] $480 — M2 / 16GB / 512GB
    Concord (35mi, local pickup)
    Posted recent
    https://sfbay.craigslist.org/...
    

    SMS goes via TWILIO_* env vars to OWNER_NUMBER. Telegram goes via results/proactive-deal-finder-{ts}.txt (the bridge picks it up).

    Run it

    python3 scripts/scan.py            # one-shot scan with default criteria
    python3 scripts/scan.py --dry-run  # don't notify, print what would notify
    python3 scripts/scan.py --reset    # clear seen.json (force re-notify everything)
    

    Cron: every 60 min. Configured in skills/schedule-crons/crons.json as deal-finder.