Skip to content
Back to skills

Write For Agents

ASecurity

Write agent-consumed markdown: CLAUDE.md or AGENTS.md content, .claude/rules files, agent-loaded reference docs, navigation pointers, and doc-plus-pointer extractions. Use when: 'add this to CLAUDE.md', 'write a rule for X', 'write this up for the agent', 'add a pointer to the docs', 'move this section into its own doc', 'draft an AGENTS.md section', or any edit to markdown an agent loads. SKILL.md authoring is playbooks:skill-authoring; human-facing docs are docs-hygiene:write-for-humans.

  • 13 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 2, 2026
ai-agentsgogit

Works with

  • cli

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 4, 2026

npx -y skills add melodic-software/claude-code-plugins --skill write-for-agents --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Write For Agents?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Write For Agents
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/melodic-software-write-for-agents/badge)](https://www.skillsdirectory.com/skills/melodic-software-write-for-agents)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
description: "Write agent-consumed markdown: CLAUDE.md or AGENTS.md content, .claude/rules files, agent-loaded reference docs, navigation pointers, and doc-plus-pointer extractions. Use when: 'add this to CLAUDE.md', 'write a rule for X', 'write this up for the agent', 'add a pointer to the docs', 'move this section into its own doc', 'draft an AGENTS.md section', or any edit to markdown an agent loads. SKILL.md authoring is playbooks:skill-authoring; human-facing docs are docs-hygiene:write-for-humans."
argument-hint: "[<file or section being written>]"
user-invocable: true
disable-model-invocation: false
metadata:
  workflow-stage: anytime
  summary: Authoring-time doctrine for agent-consumed markdown
---

# Write For Agents

## Why this skill exists

The docs-hygiene siblings are audit-shaped: they find problems in docs that already exist. This
skill is the write-side complement. It fires while the doc is being written, so the problems the
audits catch are not created in the first place. Its scope is any markdown an agent will consume;
the auto-read surfaces (CLAUDE.md scopes, `.claude/rules`, auto-memory, and their kin) are the
high-value core because their cost recurs every session. Read
[`reference/agent-doc-surfaces.md`](reference/agent-doc-surfaces.md) when you need to know
whether, when, and how much of a target file the harness actually loads. Write differently for
an always-loaded surface than for an on-demand one.

## Budget both loads

Every line you write spends two budgets, and cutting one can overspend the other:

- **Context load**. Tokens the agent pays, every session for always-loaded surfaces. Governed
  marketplace-wide by plugin-philosophy's Instruction economy: an instruction earns its place
  with observed-stumble evidence, or it goes.
- **Cognitive load**. Attention the human maintainer pays. The human is the index of the doc
  set: they must be able to hold where things live. Ten tiny fragment files can be cheaper for
  the agent and ruinous for the human; one 500-line file the reverse. When the two budgets
  conflict, say which one you spent and why.

Fewer words spends less of both, and the brevity rules that are universal apply here too: no more
words than the meaning needs, no filler, hedging, intensifiers, expletive openings, or restatement
of an adjacent line; active voice; one idea per sentence; a factual register with nothing sold.
`/writing:be-concise` owns those rules when the `writing` plugin is installed; without it, apply
them from this paragraph. Take those rules and no more of that doctrine: its human-only rules do
not transfer. A bottom-line-first opening, headings written to be skimmed, bullet lists for
scanning, and bounded bold all serve a person moving down a page fast, and an agent reading a rule
needs the rule stated where it applies, not staged for a skim.

## Know which surfaces are system prompt

Three vehicles shape the system prompt: a subagent definition's body, an output style, and the
launch flags that replace or append to the system prompt (`--system-prompt`, `--append-system-prompt`, and their `-file`
forms). CLAUDE.md files, rules, and skill bodies reach the model as conversation content in the
user turn. Write those as instructions read in the conversation: state the rule, its scope, and
its reason. A rule that must hold at system-prompt level goes in a subagent body, an output style,
or a launch flag.

- **Pointer**: for how CLAUDE.md content is delivered, see
  <https://code.claude.com/docs/en/memory#troubleshoot-memory-issues>; for a subagent body, see
  <https://code.claude.com/docs/en/sub-agents#write-subagent-files>; for output styles, see
  <https://code.claude.com/docs/en/output-styles#how-output-styles-work>; for the flags, see
  <https://code.claude.com/docs/en/cli-reference#system-prompt-flags>; for skill content, see
  <https://code.claude.com/docs/en/skills#skill-content-lifecycle>.
- **As of**: 2026-10-01
- **Recheck trigger**: one of those sections changes how its content reaches the model.

## Write pointers that cover their branches

A pointer is a routing instruction; the reader decides whether to follow it from the pointer
text alone, without opening the target.

- **Front-load the leading word.** Open with the term the reader is matching on ("Deploys:
  see…", never "See the following doc for information about deploys").
- **Cover the branches.** State when to follow it AND what the reader gets ("for tracked-changes
  output specifically, read X"), so both the follow and the skip are informed decisions.
- A pointer that exists only because changes must be mirrored across distant folders can mask a
  cohesion problem. Before adding it, consider restructuring so the things that change together
  live together, a pointer papering over low cohesion outlives the reorganization that would
  have removed it. (Audit-side remediation home: `harness-memory:audit`'s C5 fix guidance, if
  that plugin is enabled.)

The full pointer-quality criteria are owned by the sibling audit skill. Invoke
`/docs-hygiene:audit-progressive-disclosure` via the Skill tool to grade a draft against them,
rather than failing them at audit time.

## Separate steps from reference, and co-locate what runs together

Steps are read in order and executed; reference is jumped into and queried. Mixing them makes
both worse, a procedure interrupted by lookup tables loses its thread, and reference buried in
a procedure is unfindable.

- Put the procedure in one contiguous block; move lookup material below it or into a spoke file
  with a conditioned pointer.
- Co-locate what is consumed together: the fact a step depends on belongs beside the step, not
  three sections away. Distance a reader must jump during execution is a defect.
- Sprawl is the failure of both: when a file serves several audiences or moments, split it along
  who-reads-when lines, not topic lines.

## Give every step a completion criterion

A step is done when its criterion says so, not when text resembling the step has been produced.

- **Clarity and demand.** State what "done" observably is, and demand it: "run X; the step is
  complete when Y appears" beats "run X".
- **Premature completion** is the shape to design against: a step satisfiable before its
  goal-state is reached will be marked complete at first plausible output. Make the criterion
  the goal-state, never the attempt.
- **Post-completion steps.** When finishing creates an obligation (regenerate, notify, clean
  up), state it in the step, an obligation after "done" is otherwise dropped.
- **The agent does the legwork.** Write steps that resolve their own facts from the environment;
  a step that sends the human to look something up the agent could read is a defect.

A task-shaped or long-run instruction also names the whole task's finish line and its stops:

- **Keep going** when a step needs no input, with status notes in the same message as the next
  action, not a summary that names the next step, an offer to continue, or a list of choices that
  block nothing.
- **Stop and ask** only when nothing can move without the human, or before a destructive,
  hard-to-undo, or outward action. Never pair a keep-going rule with turning off permission prompts
  or confirmation gates.
- **Long runs** keep the task list in a file, ticked as items finish, since compaction summarizes
  the scrollback; reuse a ledger the workflow already has. The final report opens with what is
  blocked on the human, then what changed and what was found.

## Split by sequence; choose invocation by the rubric

When one doc serves two moments in time, split it at the moment boundary, the reader at step
one should not scroll past material for step nine. Splitting an instruction surface into skills
with different invocation modes is a different axis with its own decision rubric: follow the
[invocation-mode rubric](https://github.com/melodic-software/claude-code-plugins/blob/main/docs/conventions/invocation-mode/README.md)
(§ Splitting by invocation) rather than deciding it ad hoc.

## Prompt the positive

Write what to do, not what to avoid: a prohibition drags the banned behavior into context, and
pretrained leading words are the compact anchors that steer ("Prefer X" over "Never do Y unless").
Keep a negation only when the positive form genuinely loses the constraint, then pair it with
the positive alternative in the same sentence. A design exclusion is the exception that stays
negative: name the specific styles to leave out ("no hero banner, no pill-shaped buttons"),
since "avoid a generic look" swaps one default for another.

Ask for outcomes, not thinking. Whether a "think carefully" line helps depends on the target model,
so follow `/harness-config:audit-instructions` criterion I8-f for the model the text will run on:
it drops these lines for Opus 5.5, where depth is the effort setting's job and a quick answer is
a lower effort level first, "Answer directly." second. A line telling the model to think less or
not at all is I8-c's, scoped per model the same way. Never ask the model to show or reproduce
its reasoning in the reply, which some models decline; ask for what the reader needs, such as the
rationale in two or three sentences or the evidence as a list.

## After writing

- Repeated the same prose in another file. Even a second occurrence, or a recap of an SSOT that
  already exists? Invoke `/docs-hygiene:extract-ssot` via the Skill tool. Creating a new shared home
  still waits for the third occurrence; below that it remedies the repetition in place.
- Resolved or coined a term in the **consuming project's** domain? Invoke
  `/domain-driven-design:curate-language` via the Skill tool (if that plugin is enabled) rather
  than hand-writing the entry. A skill defining its own working vocabulary is out of that skill's
  scope and stays where it is.
- Editing exposed pre-existing problems in the surrounding doc? Invoke the fitting audit
  sibling via the Skill tool (`/docs-hygiene:audit-noise`, `/docs-hygiene:audit-derivability`,
  `/docs-hygiene:audit-progressive-disclosure`) rather than expanding this write into an audit.

## What this skill does NOT do

- **Does not author skills.** Deciding a skill should exist, what it triggers on, what its
  frontmatter declares, how its actions are shaped, and how its body is structured is
  `playbooks:skill-authoring` + `skill-quality:check` territory. Prose inside an already-authored
  SKILL.md is still this skill's: a SKILL.md is agent-consumed markdown, which is exactly and only
  what this doctrine governs. Read the boundary as authorship against wording, not as a whole file
  this skill may not look at, or the largest agent-facing surface most repos have ends up governed
  by no authoring doctrine at all.
- **Does not audit existing docs**, the audit siblings own read-only findings; this skill fires
  at the writing moment only.
- **Does not write human-facing docs**. End-user READMEs, changelogs, and marketing prose have
  a different reader and different rules. Those are the sibling `docs-hygiene:write-for-humans`,
  which fires at this same moment and resolves the consuming project's own style guide first.
- **Does not enforce via hooks**. Trigger reliability is carried by this skill's description
  and its eval suite, deliberately not by a forcing hook.

Files in this skill

  • SKILL.md8 KB
  • evals/evals.json5.7 KB
  • evals/fixtures/draft-rule.md192 B
  • reference/agent-doc-surfaces.md5.5 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.