Skip to content
Agentmart
Submit a tool

experience-visual

CDO-posture skill that authors a kensaiapp instance's visual experience layer — the fence and the direction every product under that instance inherits…

Skill by Eyal Golan

IndexedMIT
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/eyalgo-experience-visual

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

CDO-posture skill that authors a kensaiapp instance's visual experience layer — the fence and the direction every product under that instance inherits, written into `system/experience/visual_restrictions.md` and `visual_direction.md`, each with an open-issues companion whose absence is the done signal. Instance-level, never per-product — where `product-design` writes one product's design language, this writes what every product under the instance may and may not look like. Requires CDO posture (halts if invoked outside a `cdo:` session or the `cdo` subagent). Non-interactive by design — it authors both documents best-effort from the instance's own identity, doctrine and evidence, and instead of interviewing live it surfaces its load-bearing calls into companion files the owner answers on their own time; a re-run folds those answers in, retires the answered companion to a permanent trail, and deletes the companion when nothing is left unresolved. It is the first half of an ordered pair — it creates `system/experience/visual_voice_contract.md`, records every fence entry it writes there and marks the ones reaching the verbal medium, and on a later pass answers the entries `experience-voice` records back. Use when authoring, continuing, or revising an instance's visual experience layer, at instance setup or any time after. Do not use for one product's design language (`product-design`), the verbal half (`experience-voice`), the instance's identity or Michi (`kensaiapp-michi`), or any product document.

Use cases: documents, design, agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/experience-visual

What's inside

Skill name
experience-visual
Description
CDO-posture skill that authors a kensaiapp instance's visual experience layer — the fence and the direction every product under that instance inherits, written into `system/experience/visual_restrictions.md` and `visual_direction.md`, each with an open-issues companion whose absence is the done signal. Instance-level, never per-product — where `product-design` writes one product's design language, this writes what every product under the instance may and may not look like. Requires CDO posture (halts if invoked outside a `cdo:` session or the `cdo` subagent). Non-interactive by design — it authors both documents best-effort from the instance's own identity, doctrine and evidence, and instead of interviewing live it surfaces its load-bearing calls into companion files the owner answers on their own time; a re-run folds those answers in, retires the answered companion to a permanent trail, and deletes the companion when nothing is left unresolved. It is the first half of an ordered pair — it creates `system/experience/visual_voice_contract.md`, records every fence entry it writes there and marks the ones reaching the verbal medium, and on a later pass answers the entries `experience-voice` records back. Use when authoring, continuing, or revising an instance's visual experience layer, at instance setup or any time after. Do not use for one product's design language (`product-design`), the verbal half (`experience-voice`), the instance's identity or Michi (`kensaiapp-michi`), or any product document.
License
MIT
Metadata
risk: safe · tags: experience-layer, instance-setup, cdo, visual, ordered-pair · author: Eyal Golan · created: 2026-08-12 · version: 1.5.6 · category: instance-setup
Instructions
315 lines in SKILL.md · view on GitHub

Agent Skills spec issues

  • description: longer than 1024 characters

Files (6)

  • SKILL.md
  • claude.md · intelligence/
  • codex.md · intelligence/
  • ollama.md · intelligence/
  • launcher.md
  • rich.md · prompts/

SKILL.md (first lines)

# experience-visual

## Purpose

Author the **instance's** visual experience layer — the two documents that say what this instance's
products may and may not look like:

- `system/experience/visual_restrictions.md` — the fence.
- `system/experience/visual_direction.md` — what products inherit, and what a design run falls back
  on when nothing covers its case.

This runs at the **instance** altitude. Nothing it writes says anything about any one product; the
first document that could only belong to a product is that product's own. Where that line sits, and
the sequence this step belongs to, are `<CORE>/doctrine/setup/setting_up_an_instance.md`, which owns
them and is not restated here.

This file is the **orchestrator**: posture, the file loop, path resolution, the contract, the
machine-gate step, staging, and the commit. **How to author** — the altitude test, what evidence an entry needs, the
markers, when a value is left absent, the machine gate's bar, and what goes to the owner instead of
being settled — is the authoring prompt **`prompts/rich.md`**,
applied at Step 2; a rule referenced below by name lives there. The documents' **section shape** is
the templates **`<CORE>/templates/experience-templates/visual_restrictions_template.md`** and
**`visual_direction_template.md`**; the companions' shape is **`visual_open_issues_template.md`**
and the contract's is **`visual_voice_contract_template.md`**, both beside them. None of them is
restated here.

**Non-interactive.** The run never blocks on the owner. It authors both documents best-effort,
writes its load-bearing calls into companion files the owner signs off on their own time, and a
re-run folds those answers in. That is what lets it run headless (as the `cdo` subagent) as well as
in an interactive `cdo:` session.

---

## Posture

**CDO role required.** If invoked outside CDO posture (neither a `cdo:` session nor the `cdo`
subagent), stop and say: *"experience-visual requires CDO posture. Switch? (Open a session with the
`cdo:` prefix, or run the `cdo` subagent.)"* Do not shed the role.

