BuildBotsBetter
BUILDBOTSBETTER
All Builds
Guided Build · ChatGPT Codex

Free Stuff / Marketplace Finder

Build a shortlist from a permitted export, with no automatic messages.

75–110 minuteswindows · macos · linuxFree practice; existing tool accounts may have plan limits.

Finish with: A reproducible filter that selects available zero-price listings within your distance limit, deduplicates IDs, reports bad rows, and produces a reviewed pickup shortlist.

Progress stays in this browser. Export to keep a portable record.

Do this now

Walkthrough

A step demonstration outline; use optional narration while you follow it.

Resources for this step

Check the result

This browser checks the evidence format and your checklist. It cannot inspect your computer or certify a live login.

When it does not work

Finish-line test

Repeat the last product-specific checkpoint from a fresh practice input, preserve actual output, then complete the Build Bot Better guard and restore checks. Export the evidence.

Sources and verification limits

Sources checked 2026-10-05. External tool interfaces and plan availability can change; check the linked official source and local --help.

Complete lesson text and action cards

Source-owned text for offline reading and retrieval. Command success still requires actual local evidence.

Choose the item and collection limits

Write a one-line search brief: item category, maximum distance, transport constraints, acceptable condition and available pickup times. Do not treat “free” as zero transport cost.

Expected: The brief contains a category, radius, transport plan and a clear rejection rule.

Set up the practice folder

Download the resource ZIP at the top of this Build. Extract it into a new folder you own (for example C:\BBBPractice on Windows, or ~/bbb-practice on macOS/Linux). Open a terminal in the extracted folder. Run the version command for your platform. All subsequent commands assume this folder.

Expected: Python reports version 3.10 or newer and the terminal is in the extracted resource folder.

windows

python --version
Get-Location
Get-ChildItem

macos

python3 --version
pwd
ls

linux

python3 --version
pwd
ls

Inspect the listing contract

Open listings.csv. Map each header to a permitted marketplace export or your manually collected public listings. Keep the original listing URL and observation time. The example.com rows are synthetic. Verify platform terms before adding any live collection adapter.

Expected: Every row has id, title, price, distance_km, URL, UTC observation time and status.

Filter the supplied listings

Run the finder on listings.csv with a 5 km limit. Open matches.json and locate the source URL for each match.

Expected: FINDER PASS reports 1 match and 0 rejected rows; matches.json contains only chair-1.

windows

python finder.py listings.csv --max-km 5 --out matches.json

macos

python3 finder.py listings.csv --max-km 5 --out matches.json

linux

python3 finder.py listings.csv --max-km 5 --out matches.json

Audit the rejected candidates

Compare all five CSV rows with the result. Record the reason each excluded row failed: duplicate, nonzero price, distance, or collected status. Use listing ID as the stable deduplication key.

Expected: The audit explains why the chair duplicate, desk, lamp and sofa do not appear.

Prove a bad row is visible

Copy listings.csv to listings-bad.csv and add a row with price “free” rather than numeric zero. Run the finder on that copy and inspect rejected in the output. Then record how you will recheck stale availability before contacting anyone.

Expected: The malformed row is reported as rejected; existing valid matches still appear; availability will be checked manually.

windows

python finder.py listings-bad.csv --max-km 5 --out bad-report.json

macos

python3 finder.py listings-bad.csv --max-km 5 --out bad-report.json

linux

python3 finder.py listings-bad.csv --max-km 5 --out bad-report.json

Prepare a pickup review

Choose one match, fill pickup-checklist.md, and draft a short message that asks whether it is available and when/where to collect. Review the source listing yourself. Do not send through an agent as part of this exercise.

Expected: One shortlist item has a source, recent availability check, transport plan and reviewed draft.

Repeat the workflow on a new list

Replace the sample rows with at least three permitted listings or newly invented test cases. Include one qualifying free item and one explicit rejection. Run the filter, inspect the source URLs and record the decisions.

Expected: FINDER PASS produces the expected shortlist, with no duplicate IDs and explained rejections.

windows

python finder.py listings.csv --max-km 5 --out matches.json

macos

python3 finder.py listings.csv --max-km 5 --out matches.json

linux

python3 finder.py listings.csv --max-km 5 --out matches.json

Write a repeatable onboarding checklist

Fill in onboarding-checklist.md for your agent. Record AGENTS.md, the tool’s user settings and memory folder, the assigned workspace, permissions, guard location, backup schedule, and a final proof task. Keep the checklist in your project.

Expected: The checklist contains a concrete path and owner for rules, memory, permissions, guard, backup, restore and final verification.

Demonstrate the variable-path limit safely

Run workspace_guard.py --self-test. Read the source: the target is resolved before deciding. The variable_target case points at the home folder but performs no filesystem operation. Compare this with a hook that sees only command text.

Expected: GUARD PASS reports inside allowed and profile, outside, variable-derived profile and workspace root denied; no deletion was executed.

windows

python workspace_guard.py --self-test

macos

python3 workspace_guard.py --self-test

linux

python3 workspace_guard.py --self-test

Verify the actual protection in your tool

For CLI tools, open the hook/permissions screen and confirm the configured guard is active. Use your tool’s documented pre-command hook protocol; the BBB working reference is linked in Sources. Run a harmless directory listing, then a guard dry-run targeting the profile. Do not execute a destructive profile probe. Grok Bot has no proven local shell guard here: use project-only tasks and reviewed actions, with backups.

Expected: A harmless command runs, the guard dry-run returns DENY, and the checklist records the actual hook protocol and active state or the Grok Bot limitation.

Enable a real backup of memory and project files

Connect a second backup drive. Windows: configure System Protection as additional recovery and use a scheduled copy/File History that explicitly includes hidden agent folders. macOS: configure Time Machine and verify dot folders are included. Linux: use a home backup such as restic/Deja Dup; Timeshift omits /home by default. Download the copy-only profile backup script for your platform, inspect it, and adapt the folder list to your tool. Record the last successful scheduled run; protect backup access because it may contain credentials.

Expected: A backup on another drive includes the tool’s user settings and memory folder and this project, and a successful schedule/time is recorded.

windows

.\profile-backup.ps1 -Destination D:\Backups\llm-profiles

macos

bash profile-backup.sh /Volumes/YourBackup/llm-profiles

linux

bash profile-backup.sh /media/YourBackup/llm-profiles

Practice a hash-verified restore

Run restore_drill.py with a separate backup directory. The script creates a new proof file, copies it, restores a second copy, and compares SHA256 hashes. Then restore one non-secret file from your actual agent memory backup into a separate scratch directory and open it; do not overwrite the live profile.

Expected: RESTORE PASS contains matching hashes; the actual memory file is readable after restoration into scratch.

windows

python restore_drill.py --backup-root D:\Backups\bbb-practice --work-root practice

macos

python3 restore_drill.py --backup-root /Volumes/YourBackup/bbb-practice --work-root practice

linux

python3 restore_drill.py --backup-root /media/YourBackup/bbb-practice --work-root practice