Final audit of a large task before closure — finds which operations are available only via code / curl / SQL and decides per each: automate with a skill or AI agent (A) or create a UI task (B). Protects against invisible usability debt. Walks through each implemented block: reads task.md + reports + guides + code → forms a sub-table with operations → A/B classification → master table + phased roadmap. Does not implement findings — records them as roadmap items. Use when: final step of an ar...
Scanned 9/3/2026
Install to Claude Code
npx -y skills add bearded-illirian/trailmark --skill ui-ai-first --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Ui Ai First?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/bearded-illirian-ui-ai-first-trailmark)More formats (shields.io, HTML) on the badges page.
---
name: ui-ai-first
description: |
Final audit of a large task before closure — finds which operations
are available only via code / curl / SQL and decides per each:
automate with a skill or AI agent (A) or create a UI task (B).
Protects against invisible usability debt.
Walks through each implemented block: reads task.md + reports +
guides + code → forms a sub-table with operations → A/B
classification → master table + phased roadmap. Does not implement
findings — records them as roadmap items.
Use when: final step of an arch-first task before closure; review
of a closed large task; "/ui-ai-first", "usability audit",
"what's still only via code"
---
# UI/AI-First Protocol
Final protocol of the `*-first` family. Launched **after** implementing a large task — before formal closure. Protects against invisible usability debt: features implemented in code but unavailable to a non-developer (everything via curl / SQL / Claude Code).
## Input
A completed `arch-first` task near closure; its `task.md`, block reports, guides, and code changes.
## Output
`ui-ai-first-report.md` with operations classified A (automate via skill / AI agent) or B (build UI), and a phased roadmap of B items.
## Hands off to
`ship-first` (called from ship-first Step 0.6 when `run_ui_ai_first=true`).
---
## Introduction
### Why it's needed
Every large task leaves "code-only" operations. In reports this doesn't sound like a problem — "feature works", "endpoint in prod". But when an operator wants to use the capability — they hit curl with admin_password in JSON or SQL INSERT into several tables.
3 months later these capabilities effectively exist only on paper — no one but the task author uses them. This is **technical debt that looks like "everything's ready"**.
### A/B classification principle
For each "code-only" operation — one of two:
- **A — skill / AI agent** for rare or technical operations. Quick to build, cheap to run
- **B — UI task** for frequent operator operations where a skill is insufficient — need a form, button, dashboard
Not every feature needs UI. Not every operation needs a skill.
### What it does NOT do
Does not implement findings. Only classifies and forms a prioritized roadmap. Implementation — separate work streams with their own library-first / plan-first.
---
## Step 1 — Get task_path
If passed as argument — use. If not — ask user or propose the last closed task from routing DB.
Verify task is **actually closed**:
- task.md has blocks with ✅
- ≥1-2 `report-NN.md` in task log
If not — stop: "Task is not yet closed. Audit is premature."
---
## Step 2 — Gather list of implemented blocks
Read task.md → all blocks with ✅ or "Done" mark. Ignore planned or cancelled.
For each block record: number/name, `report-NN.md`, related guides, commits.
---
## Step 3 — Propose sub-table structure for approval
Rule: **1 task block = 1 sub-table**.
**Exception:** if a block has significant sub-blocks with many separate operations — extract them as **separate Sub-tables**. Don't merge — focus is lost.
Show user numbered list of S1 → Sn with expected volume. Mark hot zones with ⭐. Wait for approval.
---
## Step 4 — Pin structure in the master file
Create `{log_dir}/ui-ai-first-master.md` with skeleton:
```markdown
# UI/AI-First Audit — {task_slug}
**Start date:** YYYY-MM-DD
## Structure
[approved sub-table list]
## Sub-tables
See: ui-ai-first-b1.md, ui-ai-first-b2.md, ...
## Master table
[placeholder — Step 6]
## Roadmap
[placeholder — Step 7]
## Summary
[placeholder — Step 8]
```
This is the **index** and final aggregation.
---
## Step 5 — For each block: build sub-table (iteratively)
Cycle: S1 → Sn. Per S:
1. Read sources: `report-NN.md`, guides, key code files
2. Form sub-table per template:
```markdown
## Sub-table S{N} — Block {X} ({name})
**Sources:** {list}
**What the block brought:** {1-3 sentences}
### Operation groups
| # | Operation | Currently how | Frequency | Decision (A/B/–) | Skill/task |
|---|-----------|---------------|-----------|-------------------|------------|
| 1 | ... | ... | ... | A | /skill-name — description |
| 2 | ... | ... | ... | B | UI task — description |
### Result S{N}
- UI tasks: {N}
- Skills: {M}
- Main takeaway: {1-3 sentences}
```
3. Show user → approve → write to `ui-ai-first-b{N}.md`
4. Next block
### Frequency categories
| Level | When |
|---|---|
| High | Daily / several times per week |
| Medium | Weekly / monthly |
| Low | Quarterly, ad-hoc, debugging |
| Very low | One-off, GDPR / incident-only |
### Decisions
| Code | When |
|---|---|
| **A** | Rare/technical — skill/agent faster to build |
| **B** | Frequent operator — needs UI |
| **A + B** | Skill as stopgap, UI mid-term as stable solution |
| **–** | Neither needed — explain why |
---
## Step 6 — Master table
Merge all operations. Sort by priority:
1. **High ⭐** — frequent operator ops without A/B + critical blockers + HIGH bugs
2. **Medium** — frequent ops with A + medium-frequency ops
3. **Low** — rare, maintenance, optional
4. **Architectural TODO** — cross-cutting system improvements
Format:
```markdown
## Master table
### High priority ⭐
| # | Operation | Sub-table | Decision | Skill/task |
### Medium priority
[same shape]
### Low priority (backlog)
[same]
### Architectural TODO
| TODO | Referenced in |
```
Show user → approve → append to master.
---
## Step 7 — Phased roadmap
Group master table into 6 stages:
| Stage | What | When |
|---|---|---|
| **0 — Prerequisites** | Blockers — without them next stages don't work | Immediately after task closure |
| **1 — Burning pain points** | 3-5 high-priority skills + HIGH bugs | After Stage 0 |
| **2 — Basic automation** | Medium A skills for routine ops | After Stage 1 |
| **3 — UI tasks (mid-term)** | Main B tasks | After Stage 2 |
| **4 — GDPR + long-tail maintenance** | Compliance + rare ops | As client base grows |
| **5 — Backlog** | Low-priority A skills + long-term UI | When there's time |
| **6 — Architectural TODO** | System improvements (lifecycle, audit-log, signed URLs) | Separate streams |
For each Stage — short list of concrete items (skill names + descriptions / UI task names).
---
## Step 8 — Summary by category
```markdown
## Summary
| Category | Count |
|---|---|
| Skills Stage 1 (burning) | ... |
| Skills Stage 2 (basic automation) | ... |
| UI tasks Stage 3 | ... |
| GDPR + maintenance Stage 4 | ... |
| Backlog Stage 5 | ... |
| Architectural TODO Stage 6 | ... |
| **Total skills** | ~N |
| **Total UI tasks** | M |
**Main takeaways:**
- {where the main pain is}
- {what to do first}
- {which risks if not doing}
---
**Audit finished YYYY-MM-DD.**
```
---
## Step 9 — Optional: create backlog items
Ask: "Create separate files in `tasks/backlog/` for each roadmap item? (1=yes / 2=no)"
**If 2 (no):** roadmap stays only in master file. Done.
**If 1 (yes):** for each item create `tasks/backlog/{type}--{slug}.md`:
```markdown
---
type: backlog
created: YYYY-MM-DD
source: ui-ai-first audit of task {task_slug}
priority: high|medium|low
category: skill|ui|architecture
stage: 0-6
---
# {Item name}
**What:** {description}
**Why:** {rationale from audit}
**Source:** see master file — Stage {N}
**Next step:** library-first → plan-first → code (separate pass)
```
---
## Anti-patterns
### ❌ Audit only by guides
Guides cover user-facing aspects. Technical operations (SQL migrations, ad-hoc scripts) are often not mentioned. Without reading reports and code — operations will be missed.
**Rule:** for each block mandatory read `report-NN.md` + key code files.
### ❌ Classify everything as B (UI)
UI is slow and expensive. Most rare/technical operations should be A — much faster and cheaper.
**Rule:** B only when operation is **frequent operator** — otherwise A.
### ❌ Classify everything as A (skill)
Frequent operator operations must be in UI — otherwise the operator is stuck on CLI and Claude Code.
**Rule:** if the operation runs daily or several times per week — it's B.
### ❌ Not extracting sub-blocks as separate S
Hot zones get lost in parent block's sub-table. Gives false signal "parent is routine" while sub-block is the hottest part.
**Rule:** if a block has a sub-block with many separate operations — extract as separate S.
### ❌ Implement findings immediately
`ui-ai-first` is audit, not implementation. If mid-audit you want to write a skill — stop. Breaks focus, triples audit length.
**Rule:** all findings → roadmap items. Implementation — separate streams.
### ❌ Create backlog items automatically
Step 9 is optional. Not every user wants to split a roadmap into 25 files. Ask, don't do by default.
---
## File structure
```
{log_dir}/
├── ui-ai-first-master.md # structure + master + roadmap + summary
├── ui-ai-first-b1.md # sub-table S1
├── ui-ai-first-b2.md
└── ui-ai-first-b{N}.md
```
One protocol = one file per iteration.
---
## Launch triggers
- Direct: `/ui-ai-first <task_path>` or `/ui-ai-first` without arguments
- From `arch-first` — automatically as final block of a large task (5+ blocks)
- From `ship-first` — automatically as Step 0.5 before formal closure
---
## When NOT to launch
- Task is not yet closed (no blocks with ✅)
- Small task (1-2 blocks) — audit is more expensive than findings
- Purely refactoring task without new endpoints / tables / operations — nothing to audit
---
## Related skills
- **arch-first** — decomposes and drives large multi-block tasks; may invoke ui-ai-first as final block
- **ship-first** — invokes ui-ai-first at Step 0.5 before formal task closure
- **library-first** — parallel protocol, but for planning code reuse before implementation
- **flow-first** — parallel protocol, for landscape alignment before library-first
---
## Step 99 — Log invocation
```bash
sqlite3 {routing_db} \
"INSERT INTO skill_invocations (task_id, block_num, skill_name, invoked_at)
VALUES ('{slug}', '{N}', 'ui-ai-first', datetime('now'))" 2>/dev/null || true
```
If `{slug}` / `{N}` are unknown the row is written with empty values; `|| true` keeps a logging failure from aborting the skill.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!