TODOs
SkillProductivityApply when writing, reading or removing an `@TODO`, when a workaround waits on something outside the repo, or when a bump or a closed issue may have ended one. Esposter's `@TODO` convention, a marker only for a workaround something external forces, linked to what ends it and revisited when that may have happened.
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; ahel provides instructions and does not run this skill.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the TODOs skill
What this skill tells your AI
The instructions your AI receives, as published by esposter/esposter in .agents/skills/todos/SKILL.md and read by ahel’s review.
An @TODO marks a workaround the repository carries because something outside it is not ready yet — an upstream bug, a browser feature, a dependency's release. It is the one comment that states a future, and it may only because the future belongs to someone else and a link says how to know it arrived.
Settled — do not re-propose
- A TODO for our own work — "retirement removes this", "until the actions name meanings", "clean up once X is migrated". Work of ours is done in the change that finds it, or it is a GitHub issue (
.agents/issue-tracker.md) or a proposal (thedocsskill,references/page-shapes.md). A marker for it is a finding to fix now, never a line to reword. - A TODO linking one of our own issues. Same thing with a URL on it: the issue is the record, and the code carries no marker for it.
- A condition in words in place of the link — "once nuxt fixes its types", "in nitro v3". Nobody can check it, so it reads the same the day the condition is met as the day it was written; the link is what a later reader opens to find out.
The form
The marker is followed by the link and nothing else first — scripts/src/workspace/todos.test.ts fails any tracked file, prose aside, where it is not:
// @TODO: <link>in TypeScript and a<script>block,<!-- @TODO: <link> -->in a template,# @TODO: <link>in YAML.package.jsonhas no comments: thescriptsCommentsstring is thepackage-scriptsskill's (references/scripts-comments.md), in this same form.
The link is the thing whose resolution ends the workaround — the upstream issue or pull request, the webstatus.dev feature, the release. A search result, a discussion that tracks nothing or a docs page does not end anything. When no issue exists yet, one is filed upstream before the marker is written, and a limitation upstream closes as won't-fix or documents as intended is no longer a TODO: the workaround is permanent, so it keeps a plain comment saying why, and that comment may cite the upstream record.
When no issue exists yet and none is filed now, the marker says so in place of the link — // @TODO: no upstream issue — <what waits, and on whom> — and its file is listed under "Unfiled upstream issues", on this page, with the repository to file against, so the reminder to file one lives in one place. scripts/src/workspace/todos.test.ts holds that list to the tree both ways. Once filed, the marker takes the link and the row goes.
What to remove follows the link, in one clause, when it is not obvious — — drop getSynchronizedFunction once Nitro awaits its plugins. A marker over a single-purpose line (// @TODO: https://github.com/vuejs/core/issues/11371 on a Props the compiler cannot resolve yet) needs no clause: the line under it is what goes.
Where it sits
On the workaround itself — the line, block or file the fix deletes — as an own-line comment above it with the placement rules of the formatting skill ("Comments"). A workaround spanning a file carries it as the file's first line. The same marker repeated at every site of one upstream bug is deliberate: each site is simplified in place the day it can be, so the repetition is not a duplicate to collapse.
When to revisit
A marker is revisited on every bump of the package it links and whenever its issue closes; the workaround and its marker are removed in that commit once the fix is released in the resolved version (references/revisiting.md).
Reference pages
references/revisiting.md— when bumping a package a marker links, or a linked issue may have closed.
Unfiled upstream issues
Each row is a marker in the unfiled form, waiting for its issue to be filed: the file, where it goes, and its title. The repository's owner files them by hand when one is wanted, so a session leaves the list as it is and never asks to file one.
apps/web/app/components/Ui/Slider.vue— vuetifyjs/0: "Slider:endis emitted only on pointerup, never for a keyboard change"apps/web/app/components/Message/Model/FileRenderer/Pdf.vue— vue-pdf-viewer: "Menus and popovers portal tobody, unusable inside a modal<dialog>"apps/web/app/services/trpc/mswTrpc.test.ts— nuxt/test-utils: "In the nuxt environmentfetchandRequestare happy-dom's whileHeadersstays Node's, so a library mixing the globals (msw 3) loses requests and headers"packages/trpc-nuxt-module/src/runtime/client/models/TRPCNuxtClient.test-d.ts— arktype/arktype: "attest: instantiation counts fail under a tsgo-backedtypescript—@typescript/vfsreports the probe file as existing, then finds no source file for it"apps/web/shared/types/nuxt.d.ts— nuxt/nuxt: "The server project types neitherimport.meta.envforshared/code nor a module's Nitro runtime hooks"apps/web/app/components/Genshin/World.vue— tresjs/tres: "A canvas switched fromrenderMode: 'manual'to'always'after drawing its owed frame never draws again — always mode owes a frame only once it has drawn"
Signals
- GitHub stars
- 23
- Forks
- 3
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
todos-esposter- Source
- github.com/esposter/esposter