Borrowing it
Nothing to install: this file belongs to tkellogg/tupac. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/tkellogg/tupac/main/AGENTS.mdgit clone --depth 1 https://github.com/tkellogg/tupacWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/instructions/tkellogg/tupac/agents-md)<a href="https://agentmods.dev/instructions/tkellogg/tupac/agents-md"><img src="https://agentmods.dev/badge/instructions/tkellogg/tupac/agents-md/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/instructions/tkellogg/tupac/agents-md"><img src="https://agentmods.dev/badge/instructions/tkellogg/tupac/agents-md.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.01498 | $0.01498 |
| Opus 5.5 | $0.00599 | $0.00599 |
| Sonnet 5.5 | $0.00300 | $0.00300 |
| Haiku 4.5 | $0.00150 | $0.00150 |
Grade A, and why
tupac AGENTS.md scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 158 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Spec for “tupac” — a CLI MCP ↔ OpenAI Responses bridge (latest deps, quoting your brief)
“i want to build a CLI MCP client app. python, uv, FastMCP, typer, on the openai responses API”
-
Name the package tupac.
-
Latest libs (all installed with
uv add):openai@ latest (o-series ready)fastmcp@ latest — v 2.4.0 adds one-line Client(config) multi-server support ([gofastmcp.com][1])typer@ latest (>= 0.12)rich@ latest (for colour) ([typer.tiangolo.com][2])- Python ≥ 3.11
“the CLI takes a JSON file and a prompt. the JSON configures MCP servers and a system prompt. the app is a simple loop that…”
CLI (tupac run cfg.json "prompt"):
- Load config (
system_prompt,mcp_servers, model, etc.). - Construct
mcp_serversarray exactly as in Claude’s MCP connector docs ([docs.anthropic.com][3]). - Instantiate
fastmcp.Client(config)— passing the parsed MCP-server list straight in satisfies the new constructor signature; no manual tool mapping required. - Seed
messages = [{"role":"system","content":system_prompt}, {"role":"user","content":prompt}].
Loop:
while True:
resp = client.responses.create(
model=config.model,
input=messages,
mcp_servers=config.mcp_servers, # Claude-format JSON
stream=False
)
out = resp.output[0]
if out.type == "mcp_tool_use":
try:
result = await mcp.call_tool(out) # fastmcp handles dispatch
messages += [
out,
{"type":"mcp_tool_result",
"tool_use_id": out.id,
"is_error": False,
"content": result}
]
except Exception as exc:
messages += [
out,
{"type":"mcp_tool_result",
"tool_use_id": out.id,
"is_error": True,
"content": str(exc)}
]
continue # keep cycling
break # plain assistant text → done
Tool errors are surfaced to the model ( is_error=True ) so it can recover automatically.
“maps MCP tools to responses API … parameters are the complicated part”
FastMCP now exposes Tool.model_json_schema(); embed that JSON Schema untouched inside each tool definition so the Responses API can validate arguments itself ([gofastmcp.com][1]).
“handle all MCP data types properly…”
| MCP content | How tupac returns it |
|---|---|
TextContent |
inline text |
ImageContent, PdfContent, AudioContent, VideoContent, any BlobContent |
print only the generated file-name (e.g. out_2025-06-07T12-00-01.png) and tell the human “open this file to view”; save bytes to ./outputs/ |
The canonical list of binary types (images, PDFs, audio, video) is in the MCP Resources spec ([modelcontextprotocol.io][4]).
“for resources, maintain a cache… list of compact representations … cache misses include the full text”
Use an LRU keyed by uri.
Send two XML blocks (why XML? Anthropic’s prompt-engineering guide emphasises XML tags for structured context) ([docs.anthropic.com][5]):
<resources>
<resource uri="https://foo" title="Foo doc" type="text"/>
…
</resources>
<resource_details>
<resource uri="https://foo"><![CDATA[full text]]></resource>
</resource_details>
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 158 lines · 1,498 tokens per session scan A d5eeeb43b5b2
tupac AGENTS.md is an instructions file published in the GitHub repository tkellogg/tupac (11 stars, last pushed 1y ago), licensed MIT. It adds 1,498 tokens to every session, about $0.0060 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
tupac AGENTS.md compared with instructions from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| tupac AGENTS.mdtkellogg/tupac | Instructions file | 11 | 1y ago | MIT | A | 1,498 | Codex, OpenCode |
| vscode buildNext.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 9,719 | GitHub Copilot |
| next.js AGENTS.mdvercel/next.js | Instructions file | 143k | yesterday | MIT | A | 7,461 | Codex, OpenCode |
| langchain AGENTS.mdlangchain-ai/langchain | Instructions file | 149k | yesterday | MIT | A | 4,680 | Codex, OpenCode |
| vscode oss-third-party-notices.instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 5,516 | GitHub Copilot |
| vscode copilot-instructions.mdmicrosoft/vscode | Instructions file | 195k | yesterday | MIT | A | 3,093 | GitHub Copilot |
| deepseek-harness AGENTS.mddeepseek-ai/deepseek-harness | Instructions file | 274k | 2d ago | MIT | A | 4,313 | Codex, OpenCode |