# Coolhand Help Center

> How to capture your LLM requests and the human feedback on them, what Coolhand records for each
> provider, and how that turns into prompt and code fixes you can review.

- Web: https://coolhandlabs.com/help
- Sections: 4
- Articles: 20


## Provider guides

What Coolhand records for each provider, which fields it can and cannot capture, and how to send requests so your prompts group cleanly into templates.

Section index: https://coolhandlabs.com/help/category/providers.md

### Anthropic API best practices

Anthropic's Messages API carries the system prompt in a top-level `system` field rather than a message with a system role. Coolhand reads that field first and only then falls back to scanning messages, so sending the top-level field is the reliable way to get your system prompt captured and grouped into a template.

https://coolhandlabs.com/help/anthropic-api-best-practices.md

### OpenAI API best practices

OpenAI renamed the system-instruction role to `developer` for its o-series reasoning models and silently maps `system` to it on newer models. Coolhand captures both. Send a system or developer instruction on every request so your prompts group into templates instead of landing on Unmatched.

https://coolhandlabs.com/help/openai-api-best-practices.md

### Azure OpenAI best practices

Azure logs record your deployment name, not the underlying model version, so `my-gpt4o-prod` appears where you might expect `gpt-4o-2024-11-20`. Name deployments after the model they serve, and create a new one rather than re-pointing an existing one on upgrade, so cost and quality history stays attributable.

https://coolhandlabs.com/help/azure-openai-best-practices.md

### AWS Bedrock best practices

AWS Bedrock exposes two API surfaces and Coolhand records them as separate sources: `bedrock` for the OpenAI-compatible Chat Completions format, and `bedrock_anthropic` for the native Anthropic Messages format. Which one you call changes the field shape Coolhand can capture, so pick one per workload and stay on it.

https://coolhandlabs.com/help/aws-bedrock-best-practices.md

### Google Gemini best practices

The Gemini API carries system instructions in a top-level `system_instruction` field rather than a system-role message. Coolhand reads that field first and falls back to the contents array, so using `system_instruction` is the dependable path to having your prompt captured and matched to a template.

https://coolhandlabs.com/help/google-gemini-best-practices.md

### Google Vertex AI best practices

Vertex AI's preferred request format puts system instructions in a top-level `system_instruction` field, outside the `contents` array. Coolhand reads there first and falls back to system or developer roles inside `contents`, so role-based instructions may still be captured — but the top-level field is the reliable one.

https://coolhandlabs.com/help/google-vertex-ai-best-practices.md

### Ollama best practices

Ollama identifies models as `name:tag`, and Coolhand treats each tag as a distinct model, so `llama3.1:8b` and `llama3.1:8b-instruct-q4_K_M` report separately. Standardize tags across your team or your cost and quality analytics will fragment across variants of the same underlying model.

https://coolhandlabs.com/help/ollama-best-practices.md

### OpenRouter best practices

OpenRouter model IDs are routing aliases in `provider/model` form, not provider-native names. Coolhand records the alias you sent, so a change to the upstream provider behind that alias is invisible in your logs. Pin the alias you intend to compare over time before relying on its cost trend.

https://coolhandlabs.com/help/openrouter-best-practices.md

### ElevenLabs best practices

ElevenLabs logs arrive from post-call transcription webhooks rather than live API interception, so they land after a conversation ends and omit fields that only exist at request time. Knowing which fields are structurally unavailable saves you from chasing gaps that are not misconfiguration.

https://coolhandlabs.com/help/elevenlabs-best-practices.md


## Feedback & prompts

How to capture high-signal human feedback on AI output, how Coolhand scores and attributes it, and the prompt patterns that hold across every provider.

Section index: https://coolhandlabs.com/help/category/feedback-and-prompts.md

### How should I collect feedback on AI output?

