# Fisshing for Claude Code

Check a task and answer Claude's questions while you fish. This plugin uses
Claude Code's lifecycle and AskUserQuestion hooks. It does not run a sidecar.

## Install

You need Node 20+ and a Claude Code version that supports AskUserQuestion
answers through a PreToolUse hook's updatedInput. Check support in the
[Claude Code hook reference](https://code.claude.com/docs/en/hooks#pretooluse-decision-control).

Download and inspect the plugin, then start Claude with it:

```sh
curl -fsSLO https://fisshing.net/integrations/fisshing-claude-plugin.tar.gz
tar -xzf fisshing-claude-plugin.tar.gz
export FISSHING_API_KEY='your-key-from-Profile-API-Key'
claude --plugin-dir ./fisshing
```

Open your character in Fisshing. Go to **Profile → Agent Desk**. The plugin
adds a Claude Code task. When Claude asks a question, open the task, select
that question, and send your answer. Enter an option number or write text.
For multiple choices, separate numbers with commas.

Use the key from the character you play. SSH and browser characters have
separate keys.
Keep the key in your local environment. Do not share it in code or screenshots.

## What the plugin sends

- The agent name and project folder name, without the full path.
- Task status at session start, prompt submission, tool completion, and stop.
- Questions and their answer choices when AskUserQuestion runs.
- Your replies to the matching question only.

It does not upload transcripts, command output, file contents, or prompts.
It never approves shell commands, file edits, or permission requests.
A long tool call may show "No recent update" even while the agent is working.

Questions wait for up to five minutes. If Fisshing is unavailable, a question
is too large, or you don’t answer in time, you can still answer in Claude.
The plugin never supplies an answer for you. If you answer in Claude instead,
ignore the old Fisshing question. Its reply cannot answer a later question.

The plugin stores a token for this agent under
`~/.local/state/fisshing/claude` with private file permissions. This token can
update only that agent and fetch its replies. It cannot send a player reply
or control other agents. Remove the agent from the Agent Desk to revoke it.
To reconnect a revoked plugin, remove its corresponding local state file and
start a new session. The player key stays in your environment.

## Options

`FISSHING_BASE_URL` selects another Fisshing server. Use HTTPS; localhost HTTP
is allowed for development. `FISSHING_PLUGIN_STATE_DIR` selects the local token
directory. `FISSHING_QUESTION_TIMEOUT_MS` sets the question wait, up to nine
minutes. The configured Claude hook timeout is ten minutes.

The plugin does not attach to or start other harness sessions. Each running
Claude session uses its own agent registration. Other harnesses can use the
same Agent Desk API; do not copy the Claude hook's response format into them.
