OAS Program
When to use
Use this skill when the user is describing what they want rather than what exists: target areas, must-be-near rules, circulation preferences, count of rooms, hard limits. Program is the brief; Layout is the answer. If a polygon or wall coordinate is being emitted, you're in oas-layout territory, not here.
Key fields (the document is a flat JSON object, not typed classes)
oas_program, plan_id, title, description — metadata; plan_id links program → layout
design_goal — natural-language intent sentence (helps LLM context)
global_constraints — target_area_m2, max_area_m2, orientation_preference, climate, accessibility_level, etc.
rooms[] — each entry has id, usage, desired_area_m2, must_have, should_have, adjacency, avoid
adjacency — uses prefixed keys: must_touch, should_touch, avoid_touch, must_connect_via
circulation — primary_entry + free-form rules[]
rationale — optional reasoning string per room
Critical rules
- Intent only — no resolved geometry. Program documents must not contain
boundary_polygon, walls, or coordinates. Resolved geometry lives in OAS-Layout.
desired_area_m2 accepts { "min": X, "max": Y } or an exact number. Both are valid per the spec — don't reject a scalar.
- Constraint strength is encoded by the field prefix, not a flag.
must_have/must_touch are hard; should_have/should_touch are soft; avoid_touch is a hard negative. There's no separate hard: true field.
- Refer to rooms by program
id, not Layout ids. Layout ids don't exist yet — adjacency targets are program-level ids like "corridor" or "living_kitchen".
- Circulation
rules[] are natural-language strings. Solvers parse them heuristically; keep them concise and declarative.
Full schema
See docs/program.md for the complete reference, including constraint composition and adjacency weighting.
Related skills
oas-layout — the resolved geometry derived from a program
oas-core — for the vocabulary of usage values shared with Layout
1---2name: oas-program3description: Use when capturing OAS design intent — room requirements, area targets, adjacency rules, circulation rules, or global constraints — before any geometry has been resolved.4---56# OAS Program78## When to use910Use this skill when the user is describing *what they want* rather than *what exists*: target areas, must-be-near rules, circulation preferences, count of rooms, hard limits. Program is the brief; Layout is the answer. If a polygon or wall coordinate is being emitted, you're in `oas-layout` territory, not here.1112## Key fields (the document is a flat JSON object, not typed classes)1314- `oas_program`, `plan_id`, `title`, `description` — metadata; `plan_id` links program → layout15- `design_goal` — natural-language intent sentence (helps LLM context)16- `global_constraints` — `target_area_m2`, `max_area_m2`, `orientation_preference`, `climate`, `accessibility_level`, etc.17- `rooms[]` — each entry has `id`, `usage`, `desired_area_m2`, `must_have`, `should_have`, `adjacency`, `avoid`18- `adjacency` — uses prefixed keys: `must_touch`, `should_touch`, `avoid_touch`, `must_connect_via`19- `circulation` — `primary_entry` + free-form `rules[]`20- `rationale` — optional reasoning string per room2122## Critical rules23241. **Intent only — no resolved geometry.** Program documents must not contain `boundary_polygon`, walls, or coordinates. Resolved geometry lives in OAS-Layout.252. **`desired_area_m2` accepts `{ "min": X, "max": Y }` or an exact number.** Both are valid per the spec — don't reject a scalar.263. **Constraint strength is encoded by the field prefix, not a flag.** `must_have`/`must_touch` are hard; `should_have`/`should_touch` are soft; `avoid_touch` is a hard negative. There's no separate `hard: true` field.274. **Refer to rooms by program `id`, not Layout ids.** Layout ids don't exist yet — adjacency targets are program-level ids like `"corridor"` or `"living_kitchen"`.285. **Circulation `rules[]` are natural-language strings.** Solvers parse them heuristically; keep them concise and declarative.2930## Full schema3132See [docs/program.md](../../../docs/program.md) for the complete reference, including constraint composition and adjacency weighting.3334## Related skills3536- `oas-layout` — the resolved geometry derived from a program37- `oas-core` — for the vocabulary of `usage` values shared with Layout