Property Listings Skill
Present researched properties as browsable cards in the Loki desktop transcript.
This is a presentation recipe, not a listing search service or an investment valuation.
When to Use
- Presenting property or rental search results, comparing a shortlist, or re-ranking properties.
- Following up on a property already shown: keep using cards so the shortlist stays comparable.
- Outside the desktop app, use ordinary Markdown with source links instead; other clients need not render listing fences.
Prerequisites
- A Loki desktop conversation for native cards; the backend may be local or remote.
- Property details supplied by the user or verified through
web_search, web_extract, or the browser tools available in this session.
- No additional API keys or dependencies are required for card formatting.
How to Run
Install this optional skill through the Skills catalog, or use terminal:
loki skills install official/productivity/property-listings
Load it with skill_view(name="property-listings") when presenting listings.
Installing does not retrofit the running conversation's skill index; start a new
conversation for automatic discovery, or explicitly load the installed skill now.
Quick Reference
Emit a fenced code block whose language is listing and whose body is valid JSON.
Use one object, an array of objects, or { "listings": [...] } for a comparison.
| Field |
Shape and meaning |
address |
Required nonempty street address or property headline. |
price |
Formatted string including currency and rental period, if applicable. |
beds, baths |
Positive numeric counts; omit unknown values. |
size |
Formatted area including units. |
note |
Why this property is worth a look. |
facts |
Array of short verified specs or amenities. |
catches |
Array of risks or questions to verify before a tour. |
images |
Direct HTTPS photo URLs in listing order; the first is the hero. |
links |
Array of { "label": "Source", "url": "https://..." } detail-page links, not search-result URLs. |
Procedure
- Gather the address, price, specs, photos and canonical detail URL. Distinguish
verified facts from unknowns; do not invent prices, amenities, or photo URLs.
- Deduplicate portal mirrors of the same property into one card, retaining useful
source links. Keep source dates and availability caveats in the surrounding prose.
- Emit the
listing fence for every property presented, including follow-ups and
re-rankings. Keep facts short and put unresolved concerns in catches.
- Check the JSON before sending. This fictional format example illustrates all fields;
replace its values and example URLs with verified listing data:
{
"address": "12 Example Lane",
"price": "$2,400/mo",
"beds": 3,
"baths": 2.5,
"size": "1,600 sqft",
"note": "Fits the requested space and budget.",
"facts": ["12-month lease", "Covered parking"],
"catches": ["Verify pet policy and total move-in fees"],
"images": ["https://example.com/property/front.jpg", "https://example.com/property/kitchen.jpg"],
"links": [{"label": "Listing details", "url": "https://example.com/property/12"}]
}
Pitfalls
- Cards are authored from gathered data, not fetched from a listing URL or embedded portal page.
- A sparse card needs only an address. Omit unknown fields rather than filling them with guesses.
- Use direct remote image URLs, not local paths, data URLs, or search-result pages.
Expired or blocked images disappear from the gallery; the text and links still matter.
- Keep a fence to at most 24 properties, 40 images per property, and 12 entries in
facts, catches and links. Text fields are truncated to 400 characters by the renderer.
- Malformed JSON or a card without identity falls back to a plain code block.
A valid card is not proof that the underlying listing is current or accurate.
Verification
- Every presented property has an address and a verified source link; unknowns are explicit.
- Desktop displays the address, price, specs, facts, catches and links as a native card.
- Photos form a gallery; selecting a photo opens the lightbox. Three or more photos
use a hero-and-supporting-frames mosaic; additional photos remain browsable there.
- If the card fails to render, validate the fence language and JSON, then preserve a
readable Markdown fallback with the same facts and links.
1---2name: property-listings3description: Present property and rental listings as desktop cards.4license: MIT5---67# Property Listings Skill89Present researched properties as browsable cards in the Loki desktop transcript.10This is a presentation recipe, not a listing search service or an investment valuation.1112## When to Use1314- Presenting property or rental search results, comparing a shortlist, or re-ranking properties.15- Following up on a property already shown: keep using cards so the shortlist stays comparable.16- Outside the desktop app, use ordinary Markdown with source links instead; other clients need not render listing fences.1718## Prerequisites1920- A Loki desktop conversation for native cards; the backend may be local or remote.21- Property details supplied by the user or verified through `web_search`, `web_extract`, or the browser tools available in this session.22- No additional API keys or dependencies are required for card formatting.2324## How to Run2526Install this optional skill through the Skills catalog, or use `terminal`:2728```text29loki skills install official/productivity/property-listings30```3132Load it with `skill_view(name="property-listings")` when presenting listings.33Installing does not retrofit the running conversation's skill index; start a new34conversation for automatic discovery, or explicitly load the installed skill now.3536## Quick Reference3738Emit a fenced code block whose language is `listing` and whose body is valid JSON.39Use one object, an array of objects, or `{ "listings": [...] }` for a comparison.4041| Field | Shape and meaning |42|---|---|43| `address` | Required nonempty street address or property headline. |44| `price` | Formatted string including currency and rental period, if applicable. |45| `beds`, `baths` | Positive numeric counts; omit unknown values. |46| `size` | Formatted area including units. |47| `note` | Why this property is worth a look. |48| `facts` | Array of short verified specs or amenities. |49| `catches` | Array of risks or questions to verify before a tour. |50| `images` | Direct HTTPS photo URLs in listing order; the first is the hero. |51| `links` | Array of `{ "label": "Source", "url": "https://..." }` detail-page links, not search-result URLs. |5253## Procedure54551. Gather the address, price, specs, photos and canonical detail URL. Distinguish56 verified facts from unknowns; do not invent prices, amenities, or photo URLs.572. Deduplicate portal mirrors of the same property into one card, retaining useful58 source links. Keep source dates and availability caveats in the surrounding prose.593. Emit the `listing` fence for every property presented, including follow-ups and60 re-rankings. Keep facts short and put unresolved concerns in `catches`.614. Check the JSON before sending. This fictional format example illustrates all fields;62 replace its values and example URLs with verified listing data:6364```listing65{66 "address": "12 Example Lane",67 "price": "$2,400/mo",68 "beds": 3,69 "baths": 2.5,70 "size": "1,600 sqft",71 "note": "Fits the requested space and budget.",72 "facts": ["12-month lease", "Covered parking"],73 "catches": ["Verify pet policy and total move-in fees"],74 "images": ["https://example.com/property/front.jpg", "https://example.com/property/kitchen.jpg"],75 "links": [{"label": "Listing details", "url": "https://example.com/property/12"}]76}77```7879## Pitfalls8081- Cards are authored from gathered data, not fetched from a listing URL or embedded portal page.82- A sparse card needs only an address. Omit unknown fields rather than filling them with guesses.83- Use direct remote image URLs, not local paths, data URLs, or search-result pages.84 Expired or blocked images disappear from the gallery; the text and links still matter.85- Keep a fence to at most 24 properties, 40 images per property, and 12 entries in86 facts, catches and links. Text fields are truncated to 400 characters by the renderer.87- Malformed JSON or a card without identity falls back to a plain code block.88 A valid card is not proof that the underlying listing is current or accurate.8990## Verification9192- Every presented property has an address and a verified source link; unknowns are explicit.93- Desktop displays the address, price, specs, facts, catches and links as a native card.94- Photos form a gallery; selecting a photo opens the lightbox. Three or more photos95 use a hero-and-supporting-frames mosaic; additional photos remain browsable there.96- If the card fails to render, validate the fence language and JSON, then preserve a97 readable Markdown fallback with the same facts and links.