agentleFS
spacexplorationspacexploration/claude-plugin/skills/search-listings/SKILL.md

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.

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
  1. Very specific:

    You need precise or repeated control: call get_registry once and build filters yourself.

    line 15
  2. Distinctive:

    When recency matters, say when a listing was listed or last updated.

    line 69

≈ “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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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_search with their sentence as prompt. Pass the filters it returns to search_listings. If it also returns bounds, 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_registry once and build filters yourself. Anonymous callers can make about 6 interpret_search calls 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:

filterFilter value
range{"min": …, "max": …}. Either bound is optional. Dates take ISO dates, e.g. {"min": "2027-01-01"}
any_ofarray of the attribute's values, e.g. ["industrial", "office"]. Where values are {value, label} pairs, send the value
booleantrue or false
equalsa single exact value
  • applies_to and applies_to_listing_type say 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: state takes two-letter codes (["CO"]), and city and county take exact names. Use them when the user names a place and you have no bounds; without a location filter or bounds the search covers the whole country.
  • sort must be one of sort_options, e.g. price:asc, attr_cap_rate:desc, or views_30d:desc for popular listings.
  • query is 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_record cites 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.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.