From honcho
Interactively configures Honcho memory plugin settings via menus for peers, session mapping, workspace, host, context refresh, and message upload.
npx claudepluginhub plastic-labs/claude-honcho --plugin honchoThis skill is limited to using the following tools:
Interactive configuration for the Honcho memory plugin. Uses AskUserQuestion for all menus and selections — never dump numbered text lists.
Guides first-time Honcho setup: checks API key status, instructs environment variable setup (bash/powershell), validates connection, creates config for persistent memory in Claude Code.
Integrates Honcho memory library into Python or TypeScript codebases for stateful AI agents. Guides SDK setup, peers/sessions config, dialectic chat endpoints, bot frameworks.
Reconfigures Poor Man's Memory (PMM) settings by reading memory/config.md, summarizing current values, and prompting interactively for changes to save cadence, git commit/push behavior, window size, verbosity, and more. Triggered by /pmm:settings.
Share bugs, ideas, or general feedback.
Interactive configuration for the Honcho memory plugin. Uses AskUserQuestion for all menus and selections — never dump numbered text lists.
Call get_config to load the current state. The response includes a card field — a pre-rendered box-drawing card with perfect alignment.
Output the card value exactly as-is inside a code fence. Do not modify it, re-render it, or add any formatting. Just wrap it in triple backticks:
```
{card value here, verbatim}
```
configExists is false, tell the user no config exists and offer to create one.Present ONE question with these options (the user can select "Other" to reach advanced settings):
AskUserQuestion:
question: "What would you like to configure?"
header: "Config"
options:
- label: "Peers"
description: "Your name and AI name (currently: {resolved.peerName} / {resolved.aiPeer})"
- label: "Session mapping"
description: "How sessions are named — per directory, git branch, or per chat (currently: {resolved.sessionStrategy})"
- label: "Workspace"
description: "Data space, linking, and cross-tool context (currently: {resolved.workspace})"
If the user selects "Other", present advanced options:
AskUserQuestion:
question: "Advanced settings:"
header: "Advanced"
options:
- label: "Host"
description: "Platform / local / custom URL (currently: {current.host})"
- label: "Context refresh"
description: "TTL, message threshold, dialectic settings"
- label: "Message upload"
description: "Token limits, summarization settings"
Always include current values in the description so the user can see what's set.
When selected, use AskUserQuestion to ask which peer to change:
AskUserQuestion:
question: "Which peer to change?"
header: "Peers"
options:
- label: "Your name"
description: "Currently: {resolved.peerName}"
- label: "AI name"
description: "Currently: {resolved.aiPeer}"
Then ask for the new value. Call set_config with peerName or aiPeer.
Use AskUserQuestion to ask for the new value if there are known options, otherwise ask the user to type it. Call set_config with the appropriate field. Show the result.
AskUserQuestion:
question: "Which session mapping strategy?"
header: "Sessions"
options:
- label: "per-directory (Recommended)"
description: "{peer}-{repo} — one session per project"
- label: "git-branch"
description: "{peer}-{repo}-{branch} — session follows branch"
- label: "chat-instance"
description: "chat-{id} — fresh each launch"
Do NOT use markdown previews for this menu — descriptions are sufficient and previews truncate in narrow terminals.
After strategy selection, ask about peer prefix:
AskUserQuestion:
question: "Include your name in session names?"
header: "Prefix"
options:
- label: "Yes — {peerName}-{repoName}"
description: "For teams sharing a workspace"
- label: "No — {repoName} only"
description: "Cleaner for solo use"
When selected, present a sub-menu:
AskUserQuestion:
question: "Workspace settings?"
header: "Workspace"
options:
- label: "Rename workspace"
description: "Change workspace name (currently: {resolved.workspace})"
- label: "Link / unlink hosts"
description: "Share context across tools (currently: {resolved.linkedHosts || 'none'})"
Dangerous field — requires confirmation. First call set_config WITHOUT confirm: true. The tool will return a description of what will happen. Use AskUserQuestion to confirm:
AskUserQuestion:
question: "Switch workspace to '{value}'?"
header: "Confirm"
options:
- label: "Yes, switch"
description: "Change to the new workspace"
- label: "Cancel"
description: "Keep current workspace"
If confirmed, call set_config again WITH confirm: true.
Linking and global mode are one concept: if any hosts are linked, global mode is on (shared workspace, sessions, peers). If all hosts are unlinked, global mode is off.
Show one option per host. Each option is either "Link {host}" or "Unlink {host}" depending on current state. Do NOT use multiSelect — use single-select so only one action happens at a time.
AskUserQuestion:
question: "Link or unlink a host:"
header: "Link"
options:
- label: "Unlink {hostKey}" // for each host in resolved.linkedHosts
description: "Currently linked (workspace: {hostWorkspace})"
- label: "Link {hostKey}" // for each host NOT in resolved.linkedHosts
description: "workspace: {hostWorkspace}"
(one option per host from get_config's host.otherHosts)
If the user chose "Link {host}":
Compute the new linked array: current resolved.linkedHosts + the new host.
Call set_config with field: "linkedHosts" and the new array.
If this is the first link (was previously empty), prompt for shared workspace:
AskUserQuestion:
question: "Shared workspace name?"
header: "Workspace"
options:
- label: "{currentWorkspace} (Recommended)"
description: "Keep the current workspace"
- label: "{otherHostWorkspace}"
description: "Use {otherHost}'s workspace"
(one option per unique workspace among linked hosts + current host)
Call set_config with field: "workspace", value: chosen, confirm: true.
Call set_config with field: "globalOverride", value: true, confirm: true.
If already linked to other hosts (just adding one more), skip the workspace prompt — the shared workspace is already set.
If the user chose "Unlink {host}":
Compute the new linked array: current resolved.linkedHosts minus that host.
Call set_config with field: "linkedHosts" and the new array.
If the new array is empty (no hosts linked), also disable global mode:
Call set_config with field: "globalOverride", value: false.
Explain: "All hosts unlinked. Each host uses its own workspace and config."
If hosts remain linked, just confirm: "Unlinked {host}. Still linked to: {remaining}."
Host changes require confirmation. First call set_config WITHOUT confirm: true. The tool will return a description of what will happen. Use AskUserQuestion to confirm, then call again WITH confirm: true.
Use AskUserQuestion to pick which setting to change:
AskUserQuestion:
question: "Which context refresh setting?"
header: "Refresh"
options:
- label: "TTL"
description: "Cache lifetime — currently {contextRefresh.ttlSeconds}s (default: 300)"
- label: "Message threshold"
description: "Refresh every N messages — currently {contextRefresh.messageThreshold} (default: 30)"
- label: "Skip dialectic"
description: "Skip chat() in prompt hook — currently {contextRefresh.skipDialectic} (default: false)"
Then ask for the new value and call set_config.
Use AskUserQuestion to pick which setting to change:
AskUserQuestion:
question: "Which message upload setting?"
header: "Upload"
options:
- label: "Max user tokens"
description: "Truncate user messages — currently {messageUpload.maxUserTokens || 'no limit'}"
- label: "Max assistant tokens"
description: "Truncate assistant messages — currently {messageUpload.maxAssistantTokens || 'no limit'}"
- label: "Summarize assistant"
description: "Use summary instead of full text — currently {messageUpload.summarizeAssistant}"
Then ask for the new value and call set_config.
After handling a selection, call get_config again to refresh state. Use AskUserQuestion to ask if they want to configure more:
AskUserQuestion:
question: "Configuration updated. What next?"
header: "Next"
options:
- label: "Configure more"
description: "Return to settings menu"
- label: "Done"
description: "Exit configuration"
If "Configure more", go back to Step 2. If "Done", show the final status header and exit.
set_config including any cache invalidation that occurred.get_config returns configExists: false, guide the user to set HONCHO_API_KEY first.