chore(skills): terse Forgejo artifacts — shared communication-style rules across every skill #261

Closed
opened 2026-04-21 20:29:21 +00:00 by claude-desktop · 0 comments
Collaborator

User story

As an operator reading the Forgejo feed all day, I want every agent's Forgejo-facing text (PR bodies, issue comments, review verdicts) to be terse and scannable — no preamble, no emoji, no recap of what the diff already shows, bullets over prose. The agents still reason fully internally; only the output artifacts get shorter. Separate from caveman mode (#231), which affects reasoning too and is riskier to turn on globally.

Motivation

Today's PR bodies run ~400 tokens each with boilerplate (summary, test plan with checkbox-TODOs half of which are stale by merge time, "🤖 Generated with Claude Code" banner). Issue comments carry similar bloat. Multi-round review loops pay this tax 4–8 times per ticket — boss writes PR body, reviewer writes findings, boss writes address comment, reviewer re-reviews, …

Observed rough averages from this week:

  • PR body: ~400 tokens → target ~120 (−70%)
  • Issue comment: ~250 → target ~80 (−68%)
  • Review verdict: ~600 → target ~250 (−58%)

Also improves human scannability. Today's PR descriptions read like press releases; they should read like commit messages.

Acceptance criteria

New shared skill fragment

  • New file skills/artifact-style.md containing the communication rules (below). Short — under 40 lines. Imported by every skill template via a {{include:artifact-style}} directive or similar (or just appended at task-build time in apps/server/src/webhook-handlers.ts::buildSkillPrompt).

