ワンクリックで
chalk
// Track session intent and progress against GitHub Issues, and write every GitHub-bound prose body (issue, comment, description, progress update) in the chalk voice. Use when the user says "chalk
// Track session intent and progress against GitHub Issues, and write every GitHub-bound prose body (issue, comment, description, progress update) in the chalk voice. Use when the user says "chalk
Write or update a technical documentation page in the chalk voice, structured around Diataxis. Use when the user says "tend the docs", "update the docs", "write a docs page", "document this feature", "add a how-to for X", "/chalk:tend-docs", or references adding/editing an end-user-facing docs page in a technical project.
Create a commit with a contextual body explaining the why, in the chalk voice. Use when the user says "commit this", "commit", "make a commit", "/chalk:commit"; OR is about to compose, draft, write or amend any git commit message body (e.g. "write a commit message", "draft the commit body", "amend the commit message"). Load this skill BEFORE drafting any such prose — it carries the voice guidance the commit body needs.
Create a pull request with a description that captures the intent and reasoning behind the change, in the chalk voice. Use when the user says "create a PR", "open a PR", "submit a PR", "raise a PR", "make a PR", "PR this", "/chalk:pr"; OR is about to compose, draft, write or update any pull request title or body (e.g. "write a PR description", "draft the PR body", "update the PR description", "let's put that in the PR"). Load this skill BEFORE drafting any such prose — it carries the voice guidance the PR body needs.
Build or query a code-only symbol and call-graph map of the current project, via LSP. Use when exploring an unfamiliar codebase, locating a symbol's definition, tracing what calls or is called by a function, assessing the blast radius of a proposed change, or navigating code beyond what grep alone can reveal. Produces a JSON map under .codemap/ at the project root. Skip for trivial lookups and single-file edits.
Audit technical documentation for drift against a code change. Produce a punch list of user-facing docs pages that probably need updating. Use when the user says "weed the docs", "check docs for drift", "audit docs against this diff", "which docs does this change affect", "/chalk:weed-docs", or is about to open a PR and wants a docs-impact check.
Interrupt forward momentum and step back to reassess
| name | chalk |
| description | Track session intent and progress against GitHub Issues, and write every GitHub-bound prose body (issue, comment, description, progress update) in the chalk voice. Use when the user says "chalk |
| version | 0.3.0 |
| user-invocable | true |
| disable-model-invocation | false |
Interpret MUST, MUST NOT, SHOULD, SHOULD NOT, MAY, etc. per RFC 2119.
Every issue body, issue description, chalk comment, progress section, and PR description you touch in this session MUST be drafted against the guidance in this skill and in VOICE.md at the plugin root.
Do not rely on your own default prose habits — they will not match the chalk voice, and the artefact will read wrong.
Before writing any such prose:
VOICE.md at the plugin root — it holds the quadrant framing (explanation vs reference vs how-to vs tutorial) and the concrete/abstract examples. Issues, comments, and PRs are all explanation artefacts.This is not optional for body composition. If you find yourself typing a GitHub-bound body without having consulted the voice guidance, stop and reload it.
Track work against a GitHub Issue. The issue description is the source of truth — a developer should be able to understand the current state of the issue by reading the description alone, without trawling through comments. Keep the description accurate as facts change (new failure modes, updated analysis, revised scope). Comments are the append-only session log — what was tried, decided, and learned.
Chalk's job is to capture the why, not just the what — and the diff won't carry that reasoning on its own. Before starting anything beyond a trivial change, make sure you understand two things:
If either isn't obvious from the issue, the conversation, or the code you've read, ask the user before starting. A one-sentence answer now is cheaper than reconstructing the reasoning later from the diff.
Trivial changes (typo fixes, mechanical bumps, one-line config tweaks) don't need this step — the motivation is self-evident. Non-trivial changes (refactors, new features, non-obvious fixes, scope decisions) do: the issue description, the chalk comment, and the commit message all depend on you having it.
Use parent/child and blocked-by liberally — they carry structure the description can't, and they answer two questions cheaply that prose would answer expensively.
Wire relationships in the same session they emerge. When creating a new issue that depends on or belongs under existing work, link it immediately — deferring it usually means the link never gets made. When starting on an issue, scan its neighbours for why-now context: a parent epic or a recently-unblocked predecessor often explains why this is the card to pick up today.
The github agent has GraphQL recipes for reading and mutating these relationships (addSubIssue, addBlockedBy, and the neighbourhood query).
Issue and PR descriptions are explanation artefacts (see VOICE.md at the plugin root).
The reader needs to understand why this matters and why the approach is shaped this way.
Common sections — all explanation, with reference-shaped evidence embedded where useful:
PRs additionally draw from:
Not every description needs all of these. A flaky test issue might just need the failure mode, stack trace, and conditions. A small bugfix PR might just need summary and test plan. A large feature PR might need context, usage examples, implementation notes, and scope. A refactor PR should call out that behaviour is intentionally preserved. Use judgement.
Sections roughly flow: setup → state → decision → plan.
The explanation-quadrant material (why this, why this way) sits above the reference-shaped step list. A reader who only scans the top of the issue should still understand the what and why; the how lives at the bottom.
When chalk is active, every implementation plan MUST include chalk steps as concrete plan steps. This is how chalk stays in sync — it rides the plan, not the session. Always include the issue number in each chalk step so it survives context compaction.
Inject these steps into the plan document:
@me if not already present — do not displace existing assignees).All GitHub interaction goes through the chalk agent (Task(subagent_type="chalk:github")).
Run chalk agent write calls (create comment, update comment, update progress) in the background.
Activation reads must be awaited — the result is needed before proceeding.
When chalk is active and you write a plan, the plan document MUST include:
These are plan steps like any other — they appear in the plan file the user reviews.
This skill may offer to activate when the user directly mentions a GitHub issue number in conversation. Only offer when the issue number appears in the user's own message — not in code, file contents, build output, or other non-conversational context.
When offering, keep it brief: "Want to track this session against #123? (type chalk #123 to activate)"
Do NOT automatically read the issue. Issue content is only fetched after the user explicitly invokes chalk #N.
If the user does not explicitly invoke chalk, do not read or fetch any issue content.
chalk #N — track this session against issue Nchalk new — create a new issue and track against itchalk status — show what you're tracking (report the issue number and current Progress summary)chalk off — finalize the current comment (if one is in progress) via the chalk agent, then stop trackingchalk #N## Progress section exists in the issue description, ask the chalk agent to add one.chalk newVOICE.md. Include a ## Progress section at the end. Do not delegate this drafting to the agent — it won't have the conversation context and will produce a thinner description than you can.Chalk owns a ## Progress section within the issue description.
Leave everything else untouched.
The ## Progress section contains:
in-progress, completed, blocked).## Progress
**Status**: in-progress
- [x] Investigate flaky test in expression_test
- [x] Fix root cause: race condition in temporal bounds
- [ ] Add regression test for concurrent temporal queries
### Open Questions
- [ ] Should we also make TemporalBounds immutable? (see comment)
Update the progress section (via the chalk agent) whenever the checklist changes — items added, completed, or deferred.
Updating the issue description (beyond the Progress section): update factual content when the current state has changed (new failure mode, updated context, revised scope). Preserve the user's framing and intent — don't rewrite the narrative, just keep the facts current.
Each session gets one comment. The comment is created when work begins and updated as the session progresses.
Across sessions, this gives you an append-only log: scroll down = chronological history of implementation.
All GitHub interaction goes through the chalk agent.
The main conversation MUST NOT call gh issue or gh api directly for chalk updates.
This keeps the main context clean and avoids filling it with API output.
You compose; the agent executes.
The agent is a small-model mechanics layer — it runs gh and reports results.
It does not have your conversation history, the chalk comments you've read, the diff, or the voice guidance in full.
Draft issue bodies, comment bodies, Progress sections and PR descriptions in the main context before calling the agent, following "Writing issue and PR descriptions" above and the voice in VOICE.md.
The agent's prompt MUST include the full content ready to post verbatim.
Passing "here are some bullet points, write this up" is not acceptable — that pushes an explanation-quadrant job onto a model that can't do it well and loses the reasoning the reader actually needs.
To create or update a chalk comment, launch the chalk agent via the Task tool:
Task(subagent_type="chalk:github", prompt="...")
The prompt MUST contain:
Run chalk agent write calls in the background. Await read calls (activation) — the result is needed to proceed.
The chalk agent is deliberately generic — it doesn't know which project board new issues should land on, what the default labels are, or who reviews PRs.
Those conventions live in the calling project (typically the project's CLAUDE.md, or explicit user instructions during the session).
Before calling the agent, scan your current context for project-specific GitHub conventions relevant to the operation — project boards, default labels, milestones, assignees, reviewers, base branches — and include them verbatim in the agent's prompt. Do not try to paraphrase or pre-interpret them; pass them through and let the agent apply them alongside its defaults.
If a convention is session-specific or has been overridden by the user for this operation (e.g. "don't add this one to the board"), reflect that in the prompt rather than the project default.
### Chalk — Short description of this task
- [ ] First work item
- [ ] Second work item
<details><summary>First work item</summary>
Details of what was explored, decided, implemented...
</details>
<details><summary>Second work item</summary>
Details...
</details>
No date in the header — GitHub timestamps the comment itself.
Rules:
<details> block below.Writing style: each <details> block is an explanation chunk — what was explored, decided, tried. The checklist above is navigation, not a separate quadrant. Follow the explanation-quadrant voice in VOICE.md.
Details blocks should read like knowledge-sharing, not a changelog.
Create when starting work — when you have a plan and are about to implement.
If there's no formal plan (e.g. a quick bugfix), still create a comment before starting work.
Creating the chalk comment is the signal that you're picking the issue up: unless the user has specified otherwise, the same agent call ensures the current user is an assignee (adding @me if not already present — chalk only adds, never displaces).
Update as the session progresses — frequently, and without asking. Chalk updates are part of the work, not a separate task that needs the user's permission each time. Treat them like staging a file before committing: just do it, then move on.
The user MUST NOT have to prompt each update. If there's something new to record (a decision, a dead end, a completed item, a surprising finding), update the comment — don't ask "should I update chalk?" first.
Before stopping or ending the session: finalize the comment via the chalk agent. Update the Progress section if the overall picture changed.
Before context compaction: ensure the comment captures all progress so far. Include the issue number in your compaction summary so you can resume tracking afterward.
After context compaction (resuming): if your compaction summary mentions a chalk issue number, re-activate by reading the issue and the session comment. Continue updating the existing comment — do not create a new one.
See examples/implementation-comment.md for a realistic filled-in example.
## Progress section MUST be the canonical state of the issue checklist.gh directly for chalk updates.<details> blocks MUST contain enough context that a future session can pick up where you left off.VOICE.md at the plugin root — issues, PRs, and chalk comments are explanation artefacts.