Files
platform/todo/affordances/no-way-to-see-which-affordances-are-reaching.md
pastilhasandClaude Fable 5 6071ded175 todo: one file per item, grouped by theme, with a generated index
TODO.md had reached 1050 lines and 72 open items across 28 sections, read mostly
on a phone. It is now a directory: todo/<theme>/<item>.md, one card per file, with
frontmatter carrying id, status, created date and order, and the prose body copied
across verbatim. TODO.md becomes a generated index (bun run todo:index).

Dates: where an item's prose stated one it is used; otherwise its old section's;
otherwise 2026-08-20, floored at the day before the split rather than invented.
date_source records which.

Shaped for a two-way Kanban board, filed as todo/tooling — a card is a file, id is
the identity, frontmatter is the machine's half and the body is the owner's.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-21 05:42:39 +00:00

1.5 KiB

id, title, theme, status, created, date_source, order
id title theme status created date_source order
affordances/no-way-to-see-which-affordances-are-reaching No way to see which affordances are reaching your agents, or to turn one off affordances open 2026-08-21 stated 1

No way to see which affordances are reaching your agents, or to turn one off. They are global: affordanceBlock() reads every file under capabilities/affordances/ and is called with no user context (claude-manager.ts:582), so every account gets every one, in every conversation.

That is fine while they are uncontroversial and stops being fine immediately after. "Wait for the question" was written to one owner's taste on 2026-08-21 — probably what most people want, and nobody has asked anyone. An affordance nobody can see and nobody can decline is a preference imposed as a fact.

Wants: a settings screen listing every affordance with its name, description, where it came from (officer/core versus a plugin) and its body, plus a per-user toggle. Storage is one table keyed on user and the affordance's namespaced id. The work is threading a userId into affordanceBlock, which today takes only a root path.

Two things to decide when it is built rather than now: whether a plugin can ship an affordance that is off by default, and whether disabling one should be visible to the agent at all — an agent told "this client renders images" behaves differently from one told nothing, and a THIRD state, "you were told not to", is a different thing again.