The highest-signal feedback is the edit a user makes to an AI output, then their written explanation, and only then a thumbs up or down. Send the request log id when you have it and the raw response text when you do not, plus a stable reviewer identifier either way, so every submission can be attributed.

https://coolhandlabs.com/help/feedback-collection-best-practices.md

### What is feedback match rate?

Match rate is the share of your feedback submissions that Coolhand successfully linked back to the LLM request log that produced the output. Unmatched feedback is still stored, but it cannot be attributed to a prompt, so it never reaches the analysis that turns feedback into a proposed fix.

https://coolhandlabs.com/help/what-is-feedback-match-rate.md

### How is feedback quality scored?

Coolhand turns raw feedback into two numbers: a sentiment score drawn from likes, dislikes, and explanations, and a revision score measuring how much a user changed the output. Together they separate outputs people disliked from outputs people had to rewrite, which are different problems with different fixes.

https://coolhandlabs.com/help/how-is-feedback-quality-scored.md

### What is partial feedback?

Partial feedback rates a specific section of an AI response instead of the whole thing. You send the highlighted text and its character offsets, and Coolhand attributes the sentiment to that passage — so a mostly-good answer with one bad paragraph is recorded as exactly that, rather than as a dislike.

https://coolhandlabs.com/help/what-is-partial-feedback.md

### Creators vs. reviewers

A creator is one raw identifier attached to a single feedback submission. A reviewer is the person behind it, assembled automatically by grouping every creator identifier and fingerprint belonging to the same individual. Reviewer-level analytics tell you how many people gave feedback, not how many sessions did.

https://coolhandlabs.com/help/creators-vs-reviewers.md

### Prompt engineering best practices

Prefer your provider's structured-output API over asking for JSON in prose, keep instructions in a system prompt rather than inline with the data, delimit variable input explicitly, and phrase rules as what to do rather than what to avoid. These patterns hold across every provider Coolhand ingests.

https://coolhandlabs.com/help/prompt-engineering-best-practices.md


## Coding agents

How Coolhand ingests Claude Code, Claude Cowork, and GitHub Copilot sessions, and what each transcript format can and cannot tell you.

Section index: https://coolhandlabs.com/help/category/coding-agents.md

### Claude Code best practices

Coolhand ingests Claude Code sessions from the transcripts saved on disk, not by intercepting API calls in real time. Latency and temperature are never present because the transcript format does not record them; prompts, responses, token counts, and tool use are all captured once a session ends.

https://coolhandlabs.com/help/claude-code-best-practices.md

### Claude Cowork best practices

Claude Cowork logs are ingested the same way as Claude Code: from locally saved session transcripts rather than live API interception. The same constraints apply, so latency and temperature are always blank, while prompts, responses, and token counts arrive in full once a session ends.

https://coolhandlabs.com/help/claude-cowork-best-practices.md

### GitHub Copilot best practices

GitHub Copilot emits two different response payload shapes, and which one you get determines how much token detail Coolhand can record. The newer shape carries `copilotUsage.tokenDetails`; the older one omits several fields, so some cost figures are estimates rather than reported values.

https://coolhandlabs.com/help/github-copilot-best-practices.md


## Logs & API

What every field on an LLM request log means, when batching is worth it, and how to query your observability data from an AI agent over MCP.

Section index: https://coolhandlabs.com/help/category/logs-and-api.md

### What every field on an LLM request log means

Every LLM request log records the provider, model, prompts, response, token counts, cost, latency, and outcome. Some fields are structurally unavailable for certain providers rather than missing by mistake, so this reference covers what each field means and who leaves it blank.

https://coolhandlabs.com/help/llm-request-log-fields.md

### When should I use batch requests?

Batch APIs process a set of independent LLM requests asynchronously, usually within 24 hours, at roughly half the per-token price. They suit any workload where nobody is waiting on the result. Coolhand flags templates whose traffic pattern suggests batching would cut cost without hurting quality.

https://coolhandlabs.com/help/how-to-use-batch-requests.md

