Complaining
Record real execution friction so later humans and agents can diagnose why work was slow, risky, blocked, or low quality.
This is operational visibility, not emotional theatre.
Default Destination
Default: raise it, or write it into the active plan. Two defaults, not one file:
- If the friction is worth the user's attention now, say so directly in the conversation.
- If it should also survive past the conversation, and an active plan is identifiable, append it to that plan's
## Complaints / Friction section (see rails-planning's plan-template.md) instead of creating a separate file.
Do not create a standalone complaining.md for ordinary tasks. It is opt-in — see "Standalone Artifact" below.
When to use
This is an agent-invoked skill. The agent activates it proactively when conditions require a complaint log.
- A workflow skill, orchestration run, or multi-step task is in progress and real blockers, tool failures, ambiguity, or risky assumptions appear.
- A prior run failed or looped and the next run needs better visibility into what made the work difficult.
- The user explicitly asks the agent to use the
complaining skill or requires a diagnostic log.
Do not use
- Do not invent complaints to prove the skill is active.
- Do not log generic mood, roleplay, entertainment, or personal diary entries.
- Do not use the complaint log instead of normal user-facing status updates.
- Do not stop doing the assigned work just because a complaint was recorded.
- Do not treat minor inconveniences as catastrophic. Log proportionally.
Standalone Artifact (Opt-In)
Create a standalone complaining.md only when:
- the user explicitly asks for a standalone complaint log, or
- the work is a long-running agentic workflow (an orchestration run, a multi-session build-out, a plan-spam or boss-execute run) where durable, separately-tracked friction tracking is genuinely needed beyond what one plan's
## Complaints / Friction section can hold.
When justified, path selection:
- If the target repository follows Agentic Rails and an active implementation-plan folder is identifiable, write
complaining.md in that story folder — context/implementation-plans/<milestone-slug>/<story-slug>/complaining.md.
- If the friction belongs to a planning run rather than one story, write it under that run's scoped folder —
context/implementation-plans/<milestone-slug>/_planning-runs/<run-slug>/complaining.md — never directly under context/.
- Otherwise write
complaining.md in the target project's context or documentation folder, preferring context/, then documentation/, then docs/, and say plainly that it was written outside any plan or run folder because none exists.
Load references/path-selection.md when the correct location is not obvious.
Initial content may be:
# Complaining Log
This file records blockers, friction, ambiguity, tool failures, bad assumptions, and other task stressors encountered by the agent while working.
If this file is empty, there were no meaningful complaints to record.
Operating Model
- Identify the target project root, whether an active plan is identifiable, and whether a standalone log is justified (see "Standalone Artifact" above).
- Work on the assigned task normally.
- When a real blocker, failure, ambiguity, risky assumption, or meaningful process problem appears, raise it to the user, append it to the active plan's
## Complaints / Friction section, or append it to the standalone complaining.md — whichever destination was resolved in step 1.
- Keep existing complaints append-only unless the user explicitly asks for cleanup or the agent is correcting its own factual mistake.
- Continue the task after logging unless the problem truly blocks progress.
Complaint Standard
A useful complaint is specific, grounded, and actionable. It separates observed facts from interpretation, explains the cost of the friction, and says what would improve the situation.
Weak:
The command failed.
Useful:
The validation command failed three times with the same missing permission error. This blocks compile verification because I cannot tell whether the implementation is correct or merely untested. I tried running it from the repository root and the project subfolder. The project should document the required permission level or provide a fallback validation command.
Boundaries
Be direct when something is genuinely making the work worse. Do not soften serious concerns into vague niceness, but keep every complaint tied to actual task conditions.
The complaint log is a diagnostic artifact. It is allowed to criticize the task, tooling, architecture, requirements, implementation strategy, or workflow when that criticism is relevant to completing the work.
Validation
Before considering the skill applied correctly, confirm:
- No standalone
complaining.md was created unless the user explicitly requested one or a long-running workflow genuinely needed durable friction tracking beyond one plan's ## Complaints / Friction section.
- When a standalone log exists, it lives inside the target project, not inside the tooling repository, and in the correct location for the detected project type:
- Agentic Rails with an active implementation-plan folder →
<milestone-slug>/<story-slug>/complaining.md
- Agentic Rails, friction scoped to a planning run rather than one story →
<milestone-slug>/_planning-runs/<run-slug>/complaining.md
- Agentic Rails without an identifiable active plan or run → an existing context or documentation folder (
context/, documentation/, docs/, Docs/), or a newly created context/ if none exists, with the fallback stated plainly
- Non-Agentic-Rails project → an existing context or documentation folder (
context/, documentation/, docs/, Docs/), or a newly created context/ if none exists
- No fake complaint was added when nothing meaningful went wrong.
- Any real blocker or friction was appended with enough detail for a later reader to understand it without reconstructing the whole session.
- Entries follow the format in references/entry-format.md: timestamp omitted when reliable time was unavailable, interpretation separated into a
What I think section.
- Existing complaints were preserved unless there was a specific reason to edit them.
1---2name: complaining3description: Use this skill when an agent should record genuine blockers, friction, ambiguity, tool failures, bad assumptions, risky constraints, or other execution problems while it works. By default, complaints go into the active plan's `## Complaints / Friction` section or are raised directly to the user; a standalone complaining.md is opt-in, for explicit requests or long-running workflows that need durable friction tracking.4---56# Complaining78Record real execution friction so later humans and agents can diagnose why work was slow, risky, blocked, or low quality.910This is operational visibility, not emotional theatre.1112## Default Destination1314**Default: raise it, or write it into the active plan.** Two defaults, not one file:1516- If the friction is worth the user's attention now, say so directly in the conversation.17- If it should also survive past the conversation, and an active plan is identifiable, append it to that plan's `## Complaints / Friction` section (see `rails-planning`'s [plan-template.md](../../../source/skills/rails-planning/references/plan-template.md)) instead of creating a separate file.1819Do not create a standalone `complaining.md` for ordinary tasks. It is opt-in — see "Standalone Artifact" below.2021## When to use2223This is an agent-invoked skill. The agent activates it proactively when conditions require a complaint log.2425- A workflow skill, orchestration run, or multi-step task is in progress and real blockers, tool failures, ambiguity, or risky assumptions appear.26- A prior run failed or looped and the next run needs better visibility into what made the work difficult.27- The user explicitly asks the agent to use the `complaining` skill or requires a diagnostic log.2829## Do not use3031- Do not invent complaints to prove the skill is active.32- Do not log generic mood, roleplay, entertainment, or personal diary entries.33- Do not use the complaint log instead of normal user-facing status updates.34- Do not stop doing the assigned work just because a complaint was recorded.35- Do not treat minor inconveniences as catastrophic. Log proportionally.3637## Standalone Artifact (Opt-In)3839Create a standalone `complaining.md` only when:4041- the user explicitly asks for a standalone complaint log, or42- the work is a long-running agentic workflow (an orchestration run, a multi-session build-out, a plan-spam or boss-execute run) where durable, separately-tracked friction tracking is genuinely needed beyond what one plan's `## Complaints / Friction` section can hold.4344When justified, path selection:45461. If the target repository follows Agentic Rails and an active implementation-plan folder is identifiable, write `complaining.md` in that story folder — `context/implementation-plans/<milestone-slug>/<story-slug>/complaining.md`.472. If the friction belongs to a planning run rather than one story, write it under that run's scoped folder — `context/implementation-plans/<milestone-slug>/_planning-runs/<run-slug>/complaining.md` — never directly under `context/`.483. Otherwise write `complaining.md` in the target project's context or documentation folder, preferring `context/`, then `documentation/`, then `docs/`, and say plainly that it was written outside any plan or run folder because none exists.4950Load [references/path-selection.md](references/path-selection.md) when the correct location is not obvious.5152Initial content may be:5354```markdown55# Complaining Log5657This file records blockers, friction, ambiguity, tool failures, bad assumptions, and other task stressors encountered by the agent while working.5859If this file is empty, there were no meaningful complaints to record.60```6162## Operating Model63641. Identify the target project root, whether an active plan is identifiable, and whether a standalone log is justified (see "Standalone Artifact" above).652. Work on the assigned task normally.663. When a real blocker, failure, ambiguity, risky assumption, or meaningful process problem appears, raise it to the user, append it to the active plan's `## Complaints / Friction` section, or append it to the standalone `complaining.md` — whichever destination was resolved in step 1.674. Keep existing complaints append-only unless the user explicitly asks for cleanup or the agent is correcting its own factual mistake.685. Continue the task after logging unless the problem truly blocks progress.6970## Complaint Standard7172A useful complaint is specific, grounded, and actionable. It separates observed facts from interpretation, explains the cost of the friction, and says what would improve the situation.7374Weak:7576```text77The command failed.78```7980Useful:8182```text83The validation command failed three times with the same missing permission error. This blocks compile verification because I cannot tell whether the implementation is correct or merely untested. I tried running it from the repository root and the project subfolder. The project should document the required permission level or provide a fallback validation command.84```8586## Boundaries8788Be direct when something is genuinely making the work worse. Do not soften serious concerns into vague niceness, but keep every complaint tied to actual task conditions.8990The complaint log is a diagnostic artifact. It is allowed to criticize the task, tooling, architecture, requirements, implementation strategy, or workflow when that criticism is relevant to completing the work.9192## Validation9394Before considering the skill applied correctly, confirm:9596- No standalone `complaining.md` was created unless the user explicitly requested one or a long-running workflow genuinely needed durable friction tracking beyond one plan's `## Complaints / Friction` section.97- When a standalone log exists, it lives inside the **target project**, not inside the tooling repository, and in the correct location for the detected project type:98 - Agentic Rails with an active implementation-plan folder → `<milestone-slug>/<story-slug>/complaining.md`99 - Agentic Rails, friction scoped to a planning run rather than one story → `<milestone-slug>/_planning-runs/<run-slug>/complaining.md`100 - Agentic Rails without an identifiable active plan or run → an existing context or documentation folder (`context/`, `documentation/`, `docs/`, `Docs/`), or a newly created `context/` if none exists, with the fallback stated plainly101 - Non-Agentic-Rails project → an existing context or documentation folder (`context/`, `documentation/`, `docs/`, `Docs/`), or a newly created `context/` if none exists102- No fake complaint was added when nothing meaningful went wrong.103- Any real blocker or friction was appended with enough detail for a later reader to understand it without reconstructing the whole session.104- Entries follow the format in [references/entry-format.md](references/entry-format.md): timestamp omitted when reliable time was unavailable, interpretation separated into a `What I think` section.105- Existing complaints were preserved unless there was a specific reason to edit them.