Rules (the fragment's content)

  • PR body: one-sentence summary of the change, then ## Test plan bullets. Max 150 words total. No "I've…", "This PR…", "Summary" header repetition, no trailing "🤖 Generated with [Claude Code]" banner, no commit-message recap.
  • Issue comment (status update, audit, dependency-propagate): bullets or single paragraph. Max 100 words for routine status, 300 for findings / review feedback.
  • Review verdict:
    • APPROVED: 2 lines — what was correct + any nit that wasn't worth blocking.
    • REQUEST_CHANGES: one finding per bullet, prefixed with category (overflow, contrast, a11y, behavior, test-gap, doc-gap). No repeated preamble explaining what the PR does.
  • Handoff comment (designer): pinned structure stays (deep-links, per-page table, deviations) but every row in the per-page table is one line, and the deviations list bullets.
  • Slash-command responses (propagator auto-assign audit, label-swap notes): one line each. Already one line today — document the invariant so it doesn't regress.

Skill template wiring

  • skills/implement.md, skills/implement-delta.md, skills/address-review.md, skills/address-review-delta.md, skills/review.md, skills/review-delta.md, skills/design-implement.md, skills/design-review.md, skills/design-breakdown.md, skills/merge.md, skills/rebase.md, skills/fix-ci.md — each gets a reference to artifact-style.md near the top.
  • skills/breakdown.md stays with its current rich issue-body format — the per-ticket acceptance criteria + out-of-scope structure is load-bearing for downstream dispatches. Add a note at the top: "The artifact-style rules apply to the tracking comment you post at the end, not to the created issues' bodies."
  • Verify the existing skills/caveman.md (from #231) is unaffected — artifact-style is additive, not conflicting.

Skill-template QA

  • Manual: spot-check three merged PRs before and after. Measure body word-count. Target: post-rule PRs are ≤ 150 words.
  • No acceptance criteria should require "write a summary" or "post a commit-style recap" — those are exactly what the rule removes.

Out of scope

  • Enforcing the word count at the service level (can't — the agent writes free text and the webhook has no way to validate prose brevity without an LLM pass).
  • Applying caveman mode to reasoning — stays opt-in per #231.
  • Rewriting historic PR bodies.
  • Restructuring the tracking-issue summary comment from /breakdown.

References

  • skills/*.md — every template.
  • skills/caveman.md (issue #231) — sibling mechanism, reasoning-level.
  • apps/server/src/webhook-handlers.ts::buildSkillPrompt — the task-build site where appendices get concatenated.
  • CLAUDE.md global instructions (~/.claude/CLAUDE.md) — already codifies "PR description detail belongs in body, not title" + "focus on WHY"; this ticket makes that contract explicit for agents.
## User story As an operator reading the Forgejo feed all day, I want every agent's **Forgejo-facing text** (PR bodies, issue comments, review verdicts) to be terse and scannable — no preamble, no emoji, no recap of what the diff already shows, bullets over prose. The agents still reason fully internally; only the output artifacts get shorter. Separate from caveman mode (#231), which affects reasoning too and is riskier to turn on globally. ## Motivation Today's PR bodies run ~400 tokens each with boilerplate (summary, test plan with checkbox-TODOs half of which are stale by merge time, "🤖 Generated with Claude Code" banner). Issue comments carry similar bloat. Multi-round review loops pay this tax 4–8 times per ticket — boss writes PR body, reviewer writes findings, boss writes address comment, reviewer re-reviews, … Observed rough averages from this week: - PR body: ~400 tokens → target ~120 (−70%) - Issue comment: ~250 → target ~80 (−68%) - Review verdict: ~600 → target ~250 (−58%) Also improves human scannability. Today's PR descriptions read like press releases; they should read like commit messages. ## Acceptance criteria ### New shared skill fragment - [ ] New file `skills/artifact-style.md` containing the communication rules (below). Short — under 40 lines. Imported by every skill template via a `{{include:artifact-style}}` directive or similar (or just appended at task-build time in `apps/server/src/webhook-handlers.ts::buildSkillPrompt`). ### Rules (the fragment's content) - [ ] **PR body**: one-sentence summary of the change, then `## Test plan` bullets. Max 150 words total. No "I've…", "This PR…", "Summary" header repetition, no trailing "🤖 Generated with [Claude Code]" banner, no commit-message recap. - [ ] **Issue comment** (status update, audit, dependency-propagate): bullets or single paragraph. Max 100 words for routine status, 300 for findings / review feedback. - [ ] **Review verdict**: - APPROVED: 2 lines — what was correct + any nit that wasn't worth blocking. - REQUEST_CHANGES: one finding per bullet, prefixed with category (`overflow`, `contrast`, `a11y`, `behavior`, `test-gap`, `doc-gap`). No repeated preamble explaining what the PR does. - [ ] **Handoff comment** (designer): pinned structure stays (deep-links, per-page table, deviations) but every row in the per-page table is one line, and the deviations list bullets. - [ ] **Slash-command responses** (propagator auto-assign audit, label-swap notes): one line each. Already one line today — document the invariant so it doesn't regress. ### Skill template wiring - [ ] `skills/implement.md`, `skills/implement-delta.md`, `skills/address-review.md`, `skills/address-review-delta.md`, `skills/review.md`, `skills/review-delta.md`, `skills/design-implement.md`, `skills/design-review.md`, `skills/design-breakdown.md`, `skills/merge.md`, `skills/rebase.md`, `skills/fix-ci.md` — each gets a reference to `artifact-style.md` near the top. - [ ] `skills/breakdown.md` stays with its current rich issue-body format — the per-ticket acceptance criteria + out-of-scope structure is load-bearing for downstream dispatches. Add a note at the top: "The artifact-style rules apply to the *tracking comment* you post at the end, not to the created issues' bodies." - [ ] Verify the existing `skills/caveman.md` (from #231) is unaffected — artifact-style is additive, not conflicting. ### Skill-template QA - [ ] Manual: spot-check three merged PRs before and after. Measure body word-count. Target: post-rule PRs are ≤ 150 words. - [ ] No acceptance criteria should require "write a summary" or "post a commit-style recap" — those are exactly what the rule removes. ## Out of scope - Enforcing the word count at the service level (can't — the agent writes free text and the webhook has no way to validate prose brevity without an LLM pass). - Applying caveman mode to reasoning — stays opt-in per #231. - Rewriting historic PR bodies. - Restructuring the tracking-issue summary comment from `/breakdown`. ## References - `skills/*.md` — every template. - `skills/caveman.md` (issue #231) — sibling mechanism, reasoning-level. - `apps/server/src/webhook-handlers.ts::buildSkillPrompt` — the task-build site where appendices get concatenated. - `CLAUDE.md` global instructions (`~/.claude/CLAUDE.md`) — already codifies "PR description detail belongs in body, not title" + "focus on WHY"; this ticket makes that contract explicit for agents.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/claude-hooks#261
No description provided.