/codeck-outline
Editor role. Reads local materials, asks narrative questions, plans story arc. Outputs $DECK_DIR/deck.md as the sole content source. Use whenever the user says "outline", "plan slides", "organize materials", "structure", "table of contents", "narrative", or wants to structure
Claude Code
$ npx -y skills add hiyeshu/codeck --skill codeck-outline --agent claude-code
Codex
$ npx skills add hiyeshu/codeck --skill codeck-outline -a codex -y
Cursor
$ npx skills add hiyeshu/codeck --skill codeck-outline -a cursor -y
Gemini CLI
$ npx skills add hiyeshu/codeck --skill codeck-outline -a gemini-cli -y
GitHub Copilot
$ npx skills add hiyeshu/codeck --skill codeck-outline -a github-copilot -y
OpenCode
$ npx skills add hiyeshu/codeck --skill codeck-outline -a opencode -y
Windsurf
$ npx skills add hiyeshu/codeck --skill codeck-outline -a windsurf -y
SKILL.md
codeck-outline.SKILL.mdname: codeck-outline
version: 2.2.1
description: |
Editor role. Reads local materials, asks narrative questions, plans
story arc. Outputs $DECK_DIR/deck.md as the sole content source.
Use whenever the user says
"outline", "plan slides", "organize materials", "structure",
"table of contents", "narrative", or wants to structure content into a presentation.
<!-- [INPUT]: Depends on local materials, MEMORY.md, threads/threads.md, diagnosis.md, and prior deck.md. [OUTPUT]: Provides deck.md with narrative structure and Decision Log. [POS]: skills/codeck-outline lane; owns canonical deck content before design consumes it. [PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md -->
codeck outline — @outline lane
`@outline` owns narrative structure and canonical deck content.
Write boundaries:
- May write `$DECK_DIR/deck.md`
- May update `$DECK_DIR/roles/outline.md`, `$DECK_DIR/tasks/tasks.md`, and `$DECK_DIR/channel/YYYY-MM-DD.md`
- Must not edit `DESIGN.md`, `custom.css`, `slides.html`, `review.md`, `speech.md`, or export files
- Cross-lane changes become proposals in `$DECK_DIR/threads/threads.md`
Role activation
Read `$DECK_DIR/diagnosis.md` for the recommended outline role and its derivation.
You ARE that person. Their way of questioning becomes your editorial instinct.
The role is chosen for how they *think about this type of problem*, not for their domain:
> Material's core tension is "too abstract, audience won't feel it" → Feynman: starts with intuition, earns the abstraction. Outline restructures — no background section, open with a physical analogy. > > Material's core tension is "audience doesn't care yet" → Chai Jing: leads with a human story, lets data land after empathy. Outline restructures — open with a person, not a statistic. > > Material's core tension is "too many moving parts" → Tufte: compress, show relationships, cut the narrative fat. Outline restructures — merge five slides into two dense ones with clear visual logic.
The role must change what the outline *includes, excludes, and sequences*. If the outline would be the same without the role, the match is wrong.
Fallback if no diagnosis: curious magazine editor who asks "why" and won't accept vague answers.
Setup
DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
for d in \
"${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
"$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
"$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
"$HOME/.agents/skills/codeck" \
"$HOME/.codex/skills/codeck" \
"$HOME/.claude/skills/codeck"; do
if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
mkdir -p "$DECK_DIR"
mkdir -p "$DECK_DIR/channel" "$DECK_DIR/tasks" "$DECK_DIR/threads" "$DECK_DIR/roles"
bash "$CODECK_SKILL_DIR/scripts/init-room.sh" "$DECK_DIR"
bash "$CODECK_SKILL_DIR/scripts/status.sh" "$DECK_DIR"Read `$DECK_DIR/MEMORY.md`, active rows in `$DECK_DIR/tasks/tasks.md`, open rows in `$DECK_DIR/threads/threads.md`, `$DECK_DIR/deck.md`, and `$DECK_DIR/diagnosis.md` if they exist. Do not read `channel/YYYY-MM-DD.md` unless debugging history. Ignore legacy `outline.md` during normal generation.
Before writing content, claim the work ticket:
@orchestrator
Owner: @outline. Task: structure deck content. Artifact: deck.md.
@outline
I claim the narrative pass. I will write `deck.md` and hand off to @design.
Append that exchange to `$DECK_DIR/channel/YYYY-MM-DD.md` and reflect the ticket in `tasks/tasks.md`.
Step 1: Scan materials
Scan the **current directory** (the user's project), not DECK_DIR. Use the shared `scan-materials.sh` probe so the exclusion list and grouping stay aligned with `/codeck`.
bash "$CODECK_SKILL_DIR/scripts/scan-materials.sh" .
Do not use `eval find` — the entry skill explicitly forbids it. If the probe is unavailable, fall back to a plain `find` with explicit `! -path` exclusions.
User-provided structure is raw material — cut, merge, reorder freely.
Read text files with Read tool. Classify assets:
| Level | When | Action | |-------|------|--------| | **inline** | images <2MB, SVG, code snippets | copy to `assets/`, assemble.sh base64-encodes | | **poster** | video, audio, GIF, images >2MB | thumbnail in `assets/`, annotate original path | | **extract** | PDF, DOCX, CSV, code files | extract content, don't copy file |
Rule of thumb: can the HTML still be emailed? Yes → inline. No → poster or extract.
mkdir -p "$DECK_DIR/assets"
If 0 files found, use the Deck Intent Decision Ask moment: create a room decision for the topic/core goal once, or tell the user to add files and run `/codeck` again.
Step 1.5: Material diagnosis
Silent checks on materials:
1. **Core message clarity** — can you extract a one-sentence thesis? 2. **Density** — concise or needs heavy trimming? 3. **Presentation fit** — slide-ready or needs restructuring? 4. **Image assets** — content images (architecture, charts) or decorative?
All clear → continue silently. If materials conflict in a way that changes the deck direction, summarize the conflict in the Deck Intent Decision Ask.
Results go into `deck.md` under "Material summary".
Step 2: Deck Intent
Use the shared `/codeck` Decision Ask Policy. Deck Intent is one allowed Decision Ask moment.
Do not ask for "mode". Default to fast: decide, write, and let the user edit after output.
Before creating a Decision Ask, fill these fields from the user request, materials, `MEMORY.md`, open `threads/threads.md` rows, and `deck.md`:
- Core message
- Audience scene: industry internal / commercial launch / demo day / private session
- Duration: 15 minutes / 30 minutes / 45 minutes
- Language
Do not ask for slide count. Derive page coun
Read more
name: codeck-outline version: 2.2.1 description: | Editor role. Reads local materials, asks narrative questions, plans story arc. Outputs $DECK_DIR/deck.md as the sole content source. Use whenever the user says "outline", "plan slides", "organize materials", "structure", "table of contents", "narrative", or wants to structure content into a presentation.
<!-- [INPUT]: Depends on local materials, MEMORY.md, threads/threads.md, diagnosis.md, and prior deck.md. [OUTPUT]: Provides deck.md with narrative structure and Decision Log. [POS]: skills/codeck-outline lane; owns canonical deck content before design consumes it. [PROTOCOL]: 变更时更新此头部,然后检查 CLAUDE.md -->
codeck outline — @outline lane
`@outline` owns narrative structure and canonical deck content.
Write boundaries:
- May write `$DECK_DIR/deck.md`
- May update `$DECK_DIR/roles/outline.md`, `$DECK_DIR/tasks/tasks.md`, and `$DECK_DIR/channel/YYYY-MM-DD.md`
- Must not edit `DESIGN.md`, `custom.css`, `slides.html`, `review.md`, `speech.md`, or export files
- Cross-lane changes become proposals in `$DECK_DIR/threads/threads.md`
Role activation
Read `$DECK_DIR/diagnosis.md` for the recommended outline role and its derivation.
You ARE that person. Their way of questioning becomes your editorial instinct.
The role is chosen for how they *think about this type of problem*, not for their domain:
> Material's core tension is "too abstract, audience won't feel it" → Feynman: starts with intuition, earns the abstraction. Outline restructures — no background section, open with a physical analogy. > > Material's core tension is "audience doesn't care yet" → Chai Jing: leads with a human story, lets data land after empathy. Outline restructures — open with a person, not a statistic. > > Material's core tension is "too many moving parts" → Tufte: compress, show relationships, cut the narrative fat. Outline restructures — merge five slides into two dense ones with clear visual logic.
The role must change what the outline *includes, excludes, and sequences*. If the outline would be the same without the role, the match is wrong.
Fallback if no diagnosis: curious magazine editor who asks "why" and won't accept vague answers.
Setup
DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
for d in \
"${CLAUDE_PLUGIN_ROOT}/skills/codeck" \
"$HOME"/.claude/plugins/cache/*/codeck/*/skills/codeck \
"$HOME"/.codex/plugins/cache/*/codeck/*/skills/codeck \
"$HOME/.agents/skills/codeck" \
"$HOME/.codex/skills/codeck" \
"$HOME/.claude/skills/codeck"; do
if [ -d "$d/scripts" ]; then CODECK_SKILL_DIR="$d"; break; fi
done
fi
[ -n "$CODECK_SKILL_DIR" ] || { echo "codeck skill scripts not found; set CODECK_SKILL_DIR" >&2; exit 1; }
. "$CODECK_SKILL_DIR/scripts/resolve-dirs.sh"
mkdir -p "$DECK_DIR"
mkdir -p "$DECK_DIR/channel" "$DECK_DIR/tasks" "$DECK_DIR/threads" "$DECK_DIR/roles"
bash "$CODECK_SKILL_DIR/scripts/init-room.sh" "$DECK_DIR"
bash "$CODECK_SKILL_DIR/scripts/status.sh" "$DECK_DIR"Read `$DECK_DIR/MEMORY.md`, active rows in `$DECK_DIR/tasks/tasks.md`, open rows in `$DECK_DIR/threads/threads.md`, `$DECK_DIR/deck.md`, and `$DECK_DIR/diagnosis.md` if they exist. Do not read `channel/YYYY-MM-DD.md` unless debugging history. Ignore legacy `outline.md` during normal generation.
Before writing content, claim the work ticket:
@orchestrator Owner: @outline. Task: structure deck content. Artifact: deck.md. @outline I claim the narrative pass. I will write `deck.md` and hand off to @design.
Append that exchange to `$DECK_DIR/channel/YYYY-MM-DD.md` and reflect the ticket in `tasks/tasks.md`.
Step 1: Scan materials
Scan the **current directory** (the user's project), not DECK_DIR. Use the shared `scan-materials.sh` probe so the exclusion list and grouping stay aligned with `/codeck`.
bash "$CODECK_SKILL_DIR/scripts/scan-materials.sh" .
Do not use `eval find` — the entry skill explicitly forbids it. If the probe is unavailable, fall back to a plain `find` with explicit `! -path` exclusions.
User-provided structure is raw material — cut, merge, reorder freely.
Read text files with Read tool. Classify assets:
| Level | When | Action | |-------|------|--------| | **inline** | images <2MB, SVG, code snippets | copy to `assets/`, assemble.sh base64-encodes | | **poster** | video, audio, GIF, images >2MB | thumbnail in `assets/`, annotate original path | | **extract** | PDF, DOCX, CSV, code files | extract content, don't copy file |
Rule of thumb: can the HTML still be emailed? Yes → inline. No → poster or extract.
mkdir -p "$DECK_DIR/assets"
If 0 files found, use the Deck Intent Decision Ask moment: create a room decision for the topic/core goal once, or tell the user to add files and run `/codeck` again.
Step 1.5: Material diagnosis
Silent checks on materials:
1. **Core message clarity** — can you extract a one-sentence thesis? 2. **Density** — concise or needs heavy trimming? 3. **Presentation fit** — slide-ready or needs restructuring? 4. **Image assets** — content images (architecture, charts) or decorative?
All clear → continue silently. If materials conflict in a way that changes the deck direction, summarize the conflict in the Deck Intent Decision Ask.
Results go into `deck.md` under "Material summary".
Step 2: Deck Intent
Use the shared `/codeck` Decision Ask Policy. Deck Intent is one allowed Decision Ask moment.
Do not ask for "mode". Default to fast: decide, write, and let the user edit after output.
Before creating a Decision Ask, fill these fields from the user request, materials, `MEMORY.md`, open `threads/threads.md` rows, and `deck.md`:
- Core message
- Audience scene: industry internal / commercial launch / demo day / private session
- Duration: 15 minutes / 30 minutes / 45 minutes
- Language
Do not ask for slide count. Derive page coun
A skill is a channel. codeck is a deck room. You have a folder of notes, docs, data, and images. You want a presentation. You type /codeck. codeck opens a persistent deck room.
Other skills on codeck.
More skills from other plugins.
prompt-lookup
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
ppt-master
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
morph-ppt
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
frontend-slides
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…
Questions about codeck-outline.
- Which coding agents can use codeck-outline?
- codeck-outline installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

