Frontend Handoff Generator
Overview
Create evidence-based handoff documents for frontend and client implementers. The handoff must help the next developer update API clients, types, UI rendering, and error handling without guessing.
Core principle: backend evidence in, client action out. If there is no client-visible change, say client action 없음.
Announce at start: "I'm using the gen-frontend-handoff skill to create a frontend/client handoff."
Scope Resolution
Use the scope the user requested. Do not broaden it.
| User asks for |
Use |
| Current changes / no explicit scope |
git diff --stat, git diff, git diff --staged --stat, git diff --staged |
| Last commit |
git diff HEAD~1..HEAD |
| Last N commits |
git diff HEAD~N..HEAD |
| Exact range, including reversed ranges |
The exact range first; if it looks wrong or empty, report that and suggest the likely intended range |
Branch comparison such as main...feature |
git diff main...feature exactly |
| PR number |
gh pr diff <number> if gh is available |
Record the final diff command under Evidence. If the user supplied main...feature, HEAD~5..HEAD, or another range, the document must state that it used the user-specified scope.
Evidence Collection
Gather only what is needed for the handoff:
git status --short
git log --oneline --decorate -n 10
git diff --stat [scope]
git diff [scope]
Also use current conversation notes, Codex/Claude session summaries, pasted review comments, test output, or deployment notes when the user provides them. Label them as "User-provided session context" unless verified from files or commands.
Never include secrets from .env, credentials, tokens, private keys, or local-only config values.
Client Impact Decision
Classify the change before writing detailed work items.
| Evidence |
Required output |
| API route, method, request, response, status code, auth, permission, validation, pagination, sorting, filtering, or feature flag changed |
Write concrete frontend/client actions |
| API response fields added |
Include type updates, rendering impact, and loading, empty, and error states |
| API response fields removed, renamed, nullable, or semantically changed |
Flag compatibility risk and required migration |
| Error shape, status code, or validation message changed |
Include error handling and user-facing copy impact |
| DB-only, index-only, logging-only, refactor-only, or internal job change with no client-visible contract |
State client action 없음 and explain why |
| Unsure whether a change is client-visible |
Put it under Open Questions, not Required Client Work |
Required Analysis
For every client-visible change, extract:
- API contract: endpoint, method, request params/body, response body, status codes, headers, auth and permission requirements.
- API response fields: field name, type, optionality/nullability, default, example value, added/removed/renamed status.
- Type updates: generated client, TypeScript types, schema files, SDK models, enum updates, validation schemas.
- Rendering impact: screens, components, table columns, cards, detail views, empty states, conditional rendering, feature flags.
- Loading, empty, and error states: pending behavior, no-data behavior, validation errors, permission errors, retry/cancel behavior.
- Backward compatibility: whether old clients keep working, whether the client must tolerate both old and new shapes during rollout.
- Verification evidence: tests, type checks, manual checks, or "Not verified".
Do not claim unverified tests, deploys, or runtime behavior. If there is no command output proving it, write "Not verified in this handoff."
Natural Korean Prose
When the handoff is in Korean, write reader-facing text as plain, concrete
Korean prose. Use direct sentences; avoid translation-like rhythm, vague AI
filler, and internal method vocabulary. Preserve facts, numbers, dates, proper
nouns, code identifiers, commands, quotes, links, API fields, and evidence.
This selector is self-contained. If the runtime already exposes
human-friendly-writing, it is an optional final pass over only the newly
authored Korean draft before writing the handoff. Do not install, fetch, or
require it. If it is absent or unreadable, continue silently with the rules
above and complete the handoff. After an optional pass, run the normal
validation again. The pass may change wording only, never evidence, template
headings, API details, or the Continuation Prompt's instructions.
Output
Write the handoff to:
.handoffs/<YYYY-MM-DD>_<scope>_frontend.md
Use working for unstaged/staged changes, the short SHA for a single commit, or a sanitized range/branch label for explicit scopes. Create .handoffs/ if needed.
Document Template
# Frontend Handoff
**Date:** YYYY-MM-DD
**Scope:** [working tree | staged changes | HEAD~N..HEAD | main...feature | PR #N]
**Audience:** Frontend/client developer or coding agent
## Summary
- What changed:
- Client action:
- Compatibility risk:
## Evidence
- Diff command:
- Files inspected:
- User-provided session context:
- Tests/deploys verified:
## Client Impact
[Write `client action 없음` when the evidence is DB-only/internal-only.]
| Area | Impact | Required action |
|---|---|---|
| API client/types | ... | ... |
| Rendering | ... | ... |
| Loading/empty/error states | ... | ... |
## API Contract Changes
| Endpoint | Change | Client impact |
|---|---|---|
## Request Details
- Params:
- Body:
- Headers/auth:
- Validation:
## Response Details
- API response fields added:
- API response fields removed/renamed:
- Optional/nullability changes:
- Example response:
## Error And Permission Handling
- Status codes:
- Error shape:
- User-facing behavior:
## Rollout Notes
- Backend deployment dependency:
- Feature flags:
- Backward compatibility:
- Safe fallback:
## Frontend Implementation Checklist
- [ ] Update API client and generated types
- [ ] Update rendering logic
- [ ] Update loading, empty, and error states
- [ ] Add or update tests
- [ ] Verify against backend/API fixture
## Open Questions
- ...
## Continuation Prompt
Use the evidence above to update the frontend/client implementation for this API change. Preserve the stated scope, do not assume unverified backend behavior, and resolve the open questions before changing ambiguous flows.
Baseline Failures
| Failure observed without this skill |
Required behavior with this skill |
| Agent summarizes backend code but misses frontend type/rendering/error work |
Always extract type updates, rendering impact, and loading, empty, and error states |
| Agent invents client work for DB-only changes |
State client action 없음 for DB-only/internal-only diffs |
| Agent reviews more than the requested branch or commit range |
Use the user-specified scope exactly, including main...feature |
| Agent says tests passed or deploy happened without evidence |
Do not claim unverified tests, deploys, or runtime behavior |
Common Mistakes
- Treating added response fields as "no client work" without checking types and display surfaces.
- Turning every backend change into a frontend task.
- Omitting error shape and permission changes.
- Mixing current working-tree changes with an explicit commit range.
- Copying session context as fact without labeling whether it was verified.
Example
User: "Use main...feature-user-metadata and make a FE handoff."
Expected behavior:
- Run
git diff --stat main...feature-user-metadata and git diff main...feature-user-metadata.
- Identify added user response fields.
- Write
.handoffs/YYYY-MM-DD_main-feature-user-metadata_frontend.md.
- Include API client type updates, rendering impact, loading/empty/error handling, verified evidence, and a Continuation Prompt.
1---2name: gen-frontend-handoff3description: Use when backend API changes, server behavior changes, git diffs, commit ranges, branch comparisons, or current session context need to be turned into a handoff for frontend, mobile, SDK, or other client developers and coding agents, including explicit "/gen-frontend-handoff" or "$gen-frontend-handoff"4---56# Frontend Handoff Generator78## Overview910Create evidence-based handoff documents for frontend and client implementers. The handoff must help the next developer update API clients, types, UI rendering, and error handling without guessing.1112**Core principle:** backend evidence in, client action out. If there is no client-visible change, say `client action 없음`.1314**Announce at start:** "I'm using the gen-frontend-handoff skill to create a frontend/client handoff."1516## Scope Resolution1718Use the scope the user requested. Do not broaden it.1920| User asks for | Use |21|---|---|22| Current changes / no explicit scope | `git diff --stat`, `git diff`, `git diff --staged --stat`, `git diff --staged` |23| Last commit | `git diff HEAD~1..HEAD` |24| Last N commits | `git diff HEAD~N..HEAD` |25| Exact range, including reversed ranges | The exact range first; if it looks wrong or empty, report that and suggest the likely intended range |26| Branch comparison such as `main...feature` | `git diff main...feature` exactly |27| PR number | `gh pr diff <number>` if `gh` is available |2829Record the final diff command under **Evidence**. If the user supplied `main...feature`, `HEAD~5..HEAD`, or another range, the document must state that it used the user-specified scope.3031## Evidence Collection3233Gather only what is needed for the handoff:3435```bash36git status --short37git log --oneline --decorate -n 1038git diff --stat [scope]39git diff [scope]40```4142Also use current conversation notes, Codex/Claude session summaries, pasted review comments, test output, or deployment notes when the user provides them. Label them as "User-provided session context" unless verified from files or commands.4344Never include secrets from `.env`, credentials, tokens, private keys, or local-only config values.4546## Client Impact Decision4748Classify the change before writing detailed work items.4950| Evidence | Required output |51|---|---|52| API route, method, request, response, status code, auth, permission, validation, pagination, sorting, filtering, or feature flag changed | Write concrete frontend/client actions |53| API response fields added | Include type updates, rendering impact, and loading, empty, and error states |54| API response fields removed, renamed, nullable, or semantically changed | Flag compatibility risk and required migration |55| Error shape, status code, or validation message changed | Include error handling and user-facing copy impact |56| DB-only, index-only, logging-only, refactor-only, or internal job change with no client-visible contract | State `client action 없음` and explain why |57| Unsure whether a change is client-visible | Put it under Open Questions, not Required Client Work |5859## Required Analysis6061For every client-visible change, extract:6263- **API contract:** endpoint, method, request params/body, response body, status codes, headers, auth and permission requirements.64- **API response fields:** field name, type, optionality/nullability, default, example value, added/removed/renamed status.65- **Type updates:** generated client, TypeScript types, schema files, SDK models, enum updates, validation schemas.66- **Rendering impact:** screens, components, table columns, cards, detail views, empty states, conditional rendering, feature flags.67- **Loading, empty, and error states:** pending behavior, no-data behavior, validation errors, permission errors, retry/cancel behavior.68- **Backward compatibility:** whether old clients keep working, whether the client must tolerate both old and new shapes during rollout.69- **Verification evidence:** tests, type checks, manual checks, or "Not verified".7071Do not claim unverified tests, deploys, or runtime behavior. If there is no command output proving it, write "Not verified in this handoff."7273## Natural Korean Prose7475When the handoff is in Korean, write reader-facing text as plain, concrete76Korean prose. Use direct sentences; avoid translation-like rhythm, vague AI77filler, and internal method vocabulary. Preserve facts, numbers, dates, proper78nouns, code identifiers, commands, quotes, links, API fields, and evidence.7980This selector is self-contained. If the runtime already exposes81`human-friendly-writing`, it is an optional final pass over only the newly82authored Korean draft before writing the handoff. Do not install, fetch, or83require it. If it is absent or unreadable, continue silently with the rules84above and complete the handoff. After an optional pass, run the normal85validation again. The pass may change wording only, never evidence, template86headings, API details, or the Continuation Prompt's instructions.8788## Output8990Write the handoff to:9192```text93.handoffs/<YYYY-MM-DD>_<scope>_frontend.md94```9596Use `working` for unstaged/staged changes, the short SHA for a single commit, or a sanitized range/branch label for explicit scopes. Create `.handoffs/` if needed.9798## Document Template99100```markdown101# Frontend Handoff102103**Date:** YYYY-MM-DD104**Scope:** [working tree | staged changes | HEAD~N..HEAD | main...feature | PR #N]105**Audience:** Frontend/client developer or coding agent106107## Summary108109- What changed:110- Client action:111- Compatibility risk:112113## Evidence114115- Diff command:116- Files inspected:117- User-provided session context:118- Tests/deploys verified:119120## Client Impact121122[Write `client action 없음` when the evidence is DB-only/internal-only.]123124| Area | Impact | Required action |125|---|---|---|126| API client/types | ... | ... |127| Rendering | ... | ... |128| Loading/empty/error states | ... | ... |129130## API Contract Changes131132| Endpoint | Change | Client impact |133|---|---|---|134135## Request Details136137- Params:138- Body:139- Headers/auth:140- Validation:141142## Response Details143144- API response fields added:145- API response fields removed/renamed:146- Optional/nullability changes:147- Example response:148149## Error And Permission Handling150151- Status codes:152- Error shape:153- User-facing behavior:154155## Rollout Notes156157- Backend deployment dependency:158- Feature flags:159- Backward compatibility:160- Safe fallback:161162## Frontend Implementation Checklist163164- [ ] Update API client and generated types165- [ ] Update rendering logic166- [ ] Update loading, empty, and error states167- [ ] Add or update tests168- [ ] Verify against backend/API fixture169170## Open Questions171172- ...173174## Continuation Prompt175176Use the evidence above to update the frontend/client implementation for this API change. Preserve the stated scope, do not assume unverified backend behavior, and resolve the open questions before changing ambiguous flows.177```178179## Baseline Failures180181| Failure observed without this skill | Required behavior with this skill |182|---|---|183| Agent summarizes backend code but misses frontend type/rendering/error work | Always extract type updates, rendering impact, and loading, empty, and error states |184| Agent invents client work for DB-only changes | State `client action 없음` for DB-only/internal-only diffs |185| Agent reviews more than the requested branch or commit range | Use the user-specified scope exactly, including `main...feature` |186| Agent says tests passed or deploy happened without evidence | Do not claim unverified tests, deploys, or runtime behavior |187188## Common Mistakes189190- Treating added response fields as "no client work" without checking types and display surfaces.191- Turning every backend change into a frontend task.192- Omitting error shape and permission changes.193- Mixing current working-tree changes with an explicit commit range.194- Copying session context as fact without labeling whether it was verified.195196## Example197198User: "Use `main...feature-user-metadata` and make a FE handoff."199200Expected behavior:2012021. Run `git diff --stat main...feature-user-metadata` and `git diff main...feature-user-metadata`.2032. Identify added user response fields.2043. Write `.handoffs/YYYY-MM-DD_main-feature-user-metadata_frontend.md`.2054. Include API client type updates, rendering impact, loading/empty/error handling, verified evidence, and a Continuation Prompt.