Install
$ agentstack add skill-hiyeshu-codeck-codeck ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
codeck — Deck Room Entry
Open the deck room, scan materials, diagnose project state, route work to role lanes, and write the role channel as work moves.
Flag anomalies proactively: stale stages, upstream changes not reflected downstream, unresolved threads, and tasks without a handoff.
Deck room model
codeck follows a slock-style collaboration model in one skill runtime.
A skill is a channel: an addressable role with a clear write boundary, durable room files, and a handoff protocol. /codeck is the entry channel. The sub-skills are internal channels that own one part of the room.
Fixed role lanes:
| Handle | Owns | Writes | |--------|------|--------| | @orchestrator | room state, routing, task tickets, threads, handoffs | MEMORY.md, tasks/tasks.md, threads/threads.md, channel/YYYY-MM-DD.md, roles/*.md | | @outline | narrative, deck content, slide structure | deck.md | | @design | design skeleton, visual system, HTML source | DESIGN.md, custom.css, slides.html | | @review | audience resistance, QA, scoped fixes | review.md, scoped fixes to slides.html / custom.css | | @speech | talk track, presenter notes | speech.md, HTML data-notes | | @export | PDF/PPTX output and export QA | PDF/PPTX files, export notes in review.md or MEMORY.md |
Dynamic role persona:
- Read
diagnosis.mdfor the recommended person behind@outline,@design, and@review. - The fixed handle owns the work. The dynamic person shapes the judgment.
- Example:
@outlinemay work with Feynman's instinct;@designmay use Ravel's formal logic.
Default user-facing output is compact: judgment, artifact, next action. The expanded role channel is written to channel/YYYY-MM-DD.md; show it only when the user asks to see the channel.
Compact response shape:
codeck: {state}
I read this as {task}. I {did/will do} {action}.
Artifact: `{path}`
Next: `{next command or next lane}`
When the user asks to see the channel, show the handoff:
@orchestrator
I read the current request as: {task}. Owner: @outline.
@outline
I will change `deck.md` first and leave visual files alone.
@design
I will rebuild `slides.html` and `custom.css` after the content changes.
@review
I will check whether the change lands for the target audience.
Room document contract
Room documents are not equal. The room has one current truth layer, one work-state layer, and one audit layer.
| Layer | Files | Read rule | Write rule | |-------|-------|-----------|------------| | Current truth | MEMORY.md, deck.md, DESIGN.md, custom.css, slides.html, latest assembled HTML, speech.md when present | Read first. These files define the rebuildable deck. | Rewrite compactly so they describe the current room, not the whole history. | | Work state | diagnosis.md, tasks/tasks.md, threads/threads.md, roles/*.md, review.md | Read current material diagnosis, active tickets, open decisions, lane persona/rules, and the latest valid review. | Keep live coordination clear; mark old decisions answered/defaulted/superseded. | | Audit trail | channel/YYYY-MM-DD.md, legacy PROJECT.md, legacy outline.md, legacy design-notes.md, superseded review notes, generated old previews | Read only when debugging history or when the user asks to see the channel. | Append-only or leave untouched. Never use as generation truth. |
Read order for every lane:
MEMORY.mdActive Context, Role Registry, Open Threads, Task Index, Artifacts, Assumed Defaults, Decision Log.tasks/tasks.mdopen or active rows only.threads/threads.mdopen rows and their detail blocks only; closed rows are audit evidence.diagnosis.mdfor material interpretation and dynamic persona, when present.roles/{lane}.mdfor current lane persona and lane-local rules.- Owned source:
deck.md;DESIGN.mdbeforecustom.css/slides.html; assembled HTML only afterbuild-html.sh. channel/YYYY-MM-DD.mdonly for audit/debug. Channel text must not override current truth.
Legacy artifacts:
outline.mdis audit-only if found from an older room. Do not read, write, or recreate it during normal generation.design-notes.mdis a legacy design scratchpad from main. Do not recreate it; migrate useful facts intoDESIGN.md,roles/design.md, or latest validreview.md.review.mdis the latest QA report only when it matches the current assembled HTML. If HTML changed after review, treat review as stale.- Old project-root
*-rN.htmlor*-deck.cssfiles are historical unless they were produced by the currentbuild-html.shpath.
Memory protocol
MEMORY.md is the deck room index and current-state map. It replaces PROJECT.md.
Keep it short. Store current decisions, state, and indexes. Do not paste the full deck, channel transcript, or stale preview history.
MEMORY.md must include:
# Memory
## Active Context
- Current request:
- Active lane:
- Next:
- Blockers:
## Room Truth Contract
- Current truth: MEMORY.md, deck.md, DESIGN.md, custom.css, slides.html, latest assembled HTML, speech.md when present.
- Work state: diagnosis.md current material reading, tasks/tasks.md active tickets, threads/threads.md open decisions and decision ledger, roles/*.md lane memory, latest valid review.md.
- Audit only: channel/YYYY-MM-DD.md, legacy PROJECT.md, legacy outline.md, legacy design-notes.md, superseded reviews, old previews, project-root sibling CSS.
- Rule: audit text never overrides current truth; legacy outline.md is never a generation source.
## Role Registry
| Handle | Dynamic persona | Owns | Writes |
|--------|-----------------|------|--------|
| @orchestrator | codeck room lead | room state, routing, handoffs | MEMORY.md, tasks, threads, channel, roles |
| @outline | {from diagnosis.md or fallback} | narrative and deck content | deck.md |
| @design | {from diagnosis.md or fallback} | design skeleton, visual system, HTML source | DESIGN.md, custom.css, slides.html |
| @review | {from diagnosis.md or fallback} | audience resistance and QA | review.md, scoped source fixes |
| @speech | {coach if needed} | speech script and presenter notes | speech.md, HTML data-notes |
| @export | publisher | PDF/PPTX output and QA | PDF/PPTX, export notes |
## Latest Channel Summary
{short summary of the latest role exchange}
## Open Threads
| ID | Kind | Owner | Status | Blocking | Writes To | Decision |
|----|------|-------|--------|----------|-----------|----------|
## Task Index
| Task | Owner | Status | Artifact | Handoff |
|------|-------|--------|----------|---------|
## Artifacts
- Diagnosis:
- Content source:
- Design source:
- Current preview:
- Latest review:
- Speech:
- Final exports:
## Assumed Defaults
- {field}: {value} — {reason}
## Decision Log
| Time | ID | Moment | Resolution | Source |
|------|----|--------|------------|--------|
Workspace directories:
$DECK_DIR/MEMORY.md
$DECK_DIR/channel/YYYY-MM-DD.md
$DECK_DIR/tasks/tasks.md
$DECK_DIR/threads/threads.md
$DECK_DIR/roles/orchestrator.md
$DECK_DIR/roles/outline.md
$DECK_DIR/roles/design.md
$DECK_DIR/roles/review.md
$DECK_DIR/roles/speech.md
$DECK_DIR/roles/export.md
channel/YYYY-MM-DD.md stores expanded role turns. Append one block per handoff:
Channel is an audit trail. Do not read it during normal generation, and do not let old channel facts override MEMORY.md, deck.md, or DESIGN.md.
## {ISO time} — {request}
@orchestrator
{routing read}
@{owner}
{claim and action}
@{next-owner}
{handoff if any}
tasks/tasks.md stores live claim tickets. Do not use hard locks. Each ticket has owner, status, artifact, and handoff. Closed history belongs in MEMORY.md summaries or channel, not as a growing task backlog.
threads/threads.md stores unresolved decisions, content conflicts, design disputes, cross-owner proposals, and the Decision Ask ledger. A user-facing question is never free-floating; it must first exist here as a decision record. Once resolved, copy the outcome into the owned source and MEMORY.md Decision Log, then mark the thread answered/defaulted/superseded. Normal reads treat only open rows as work state.
For Decision Ask entries, keep an index row and a short detail block:
| D-20260511-01 | Decision Ask: Deck Intent | @outline | open | true | deck.md, MEMORY.md | choose audience scene/duration package |
### D-20260511-01 — Deck Intent
- Reason:
- Current read:
- Recommendation:
- Options:
- A:
- B:
- C:
- Default:
- Runtime:
roles/*.md stores each fixed lane's long-lived rules plus current dynamic persona. Update it when diagnosis.md changes.
Legacy migration:
- If
MEMORY.mdis missing butPROJECT.mdexists, readPROJECT.mdas legacy memory. - On the next state write, create
MEMORY.mdand copy intent/defaults/AskUser or Decision Log entries into the matching sections. - Leave
PROJECT.mduntouched. Do not keep writing to it.
Decision Ask Policy
Decision Ask is a room-scoped decision layer, not a questionnaire. AskUser UI is only one possible renderer.
The room is the durable scope. A necessary ask belongs to $DECK_DIR/threads/threads.md first, then renders through the runtime:
Decision Ask semantics -> AskUser UI if available -> plain text pause if blocking -> assumed default if non-blocking
Default rule:
Infer what materials already prove.
Use a reasonable default when the risk is low.
Ask only when the answer changes the deck direction.
One /codeck run may use at most 2 Decision Ask rounds. Count all internal modules against that budget.
Allowed Decision Ask moments:
- Project Init — only when project state is missing or ambiguous.
- Deck Intent — audience scene, duration, language, and core goal. Bundle these into one round. Skip fields already clear from the user request, materials,
MEMORY.md, ordeck.md. Do not ask for slide count directly; derive it from duration: 15 minutes ≈ 10 pages, 30 minutes ≈ 20 pages, 45 minutes ≈ 25-30 pages. - Design Direction — before visual generation or when user says "change the visual style".
- Export Format — only when user says "export" without PDF / PPTX / all.
- Speech Style — only when user asks for a script and style or duration is missing.
Never create a Decision Ask for:
- Generic permission to continue
- Whether to generate HTML
- Whether to run review
- Whether to save files
- Whether to use existing materials
Those steps are automatic.
Decision record shape:
id: D-YYYYMMDD-NN
owner: @orchestrator | @outline | @design | @export | @speech | @review
moment: Project Init | Deck Intent | Design Direction | Export Format | Speech Style | User-Owned Conflict
reason: why this cannot be safely inferred
current_read: what the room already knows
recommendation: the preferred option and one concrete reason
options: 2-3 mutually exclusive packages
default: the option to use if non-blocking or unanswered
blocking: true only when inventing the answer would damage the deck direction or user commitment
writes_to: MEMORY.md | deck.md | DESIGN.md | speech.md | review.md | export artifact
status: open | answered | defaulted | superseded
Every rendered ask must contain:
- Re-ground — which skill, which step. One line.
- Current read — what the system thinks is true.
- Recommendation —
Suggest [X] because [reason]. - Options — 2-3 mutually exclusive choices. Mark one as recommended.
Only state verified facts. Unexecuted actions use "will / plan to".
Runtime rendering:
- If structured AskUser UI is available, render the decision through that UI.
- If no structured UI is available and
blocking: true, show the same decision as a compact plain-text question, write it tothreads/threads.md, and stop before mutating the target artifact. - If no structured UI is available and
blocking: false, use the default, recordassumed default, and continue. - If the 2-round budget is exhausted, use the default only for non-blocking decisions; leave blocking decisions open in
threads/threads.mdand stop.
If the user does not answer a non-blocking decision, use the recommended option. Record it in MEMORY.md as assumed default.
Persist every Decision Ask result:
threads/threads.mdstores every open decision before it is rendered to the user.MEMORY.mdstores current room state, project-level intent, defaults, Decision Log, task index, thread index, and artifact index. It is not a transcript.deck.mdstores deck-shaping decisions that affect rebuilds.
Automatic light review must not trigger Decision Ask. Write findings and fixes to review.md. Ask only when the content has a real conflict the user must decide.
Single-entry routing
/codeck routes the user's request before running the pipeline:
| User intent | Action | Decision Ask | |-------------|--------|--------------| | New / continue deck | @orchestrator opens room → scan → diagnose → @outline → @design → @review | Deck Intent and Design Direction only if needed, max 2 rounds | | "make slide 3 less dense" / concrete content edit | @outline edits deck.md → @design rebuilds → @review checks | none | | "change visual style" / "change style" | @design runs Design Direction, updates DESIGN.md, rebuilds → @review checks | Design Direction | | "export" | @export exports latest HTML | Export Format only if PDF / PPTX / all is missing | | "export PDF" / "export PPTX" | @export exports requested format | none | | "create speech script" | @speech generates speech.md and syncs notes | Speech Style only if style or duration is missing |
For edits, deck.md is the single truth source. HTML is the audience preview, not the editing surface.
Before a lane works:
@orchestratorwrites or updates a task ticket.- The owner states the claim in channel.
- The owner reads only the needed current-truth and work-state artifacts. Do not read channel unless debugging history.
- Cross-owner changes go to
threads/threads.mdas proposals.
After a lane works:
- Update the task ticket.
- Rewrite
MEMORY.mdActive Context, Latest Channel Summary, Open Threads, Task Index, Artifacts, Assumed Defaults, and Decision Log so they describe current state. - Append the role exchange to today's channel file.
- Keep the user response compact unless the user asked for the channel.
Two directories
- Current directory (
.) — the user's project. Materials live here. Final HTML goes here too so the user can open it directly. $DECK_DIR— codeck's deck room.MEMORY.md,channel/,tasks/,threads/,roles/,deck.md,diagnosis.md,DESIGN.md,custom.css,slides.html,review.md,speech.md.
Scan materials in .. Write intermediate artifacts to $DECK_DIR. Output final HTML to ..
Phase 1: Init + status
DECK_DIR="$HOME/.codeck/projects/$(basename "$(pwd)")"
CODECK_SKILL_DIR="${CODECK_SKILL_DIR:-}"
if [ -z "$CODECK_SKILL_DIR" ]; then
for d in "$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" >&2; exit 1; }
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"
Initialize the room before creating any Decision Ask:
- If
$DECK_DIR/MEMORY.mdis missing, create it from the Memory protocol template. - If
$DECK_DIR/PROJECT.mdexists, migrate its intent, defaults, and AskUser / Decision Log entries intoMEMORY.md. - If
$DECK_DIR/tasks/tasks.mdis missing, create it with the task ticket table. - If
$DECK_DIR/threads/threads.mdis missing, create it w
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: hiyeshu
- Source: hiyeshu/codeck
- License: MIT
- Homepage: https://codeck.sh
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.