Audience control
Generated Markdown for references/concept_audience_control.md.
Open book page Back to the skill graph
# Audience control
_Every unit opts into projections via `audience`: `:book` (default), `:ai`, or `:both` — the skill is curated up, never filtered down._
Every content unit carries an `audience` field saying which projections render it:
`:book` (human docs only — the default), `:ai` (skill/agent only), or `:both`. The
default is deliberate: content stays OUT of the AI skill until opted in, so the skill is
\*curated up\* rather than filtered down — an agent gets a lean, intentional reference
instead of everything.
In practice: reference material an agent should cite gets `:both`; agent-only working
notes (task heuristics, guardrail detail) get `:ai`; background prose for human readers
keeps the `:book` default. The book renders `:book` + `:both`; the skill renders `:ai` +
`:both`. Indexes carry an audience too — an `:ai` index shapes SKILL.md's Reference
section without touching the book nav.
Audience selects whole units. To vary \*content inside one body\* per view, use
[visibility scoping](../references/concept_visibility_scoping.md) instead.
## Examples
### Opting units into the skill
The default keeps content out of the AI skill; tag what the agent needs.
```wcl
concept fast_forward { audience = :both ... } // book + skill
fact port_table { audience = :ai ... } // skill only
concept history { ... } // :book default — book only
```
**Expected:** The skill's references/ contains fast_forward and port_table but not history; the book shows fast_forward and history.
## Related
- [The view family](../references/concept_views.md)
- [Anatomy of the AI skill](../references/concept_skill_anatomy.md)
- [Visibility scoping (@only / @except)](../references/concept_visibility_scoping.md)
[← Back to SKILL.md](../SKILL.md)