search-listings
Skill0 starsChanged 5 days agoMITView on GitHub
Find and compare commercial real estate on SPACEXPLORATION — industrial, office, retail, multifamily, and land, for sale or lease, anywhere in the US. Use when the user wants to search for commercial property, filter by price, size, cap rate, location, or building features, look up a specific listing, compare listings side by side, or check the public data on any US building by its address (flood zone, hazard risk, EPA records, demographics, county record), listed or not. Searching needs no account; a building lookup asks the user to sign in to SPACEXPLORATION in the browser.
In this repository2 other files it gives its agents.
- author-listingSkill
- saved-searchesSkill
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 15
You need precise or repeated control: call get_registry once and build filters yourself.
- Distinctive: line 69
When recency matters, say when a listing was listed or last updated.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Search SPACEXPLORATION listings
The user's explicit instructions take precedence over this skill.
SPACEXPLORATION is a free MLS for commercial property. Every read tool works without signing in, except looking up a building by address: the first time it runs, the user is asked to sign in to SPACEXPLORATION in the browser.
Choose a starting point
- The user asks in plain language ("warehouses near Denver under $5M with dock doors"): call
interpret_searchwith their sentence asprompt. Pass thefiltersit returns tosearch_listings. If it also returnsbounds, pass those as well. Bounds hold the "near<place>" part, and without them the search covers the whole country. - You need precise or repeated control: call
get_registryonce and buildfiltersyourself. Anonymous callers can make about 6interpret_searchcalls per minute, so do this for follow-up refinements too.
Build filters from the registry
get_registry returns attributes and sort_options. Each attribute's field is the only valid filter key. Shape each value by the attribute's filter:
filter | Filter value |
range | {"min": …, "max": …}. Either bound is optional. Dates take ISO dates, e.g. {"min": "2027-01-01"} |
any_of | array of the attribute's values, e.g. ["industrial", "office"]. Where values are {value, label} pairs, send the value |
boolean | true or false |
equals | a single exact value |
applies_toandapplies_to_listing_typesay which property and listing types a field is meaningful for. For example, cap rate applies to sale listings and lease structure to lease listings. Filtering on a field that doesn't apply silently excludes every other type.- Location:
statetakes two-letter codes (["CO"]), andcityandcountytake exact names. Use them when the user names a place and you have nobounds; without a location filter orboundsthe search covers the whole country. sortmust be one ofsort_options, e.g.price:asc,attr_cap_rate:desc, orviews_30d:descfor popular listings.queryis free text matched against address, city, and keywords. Use it for a street address or a term that isn't a registry field.
{
"filters": {
"property_type": ["industrial"],
"listing_type": ["sale"],
"price": { "max": 5000000 },
"attr_industrial_dock_doors": { "min": 1 }
},
"bounds": { "sw_lat": 39.4, "sw_lng": -105.3, "ne_lat": 40.1, "ne_lng": -104.6 },
"sort": "price:asc"
}Read results
search_listings returns hits, facets (counts per value, useful for suggesting refinements), found, page, and last_page. Pass page to page through results; there are 24 hits per page.
Each hit carries a hashid, the listing page url, and two timestamps: listed_at (when it went live) and updated_at (when it last changed). Call get_listing with the hashid for the full record: pricing, every populated attribute with its label and unit, parcel and public-record data, photos, and documents. Broker contact details appear only when the caller is allowed to see them.
Link the user to a listing with its url. Don't build the link yourself.
Look up a building by address
When the user asks about a specific building, on the market or not ("is 910 Elysian Fields Ave in a flood zone?", "what do we know about this property?"), call look_up_parcel with its full street address, street number included. The first time it runs, the user is asked to sign in to SPACEXPLORATION in the browser. A road, a town, or a partial address is refused, so ask for the street number.
It returns the building page url to share, details keyed by registry path (FEMA flood zone, natural hazard risk, EPA records nearby, Census demographics, access and amenities), public_record (the county's owner, values, taxes, tax lots, and recorded sales, each figure with a numbered source) where research has found it, and any live listings in it (pass a hashid to get_listing).
A building looked up for the first time fills in over a minute or more. While status.gathering or status.researching_county_record is true, follow status.note: check on it with get_parcel and the returned parcel.hashid instead of repeating the lookup. get_parcel starts nothing and works without signing in.
Answer questions about SPACEXPLORATION
Asked how SPACEXPLORATION works, what it covers, or another question about the service itself rather than a property? Call get_faq, answer from it, and link the entry's url.
Report honestly
- Say how many listings matched (
found), and when a search came back empty, say which filter was most restrictive. - When recency matters, say when a listing was listed or last updated.
- Present only values the tools returned. A missing attribute means the listing doesn't state it. Don't fill it in.
- For a building,
public_recordcites its sources by number: name the county source when you quote a figure, and say a field is unknown when it is missing rather than estimating it. - Some attributes are computed from public sources: flood zone, census demographics, walk and transit scores, proximity, market medians, and
attr_record_*assessor data. When those matter to the decision, say they come from public data, not from the broker.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