The CDO loader stack owns where the CDO ends and the delivery-tier **Architect** begins; that
boundary comes from there, never from a restatement here. One thing this skill does add, because no
loader states it: the CDO's usual subject is one product, and here it is the instance every product
sits under. Same seat, one altitude up.

---

## The files and the loop

Everything lands under `system/experience/` in the instance repo. A caller names nothing — there is
one instance, and this skill is running in it.

| File | What it is | Lifecycle |
|---|---|---|
| `system/experience/visual_restrictions.md` | The fence — best-effort complete on every run. | Permanent; one document, revised and versioned in place. |
| `system/experience/visual_direction.md` | What products inherit, plus the direction section a design run falls back on. | Permanent; one document, revised and versioned in place. |
| `system/experience/visual_restrictions_open_issues.md` | The fence's companion — the calls awaiting the owner and the few things the run could not settle, in the buckets `visual_open_issues_template.md` defines. | Transient. **Its absence is the done signal for that document.** |
| `system/experience/visual_direction_open_issues.md` | The direction document's companion, same shape. | Transient. **Its absence is the done signal for that document.** |
| `system/experience/trail/visual/cycle-<N>.md` | Each answered companion, retired whole. | Permanent. |
| `system/experience/visual_voice_contract.md` | The handoff. **This run creates it** if it is not there, records a row for every fence entry it writes, and marks the ones reaching the verbal medium; `experience-voice` reads those marks and records its own rows back. | Permanent, and never removed — a handoff's absence is a defect, not a done signal. See the section below. |

**The two documents are tracked separately.** A run can finish the fence and still be open on the
direction document, so each companion's absence answers for its own document only. What answers for
the whole layer is `<CORE>/tools/experience_gate.py`, which is not this skill's to run or to satisfy.

**Cycle numbering:** `N` is one higher than the **highest** `cycle-<N>.md` already in
`trail/visual/` — list the directory and take the max, so a removed or renamed cycle cannot make you
collide with an existing one. The first is `cycle-1.md`; create `trail/visual/` if it isn't there.
Never overwrite an existing cycle. Where both companions are answered in one round, each is copied
to its own cycle file.

**The loop, repeated until clean:**

1. The run authors or updates both documents and writes each companion with what it could not
   ground.
2. The **owner answers inline** — filling the companion's answer slots, whose names and shape are
   `visual_open_issues_template.md`'s — and re-runs the skill.
3. The run **copies each answered companion whole to the next trail cycle**, folds the answers into
   its document, and rewrites the companion with only what is still unresolved. An answer that
   leaves something unsettled still drops its item, and the residue re-enters as a fresh unanswered
   item.
4. When the answers resolve everything in a companion, that companion is **removed** rather than
   rewritten — through the builder, Step 4's `--rm`, never a hand-`rm`. **No open-issues file = that
   document is done.** The close has a precondition the ordinary cycle does not: the owner's answers
   must already be committed, because git will not remove a file with uncommitted edits in it and
   their words are not yours to commit. Re-entry is inline answers, so the first closing touch
   normally finds them uncommitted — and then it **changes nothing at all**: no fold, no trail copy,
   no rewrite, no commit. It reports the state, asks for that commit, and the re-run after it is the
   close. That stop is a report with an ask, not a live interview.

Step 3 is why the trail exists. Folding rewrites the companion and the close removes it, so without
the trail the owner's answers are destroyed twice and their reasoning survives only in git history.
The trail costs one `cp` on the same commit and makes every owner answer permanently citable. It is
this skill's job; the owner never manages it.

---

## The contract this run records into — and creates, if it is not there

`system/experience/visual_voice_contract.md` is the handoff to `experience-voice`, and **this skill
creates it.** Nothing upstream stamps it: on the first run of the pair the file does not exist, and a
run that leaves none hands the second half no marks at all — the state rule 1 exists to prevent. So
if it is absent, create it from
**`<CORE>/templates/experience-templates/visual_voice_contract_template.md`**, header and all,
before recording anything. If it is present, leave its header alone and add to it.

**Every entry this run writes into `visual_restrictions.md` gets a row** — not only the ones that
reach the verbal medium. Why it is exhaustive, and what a **handoff** is as opposed to a companion,
are the prompt's and `<CORE>/doctrine/setup/setting_up_an_instance.md` § The three rules'; read them
there.

**`visual_direction.md` states no entries in that sense, and this run records none for it.** Its
values carry no slug and no reach, so there is nothing to key a row on and nothing to mark — and
where a direction value looks as though it would bind the verbal medium, what to do with it is rule
2's, at the file named above. Read it there; this skill neither restates it nor improvises around
it.

**Mark every entry that reaches the verbal medium.** The mark *is* the row's **Mediums** cell naming
that medium, taken from the entry's own **Reaches** field rather than judged a second time here — and
those marks are the whole of what `experience-voice` starts from. An entry reaching both mediums and

From eyalgo/kensaiapp, MIT.

More from eyalgo/kensaiapp

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 19, 2026 (10 days ago)
Last release
Oct 22, 2026 (7 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Version
1.5.6
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from Eyal Golan

Cite this page

experience-visual skill. Agent Mart. https://agentmart.dev/skills/eyalgo-experience-visual (last updated 2026-10-24)