Furnish and dress a TEE-managed scene with free, license-safe assets that fit the site's real dimensions, style, and sunlight. Use when asked to furnish rooms, dress a scene, find/place assets, or match materials and lighting to site photos and briefs.
Resources
2Install
npx skillscat add interaeronav/tokenefficiencyengine/context-aware-assets Install via the SkillsCat registry.
Context-aware assets
You are furnishing a scene whose facts TEE already knows: plan dimensions,
GPS datum, site-photo palette, and the client's spoken brief. Never guess
what these tools can tell you, and never pull raw catalogs into context —
state WHAT you need and let the server rank, gate, and validate.
Hard rules (they are enforced server-side; work with them, not around):
- Licenses are gated fail-closed. If an import answers
license_blocked,
pick another hit — there is no override and you must not ask for one. - Uniform scaling only; doors/windows/appliances/sanitary/seating/humans
never stretch. Arejectfrom the scale policy means the asset is
wrong, not the policy. - Code-severity placement rules (door swings, egress widths, toilet
clearances) never relax. Guideline rules relax only via an explicitrelax: ["rule_id"]on the plan item, which is recorded. - Text before pixels: verify geometrically (
as_verify); render at most
ONE budgeted image per task, only when the report saysrender_warranted.
The 7-step checklist
Follow in order; each step names its exact tool.
- Brief —
as_style_brief()for the palette (named colors), style
terms, and avoid-list.tee_recall()for project conventions. Note the
GPS datum and region (US/EU rules) from the extract facts
(ex_search("gps")). - Search — one
as_search(query=…, asset_class=…, max_tris=…, match_style=true)per furniture class you need. State target
dimensions from the plan (e.g. the plan's 0.9 m door opening) — do not
browse. ≤5 rows come back; pick by dims first, tags second. If two
candidates tie,as_sheet/tee_mediais the tie-breaker, not the
default. - Fit — decide target_dims per asset from plan facts (openings,
wall lengths). Reference:reference/dimensions.mdfor the class
envelopes you may aim inside. - Plan — write ONE relational placement plan for the whole room:
[{name, class, dims, anchor: "<wall-id>", offset}, …](~10
tokens/object). Anchor wall-backed classes (sofa, bed, wardrobe) to
walls; leave circulation to the validator. - Validate —
as_place(plan=…, room=…, region=…)WITHOUT apply
first. Fix every violation by editing the plan (thefixfield says
how); relax a guideline rule only with a reason you state in your
reply. - Apply — imports first (
as_importwithtarget_dimsandlocationfrom the solved plan), thenas_place(apply=true)with the
entity ids. Then materials:as_material(id, query)for measured PBR
(lane 0) oras_photo_materialwhen the surface exists in site
photos. Sun last:as_sun(lat, lon, when, apply=true). - Verify —
as_verify(room=…, match_style=true). Fix violations and
re-verify. Only if clean AND a visual question remains, ONEtee_capture(max_kb=32). Finish withas_credits()so attribution
ships with the project.
Judgment room
Selection within a shortlist, grouping (a reading corner vs scattered
chairs), and style calls are yours — the tables bound dimensions and
clearances, not taste. When the brief's avoid-list conflicts with a
search hit (e.g. "no marble"), drop the hit even if it ranks first.
References (one level deep)
reference/dimensions.md— class envelopes + fit-to-plan targetsreference/style-matching.md— palette/ΔE00 ranking, avoid-listsreference/lighting.md— sun facts, HDRI bands, world rotationreference/sources-licenses.md— backend license/ToS matrixevals/scenarios.md— the three acceptance scenarios for this skill