Wiki

Reference for the parts of PounceCode that are worth knowing about before you need them.

contents
1 2 3 4 5 6 7 8 9
profiles — providers, models, and switching between them the working folder — where reads and writes actually land projects — per-project rules the model is told about viewers — reading and editing files in the app the pounce CLI — the same engine, in a terminal document export — Markdown, PDF, DOCX, HTML driving over MCP — automating the app itself privacy — what leaves the machine, and PHI mode troubleshooting

Profiles

A profile is a provider, an endpoint, a model and the settings that go with them. You can have as many as you like and switch between them inside a conversation — useful for drafting a plan on a strong model and running the steps on a cheap or local one.

ProviderNotes
AnthropicNative API. Reports cache usage and rate-limit reset headers.
OpenAINative API, and the shape most gateways imitate.
Google GeminiNative API preferred — it reports the real context window per model.
OllamaLocal. The endpoint reports its own context length. See the local guide.
OpenAI-compatiblevLLM, LM Studio, corporate gateways, anything speaking the same shape.
Native APIs beat compatibility layers. A gateway speaking the OpenAI shape works, but it flattens away the things worth having: real context windows, cache-hit counts, proper rate-limit headers. Where a native API exists for a provider, PounceCode detects and prefers it.

Where credentials live

API keys are not stored in the config file. The config holds a reference of the form keyring:<profile>:<field> and the value lives in an encrypted store beside it. One consequence worth knowing: the reference is keyed by profile name, so renaming a profile by hand-editing the config will orphan its credential and the endpoint will answer 401. Rename through the app instead.

The working folder

The folder shown on the status bar is where relative reads and writes actually land, where git runs, and where shell commands execute. Click it to change it; the model is told immediately when it changes.

One place, for everything

Reads, writes, git and the shell all resolve against the same folder. They used to disagree — writes used the work folder and reads used the process directory — which produced the memorable failure of a model writing a file, failing to read it back, and giving up.

Documents go to a subfolder

Exported documents land in artifacts/ inside the work folder, so a generated report does not sit in the middle of your source tree. Source files the model writes go to the work folder itself.

Projects

A project groups conversations and carries rules that are given to the model every time it works there. If the folder contains an AGENTS.md, that is read and honoured — conventions, the test command, things not to touch.

This is the cheapest available lever on output quality. "Tests live beside the code they cover" and "run python3 -m pytest, not pytest" in a file the model always sees will save more rounds than any amount of prompting per request.

Viewers and editing

Files open inside the app rather than handing you off to another program.

Text

Syntax highlighting in the current theme, with optional line numbers. Editable in place.

Markdown

Rendered and source views, both editable, switchable by tab.

Saving

Unsaved changes are flagged before you navigate away. If the file changed on disk while you were editing it — likely, when an agent is working in the same tree — you are offered both versions rather than one silently winning.

Links do not hijack the app. Clicking a link to something the agent built opens it in your browser, and dragging a file onto the prompt attaches it. Neither navigates the app's own window away from itself — which, before it was fixed, ended the session.

The pounce CLI

Installed alongside the app. Same engine, same profiles, same tools, same config — in a terminal, and in a pipe.

zsh
1 2 3 4 5 6 7 8 9 10
$ pounce "add a remove(conn, sku) function and a test" $ pounce --profile local-27b "why is test_inventory failing?" $ git diff | pounce "review this" # reads stdin $ pounce --continue "now commit it" # same conversation $ pounce --resume <id> # pick one up later $ pounce --list # what conversations exist $ pounce --setup # add or edit a provider $ pounce mcp serve # expose the driver surface

--yes answers confirmations automatically, for unattended use. Think about what that means with the dangerous tools before you reach for it in a script.

Document export

The model can hand back a finished document rather than a wall of chat: Markdown, PDF, DOCX or HTML, written into artifacts/. The same renderer produces the app's own documentation, deliberately — an export regression shows up in our work before it shows up in yours.

Driving the app over MCP

PounceCode can expose a driver surface over MCP on loopback — start a conversation, set the work folder, switch profile, send a turn, read the task board and the transcript. It is off by default and you turn it on explicitly.

zsh
1 2
$ pounce mcp serve # or POUNCECODE_MCP=1 for the desktop # loopback only; tools are named pouncecode_*

This exists because the interesting bugs are in the seams between components, and those only appear when something drives the real application rather than a mock. It is also how the benchmark suite runs: scenarios against a live app, where every check reads the disk or runs a subprocess instead of reading the model's reply.

Privacy

No accounts, no telemetry, no analytics. Conversations are stored locally in SQLite. The only thing that leaves your machine is what you send to the model provider you configured — and if that provider is running on your own hardware, nothing leaves at all.

PHI mode

A stricter mode for regulated data: web tools are disabled entirely and tool calls are audited to a local log.

Confirmations

Dangerous tools ask before running, and shell confirmation can be required for every command. While a plan is held for review, writes are refused outright.

Troubleshooting

SymptomCause
401 from a local or gateway endpointA credential reference that no longer resolves — usually a profile renamed outside the app. Re-enter the key in Settings.
Model forgets things mid-taskContext window too small. On Ollama this is nearly always the 4096 default; see the local guide.
Files appear somewhere unexpectedCheck the working folder on the status bar — that is where writes land, whatever the conversation's project says.
ctx shows a dashThe window could not be determined. It is learned from the first overflow error.
Repeated rate limitingThe provider's limit is lower than the work needs. PounceCode paces itself and recovers, but a tight quota will still be a tight quota.
A turn ends with nothing saidReport it. A turn that produces neither text nor a tool call is a bug, and the app is supposed to say so rather than fall silent.