ワンクリックで
flow-scetch
Use it when user ask describe the flow or write pseudocode.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Use it when user ask describe the flow or write pseudocode.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Use when drawing a diagram of an architecture change for review — a two-panel current-vs-planned (before/after) picture that lets a reviewer see what changed, what's removed, what's new, what held, and the one load-bearing why. Triggers: "arch diagram", "architecture diff", "before/after diagram", "diagram this refactor/migration/change", "visualize the change", "current vs planned", or any request to render an architectural change as a reviewable picture (HTML/SVG).
Use when asked to create a "local gitignore" or ignore files locally without committing the ignore rule. Create a `.gitignore.local` file at repo root and wire it via `git config core.excludesFile`, not `.git/info/exclude`.
This skill should be used when the user asks to "dedup the docs", "prune the corpus", "remove duplicate/redundant paragraphs", "reduce duplication across files", "these files repeat the same information", "consolidate repeated content", "the corpus duplicates topics", "map topics across files", or wants to find and remove duplicated prose across a set of text files (plain prose, markdown, SKILL.md, references, commands, specs).
This skill should be used when the user runs "/prx", "/prx <pr-url>", or "/prx post" — to collect the user's review comments against a diff and post them as an inline GitHub PR review. Trigger on "collect my PR comments", "start collecting comments", "post my comments to the PR", "send the review comments".
Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model.
Manage spec writing, implementation, and bug fixing.
| name | flow-scetch |
| description | Use it when user ask describe the flow or write pseudocode. |
TS pseudocode is the canonical way to describe what a TODO must do.
Purpose: surface corner cases and decisions — not implementation.
namespace named after it (the unit being changed).function flow(...). Sub-steps are helper functions in the same namespace.namespace Auth {
type RefreshReq = { token: string }
type Pair = { access: string; refresh: string }
// trace: look up the session by token, reject if unknown/expired/rotating, mint a new pair and rotate.
function flow(req: RefreshReq): Pair | 401 | 409 {
const s = redis.get(`auth:${req.token}`)
if (!s) return 401 // unknown token
if (s.expiresAt < now()) return 401 // expired
if (s.rotating) return 409 // decision: reject concurrent refresh
// see spec.md → Decisions: "single-flight refresh"
const pair = mint(s.userId)
redis.del(`auth:${req.token}`) // invalidate old before storing new
redis.set(`auth:${pair.refresh}`, s, TTL)
return pair
}
function mint(userId: string): Pair { /* ... */ return { access: "", refresh: "" } }
}
/* ... */.namespace per TODO, one flow(...) entrypoint, ≤ 40 lines.any, no magic strings — use unions.redis.*, db.*, emit, log, fs.*).return <sentinel> or throw. Each distinct failure cause gets its own arm; don't collapse them. If two causes must look identical to the caller (e.g. unknown-token vs wrong-password, to avoid enumeration or a timing leak), say so in a trailing comment — that sameness is a decision, not an accident.// see spec.md → Decisions: <name> anchor. If a decision is hidden inside /* ... */, lift it out.flow reads as one value's lifecycle — born from the input, guarded, transformed, returned. Order the body by what happens to that value, not by which helper is convenient to call next.// trace: one-liner. The first line of flow is a one-sentence trace of the whole path. If it can't be written in one sentence, the flow is too big — split the TODO. The trace must match the TODO's Outcome.State machine — flow is the transition function:
namespace Job {
type State = "Pending" | "Active" | "Suspended" | "Done"
type Event = "activate" | "suspend" | "complete"
function flow(s: State, e: Event): State {
if (s === "Pending" && e === "activate") { assert(ready()); return "Active" }
if (s === "Active" && e === "suspend") { assert(inFlight() === 0); return "Suspended" }
if (s === "Active" && e === "complete") { emit("done"); return "Done" }
throw new Error(`invalid: ${s} + ${e}`)
}
}
Component (interface + wiring) — flow is the constructor / wire-up:
namespace SessionRepo {
interface Repo<T> { get(id: string): T | null; set(id: string, v: T): void }
function flow(client: RedisClient): Repo<Session> {
return {
get: (id) => { /* GET, parse, null on miss */ return null },
set: (id, v) => { /* SET with TTL */ },
}
}
}
Data shape change — flow is omitted; show before/after types only:
namespace Job {
// before
type _Job = { id: string; status: string }
// after
type Job = { id: string; status: "queued" | "running" | "done" | "failed"; retries: number }
}
/* ... */ (lift to spec.md Decisions)