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.
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
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
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.
npx skills add https://github.com/sonichi/sutando --skill "skills/deal-finder"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
- 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 - 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… - 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: - 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
The documentation includes network, browsing, or remote request actions.
https://sfbay.craigslist.org/...Runs scripts
The documentation asks the agent to run terminal commands or scripts.
python3 scripts/scan.py # one-shot scan with default criteriaRuns scripts
The documentation asks the agent to run terminal commands or scripts.
python3 scripts/scan.py --dry-run # don't notify, print what would notifyEvidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 74/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 359 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated 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 radius50 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):
- eBay —
browse.ebay.comhas a local-pickup filter; HTML scraping works without auth. - Facebook Marketplace — requires a headless browser (Playwright via the
macos-useskill, or the browser-automation MCP) because the page is JS-rendered and gated.
Behavior
- 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:- 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.
- Trim
seen.jsondeterministically to the last 1000 entries (adeque(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.