.pi/skills/extension-keybinding-guide/SKILL.md
Keybinding system for Pi extensions. Rules, verb set, footer layout and conventions for panels, gates and interactive prompts. Use when writing or modifying extensions that have user-facing UI.
npx skillsauth add jitsusama/agentic-harness.pi extension-keybinding-guideInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Every panel, gate and interactive prompt in the extension system follows the same input model. This skill defines what that model is so new work stays consistent with the existing codebase.
No global keyboard shortcuts. Features are accessed
through slash commands only. The only exceptions are
Ctrl+Alt+F and Ctrl+Alt+M for panel height toggling,
which must work during panel display.
Numbers for views, letters for actions. View switching
keys (1, 2, 3) and action keys (r, p, w) live
in structurally separate namespaces. Collisions are
impossible.
Enter/Escape for the primary decision pair. Enter is always the default forward action (approve, proceed, confirm). Escape is always cancel/dismiss. Zero letters to memorize for the most common interaction.
Explicit letter for destructive or consequential
actions. Speed bumps prevent accidents. Delete is d,
not Enter. Enter must never trigger a destructive action.
Shift = "same thing, but let me talk first." Every
action key has a Shift variant that opens an editor before
executing. Shift+Enter opens the editor then proceeds.
Shift+Escape is the universal redirect: "none of the
above, here's what I want instead."
Every panel follows this model:
| Input | Meaning |
|---|---|
| Enter | Approve / proceed (default forward action) |
| Shift+Enter | Proceed with guidance (opens editor first) |
| Escape | Cancel silently |
| Shift+Escape | Open editor for redirect |
| Action key | Execute alternative action immediately |
| Shift + action key | Open editor, then execute with note |
| 1 2 3 | Switch view within current tab |
Enter and Escape handle the primary approve/cancel pair. Six letter keys cover every alternative beyond that binary:
| Verb | Key | When to Use |
|---|---|---|
| Reject | r | Refuse, send back |
| Write | w | Compose a response |
| Pass | p | Reviewed, moving on (tab or thread) |
| New | n | Create a new item |
| Delete | d | Permanently remove (destructive) |
| Explore | e | Go deeper before deciding |
Enter is always the default forward action. Letter keys are for alternatives beyond approve/cancel. Every key is the first letter of its verb. No overloading.
Every action key has a Shift variant that opens the note
editor. This is handled by handleActionInput in
action-bar.ts; extensions don't implement it themselves.
Shift+Enter opens the editor then fires the Enter action
with a note. This is handled in prompt-single.ts and
prompt-tabbed.ts.
Shift+Escape is the universal redirect. It lets the user
say "none of the above" and type guidance. The infrastructure
handles this too.
Views within a tab use 1, 2, 3 as keys. Never letters.
The formatViewHint function uses prefix format for number
keys (renders as [1] Overview). New views follow sequential
numbering within their tab.
The unified footer (renderFooter in panel-layout.ts)
adapts to context. When actions are present, it renders two
rows. When they aren't, one row.
┌── actions ───┐ ┌── modifiers ──┐
[R]eject [P]ass ⇧+key annotate · ⇧+Esc redirect
[1] Overview [2] Source · Tab · C+# Enter approve · C+Enter submit · Esc cancel
└── navigation ┘ └── decisions ──┘
Top-left: what you do to the current item (actions). Top-right: how to add a note to what you do (modifiers). Bottom-left: how to move around (navigation). Bottom-right: how to finish (decisions).
Binary gates with no actions show only the bottom row:
Enter approve · Esc cancel
renderFooter for the hint display.1, 2, 3).p) for tab completion.renderFooter for the hint display.+ key. Use n for New.registerShortcut calls except for panel height.development
Structure of a quest README and the documents that live under it: frontmatter shape, the four core and four optional body sections, emoji glyphs, ID format, alias notation, Cast bullets and Journey entries. Use when writing or editing a quest README, a plan, research, brief or report document under a quest. Pairs with quest-convention for choices like kind, promotion and reordering. Follow the prose-standard for voice.
tools
Operational conventions for the quest system: when to use a quest versus a subquest versus a sidequest, when to scaffold a plan or research document, how to reorder priorities, when to add optional sections, when to conclude versus retire, the resuscitate pattern. Use when driving the quest tool, deciding kind, promoting or parking work, or organising a project as quests. Pairs with quest-format for the on-disk shape.
development
Markdown structure rules: Title Case headings with their exceptions, the line-width target and its legitimate exceptions, reference-style links, fenced code blocks with language tags, tables and lists. Use when writing or editing any markdown file (README, AGENTS, docs, plans, skill files), or when adding a heading, link, table or code block. Owns markdown structure; pairs with prose-standard, which owns voice, grammar, spelling and punctuation.
tools
How to measure whether convention corrections keep recurring in the pi session logs, by category and by week. Use to record a baseline before the convention gates take effect and to re-run afterwards to confirm the recurring categories bend down. Pairs with the convention gates (pr-guardian, issue-guardian, commit-guardian, slack-integration) and the convention-context extension.