PiG Documentation

Guides and references for configuring, using, and extending PiG.

Keybindings

PiG reads keybindings from ~/.pig/agent/keybindings.json. The file is optional. If it is absent, PiG uses the defaults in this page.

Each entry maps one action to one or more keys. To change a binding, write the action name and the keys you want:

{
  "app.tools.expand": ["ctrl+e"],
  "app.session.tree": ["ctrl+shift+t"]
}

A binding in the file replaces the default for that action. It does not add to it. Bindings you do not name keep their defaults. Set an action to [] to leave the action with no key.

Set PIG_CODING_AGENT_DIR to read the file from a different directory.

Use /hotkeys to list the keys that are active in the current session.

If two actions claim the same key, PiG records the conflict and keeps both bindings. Both actions then answer that key, so give one of them a different key.

Defaults

The keys below are the macOS defaults. Platform differences are listed after the tables.

Session control

Action
Default key
Effect
app.clearctrl+cClear editor
app.exitctrl+dExit when editor is empty
app.interruptescapeCancel or abort
app.session.deletectrl+dDelete session
app.session.deleteNoninvasivectrl+backspaceDelete session when query is empty
app.session.forknoneFork current session
app.session.newnoneStart a new session
app.session.renamectrl+rRename session
app.session.resumenoneResume a session
app.session.toggleNamedFilterctrl+nToggle named session filter
app.session.togglePathctrl+pToggle session path display
app.session.toggleSortctrl+sToggle session sort mode
app.session.treenoneOpen session tree
app.suspendctrl+zSuspend to background

Editing and messages

Action
Default key
Effect
app.clipboard.pasteImagectrl+vPaste image from clipboard (text fallback)
app.editor.externalctrl+gOpen external editor
app.message.copyctrl+xCopy message to clipboard
app.message.dequeuealt+upRestore queued messages
app.message.followUpalt+enterQueue follow-up message

Models

Action
Default key
Effect
app.model.cycleBackwardshift+ctrl+pCycle to previous model
app.model.cycleForwardctrl+pCycle to next model
app.model.selectctrl+lOpen model selector
app.models.clearAllctrl+xClear all models
app.models.enableAllctrl+aEnable all models
app.models.reorderDownalt+downMove model down in order
app.models.reorderUpalt+upMove model up in order
app.models.savectrl+sSave model selection
app.models.toggleProviderctrl+pToggle all models for provider

Display

Action
Default key
Effect
app.thinking.cycleshift+tabCycle thinking level
app.thinking.togglectrl+tToggle thinking blocks
app.tools.expandctrl+oToggle tool details

Session tree

Action
Default key
Effect
app.tree.editLabelshift+lEdit tree label
app.tree.filter.allctrl+aTree filter: show all entries
app.tree.filter.cycleBackwardshift+ctrl+oTree filter: cycle backward
app.tree.filter.cycleForwardctrl+oTree filter: cycle forward
app.tree.filter.defaultctrl+dTree filter: default view
app.tree.filter.labeledOnlyctrl+lTree filter: labeled entries only
app.tree.filter.noToolsctrl+tTree filter: hide tool results
app.tree.filter.userOnlyctrl+uTree filter: user messages only
app.tree.foldOrUpalt+left, ctrl+leftFold tree branch or move up
app.tree.toggleLabelTimestampshift+tToggle tree label timestamps
app.tree.unfoldOrDownalt+right, ctrl+rightUnfold tree branch or move down

Platform differences

Some actions use a different key on each platform, because the terminal or the operating system reserves the macOS key.

Action
macOS
Linux
Windows
app.clipboard.pasteImagectrl+vctrl+valt+v
app.suspendctrl+zctrl+znone
app.message.dequeuealt+upalt+upalt+q
app.message.followUpalt+enteralt+enterctrl+q
app.model.cycleBackwardshift+ctrl+pshift+ctrl+palt+p
app.tree.foldOrUpalt+left, ctrl+leftctrl+left, alt+leftctrl+left, alt+left
app.tree.unfoldOrDownalt+right, ctrl+rightctrl+right, alt+rightctrl+right, alt+right

Actions with no default key

These actions exist but have no key until you assign one. Reach them with their slash command, or bind them in keybindings.json.

Action
Slash command
app.session.fork/fork
app.session.new/new
app.session.resume/resume
app.session.tree/tree

Key names

Write a key as its name, or as modifiers joined to the name with +. Use ctrl, alt and shift for modifiers. Examples: ctrl+o, shift+ctrl+p, alt+enter, escape, ctrl+backspace.

Terminals do not all report the same keys. If a binding does not respond, the terminal usually consumed the key before PiG saw it. See terminal setup.

Adapted from upstream Pi documentation · Upstream documentation ↗ · MIT License