{"owner":"cactus-compute","repo":"cactus","hasSkills":true,"totalSkillsCount":11,"totalTokensCount":7335,"categories":["anthropic-skill","root-instruction"],"hasMcp":false,"mcpConfig":null,"found":["cactus-code/packages/tui/package.json","cactus-code/packages/coding-agent/tsconfig.build.json","cactus-code/packages/coding-agent/package.json","cactus-code/packages/ai/tsconfig.build.json","cactus-code/packages/ai/package.json","cactus-code/packages/agent/tsconfig.build.json","cactus-code/packages/tui/tsconfig.build.json","cactus-code/packages/agent/package.json","llms.txt","cactus-code/packages/coding-agent/src/modes/interactive/theme/dark.json","cactus-code/packages/coding-agent/src/modes/interactive/theme/theme-schema.json"],"skills":{"cactus-code/packages/tui/package.json":"{\n\t\"name\": \"@earendil-works/pi-tui\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Terminal User Interface library with differential rendering for efficient text-based applications\",\n\t\"type\": \"module\",\n\t\"main\": \"dist/index.js\",\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"files\": [\n\t\t\"dist/**/*\",\n\t\t\"native/win32/prebuilds/**/*.node\",\n\t\t\"native/darwin/prebuilds/**/*.node\",\n\t\t\"README.md\"\n\t],\n\t\"keywords\": [\n\t\t\"tui\",\n\t\t\"terminal\",\n\t\t\"ui\",\n\t\t\"text-editor\",\n\t\t\"differential-rendering\",\n\t\t\"typescript\",\n\t\t\"cli\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/tui\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"types\": \"./dist/index.d.ts\",\n\t\"dependencies\": {\n\t\t\"get-east-asian-width\": \"1.6.0\",\n\t\t\"marked\": \"18.0.5\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n","cactus-code/packages/coding-agent/tsconfig.build.json":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"paths\": {\n\t\t\t\"@earendil-works/pi-agent-core\": [\"../agent/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-agent-core/*\": [\"../agent/dist/*.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai\": [\"../ai/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai/*\": [\"../ai/dist/*.d.ts\", \"../ai/dist/providers/*.d.ts\"],\n\t\t\t\"@earendil-works/pi-tui\": [\"../tui/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-tui/*\": [\"../tui/dist/*.d.ts\", \"../tui/dist/components/*.d.ts\"]\n\t\t},\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\", \"src/**/*.d.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\"]\n}\n","cactus-code/packages/coding-agent/package.json":"{\n\t\"name\": \"@earendil-works/pi-coding-agent\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Coding agent CLI with read, bash, edit, write tools and session management\",\n\t\"type\": \"module\",\n\t\"piConfig\": {\n\t\t\"name\": \"cactus\",\n\t\t\"configDir\": \".cactus\"\n\t},\n\t\"bin\": {\n\t\t\"cactus\": \"dist/cli.js\"\n\t},\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js && npm run copy-assets\",\n\t\t\"build:binary\": \"npm --prefix ../tui run build && npm --prefix ../ai run build && npm --prefix ../agent run build && npm run build && bun build --compile ./dist/bun/cli.js ./src/utils/image-resize-worker.ts --outfile dist/pi && npm run copy-binary-assets\",\n\t\t\"copy-assets\": \"shx mkdir -p dist/modes/interactive/theme && shx cp src/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/modes/interactive/assets && shx cp src/modes/interactive/assets/*.png dist/modes/interactive/assets/\",\n\t\t\"copy-binary-assets\": \"shx cp package.json dist/ && shx cp README.md dist/ && shx cp CHANGELOG.md dist/ && shx mkdir -p dist/theme && shx cp src/modes/interactive/theme/*.json dist/theme/ && shx mkdir -p dist/assets && shx cp src/modes/interactive/assets/*.png dist/assets/ && shx mkdir -p dist/export-html/vendor && shx cp src/core/export-html/template.html dist/export-html/ && shx cp src/core/export-html/vendor/*.js dist/export-html/vendor/ && shx cp -r docs dist/ && shx cp -r examples dist/ && shx cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm dist/\",\n\t\t\"shrinkwrap\": \"node ../../scripts/generate-coding-agent-shrinkwrap.mjs\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build && npm run shrinkwrap\"\n\t},\n\t\"dependencies\": {\n\t\t\"@earendil-works/pi-agent-core\": \"^0.80.2\",\n\t\t\"@earendil-works/pi-ai\": \"^0.80.2\",\n\t\t\"@earendil-works/pi-tui\": \"^0.80.2\",\n\t\t\"@silvia-odwyer/photon-node\": \"0.3.4\",\n\t\t\"chalk\": \"5.6.2\",\n\t\t\"cross-spawn\": \"7.0.6\",\n\t\t\"diff\": \"8.0.4\",\n\t\t\"glob\": \"13.0.6\",\n\t\t\"highlight.js\": \"10.7.3\",\n\t\t\"hosted-git-info\": \"9.0.3\",\n\t\t\"ignore\": \"7.0.5\",\n\t\t\"jiti\": \"2.7.0\",\n\t\t\"minimatch\": \"10.2.5\",\n\t\t\"proper-lockfile\": \"4.1.2\",\n\t\t\"semver\": \"7.8.0\",\n\t\t\"typebox\": \"1.1.38\",\n\t\t\"undici\": \"8.5.0\",\n\t\t\"yaml\": \"2.9.0\"\n\t},\n\t\"overrides\": {\n\t\t\"rimraf\": \"6.1.2\",\n\t\t\"gaxios\": {\n\t\t\t\"rimraf\": \"6.1.2\"\n\t\t}\n\t},\n\t\"optionalDependencies\": {\n\t\t\"@mariozechner/clipboard\": \"0.3.9\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/cross-spawn\": \"6.0.6\",\n\t\t\"@types/diff\": \"7.0.2\",\n\t\t\"@types/hosted-git-info\": \"3.0.5\",\n\t\t\"@types/ms\": \"2.1.0\",\n\t\t\"@types/node\": \"24.12.4\",\n\t\t\"@types/proper-lockfile\": \"4.1.4\",\n\t\t\"@types/semver\": \"7.7.1\",\n\t\t\"shx\": \"0.4.0\"\n\t},\n\t\"keywords\": [\n\t\t\"coding-agent\",\n\t\t\"ai\",\n\t\t\"llm\",\n\t\t\"cli\",\n\t\t\"tui\",\n\t\t\"agent\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/coding-agent\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t}\n}\n","cactus-code/packages/ai/tsconfig.build.json":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\", \"**/*.d.ts\", \"src/**/*.d.ts\"]\n}","cactus-code/packages/ai/package.json":"{\n\t\"name\": \"@earendil-works/pi-ai\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Unified LLM API with automatic model discovery and provider configuration\",\n\t\"type\": \"module\",\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"sideEffects\": [\n\t\t\"./dist/compat.js\"\n\t],\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t},\n\t\t\"./compat\": {\n\t\t\t\"types\": \"./dist/compat.d.ts\",\n\t\t\t\"import\": \"./dist/compat.js\"\n\t\t},\n\t\t\"./providers/*\": {\n\t\t\t\"types\": \"./dist/providers/*.d.ts\",\n\t\t\t\"import\": \"./dist/providers/*.js\"\n\t\t},\n\t\t\"./api/*\": {\n\t\t\t\"types\": \"./dist/api/*.d.ts\",\n\t\t\t\"import\": \"./dist/api/*.js\"\n\t\t},\n\t\t\"./oauth\": {\n\t\t\t\"types\": \"./dist/oauth.d.ts\",\n\t\t\t\"import\": \"./dist/oauth.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"README.md\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"dependencies\": {\n\t\t\"openai\": \"6.26.0\",\n\t\t\"partial-json\": \"0.1.7\",\n\t\t\"typebox\": \"1.1.38\"\n\t},\n\t\"keywords\": [\n\t\t\"ai\",\n\t\t\"llm\",\n\t\t\"openai\",\n\t\t\"anthropic\",\n\t\t\"gemini\",\n\t\t\"bedrock\",\n\t\t\"unified\",\n\t\t\"api\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/ai\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n","cactus-code/packages/agent/tsconfig.build.json":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"paths\": {\n\t\t\t\"@earendil-works/pi-ai\": [\"../ai/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai/*\": [\"../ai/dist/*.d.ts\", \"../ai/dist/providers/*.d.ts\"]\n\t\t},\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\", \"**/*.d.ts\", \"src/**/*.d.ts\"]\n}\n","cactus-code/packages/tui/tsconfig.build.json":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*\"],\n\t\"exclude\": [\"node_modules\", \"dist\"]\n}","cactus-code/packages/agent/package.json":"{\n\t\"name\": \"@earendil-works/pi-agent-core\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"General-purpose agent with transport abstraction, state management, and attachment support\",\n\t\"type\": \"module\",\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t},\n\t\t\"./node\": {\n\t\t\t\"types\": \"./dist/node.d.ts\",\n\t\t\t\"import\": \"./dist/node.js\"\n\t\t},\n\t\t\"./package.json\": \"./package.json\"\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"README.md\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"dependencies\": {\n\t\t\"@earendil-works/pi-ai\": \"^0.80.2\",\n\t\t\"ignore\": \"7.0.5\",\n\t\t\"typebox\": \"1.1.38\",\n\t\t\"yaml\": \"2.9.0\"\n\t},\n\t\"keywords\": [\n\t\t\"ai\",\n\t\t\"agent\",\n\t\t\"llm\",\n\t\t\"transport\",\n\t\t\"state-management\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/agent\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n","llms.txt":"# Cactus\n\n> Energy-efficient AI inference engine for running LLMs, vision models, and speech models on phones, wearables, Macs, and ARM devices like Raspberry Pi. Built by Cactus Compute, Inc. (YC S25).\n\nCactus has three layers: Cactus Kernels (ARM SIMD kernels for Apple, Snapdragon, Google Tensor, Exynos, MediaTek, Raspberry Pi), Cactus Graph (zero-copy computation graph, like PyTorch for mobile), and Cactus Engine (high-level inference API with OpenAI-compatible chat completion, tool calling, auto-RAG, vision, audio, transcription, embeddings, and cloud handoff).\n\nSupported models include Gemma 4 (E2B, E4B with vision + audio), Gemma 3/3n, Qwen 3/3.5, LiquidAI LFM2/LFM2.5 (incl. VL and MoE), Whisper, Moonshine, Parakeet (CTC/TDT), and Nomic Embed. Models run at INT4/INT8 precision with Metal GPU acceleration on supported hardware. Pre-converted weights at https://huggingface.co/Cactus-Compute.\n\n## Docs\n\n- [Engine API](docs/cactus_engine.md): C FFI for LLM inference, chat completion, streaming, tool calling, transcription, embeddings, RAG, vision, and audio\n- [Graph API](docs/cactus_graph.md): Computational graph framework for tensor operations, matrix multiplication, attention, normalization, convolutions, MoE layers, and activation functions\n- [Vector Index](docs/cactus_index.md): On-device vector database with cosine similarity search for RAG applications\n- [Fine-tuning Guide](docs/finetuning.md): Deploying Unsloth LoRA fine-tunes to mobile devices via Cactus\n- [Compatibility](docs/compatibility.md): Runtime and weight versioning across releases\n\n## Bindings\n\n- [Python](python/README.md): Python bindings via ctypes FFI\n- [Swift](bindings/swift/README.md): Swift bindings via C module map (iOS, macOS)\n- [Kotlin](bindings/kotlin/README.md): Kotlin bindings via JNI (Android) and cinterop (iOS via KMP)\n- [Flutter](bindings/flutter/README.md): Dart FFI bindings (iOS, Android)\n- [Rust](bindings/rust/README.md): Raw `extern \"C\"` declarations\n- [React Native](bindings/react-native/README.md): React Native bridge modules (iOS, Android)\n\n## Blog\n\n- [TurboQuant-H](blog/turboquant-h.md): Hadamard rotation for 2-bit per-layer embedding quantization — 4x PLI compression, 40% total model size reduction\n- [Gemma 4 on Cactus](blog/gemma4.md): Native multimodal voice, vision, and audio on-device with hybrid cloud handoff\n- [Hybrid Transcription](blog/hybrid_transcription.md): Sub-150ms transcription with cloud-level accuracy using on-device/cloud hybrid inference\n- [LFM2 24B Review](blog/lfm2_24b_a2b.md): Running LFM2-24B MoE (A2B) locally on Mac for coding use cases\n- [Parakeet CTC 1.1B Review](blog/parakeet.md): Sub-200ms on-device transcription with NVIDIA Parakeet CTC 1.1B on Apple Silicon\n- [LFM-2.5-350m](blog/lfm2.5_350m.md): 140 tok/sec single-core INT8 inference across seven devices\n\n## Key Concepts\n\n- **Cloud Handoff**: When the on-device model's confidence drops below a threshold, Cactus signals `cloud_handoff: true` so the app can route to a cloud API\n- **Auto-RAG**: Pass a corpus directory at init and Cactus automatically retrieves relevant context for each query\n- **Tool Calling**: Define tools as JSON and Cactus returns structured `function_calls` in the response\n- **Tool RAG**: When many tools are defined, Cactus selects the top-k most relevant tools per query\n- **Streaming**: All completion and transcription APIs support token-level streaming callbacks\n- **Audio in Messages**: Gemma 4 models accept `\"audio\": [\"path.wav\"]` in message JSON for native audio understanding\n- **Vision in Messages**: VLM models (Gemma 4, LFM2-VL, Qwen3.5) accept `\"images\": [\"path.png\"]` in message JSON\n- **Thinking**: Models that support chain-of-thought (Gemma 4) return a `thinking` field when `enable_thinking_if_supported` is set\n- **TurboQuant-H**: Hadamard rotation + Lloyd-Max codebook quantization for 2-bit per-layer embeddings, reducing embedding-dominated models by 40%\n- **INT4 Quantization**: Lossy weight quantization for ~50% memory reduction with minimal quality loss\n- **Metal Acceleration**: Apple GPU support for faster inference on Apple silicon\n\n## Links\n\n- GitHub: https://github.com/cactus-compute/cactus\n- Docs: https://docs.cactuscompute.com/\n- Website: https://cactuscompute.com/\n- HuggingFace Weights: https://huggingface.co/Cactus-Compute\n- Reddit: https://www.reddit.com/r/cactuscompute/\n","cactus-code/packages/coding-agent/src/modes/interactive/theme/dark.json":"{\n\t\"$schema\": \"https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json\",\n\t\"name\": \"dark\",\n\t\"vars\": {\n\t\t\"cyan\": \"#00d7ff\",\n\t\t\"blue\": \"#5f87ff\",\n\t\t\"green\": \"#b5bd68\",\n\t\t\"red\": \"#cc6666\",\n\t\t\"yellow\": \"#ffff00\",\n\t\t\"text\": \"#d4d4d4\",\n\t\t\"gray\": \"#808080\",\n\t\t\"dimGray\": \"#666666\",\n\t\t\"darkGray\": \"#505050\",\n\t\t\"accent\": \"#8abeb7\",\n\t\t\"selectedBg\": \"#3a3a4a\",\n\t\t\"userMsgBg\": \"#343541\",\n\t\t\"toolPendingBg\": \"#282832\",\n\t\t\"toolSuccessBg\": \"#283228\",\n\t\t\"toolErrorBg\": \"#3c2828\",\n\t\t\"customMsgBg\": \"#2d2838\"\n\t},\n\t\"colors\": {\n\t\t\"accent\": \"accent\",\n\t\t\"border\": \"blue\",\n\t\t\"borderAccent\": \"cyan\",\n\t\t\"borderMuted\": \"darkGray\",\n\t\t\"success\": \"green\",\n\t\t\"error\": \"red\",\n\t\t\"warning\": \"yellow\",\n\t\t\"muted\": \"gray\",\n\t\t\"dim\": \"dimGray\",\n\t\t\"text\": \"text\",\n\t\t\"thinkingText\": \"gray\",\n\n\t\t\"selectedBg\": \"selectedBg\",\n\t\t\"userMessageBg\": \"userMsgBg\",\n\t\t\"userMessageText\": \"text\",\n\t\t\"customMessageBg\": \"customMsgBg\",\n\t\t\"customMessageText\": \"text\",\n\t\t\"customMessageLabel\": \"#9575cd\",\n\t\t\"toolPendingBg\": \"toolPendingBg\",\n\t\t\"toolSuccessBg\": \"toolSuccessBg\",\n\t\t\"toolErrorBg\": \"toolErrorBg\",\n\t\t\"toolTitle\": \"text\",\n\t\t\"toolOutput\": \"gray\",\n\n\t\t\"mdHeading\": \"#f0c674\",\n\t\t\"mdLink\": \"#81a2be\",\n\t\t\"mdLinkUrl\": \"dimGray\",\n\t\t\"mdCode\": \"accent\",\n\t\t\"mdCodeBlock\": \"green\",\n\t\t\"mdCodeBlockBorder\": \"gray\",\n\t\t\"mdQuote\": \"gray\",\n\t\t\"mdQuoteBorder\": \"gray\",\n\t\t\"mdHr\": \"gray\",\n\t\t\"mdListBullet\": \"accent\",\n\n\t\t\"toolDiffAdded\": \"green\",\n\t\t\"toolDiffRemoved\": \"red\",\n\t\t\"toolDiffContext\": \"gray\",\n\n\t\t\"syntaxComment\": \"#6A9955\",\n\t\t\"syntaxKeyword\": \"#569CD6\",\n\t\t\"syntaxFunction\": \"#DCDCAA\",\n\t\t\"syntaxVariable\": \"#9CDCFE\",\n\t\t\"syntaxString\": \"#CE9178\",\n\t\t\"syntaxNumber\": \"#B5CEA8\",\n\t\t\"syntaxType\": \"#4EC9B0\",\n\t\t\"syntaxOperator\": \"#D4D4D4\",\n\t\t\"syntaxPunctuation\": \"#D4D4D4\",\n\n\t\t\"thinkingOff\": \"darkGray\",\n\t\t\"thinkingMinimal\": \"#6e6e6e\",\n\t\t\"thinkingLow\": \"#5f87af\",\n\t\t\"thinkingMedium\": \"#81a2be\",\n\t\t\"thinkingHigh\": \"#b294bb\",\n\t\t\"thinkingXhigh\": \"#d183e8\",\n\n\t\t\"bashMode\": \"green\"\n\t},\n\t\"export\": {\n\t\t\"pageBg\": \"#18181e\",\n\t\t\"cardBg\": \"#1e1e24\",\n\t\t\"infoBg\": \"#3c3728\"\n\t}\n}\n","cactus-code/packages/coding-agent/src/modes/interactive/theme/theme-schema.json":"{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"title\": \"Pi Coding Agent Theme\",\n\t\"description\": \"Theme schema for Pi coding agent\",\n\t\"type\": \"object\",\n\t\"required\": [\"name\", \"colors\"],\n\t\"properties\": {\n\t\t\"$schema\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"description\": \"JSON schema reference\"\n\t\t},\n\t\t\"name\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"pattern\": \"^[^/]+$\",\n\t\t\t\"description\": \"Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings.\"\n\t\t},\n\t\t\"vars\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Reusable color variables\",\n\t\t\t\"additionalProperties\": {\n\t\t\t\t\"oneOf\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"Hex color (#RRGGBB), variable reference, or empty string for terminal default\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\t\"minimum\": 0,\n\t\t\t\t\t\t\"maximum\": 255,\n\t\t\t\t\t\t\"description\": \"256-color palette index (0-255)\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\t\"colors\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Theme color definitions (all required)\",\n\t\t\t\"required\": [\n\t\t\t\t\"accent\",\n\t\t\t\t\"border\",\n\t\t\t\t\"borderAccent\",\n\t\t\t\t\"borderMuted\",\n\t\t\t\t\"success\",\n\t\t\t\t\"error\",\n\t\t\t\t\"warning\",\n\t\t\t\t\"muted\",\n\t\t\t\t\"dim\",\n\t\t\t\t\"text\",\n\t\t\t\t\"thinkingText\",\n\t\t\t\t\"selectedBg\",\n\t\t\t\t\"userMessageBg\",\n\t\t\t\t\"userMessageText\",\n\t\t\t\t\"customMessageBg\",\n\t\t\t\t\"customMessageText\",\n\t\t\t\t\"customMessageLabel\",\n\t\t\t\t\"toolPendingBg\",\n\t\t\t\t\"toolSuccessBg\",\n\t\t\t\t\"toolErrorBg\",\n\t\t\t\t\"toolTitle\",\n\t\t\t\t\"toolOutput\",\n\t\t\t\t\"mdHeading\",\n\t\t\t\t\"mdLink\",\n\t\t\t\t\"mdLinkUrl\",\n\t\t\t\t\"mdCode\",\n\t\t\t\t\"mdCodeBlock\",\n\t\t\t\t\"mdCodeBlockBorder\",\n\t\t\t\t\"mdQuote\",\n\t\t\t\t\"mdQuoteBorder\",\n\t\t\t\t\"mdHr\",\n\t\t\t\t\"mdListBullet\",\n\t\t\t\t\"toolDiffAdded\",\n\t\t\t\t\"toolDiffRemoved\",\n\t\t\t\t\"toolDiffContext\",\n\t\t\t\t\"syntaxComment\",\n\t\t\t\t\"syntaxKeyword\",\n\t\t\t\t\"syntaxFunction\",\n\t\t\t\t\"syntaxVariable\",\n\t\t\t\t\"syntaxString\",\n\t\t\t\t\"syntaxNumber\",\n\t\t\t\t\"syntaxType\",\n\t\t\t\t\"syntaxOperator\",\n\t\t\t\t\"syntaxPunctuation\",\n\t\t\t\t\"thinkingOff\",\n\t\t\t\t\"thinkingMinimal\",\n\t\t\t\t\"thinkingLow\",\n\t\t\t\t\"thinkingMedium\",\n\t\t\t\t\"thinkingHigh\",\n\t\t\t\t\"thinkingXhigh\",\n\t\t\t\t\"bashMode\"\n\t\t\t],\n\t\t\t\"properties\": {\n\t\t\t\t\"accent\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Primary accent color (logo, selected items, cursor)\"\n\t\t\t\t},\n\t\t\t\t\"border\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Normal borders\"\n\t\t\t\t},\n\t\t\t\t\"borderAccent\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Highlighted borders\"\n\t\t\t\t},\n\t\t\t\t\"borderMuted\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Subtle borders\"\n\t\t\t\t},\n\t\t\t\t\"success\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Success states\"\n\t\t\t\t},\n\t\t\t\t\"error\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Error states\"\n\t\t\t\t},\n\t\t\t\t\"warning\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Warning states\"\n\t\t\t\t},\n\t\t\t\t\"muted\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Secondary/dimmed text\"\n\t\t\t\t},\n\t\t\t\t\"dim\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Very dimmed text (more subtle than muted)\"\n\t\t\t\t},\n\t\t\t\t\"text\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Default text color (usually empty string)\"\n\t\t\t\t},\n\t\t\t\t\"thinkingText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking block text color\"\n\t\t\t\t},\n\t\t\t\t\"selectedBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Selected item background\"\n\t\t\t\t},\n\t\t\t\t\"userMessageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"User message background\"\n\t\t\t\t},\n\t\t\t\t\"userMessageText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"User message text color\"\n\t\t\t\t},\n\t\t\t\t\"customMessageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message background (hook-injected messages)\"\n\t\t\t\t},\n\t\t\t\t\"customMessageText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message text color\"\n\t\t\t\t},\n\t\t\t\t\"customMessageLabel\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message type label color\"\n\t\t\t\t},\n\t\t\t\t\"toolPendingBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (pending state)\"\n\t\t\t\t},\n\t\t\t\t\"toolSuccessBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (success state)\"\n\t\t\t\t},\n\t\t\t\t\"toolErrorBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (error state)\"\n\t\t\t\t},\n\t\t\t\t\"toolTitle\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box title color\"\n\t\t\t\t},\n\t\t\t\t\"toolOutput\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box output text color\"\n\t\t\t\t},\n\t\t\t\t\"mdHeading\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown heading text\"\n\t\t\t\t},\n\t\t\t\t\"mdLink\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown link text\"\n\t\t\t\t},\n\t\t\t\t\"mdLinkUrl\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown link URL\"\n\t\t\t\t},\n\t\t\t\t\"mdCode\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown inline code\"\n\t\t\t\t},\n\t\t\t\t\"mdCodeBlock\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown code block content\"\n\t\t\t\t},\n\t\t\t\t\"mdCodeBlockBorder\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown code block fences\"\n\t\t\t\t},\n\t\t\t\t\"mdQuote\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown blockquote text\"\n\t\t\t\t},\n\t\t\t\t\"mdQuoteBorder\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown blockquote border\"\n\t\t\t\t},\n\t\t\t\t\"mdHr\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown horizontal rule\"\n\t\t\t\t},\n\t\t\t\t\"mdListBullet\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown list bullets/numbers\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffAdded\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Added lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffRemoved\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Removed lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffContext\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Context lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"syntaxComment\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: comments\"\n\t\t\t\t},\n\t\t\t\t\"syntaxKeyword\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: keywords\"\n\t\t\t\t},\n\t\t\t\t\"syntaxFunction\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: function names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxVariable\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: variable names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxString\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: string literals\"\n\t\t\t\t},\n\t\t\t\t\"syntaxNumber\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: number literals\"\n\t\t\t\t},\n\t\t\t\t\"syntaxType\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: type names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxOperator\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: operators\"\n\t\t\t\t},\n\t\t\t\t\"syntaxPunctuation\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: punctuation\"\n\t\t\t\t},\n\t\t\t\t\"thinkingOff\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: off\"\n\t\t\t\t},\n\t\t\t\t\"thinkingMinimal\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: minimal\"\n\t\t\t\t},\n\t\t\t\t\"thinkingLow\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: low\"\n\t\t\t\t},\n\t\t\t\t\"thinkingMedium\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: medium\"\n\t\t\t\t},\n\t\t\t\t\"thinkingHigh\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: high\"\n\t\t\t\t},\n\t\t\t\t\"thinkingXhigh\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: xhigh (OpenAI codex-max only)\"\n\t\t\t\t},\n\t\t\t\t\"bashMode\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Editor border color in bash mode\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"additionalProperties\": false\n\t\t},\n\t\t\"export\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Optional colors for HTML export (defaults derived from userMessageBg if not specified)\",\n\t\t\t\"properties\": {\n\t\t\t\t\"pageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Page background color\"\n\t\t\t\t},\n\t\t\t\t\"cardBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Card/container background color\"\n\t\t\t\t},\n\t\t\t\t\"infoBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Info sections background (system prompt, notices)\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"additionalProperties\": false\n\t\t}\n\t},\n\t\"additionalProperties\": false,\n\t\"$defs\": {\n\t\t\"colorValue\": {\n\t\t\t\"oneOf\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Hex color (#RRGGBB), variable reference, or empty string for terminal default\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\"minimum\": 0,\n\t\t\t\t\t\"maximum\": 255,\n\t\t\t\t\t\"description\": \"256-color palette index (0-255)\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}\n"},"files":{"cactus-code/packages/tui/package.json":"{\n\t\"name\": \"@earendil-works/pi-tui\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Terminal User Interface library with differential rendering for efficient text-based applications\",\n\t\"type\": \"module\",\n\t\"main\": \"dist/index.js\",\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"files\": [\n\t\t\"dist/**/*\",\n\t\t\"native/win32/prebuilds/**/*.node\",\n\t\t\"native/darwin/prebuilds/**/*.node\",\n\t\t\"README.md\"\n\t],\n\t\"keywords\": [\n\t\t\"tui\",\n\t\t\"terminal\",\n\t\t\"ui\",\n\t\t\"text-editor\",\n\t\t\"differential-rendering\",\n\t\t\"typescript\",\n\t\t\"cli\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/tui\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"types\": \"./dist/index.d.ts\",\n\t\"dependencies\": {\n\t\t\"get-east-asian-width\": \"1.6.0\",\n\t\t\"marked\": \"18.0.5\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n","cactus-code/packages/coding-agent/tsconfig.build.json":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"paths\": {\n\t\t\t\"@earendil-works/pi-agent-core\": [\"../agent/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-agent-core/*\": [\"../agent/dist/*.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai\": [\"../ai/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai/*\": [\"../ai/dist/*.d.ts\", \"../ai/dist/providers/*.d.ts\"],\n\t\t\t\"@earendil-works/pi-tui\": [\"../tui/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-tui/*\": [\"../tui/dist/*.d.ts\", \"../tui/dist/components/*.d.ts\"]\n\t\t},\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\", \"src/**/*.d.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\"]\n}\n","cactus-code/packages/coding-agent/package.json":"{\n\t\"name\": \"@earendil-works/pi-coding-agent\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Coding agent CLI with read, bash, edit, write tools and session management\",\n\t\"type\": \"module\",\n\t\"piConfig\": {\n\t\t\"name\": \"cactus\",\n\t\t\"configDir\": \".cactus\"\n\t},\n\t\"bin\": {\n\t\t\"cactus\": \"dist/cli.js\"\n\t},\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js && npm run copy-assets\",\n\t\t\"build:binary\": \"npm --prefix ../tui run build && npm --prefix ../ai run build && npm --prefix ../agent run build && npm run build && bun build --compile ./dist/bun/cli.js ./src/utils/image-resize-worker.ts --outfile dist/pi && npm run copy-binary-assets\",\n\t\t\"copy-assets\": \"shx mkdir -p dist/modes/interactive/theme && shx cp src/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/modes/interactive/assets && shx cp src/modes/interactive/assets/*.png dist/modes/interactive/assets/\",\n\t\t\"copy-binary-assets\": \"shx cp package.json dist/ && shx cp README.md dist/ && shx cp CHANGELOG.md dist/ && shx mkdir -p dist/theme && shx cp src/modes/interactive/theme/*.json dist/theme/ && shx mkdir -p dist/assets && shx cp src/modes/interactive/assets/*.png dist/assets/ && shx mkdir -p dist/export-html/vendor && shx cp src/core/export-html/template.html dist/export-html/ && shx cp src/core/export-html/vendor/*.js dist/export-html/vendor/ && shx cp -r docs dist/ && shx cp -r examples dist/ && shx cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm dist/\",\n\t\t\"shrinkwrap\": \"node ../../scripts/generate-coding-agent-shrinkwrap.mjs\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build && npm run shrinkwrap\"\n\t},\n\t\"dependencies\": {\n\t\t\"@earendil-works/pi-agent-core\": \"^0.80.2\",\n\t\t\"@earendil-works/pi-ai\": \"^0.80.2\",\n\t\t\"@earendil-works/pi-tui\": \"^0.80.2\",\n\t\t\"@silvia-odwyer/photon-node\": \"0.3.4\",\n\t\t\"chalk\": \"5.6.2\",\n\t\t\"cross-spawn\": \"7.0.6\",\n\t\t\"diff\": \"8.0.4\",\n\t\t\"glob\": \"13.0.6\",\n\t\t\"highlight.js\": \"10.7.3\",\n\t\t\"hosted-git-info\": \"9.0.3\",\n\t\t\"ignore\": \"7.0.5\",\n\t\t\"jiti\": \"2.7.0\",\n\t\t\"minimatch\": \"10.2.5\",\n\t\t\"proper-lockfile\": \"4.1.2\",\n\t\t\"semver\": \"7.8.0\",\n\t\t\"typebox\": \"1.1.38\",\n\t\t\"undici\": \"8.5.0\",\n\t\t\"yaml\": \"2.9.0\"\n\t},\n\t\"overrides\": {\n\t\t\"rimraf\": \"6.1.2\",\n\t\t\"gaxios\": {\n\t\t\t\"rimraf\": \"6.1.2\"\n\t\t}\n\t},\n\t\"optionalDependencies\": {\n\t\t\"@mariozechner/clipboard\": \"0.3.9\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/cross-spawn\": \"6.0.6\",\n\t\t\"@types/diff\": \"7.0.2\",\n\t\t\"@types/hosted-git-info\": \"3.0.5\",\n\t\t\"@types/ms\": \"2.1.0\",\n\t\t\"@types/node\": \"24.12.4\",\n\t\t\"@types/proper-lockfile\": \"4.1.4\",\n\t\t\"@types/semver\": \"7.7.1\",\n\t\t\"shx\": \"0.4.0\"\n\t},\n\t\"keywords\": [\n\t\t\"coding-agent\",\n\t\t\"ai\",\n\t\t\"llm\",\n\t\t\"cli\",\n\t\t\"tui\",\n\t\t\"agent\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/coding-agent\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t}\n}\n","cactus-code/packages/ai/tsconfig.build.json":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\", \"**/*.d.ts\", \"src/**/*.d.ts\"]\n}","cactus-code/packages/ai/package.json":"{\n\t\"name\": \"@earendil-works/pi-ai\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Unified LLM API with automatic model discovery and provider configuration\",\n\t\"type\": \"module\",\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"sideEffects\": [\n\t\t\"./dist/compat.js\"\n\t],\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t},\n\t\t\"./compat\": {\n\t\t\t\"types\": \"./dist/compat.d.ts\",\n\t\t\t\"import\": \"./dist/compat.js\"\n\t\t},\n\t\t\"./providers/*\": {\n\t\t\t\"types\": \"./dist/providers/*.d.ts\",\n\t\t\t\"import\": \"./dist/providers/*.js\"\n\t\t},\n\t\t\"./api/*\": {\n\t\t\t\"types\": \"./dist/api/*.d.ts\",\n\t\t\t\"import\": \"./dist/api/*.js\"\n\t\t},\n\t\t\"./oauth\": {\n\t\t\t\"types\": \"./dist/oauth.d.ts\",\n\t\t\t\"import\": \"./dist/oauth.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"README.md\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"dependencies\": {\n\t\t\"openai\": \"6.26.0\",\n\t\t\"partial-json\": \"0.1.7\",\n\t\t\"typebox\": \"1.1.38\"\n\t},\n\t\"keywords\": [\n\t\t\"ai\",\n\t\t\"llm\",\n\t\t\"openai\",\n\t\t\"anthropic\",\n\t\t\"gemini\",\n\t\t\"bedrock\",\n\t\t\"unified\",\n\t\t\"api\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/ai\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n","cactus-code/packages/agent/tsconfig.build.json":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"paths\": {\n\t\t\t\"@earendil-works/pi-ai\": [\"../ai/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai/*\": [\"../ai/dist/*.d.ts\", \"../ai/dist/providers/*.d.ts\"]\n\t\t},\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\", \"**/*.d.ts\", \"src/**/*.d.ts\"]\n}\n","cactus-code/packages/tui/tsconfig.build.json":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*\"],\n\t\"exclude\": [\"node_modules\", \"dist\"]\n}","cactus-code/packages/agent/package.json":"{\n\t\"name\": \"@earendil-works/pi-agent-core\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"General-purpose agent with transport abstraction, state management, and attachment support\",\n\t\"type\": \"module\",\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t},\n\t\t\"./node\": {\n\t\t\t\"types\": \"./dist/node.d.ts\",\n\t\t\t\"import\": \"./dist/node.js\"\n\t\t},\n\t\t\"./package.json\": \"./package.json\"\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"README.md\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"dependencies\": {\n\t\t\"@earendil-works/pi-ai\": \"^0.80.2\",\n\t\t\"ignore\": \"7.0.5\",\n\t\t\"typebox\": \"1.1.38\",\n\t\t\"yaml\": \"2.9.0\"\n\t},\n\t\"keywords\": [\n\t\t\"ai\",\n\t\t\"agent\",\n\t\t\"llm\",\n\t\t\"transport\",\n\t\t\"state-management\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/agent\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n","llms.txt":"# Cactus\n\n> Energy-efficient AI inference engine for running LLMs, vision models, and speech models on phones, wearables, Macs, and ARM devices like Raspberry Pi. Built by Cactus Compute, Inc. (YC S25).\n\nCactus has three layers: Cactus Kernels (ARM SIMD kernels for Apple, Snapdragon, Google Tensor, Exynos, MediaTek, Raspberry Pi), Cactus Graph (zero-copy computation graph, like PyTorch for mobile), and Cactus Engine (high-level inference API with OpenAI-compatible chat completion, tool calling, auto-RAG, vision, audio, transcription, embeddings, and cloud handoff).\n\nSupported models include Gemma 4 (E2B, E4B with vision + audio), Gemma 3/3n, Qwen 3/3.5, LiquidAI LFM2/LFM2.5 (incl. VL and MoE), Whisper, Moonshine, Parakeet (CTC/TDT), and Nomic Embed. Models run at INT4/INT8 precision with Metal GPU acceleration on supported hardware. Pre-converted weights at https://huggingface.co/Cactus-Compute.\n\n## Docs\n\n- [Engine API](docs/cactus_engine.md): C FFI for LLM inference, chat completion, streaming, tool calling, transcription, embeddings, RAG, vision, and audio\n- [Graph API](docs/cactus_graph.md): Computational graph framework for tensor operations, matrix multiplication, attention, normalization, convolutions, MoE layers, and activation functions\n- [Vector Index](docs/cactus_index.md): On-device vector database with cosine similarity search for RAG applications\n- [Fine-tuning Guide](docs/finetuning.md): Deploying Unsloth LoRA fine-tunes to mobile devices via Cactus\n- [Compatibility](docs/compatibility.md): Runtime and weight versioning across releases\n\n## Bindings\n\n- [Python](python/README.md): Python bindings via ctypes FFI\n- [Swift](bindings/swift/README.md): Swift bindings via C module map (iOS, macOS)\n- [Kotlin](bindings/kotlin/README.md): Kotlin bindings via JNI (Android) and cinterop (iOS via KMP)\n- [Flutter](bindings/flutter/README.md): Dart FFI bindings (iOS, Android)\n- [Rust](bindings/rust/README.md): Raw `extern \"C\"` declarations\n- [React Native](bindings/react-native/README.md): React Native bridge modules (iOS, Android)\n\n## Blog\n\n- [TurboQuant-H](blog/turboquant-h.md): Hadamard rotation for 2-bit per-layer embedding quantization — 4x PLI compression, 40% total model size reduction\n- [Gemma 4 on Cactus](blog/gemma4.md): Native multimodal voice, vision, and audio on-device with hybrid cloud handoff\n- [Hybrid Transcription](blog/hybrid_transcription.md): Sub-150ms transcription with cloud-level accuracy using on-device/cloud hybrid inference\n- [LFM2 24B Review](blog/lfm2_24b_a2b.md): Running LFM2-24B MoE (A2B) locally on Mac for coding use cases\n- [Parakeet CTC 1.1B Review](blog/parakeet.md): Sub-200ms on-device transcription with NVIDIA Parakeet CTC 1.1B on Apple Silicon\n- [LFM-2.5-350m](blog/lfm2.5_350m.md): 140 tok/sec single-core INT8 inference across seven devices\n\n## Key Concepts\n\n- **Cloud Handoff**: When the on-device model's confidence drops below a threshold, Cactus signals `cloud_handoff: true` so the app can route to a cloud API\n- **Auto-RAG**: Pass a corpus directory at init and Cactus automatically retrieves relevant context for each query\n- **Tool Calling**: Define tools as JSON and Cactus returns structured `function_calls` in the response\n- **Tool RAG**: When many tools are defined, Cactus selects the top-k most relevant tools per query\n- **Streaming**: All completion and transcription APIs support token-level streaming callbacks\n- **Audio in Messages**: Gemma 4 models accept `\"audio\": [\"path.wav\"]` in message JSON for native audio understanding\n- **Vision in Messages**: VLM models (Gemma 4, LFM2-VL, Qwen3.5) accept `\"images\": [\"path.png\"]` in message JSON\n- **Thinking**: Models that support chain-of-thought (Gemma 4) return a `thinking` field when `enable_thinking_if_supported` is set\n- **TurboQuant-H**: Hadamard rotation + Lloyd-Max codebook quantization for 2-bit per-layer embeddings, reducing embedding-dominated models by 40%\n- **INT4 Quantization**: Lossy weight quantization for ~50% memory reduction with minimal quality loss\n- **Metal Acceleration**: Apple GPU support for faster inference on Apple silicon\n\n## Links\n\n- GitHub: https://github.com/cactus-compute/cactus\n- Docs: https://docs.cactuscompute.com/\n- Website: https://cactuscompute.com/\n- HuggingFace Weights: https://huggingface.co/Cactus-Compute\n- Reddit: https://www.reddit.com/r/cactuscompute/\n","cactus-code/packages/coding-agent/src/modes/interactive/theme/dark.json":"{\n\t\"$schema\": \"https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json\",\n\t\"name\": \"dark\",\n\t\"vars\": {\n\t\t\"cyan\": \"#00d7ff\",\n\t\t\"blue\": \"#5f87ff\",\n\t\t\"green\": \"#b5bd68\",\n\t\t\"red\": \"#cc6666\",\n\t\t\"yellow\": \"#ffff00\",\n\t\t\"text\": \"#d4d4d4\",\n\t\t\"gray\": \"#808080\",\n\t\t\"dimGray\": \"#666666\",\n\t\t\"darkGray\": \"#505050\",\n\t\t\"accent\": \"#8abeb7\",\n\t\t\"selectedBg\": \"#3a3a4a\",\n\t\t\"userMsgBg\": \"#343541\",\n\t\t\"toolPendingBg\": \"#282832\",\n\t\t\"toolSuccessBg\": \"#283228\",\n\t\t\"toolErrorBg\": \"#3c2828\",\n\t\t\"customMsgBg\": \"#2d2838\"\n\t},\n\t\"colors\": {\n\t\t\"accent\": \"accent\",\n\t\t\"border\": \"blue\",\n\t\t\"borderAccent\": \"cyan\",\n\t\t\"borderMuted\": \"darkGray\",\n\t\t\"success\": \"green\",\n\t\t\"error\": \"red\",\n\t\t\"warning\": \"yellow\",\n\t\t\"muted\": \"gray\",\n\t\t\"dim\": \"dimGray\",\n\t\t\"text\": \"text\",\n\t\t\"thinkingText\": \"gray\",\n\n\t\t\"selectedBg\": \"selectedBg\",\n\t\t\"userMessageBg\": \"userMsgBg\",\n\t\t\"userMessageText\": \"text\",\n\t\t\"customMessageBg\": \"customMsgBg\",\n\t\t\"customMessageText\": \"text\",\n\t\t\"customMessageLabel\": \"#9575cd\",\n\t\t\"toolPendingBg\": \"toolPendingBg\",\n\t\t\"toolSuccessBg\": \"toolSuccessBg\",\n\t\t\"toolErrorBg\": \"toolErrorBg\",\n\t\t\"toolTitle\": \"text\",\n\t\t\"toolOutput\": \"gray\",\n\n\t\t\"mdHeading\": \"#f0c674\",\n\t\t\"mdLink\": \"#81a2be\",\n\t\t\"mdLinkUrl\": \"dimGray\",\n\t\t\"mdCode\": \"accent\",\n\t\t\"mdCodeBlock\": \"green\",\n\t\t\"mdCodeBlockBorder\": \"gray\",\n\t\t\"mdQuote\": \"gray\",\n\t\t\"mdQuoteBorder\": \"gray\",\n\t\t\"mdHr\": \"gray\",\n\t\t\"mdListBullet\": \"accent\",\n\n\t\t\"toolDiffAdded\": \"green\",\n\t\t\"toolDiffRemoved\": \"red\",\n\t\t\"toolDiffContext\": \"gray\",\n\n\t\t\"syntaxComment\": \"#6A9955\",\n\t\t\"syntaxKeyword\": \"#569CD6\",\n\t\t\"syntaxFunction\": \"#DCDCAA\",\n\t\t\"syntaxVariable\": \"#9CDCFE\",\n\t\t\"syntaxString\": \"#CE9178\",\n\t\t\"syntaxNumber\": \"#B5CEA8\",\n\t\t\"syntaxType\": \"#4EC9B0\",\n\t\t\"syntaxOperator\": \"#D4D4D4\",\n\t\t\"syntaxPunctuation\": \"#D4D4D4\",\n\n\t\t\"thinkingOff\": \"darkGray\",\n\t\t\"thinkingMinimal\": \"#6e6e6e\",\n\t\t\"thinkingLow\": \"#5f87af\",\n\t\t\"thinkingMedium\": \"#81a2be\",\n\t\t\"thinkingHigh\": \"#b294bb\",\n\t\t\"thinkingXhigh\": \"#d183e8\",\n\n\t\t\"bashMode\": \"green\"\n\t},\n\t\"export\": {\n\t\t\"pageBg\": \"#18181e\",\n\t\t\"cardBg\": \"#1e1e24\",\n\t\t\"infoBg\": \"#3c3728\"\n\t}\n}\n","cactus-code/packages/coding-agent/src/modes/interactive/theme/theme-schema.json":"{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"title\": \"Pi Coding Agent Theme\",\n\t\"description\": \"Theme schema for Pi coding agent\",\n\t\"type\": \"object\",\n\t\"required\": [\"name\", \"colors\"],\n\t\"properties\": {\n\t\t\"$schema\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"description\": \"JSON schema reference\"\n\t\t},\n\t\t\"name\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"pattern\": \"^[^/]+$\",\n\t\t\t\"description\": \"Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings.\"\n\t\t},\n\t\t\"vars\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Reusable color variables\",\n\t\t\t\"additionalProperties\": {\n\t\t\t\t\"oneOf\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"Hex color (#RRGGBB), variable reference, or empty string for terminal default\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\t\"minimum\": 0,\n\t\t\t\t\t\t\"maximum\": 255,\n\t\t\t\t\t\t\"description\": \"256-color palette index (0-255)\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\t\"colors\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Theme color definitions (all required)\",\n\t\t\t\"required\": [\n\t\t\t\t\"accent\",\n\t\t\t\t\"border\",\n\t\t\t\t\"borderAccent\",\n\t\t\t\t\"borderMuted\",\n\t\t\t\t\"success\",\n\t\t\t\t\"error\",\n\t\t\t\t\"warning\",\n\t\t\t\t\"muted\",\n\t\t\t\t\"dim\",\n\t\t\t\t\"text\",\n\t\t\t\t\"thinkingText\",\n\t\t\t\t\"selectedBg\",\n\t\t\t\t\"userMessageBg\",\n\t\t\t\t\"userMessageText\",\n\t\t\t\t\"customMessageBg\",\n\t\t\t\t\"customMessageText\",\n\t\t\t\t\"customMessageLabel\",\n\t\t\t\t\"toolPendingBg\",\n\t\t\t\t\"toolSuccessBg\",\n\t\t\t\t\"toolErrorBg\",\n\t\t\t\t\"toolTitle\",\n\t\t\t\t\"toolOutput\",\n\t\t\t\t\"mdHeading\",\n\t\t\t\t\"mdLink\",\n\t\t\t\t\"mdLinkUrl\",\n\t\t\t\t\"mdCode\",\n\t\t\t\t\"mdCodeBlock\",\n\t\t\t\t\"mdCodeBlockBorder\",\n\t\t\t\t\"mdQuote\",\n\t\t\t\t\"mdQuoteBorder\",\n\t\t\t\t\"mdHr\",\n\t\t\t\t\"mdListBullet\",\n\t\t\t\t\"toolDiffAdded\",\n\t\t\t\t\"toolDiffRemoved\",\n\t\t\t\t\"toolDiffContext\",\n\t\t\t\t\"syntaxComment\",\n\t\t\t\t\"syntaxKeyword\",\n\t\t\t\t\"syntaxFunction\",\n\t\t\t\t\"syntaxVariable\",\n\t\t\t\t\"syntaxString\",\n\t\t\t\t\"syntaxNumber\",\n\t\t\t\t\"syntaxType\",\n\t\t\t\t\"syntaxOperator\",\n\t\t\t\t\"syntaxPunctuation\",\n\t\t\t\t\"thinkingOff\",\n\t\t\t\t\"thinkingMinimal\",\n\t\t\t\t\"thinkingLow\",\n\t\t\t\t\"thinkingMedium\",\n\t\t\t\t\"thinkingHigh\",\n\t\t\t\t\"thinkingXhigh\",\n\t\t\t\t\"bashMode\"\n\t\t\t],\n\t\t\t\"properties\": {\n\t\t\t\t\"accent\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Primary accent color (logo, selected items, cursor)\"\n\t\t\t\t},\n\t\t\t\t\"border\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Normal borders\"\n\t\t\t\t},\n\t\t\t\t\"borderAccent\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Highlighted borders\"\n\t\t\t\t},\n\t\t\t\t\"borderMuted\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Subtle borders\"\n\t\t\t\t},\n\t\t\t\t\"success\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Success states\"\n\t\t\t\t},\n\t\t\t\t\"error\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Error states\"\n\t\t\t\t},\n\t\t\t\t\"warning\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Warning states\"\n\t\t\t\t},\n\t\t\t\t\"muted\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Secondary/dimmed text\"\n\t\t\t\t},\n\t\t\t\t\"dim\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Very dimmed text (more subtle than muted)\"\n\t\t\t\t},\n\t\t\t\t\"text\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Default text color (usually empty string)\"\n\t\t\t\t},\n\t\t\t\t\"thinkingText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking block text color\"\n\t\t\t\t},\n\t\t\t\t\"selectedBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Selected item background\"\n\t\t\t\t},\n\t\t\t\t\"userMessageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"User message background\"\n\t\t\t\t},\n\t\t\t\t\"userMessageText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"User message text color\"\n\t\t\t\t},\n\t\t\t\t\"customMessageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message background (hook-injected messages)\"\n\t\t\t\t},\n\t\t\t\t\"customMessageText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message text color\"\n\t\t\t\t},\n\t\t\t\t\"customMessageLabel\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message type label color\"\n\t\t\t\t},\n\t\t\t\t\"toolPendingBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (pending state)\"\n\t\t\t\t},\n\t\t\t\t\"toolSuccessBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (success state)\"\n\t\t\t\t},\n\t\t\t\t\"toolErrorBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (error state)\"\n\t\t\t\t},\n\t\t\t\t\"toolTitle\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box title color\"\n\t\t\t\t},\n\t\t\t\t\"toolOutput\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box output text color\"\n\t\t\t\t},\n\t\t\t\t\"mdHeading\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown heading text\"\n\t\t\t\t},\n\t\t\t\t\"mdLink\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown link text\"\n\t\t\t\t},\n\t\t\t\t\"mdLinkUrl\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown link URL\"\n\t\t\t\t},\n\t\t\t\t\"mdCode\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown inline code\"\n\t\t\t\t},\n\t\t\t\t\"mdCodeBlock\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown code block content\"\n\t\t\t\t},\n\t\t\t\t\"mdCodeBlockBorder\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown code block fences\"\n\t\t\t\t},\n\t\t\t\t\"mdQuote\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown blockquote text\"\n\t\t\t\t},\n\t\t\t\t\"mdQuoteBorder\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown blockquote border\"\n\t\t\t\t},\n\t\t\t\t\"mdHr\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown horizontal rule\"\n\t\t\t\t},\n\t\t\t\t\"mdListBullet\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown list bullets/numbers\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffAdded\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Added lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffRemoved\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Removed lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffContext\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Context lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"syntaxComment\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: comments\"\n\t\t\t\t},\n\t\t\t\t\"syntaxKeyword\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: keywords\"\n\t\t\t\t},\n\t\t\t\t\"syntaxFunction\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: function names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxVariable\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: variable names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxString\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: string literals\"\n\t\t\t\t},\n\t\t\t\t\"syntaxNumber\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: number literals\"\n\t\t\t\t},\n\t\t\t\t\"syntaxType\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: type names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxOperator\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: operators\"\n\t\t\t\t},\n\t\t\t\t\"syntaxPunctuation\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: punctuation\"\n\t\t\t\t},\n\t\t\t\t\"thinkingOff\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: off\"\n\t\t\t\t},\n\t\t\t\t\"thinkingMinimal\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: minimal\"\n\t\t\t\t},\n\t\t\t\t\"thinkingLow\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: low\"\n\t\t\t\t},\n\t\t\t\t\"thinkingMedium\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: medium\"\n\t\t\t\t},\n\t\t\t\t\"thinkingHigh\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: high\"\n\t\t\t\t},\n\t\t\t\t\"thinkingXhigh\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: xhigh (OpenAI codex-max only)\"\n\t\t\t\t},\n\t\t\t\t\"bashMode\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Editor border color in bash mode\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"additionalProperties\": false\n\t\t},\n\t\t\"export\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Optional colors for HTML export (defaults derived from userMessageBg if not specified)\",\n\t\t\t\"properties\": {\n\t\t\t\t\"pageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Page background color\"\n\t\t\t\t},\n\t\t\t\t\"cardBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Card/container background color\"\n\t\t\t\t},\n\t\t\t\t\"infoBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Info sections background (system prompt, notices)\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"additionalProperties\": false\n\t\t}\n\t},\n\t\"additionalProperties\": false,\n\t\"$defs\": {\n\t\t\"colorValue\": {\n\t\t\t\"oneOf\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Hex color (#RRGGBB), variable reference, or empty string for terminal default\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\"minimum\": 0,\n\t\t\t\t\t\"maximum\": 255,\n\t\t\t\t\t\"description\": \"256-color palette index (0-255)\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}\n"},"items":[{"name":"llms.txt","path":"llms.txt","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/llms.txt","title":"LLM Index & Context Digest","category":"root-instruction","format":"text","content":"# Cactus\n\n> Energy-efficient AI inference engine for running LLMs, vision models, and speech models on phones, wearables, Macs, and ARM devices like Raspberry Pi. Built by Cactus Compute, Inc. (YC S25).\n\nCactus has three layers: Cactus Kernels (ARM SIMD kernels for Apple, Snapdragon, Google Tensor, Exynos, MediaTek, Raspberry Pi), Cactus Graph (zero-copy computation graph, like PyTorch for mobile), and Cactus Engine (high-level inference API with OpenAI-compatible chat completion, tool calling, auto-RAG, vision, audio, transcription, embeddings, and cloud handoff).\n\nSupported models include Gemma 4 (E2B, E4B with vision + audio), Gemma 3/3n, Qwen 3/3.5, LiquidAI LFM2/LFM2.5 (incl. VL and MoE), Whisper, Moonshine, Parakeet (CTC/TDT), and Nomic Embed. Models run at INT4/INT8 precision with Metal GPU acceleration on supported hardware. Pre-converted weights at https://huggingface.co/Cactus-Compute.\n\n## Docs\n\n- [Engine API](docs/cactus_engine.md): C FFI for LLM inference, chat completion, streaming, tool calling, transcription, embeddings, RAG, vision, and audio\n- [Graph API](docs/cactus_graph.md): Computational graph framework for tensor operations, matrix multiplication, attention, normalization, convolutions, MoE layers, and activation functions\n- [Vector Index](docs/cactus_index.md): On-device vector database with cosine similarity search for RAG applications\n- [Fine-tuning Guide](docs/finetuning.md): Deploying Unsloth LoRA fine-tunes to mobile devices via Cactus\n- [Compatibility](docs/compatibility.md): Runtime and weight versioning across releases\n\n## Bindings\n\n- [Python](python/README.md): Python bindings via ctypes FFI\n- [Swift](bindings/swift/README.md): Swift bindings via C module map (iOS, macOS)\n- [Kotlin](bindings/kotlin/README.md): Kotlin bindings via JNI (Android) and cinterop (iOS via KMP)\n- [Flutter](bindings/flutter/README.md): Dart FFI bindings (iOS, Android)\n- [Rust](bindings/rust/README.md): Raw `extern \"C\"` declarations\n- [React Native](bindings/react-native/README.md): React Native bridge modules (iOS, Android)\n\n## Blog\n\n- [TurboQuant-H](blog/turboquant-h.md): Hadamard rotation for 2-bit per-layer embedding quantization — 4x PLI compression, 40% total model size reduction\n- [Gemma 4 on Cactus](blog/gemma4.md): Native multimodal voice, vision, and audio on-device with hybrid cloud handoff\n- [Hybrid Transcription](blog/hybrid_transcription.md): Sub-150ms transcription with cloud-level accuracy using on-device/cloud hybrid inference\n- [LFM2 24B Review](blog/lfm2_24b_a2b.md): Running LFM2-24B MoE (A2B) locally on Mac for coding use cases\n- [Parakeet CTC 1.1B Review](blog/parakeet.md): Sub-200ms on-device transcription with NVIDIA Parakeet CTC 1.1B on Apple Silicon\n- [LFM-2.5-350m](blog/lfm2.5_350m.md): 140 tok/sec single-core INT8 inference across seven devices\n\n## Key Concepts\n\n- **Cloud Handoff**: When the on-device model's confidence drops below a threshold, Cactus signals `cloud_handoff: true` so the app can route to a cloud API\n- **Auto-RAG**: Pass a corpus directory at init and Cactus automatically retrieves relevant context for each query\n- **Tool Calling**: Define tools as JSON and Cactus returns structured `function_calls` in the response\n- **Tool RAG**: When many tools are defined, Cactus selects the top-k most relevant tools per query\n- **Streaming**: All completion and transcription APIs support token-level streaming callbacks\n- **Audio in Messages**: Gemma 4 models accept `\"audio\": [\"path.wav\"]` in message JSON for native audio understanding\n- **Vision in Messages**: VLM models (Gemma 4, LFM2-VL, Qwen3.5) accept `\"images\": [\"path.png\"]` in message JSON\n- **Thinking**: Models that support chain-of-thought (Gemma 4) return a `thinking` field when `enable_thinking_if_supported` is set\n- **TurboQuant-H**: Hadamard rotation + Lloyd-Max codebook quantization for 2-bit per-layer embeddings, reducing embedding-dominated models by 40%\n- **INT4 Quantization**: Lossy weight quantization for ~50% memory reduction with minimal quality loss\n- **Metal Acceleration**: Apple GPU support for faster inference on Apple silicon\n\n## Links\n\n- GitHub: https://github.com/cactus-compute/cactus\n- Docs: https://docs.cactuscompute.com/\n- Website: https://cactuscompute.com/\n- HuggingFace Weights: https://huggingface.co/Cactus-Compute\n- Reddit: https://www.reddit.com/r/cactuscompute/\n","isInternal":false,"tokens":1127,"sizeBytes":4364},{"name":"package.json","path":"cactus-code/packages/agent/package.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/agent/package.json","title":"@earendil-works/pi-agent-core","category":"anthropic-skill","format":"json","content":"{\n\t\"name\": \"@earendil-works/pi-agent-core\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"General-purpose agent with transport abstraction, state management, and attachment support\",\n\t\"type\": \"module\",\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t},\n\t\t\"./node\": {\n\t\t\t\"types\": \"./dist/node.d.ts\",\n\t\t\t\"import\": \"./dist/node.js\"\n\t\t},\n\t\t\"./package.json\": \"./package.json\"\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"README.md\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"dependencies\": {\n\t\t\"@earendil-works/pi-ai\": \"^0.80.2\",\n\t\t\"ignore\": \"7.0.5\",\n\t\t\"typebox\": \"1.1.38\",\n\t\t\"yaml\": \"2.9.0\"\n\t},\n\t\"keywords\": [\n\t\t\"ai\",\n\t\t\"agent\",\n\t\t\"llm\",\n\t\t\"transport\",\n\t\t\"state-management\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/agent\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n","frontmatter":{"name":"@earendil-works/pi-agent-core","version":"0.80.2","description":"General-purpose agent with transport abstraction, state management, and attachment support","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./node":{"types":"./dist/node.d.ts","import":"./dist/node.js"},"./package.json":"./package.json"},"files":["dist","README.md"],"scripts":{"clean":"shx rm -rf dist","build":"tsgo -p tsconfig.build.json","prepublishOnly":"npm run clean && npm run build"},"dependencies":{"@earendil-works/pi-ai":"^0.80.2","ignore":"7.0.5","typebox":"1.1.38","yaml":"2.9.0"},"keywords":["ai","agent","llm","transport","state-management"],"author":"Mario Zechner","license":"MIT","repository":{"type":"git","url":"git+https://github.com/earendil-works/pi.git","directory":"packages/agent"},"engines":{"node":">=22.19.0"},"devDependencies":{"@types/node":"24.12.4"}},"isInternal":false,"tokens":413,"sizeBytes":1125},{"name":"tsconfig.build.json","path":"cactus-code/packages/agent/tsconfig.build.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/agent/tsconfig.build.json","title":"Agent Skill","category":"anthropic-skill","format":"json","content":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"paths\": {\n\t\t\t\"@earendil-works/pi-ai\": [\"../ai/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai/*\": [\"../ai/dist/*.d.ts\", \"../ai/dist/providers/*.d.ts\"]\n\t\t},\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\", \"**/*.d.ts\", \"src/**/*.d.ts\"]\n}\n","frontmatter":{"extends":"../../tsconfig.base.json","compilerOptions":{"outDir":"./dist","paths":{"@earendil-works/pi-ai":["../ai/dist/index.d.ts"],"@earendil-works/pi-ai/*":["../ai/dist/*.d.ts","../ai/dist/providers/*.d.ts"]},"rootDir":"./src"},"include":["src/**/*.ts"],"exclude":["node_modules","dist","**/*.d.ts","src/**/*.d.ts"]},"isInternal":false,"tokens":127,"sizeBytes":365},{"name":"package.json","path":"cactus-code/packages/ai/package.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/ai/package.json","title":"@earendil-works/pi-ai","category":"anthropic-skill","format":"json","content":"{\n\t\"name\": \"@earendil-works/pi-ai\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Unified LLM API with automatic model discovery and provider configuration\",\n\t\"type\": \"module\",\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"sideEffects\": [\n\t\t\"./dist/compat.js\"\n\t],\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t},\n\t\t\"./compat\": {\n\t\t\t\"types\": \"./dist/compat.d.ts\",\n\t\t\t\"import\": \"./dist/compat.js\"\n\t\t},\n\t\t\"./providers/*\": {\n\t\t\t\"types\": \"./dist/providers/*.d.ts\",\n\t\t\t\"import\": \"./dist/providers/*.js\"\n\t\t},\n\t\t\"./api/*\": {\n\t\t\t\"types\": \"./dist/api/*.d.ts\",\n\t\t\t\"import\": \"./dist/api/*.js\"\n\t\t},\n\t\t\"./oauth\": {\n\t\t\t\"types\": \"./dist/oauth.d.ts\",\n\t\t\t\"import\": \"./dist/oauth.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"README.md\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"dependencies\": {\n\t\t\"openai\": \"6.26.0\",\n\t\t\"partial-json\": \"0.1.7\",\n\t\t\"typebox\": \"1.1.38\"\n\t},\n\t\"keywords\": [\n\t\t\"ai\",\n\t\t\"llm\",\n\t\t\"openai\",\n\t\t\"anthropic\",\n\t\t\"gemini\",\n\t\t\"bedrock\",\n\t\t\"unified\",\n\t\t\"api\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/ai\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n","frontmatter":{"name":"@earendil-works/pi-ai","version":"0.80.2","description":"Unified LLM API with automatic model discovery and provider configuration","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","sideEffects":["./dist/compat.js"],"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./compat":{"types":"./dist/compat.d.ts","import":"./dist/compat.js"},"./providers/*":{"types":"./dist/providers/*.d.ts","import":"./dist/providers/*.js"},"./api/*":{"types":"./dist/api/*.d.ts","import":"./dist/api/*.js"},"./oauth":{"types":"./dist/oauth.d.ts","import":"./dist/oauth.js"}},"files":["dist","README.md"],"scripts":{"clean":"shx rm -rf dist","build":"tsgo -p tsconfig.build.json","prepublishOnly":"npm run clean && npm run build"},"dependencies":{"openai":"6.26.0","partial-json":"0.1.7","typebox":"1.1.38"},"keywords":["ai","llm","openai","anthropic","gemini","bedrock","unified","api"],"author":"Mario Zechner","license":"MIT","repository":{"type":"git","url":"git+https://github.com/earendil-works/pi.git","directory":"packages/ai"},"engines":{"node":">=22.19.0"},"devDependencies":{"@types/node":"24.12.4"}},"isInternal":false,"tokens":517,"sizeBytes":1375},{"name":"tsconfig.build.json","path":"cactus-code/packages/ai/tsconfig.build.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/ai/tsconfig.build.json","title":"Ai Skill","category":"anthropic-skill","format":"json","content":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\", \"**/*.d.ts\", \"src/**/*.d.ts\"]\n}","frontmatter":{"extends":"../../tsconfig.base.json","compilerOptions":{"outDir":"./dist","rootDir":"./src"},"include":["src/**/*.ts"],"exclude":["node_modules","dist","**/*.d.ts","src/**/*.d.ts"]},"isInternal":false,"tokens":69,"sizeBytes":208},{"name":"package.json","path":"cactus-code/packages/coding-agent/package.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/coding-agent/package.json","title":"@earendil-works/pi-coding-agent","category":"anthropic-skill","format":"json","content":"{\n\t\"name\": \"@earendil-works/pi-coding-agent\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Coding agent CLI with read, bash, edit, write tools and session management\",\n\t\"type\": \"module\",\n\t\"piConfig\": {\n\t\t\"name\": \"cactus\",\n\t\t\"configDir\": \".cactus\"\n\t},\n\t\"bin\": {\n\t\t\"cactus\": \"dist/cli.js\"\n\t},\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js && npm run copy-assets\",\n\t\t\"build:binary\": \"npm --prefix ../tui run build && npm --prefix ../ai run build && npm --prefix ../agent run build && npm run build && bun build --compile ./dist/bun/cli.js ./src/utils/image-resize-worker.ts --outfile dist/pi && npm run copy-binary-assets\",\n\t\t\"copy-assets\": \"shx mkdir -p dist/modes/interactive/theme && shx cp src/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/modes/interactive/assets && shx cp src/modes/interactive/assets/*.png dist/modes/interactive/assets/\",\n\t\t\"copy-binary-assets\": \"shx cp package.json dist/ && shx cp README.md dist/ && shx cp CHANGELOG.md dist/ && shx mkdir -p dist/theme && shx cp src/modes/interactive/theme/*.json dist/theme/ && shx mkdir -p dist/assets && shx cp src/modes/interactive/assets/*.png dist/assets/ && shx mkdir -p dist/export-html/vendor && shx cp src/core/export-html/template.html dist/export-html/ && shx cp src/core/export-html/vendor/*.js dist/export-html/vendor/ && shx cp -r docs dist/ && shx cp -r examples dist/ && shx cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm dist/\",\n\t\t\"shrinkwrap\": \"node ../../scripts/generate-coding-agent-shrinkwrap.mjs\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build && npm run shrinkwrap\"\n\t},\n\t\"dependencies\": {\n\t\t\"@earendil-works/pi-agent-core\": \"^0.80.2\",\n\t\t\"@earendil-works/pi-ai\": \"^0.80.2\",\n\t\t\"@earendil-works/pi-tui\": \"^0.80.2\",\n\t\t\"@silvia-odwyer/photon-node\": \"0.3.4\",\n\t\t\"chalk\": \"5.6.2\",\n\t\t\"cross-spawn\": \"7.0.6\",\n\t\t\"diff\": \"8.0.4\",\n\t\t\"glob\": \"13.0.6\",\n\t\t\"highlight.js\": \"10.7.3\",\n\t\t\"hosted-git-info\": \"9.0.3\",\n\t\t\"ignore\": \"7.0.5\",\n\t\t\"jiti\": \"2.7.0\",\n\t\t\"minimatch\": \"10.2.5\",\n\t\t\"proper-lockfile\": \"4.1.2\",\n\t\t\"semver\": \"7.8.0\",\n\t\t\"typebox\": \"1.1.38\",\n\t\t\"undici\": \"8.5.0\",\n\t\t\"yaml\": \"2.9.0\"\n\t},\n\t\"overrides\": {\n\t\t\"rimraf\": \"6.1.2\",\n\t\t\"gaxios\": {\n\t\t\t\"rimraf\": \"6.1.2\"\n\t\t}\n\t},\n\t\"optionalDependencies\": {\n\t\t\"@mariozechner/clipboard\": \"0.3.9\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/cross-spawn\": \"6.0.6\",\n\t\t\"@types/diff\": \"7.0.2\",\n\t\t\"@types/hosted-git-info\": \"3.0.5\",\n\t\t\"@types/ms\": \"2.1.0\",\n\t\t\"@types/node\": \"24.12.4\",\n\t\t\"@types/proper-lockfile\": \"4.1.4\",\n\t\t\"@types/semver\": \"7.7.1\",\n\t\t\"shx\": \"0.4.0\"\n\t},\n\t\"keywords\": [\n\t\t\"coding-agent\",\n\t\t\"ai\",\n\t\t\"llm\",\n\t\t\"cli\",\n\t\t\"tui\",\n\t\t\"agent\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/coding-agent\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t}\n}\n","frontmatter":{"name":"@earendil-works/pi-coding-agent","version":"0.80.2","description":"Coding agent CLI with read, bash, edit, write tools and session management","type":"module","piConfig":{"name":"cactus","configDir":".cactus"},"bin":{"cactus":"dist/cli.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"files":["dist"],"scripts":{"clean":"shx rm -rf dist","build":"tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js && npm run copy-assets","build:binary":"npm --prefix ../tui run build && npm --prefix ../ai run build && npm --prefix ../agent run build && npm run build && bun build --compile ./dist/bun/cli.js ./src/utils/image-resize-worker.ts --outfile dist/pi && npm run copy-binary-assets","copy-assets":"shx mkdir -p dist/modes/interactive/theme && shx cp src/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/modes/interactive/assets && shx cp src/modes/interactive/assets/*.png dist/modes/interactive/assets/","copy-binary-assets":"shx cp package.json dist/ && shx cp README.md dist/ && shx cp CHANGELOG.md dist/ && shx mkdir -p dist/theme && shx cp src/modes/interactive/theme/*.json dist/theme/ && shx mkdir -p dist/assets && shx cp src/modes/interactive/assets/*.png dist/assets/ && shx mkdir -p dist/export-html/vendor && shx cp src/core/export-html/template.html dist/export-html/ && shx cp src/core/export-html/vendor/*.js dist/export-html/vendor/ && shx cp -r docs dist/ && shx cp -r examples dist/ && shx cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm dist/","shrinkwrap":"node ../../scripts/generate-coding-agent-shrinkwrap.mjs","prepublishOnly":"npm run clean && npm run build && npm run shrinkwrap"},"dependencies":{"@earendil-works/pi-agent-core":"^0.80.2","@earendil-works/pi-ai":"^0.80.2","@earendil-works/pi-tui":"^0.80.2","@silvia-odwyer/photon-node":"0.3.4","chalk":"5.6.2","cross-spawn":"7.0.6","diff":"8.0.4","glob":"13.0.6","highlight.js":"10.7.3","hosted-git-info":"9.0.3","ignore":"7.0.5","jiti":"2.7.0","minimatch":"10.2.5","proper-lockfile":"4.1.2","semver":"7.8.0","typebox":"1.1.38","undici":"8.5.0","yaml":"2.9.0"},"overrides":{"rimraf":"6.1.2","gaxios":{"rimraf":"6.1.2"}},"optionalDependencies":{"@mariozechner/clipboard":"0.3.9"},"devDependencies":{"@types/cross-spawn":"6.0.6","@types/diff":"7.0.2","@types/hosted-git-info":"3.0.5","@types/ms":"2.1.0","@types/node":"24.12.4","@types/proper-lockfile":"4.1.4","@types/semver":"7.7.1","shx":"0.4.0"},"keywords":["coding-agent","ai","llm","cli","tui","agent"],"author":"Mario Zechner","license":"MIT","repository":{"type":"git","url":"git+https://github.com/earendil-works/pi.git","directory":"packages/coding-agent"},"engines":{"node":">=22.19.0"}},"isInternal":false,"tokens":1129,"sizeBytes":3070},{"name":"dark.json","path":"cactus-code/packages/coding-agent/src/modes/interactive/theme/dark.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/coding-agent/src/modes/interactive/theme/dark.json","title":"dark","category":"anthropic-skill","format":"json","content":"{\n\t\"$schema\": \"https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json\",\n\t\"name\": \"dark\",\n\t\"vars\": {\n\t\t\"cyan\": \"#00d7ff\",\n\t\t\"blue\": \"#5f87ff\",\n\t\t\"green\": \"#b5bd68\",\n\t\t\"red\": \"#cc6666\",\n\t\t\"yellow\": \"#ffff00\",\n\t\t\"text\": \"#d4d4d4\",\n\t\t\"gray\": \"#808080\",\n\t\t\"dimGray\": \"#666666\",\n\t\t\"darkGray\": \"#505050\",\n\t\t\"accent\": \"#8abeb7\",\n\t\t\"selectedBg\": \"#3a3a4a\",\n\t\t\"userMsgBg\": \"#343541\",\n\t\t\"toolPendingBg\": \"#282832\",\n\t\t\"toolSuccessBg\": \"#283228\",\n\t\t\"toolErrorBg\": \"#3c2828\",\n\t\t\"customMsgBg\": \"#2d2838\"\n\t},\n\t\"colors\": {\n\t\t\"accent\": \"accent\",\n\t\t\"border\": \"blue\",\n\t\t\"borderAccent\": \"cyan\",\n\t\t\"borderMuted\": \"darkGray\",\n\t\t\"success\": \"green\",\n\t\t\"error\": \"red\",\n\t\t\"warning\": \"yellow\",\n\t\t\"muted\": \"gray\",\n\t\t\"dim\": \"dimGray\",\n\t\t\"text\": \"text\",\n\t\t\"thinkingText\": \"gray\",\n\n\t\t\"selectedBg\": \"selectedBg\",\n\t\t\"userMessageBg\": \"userMsgBg\",\n\t\t\"userMessageText\": \"text\",\n\t\t\"customMessageBg\": \"customMsgBg\",\n\t\t\"customMessageText\": \"text\",\n\t\t\"customMessageLabel\": \"#9575cd\",\n\t\t\"toolPendingBg\": \"toolPendingBg\",\n\t\t\"toolSuccessBg\": \"toolSuccessBg\",\n\t\t\"toolErrorBg\": \"toolErrorBg\",\n\t\t\"toolTitle\": \"text\",\n\t\t\"toolOutput\": \"gray\",\n\n\t\t\"mdHeading\": \"#f0c674\",\n\t\t\"mdLink\": \"#81a2be\",\n\t\t\"mdLinkUrl\": \"dimGray\",\n\t\t\"mdCode\": \"accent\",\n\t\t\"mdCodeBlock\": \"green\",\n\t\t\"mdCodeBlockBorder\": \"gray\",\n\t\t\"mdQuote\": \"gray\",\n\t\t\"mdQuoteBorder\": \"gray\",\n\t\t\"mdHr\": \"gray\",\n\t\t\"mdListBullet\": \"accent\",\n\n\t\t\"toolDiffAdded\": \"green\",\n\t\t\"toolDiffRemoved\": \"red\",\n\t\t\"toolDiffContext\": \"gray\",\n\n\t\t\"syntaxComment\": \"#6A9955\",\n\t\t\"syntaxKeyword\": \"#569CD6\",\n\t\t\"syntaxFunction\": \"#DCDCAA\",\n\t\t\"syntaxVariable\": \"#9CDCFE\",\n\t\t\"syntaxString\": \"#CE9178\",\n\t\t\"syntaxNumber\": \"#B5CEA8\",\n\t\t\"syntaxType\": \"#4EC9B0\",\n\t\t\"syntaxOperator\": \"#D4D4D4\",\n\t\t\"syntaxPunctuation\": \"#D4D4D4\",\n\n\t\t\"thinkingOff\": \"darkGray\",\n\t\t\"thinkingMinimal\": \"#6e6e6e\",\n\t\t\"thinkingLow\": \"#5f87af\",\n\t\t\"thinkingMedium\": \"#81a2be\",\n\t\t\"thinkingHigh\": \"#b294bb\",\n\t\t\"thinkingXhigh\": \"#d183e8\",\n\n\t\t\"bashMode\": \"green\"\n\t},\n\t\"export\": {\n\t\t\"pageBg\": \"#18181e\",\n\t\t\"cardBg\": \"#1e1e24\",\n\t\t\"infoBg\": \"#3c3728\"\n\t}\n}\n","frontmatter":{"$schema":"https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json","name":"dark","vars":{"cyan":"#00d7ff","blue":"#5f87ff","green":"#b5bd68","red":"#cc6666","yellow":"#ffff00","text":"#d4d4d4","gray":"#808080","dimGray":"#666666","darkGray":"#505050","accent":"#8abeb7","selectedBg":"#3a3a4a","userMsgBg":"#343541","toolPendingBg":"#282832","toolSuccessBg":"#283228","toolErrorBg":"#3c2828","customMsgBg":"#2d2838"},"colors":{"accent":"accent","border":"blue","borderAccent":"cyan","borderMuted":"darkGray","success":"green","error":"red","warning":"yellow","muted":"gray","dim":"dimGray","text":"text","thinkingText":"gray","selectedBg":"selectedBg","userMessageBg":"userMsgBg","userMessageText":"text","customMessageBg":"customMsgBg","customMessageText":"text","customMessageLabel":"#9575cd","toolPendingBg":"toolPendingBg","toolSuccessBg":"toolSuccessBg","toolErrorBg":"toolErrorBg","toolTitle":"text","toolOutput":"gray","mdHeading":"#f0c674","mdLink":"#81a2be","mdLinkUrl":"dimGray","mdCode":"accent","mdCodeBlock":"green","mdCodeBlockBorder":"gray","mdQuote":"gray","mdQuoteBorder":"gray","mdHr":"gray","mdListBullet":"accent","toolDiffAdded":"green","toolDiffRemoved":"red","toolDiffContext":"gray","syntaxComment":"#6A9955","syntaxKeyword":"#569CD6","syntaxFunction":"#DCDCAA","syntaxVariable":"#9CDCFE","syntaxString":"#CE9178","syntaxNumber":"#B5CEA8","syntaxType":"#4EC9B0","syntaxOperator":"#D4D4D4","syntaxPunctuation":"#D4D4D4","thinkingOff":"darkGray","thinkingMinimal":"#6e6e6e","thinkingLow":"#5f87af","thinkingMedium":"#81a2be","thinkingHigh":"#b294bb","thinkingXhigh":"#d183e8","bashMode":"green"},"export":{"pageBg":"#18181e","cardBg":"#1e1e24","infoBg":"#3c3728"}},"isInternal":false,"tokens":810,"sizeBytes":2065},{"name":"theme-schema.json","path":"cactus-code/packages/coding-agent/src/modes/interactive/theme/theme-schema.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/coding-agent/src/modes/interactive/theme/theme-schema.json","title":"Theme Skill","category":"anthropic-skill","format":"json","content":"{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"title\": \"Pi Coding Agent Theme\",\n\t\"description\": \"Theme schema for Pi coding agent\",\n\t\"type\": \"object\",\n\t\"required\": [\"name\", \"colors\"],\n\t\"properties\": {\n\t\t\"$schema\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"description\": \"JSON schema reference\"\n\t\t},\n\t\t\"name\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"pattern\": \"^[^/]+$\",\n\t\t\t\"description\": \"Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings.\"\n\t\t},\n\t\t\"vars\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Reusable color variables\",\n\t\t\t\"additionalProperties\": {\n\t\t\t\t\"oneOf\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"Hex color (#RRGGBB), variable reference, or empty string for terminal default\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\t\"minimum\": 0,\n\t\t\t\t\t\t\"maximum\": 255,\n\t\t\t\t\t\t\"description\": \"256-color palette index (0-255)\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\t\"colors\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Theme color definitions (all required)\",\n\t\t\t\"required\": [\n\t\t\t\t\"accent\",\n\t\t\t\t\"border\",\n\t\t\t\t\"borderAccent\",\n\t\t\t\t\"borderMuted\",\n\t\t\t\t\"success\",\n\t\t\t\t\"error\",\n\t\t\t\t\"warning\",\n\t\t\t\t\"muted\",\n\t\t\t\t\"dim\",\n\t\t\t\t\"text\",\n\t\t\t\t\"thinkingText\",\n\t\t\t\t\"selectedBg\",\n\t\t\t\t\"userMessageBg\",\n\t\t\t\t\"userMessageText\",\n\t\t\t\t\"customMessageBg\",\n\t\t\t\t\"customMessageText\",\n\t\t\t\t\"customMessageLabel\",\n\t\t\t\t\"toolPendingBg\",\n\t\t\t\t\"toolSuccessBg\",\n\t\t\t\t\"toolErrorBg\",\n\t\t\t\t\"toolTitle\",\n\t\t\t\t\"toolOutput\",\n\t\t\t\t\"mdHeading\",\n\t\t\t\t\"mdLink\",\n\t\t\t\t\"mdLinkUrl\",\n\t\t\t\t\"mdCode\",\n\t\t\t\t\"mdCodeBlock\",\n\t\t\t\t\"mdCodeBlockBorder\",\n\t\t\t\t\"mdQuote\",\n\t\t\t\t\"mdQuoteBorder\",\n\t\t\t\t\"mdHr\",\n\t\t\t\t\"mdListBullet\",\n\t\t\t\t\"toolDiffAdded\",\n\t\t\t\t\"toolDiffRemoved\",\n\t\t\t\t\"toolDiffContext\",\n\t\t\t\t\"syntaxComment\",\n\t\t\t\t\"syntaxKeyword\",\n\t\t\t\t\"syntaxFunction\",\n\t\t\t\t\"syntaxVariable\",\n\t\t\t\t\"syntaxString\",\n\t\t\t\t\"syntaxNumber\",\n\t\t\t\t\"syntaxType\",\n\t\t\t\t\"syntaxOperator\",\n\t\t\t\t\"syntaxPunctuation\",\n\t\t\t\t\"thinkingOff\",\n\t\t\t\t\"thinkingMinimal\",\n\t\t\t\t\"thinkingLow\",\n\t\t\t\t\"thinkingMedium\",\n\t\t\t\t\"thinkingHigh\",\n\t\t\t\t\"thinkingXhigh\",\n\t\t\t\t\"bashMode\"\n\t\t\t],\n\t\t\t\"properties\": {\n\t\t\t\t\"accent\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Primary accent color (logo, selected items, cursor)\"\n\t\t\t\t},\n\t\t\t\t\"border\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Normal borders\"\n\t\t\t\t},\n\t\t\t\t\"borderAccent\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Highlighted borders\"\n\t\t\t\t},\n\t\t\t\t\"borderMuted\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Subtle borders\"\n\t\t\t\t},\n\t\t\t\t\"success\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Success states\"\n\t\t\t\t},\n\t\t\t\t\"error\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Error states\"\n\t\t\t\t},\n\t\t\t\t\"warning\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Warning states\"\n\t\t\t\t},\n\t\t\t\t\"muted\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Secondary/dimmed text\"\n\t\t\t\t},\n\t\t\t\t\"dim\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Very dimmed text (more subtle than muted)\"\n\t\t\t\t},\n\t\t\t\t\"text\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Default text color (usually empty string)\"\n\t\t\t\t},\n\t\t\t\t\"thinkingText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking block text color\"\n\t\t\t\t},\n\t\t\t\t\"selectedBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Selected item background\"\n\t\t\t\t},\n\t\t\t\t\"userMessageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"User message background\"\n\t\t\t\t},\n\t\t\t\t\"userMessageText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"User message text color\"\n\t\t\t\t},\n\t\t\t\t\"customMessageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message background (hook-injected messages)\"\n\t\t\t\t},\n\t\t\t\t\"customMessageText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message text color\"\n\t\t\t\t},\n\t\t\t\t\"customMessageLabel\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message type label color\"\n\t\t\t\t},\n\t\t\t\t\"toolPendingBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (pending state)\"\n\t\t\t\t},\n\t\t\t\t\"toolSuccessBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (success state)\"\n\t\t\t\t},\n\t\t\t\t\"toolErrorBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (error state)\"\n\t\t\t\t},\n\t\t\t\t\"toolTitle\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box title color\"\n\t\t\t\t},\n\t\t\t\t\"toolOutput\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box output text color\"\n\t\t\t\t},\n\t\t\t\t\"mdHeading\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown heading text\"\n\t\t\t\t},\n\t\t\t\t\"mdLink\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown link text\"\n\t\t\t\t},\n\t\t\t\t\"mdLinkUrl\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown link URL\"\n\t\t\t\t},\n\t\t\t\t\"mdCode\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown inline code\"\n\t\t\t\t},\n\t\t\t\t\"mdCodeBlock\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown code block content\"\n\t\t\t\t},\n\t\t\t\t\"mdCodeBlockBorder\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown code block fences\"\n\t\t\t\t},\n\t\t\t\t\"mdQuote\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown blockquote text\"\n\t\t\t\t},\n\t\t\t\t\"mdQuoteBorder\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown blockquote border\"\n\t\t\t\t},\n\t\t\t\t\"mdHr\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown horizontal rule\"\n\t\t\t\t},\n\t\t\t\t\"mdListBullet\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown list bullets/numbers\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffAdded\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Added lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffRemoved\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Removed lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffContext\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Context lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"syntaxComment\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: comments\"\n\t\t\t\t},\n\t\t\t\t\"syntaxKeyword\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: keywords\"\n\t\t\t\t},\n\t\t\t\t\"syntaxFunction\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: function names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxVariable\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: variable names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxString\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: string literals\"\n\t\t\t\t},\n\t\t\t\t\"syntaxNumber\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: number literals\"\n\t\t\t\t},\n\t\t\t\t\"syntaxType\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: type names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxOperator\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: operators\"\n\t\t\t\t},\n\t\t\t\t\"syntaxPunctuation\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: punctuation\"\n\t\t\t\t},\n\t\t\t\t\"thinkingOff\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: off\"\n\t\t\t\t},\n\t\t\t\t\"thinkingMinimal\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: minimal\"\n\t\t\t\t},\n\t\t\t\t\"thinkingLow\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: low\"\n\t\t\t\t},\n\t\t\t\t\"thinkingMedium\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: medium\"\n\t\t\t\t},\n\t\t\t\t\"thinkingHigh\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: high\"\n\t\t\t\t},\n\t\t\t\t\"thinkingXhigh\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: xhigh (OpenAI codex-max only)\"\n\t\t\t\t},\n\t\t\t\t\"bashMode\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Editor border color in bash mode\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"additionalProperties\": false\n\t\t},\n\t\t\"export\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Optional colors for HTML export (defaults derived from userMessageBg if not specified)\",\n\t\t\t\"properties\": {\n\t\t\t\t\"pageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Page background color\"\n\t\t\t\t},\n\t\t\t\t\"cardBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Card/container background color\"\n\t\t\t\t},\n\t\t\t\t\"infoBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Info sections background (system prompt, notices)\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"additionalProperties\": false\n\t\t}\n\t},\n\t\"additionalProperties\": false,\n\t\"$defs\": {\n\t\t\"colorValue\": {\n\t\t\t\"oneOf\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Hex color (#RRGGBB), variable reference, or empty string for terminal default\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\"minimum\": 0,\n\t\t\t\t\t\"maximum\": 255,\n\t\t\t\t\t\"description\": \"256-color palette index (0-255)\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}\n","frontmatter":{"$schema":"http://json-schema.org/draft-07/schema#","title":"Pi Coding Agent Theme","description":"Theme schema for Pi coding agent","type":"object","required":["name","colors"],"properties":{"$schema":{"type":"string","description":"JSON schema reference"},"name":{"type":"string","pattern":"^[^/]+$","description":"Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings."},"vars":{"type":"object","description":"Reusable color variables","additionalProperties":{"oneOf":[{"type":"string","description":"Hex color (#RRGGBB), variable reference, or empty string for terminal default"},{"type":"integer","minimum":0,"maximum":255,"description":"256-color palette index (0-255)"}]}},"colors":{"type":"object","description":"Theme color definitions (all required)","required":["accent","border","borderAccent","borderMuted","success","error","warning","muted","dim","text","thinkingText","selectedBg","userMessageBg","userMessageText","customMessageBg","customMessageText","customMessageLabel","toolPendingBg","toolSuccessBg","toolErrorBg","toolTitle","toolOutput","mdHeading","mdLink","mdLinkUrl","mdCode","mdCodeBlock","mdCodeBlockBorder","mdQuote","mdQuoteBorder","mdHr","mdListBullet","toolDiffAdded","toolDiffRemoved","toolDiffContext","syntaxComment","syntaxKeyword","syntaxFunction","syntaxVariable","syntaxString","syntaxNumber","syntaxType","syntaxOperator","syntaxPunctuation","thinkingOff","thinkingMinimal","thinkingLow","thinkingMedium","thinkingHigh","thinkingXhigh","bashMode"],"properties":{"accent":{"$ref":"#/$defs/colorValue","description":"Primary accent color (logo, selected items, cursor)"},"border":{"$ref":"#/$defs/colorValue","description":"Normal borders"},"borderAccent":{"$ref":"#/$defs/colorValue","description":"Highlighted borders"},"borderMuted":{"$ref":"#/$defs/colorValue","description":"Subtle borders"},"success":{"$ref":"#/$defs/colorValue","description":"Success states"},"error":{"$ref":"#/$defs/colorValue","description":"Error states"},"warning":{"$ref":"#/$defs/colorValue","description":"Warning states"},"muted":{"$ref":"#/$defs/colorValue","description":"Secondary/dimmed text"},"dim":{"$ref":"#/$defs/colorValue","description":"Very dimmed text (more subtle than muted)"},"text":{"$ref":"#/$defs/colorValue","description":"Default text color (usually empty string)"},"thinkingText":{"$ref":"#/$defs/colorValue","description":"Thinking block text color"},"selectedBg":{"$ref":"#/$defs/colorValue","description":"Selected item background"},"userMessageBg":{"$ref":"#/$defs/colorValue","description":"User message background"},"userMessageText":{"$ref":"#/$defs/colorValue","description":"User message text color"},"customMessageBg":{"$ref":"#/$defs/colorValue","description":"Custom message background (hook-injected messages)"},"customMessageText":{"$ref":"#/$defs/colorValue","description":"Custom message text color"},"customMessageLabel":{"$ref":"#/$defs/colorValue","description":"Custom message type label color"},"toolPendingBg":{"$ref":"#/$defs/colorValue","description":"Tool execution box (pending state)"},"toolSuccessBg":{"$ref":"#/$defs/colorValue","description":"Tool execution box (success state)"},"toolErrorBg":{"$ref":"#/$defs/colorValue","description":"Tool execution box (error state)"},"toolTitle":{"$ref":"#/$defs/colorValue","description":"Tool execution box title color"},"toolOutput":{"$ref":"#/$defs/colorValue","description":"Tool execution box output text color"},"mdHeading":{"$ref":"#/$defs/colorValue","description":"Markdown heading text"},"mdLink":{"$ref":"#/$defs/colorValue","description":"Markdown link text"},"mdLinkUrl":{"$ref":"#/$defs/colorValue","description":"Markdown link URL"},"mdCode":{"$ref":"#/$defs/colorValue","description":"Markdown inline code"},"mdCodeBlock":{"$ref":"#/$defs/colorValue","description":"Markdown code block content"},"mdCodeBlockBorder":{"$ref":"#/$defs/colorValue","description":"Markdown code block fences"},"mdQuote":{"$ref":"#/$defs/colorValue","description":"Markdown blockquote text"},"mdQuoteBorder":{"$ref":"#/$defs/colorValue","description":"Markdown blockquote border"},"mdHr":{"$ref":"#/$defs/colorValue","description":"Markdown horizontal rule"},"mdListBullet":{"$ref":"#/$defs/colorValue","description":"Markdown list bullets/numbers"},"toolDiffAdded":{"$ref":"#/$defs/colorValue","description":"Added lines in tool diffs"},"toolDiffRemoved":{"$ref":"#/$defs/colorValue","description":"Removed lines in tool diffs"},"toolDiffContext":{"$ref":"#/$defs/colorValue","description":"Context lines in tool diffs"},"syntaxComment":{"$ref":"#/$defs/colorValue","description":"Syntax highlighting: comments"},"syntaxKeyword":{"$ref":"#/$defs/colorValue","description":"Syntax highlighting: keywords"},"syntaxFunction":{"$ref":"#/$defs/colorValue","description":"Syntax highlighting: function names"},"syntaxVariable":{"$ref":"#/$defs/colorValue","description":"Syntax highlighting: variable names"},"syntaxString":{"$ref":"#/$defs/colorValue","description":"Syntax highlighting: string literals"},"syntaxNumber":{"$ref":"#/$defs/colorValue","description":"Syntax highlighting: number literals"},"syntaxType":{"$ref":"#/$defs/colorValue","description":"Syntax highlighting: type names"},"syntaxOperator":{"$ref":"#/$defs/colorValue","description":"Syntax highlighting: operators"},"syntaxPunctuation":{"$ref":"#/$defs/colorValue","description":"Syntax highlighting: punctuation"},"thinkingOff":{"$ref":"#/$defs/colorValue","description":"Thinking level border: off"},"thinkingMinimal":{"$ref":"#/$defs/colorValue","description":"Thinking level border: minimal"},"thinkingLow":{"$ref":"#/$defs/colorValue","description":"Thinking level border: low"},"thinkingMedium":{"$ref":"#/$defs/colorValue","description":"Thinking level border: medium"},"thinkingHigh":{"$ref":"#/$defs/colorValue","description":"Thinking level border: high"},"thinkingXhigh":{"$ref":"#/$defs/colorValue","description":"Thinking level border: xhigh (OpenAI codex-max only)"},"bashMode":{"$ref":"#/$defs/colorValue","description":"Editor border color in bash mode"}},"additionalProperties":false},"export":{"type":"object","description":"Optional colors for HTML export (defaults derived from userMessageBg if not specified)","properties":{"pageBg":{"$ref":"#/$defs/colorValue","description":"Page background color"},"cardBg":{"$ref":"#/$defs/colorValue","description":"Card/container background color"},"infoBg":{"$ref":"#/$defs/colorValue","description":"Info sections background (system prompt, notices)"}},"additionalProperties":false}},"additionalProperties":false,"$defs":{"colorValue":{"oneOf":[{"type":"string","description":"Hex color (#RRGGBB), variable reference, or empty string for terminal default"},{"type":"integer","minimum":0,"maximum":255,"description":"256-color palette index (0-255)"}]}}},"isInternal":false,"tokens":2523,"sizeBytes":8769},{"name":"tsconfig.build.json","path":"cactus-code/packages/coding-agent/tsconfig.build.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/coding-agent/tsconfig.build.json","title":"Coding-agent Skill","category":"anthropic-skill","format":"json","content":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"paths\": {\n\t\t\t\"@earendil-works/pi-agent-core\": [\"../agent/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-agent-core/*\": [\"../agent/dist/*.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai\": [\"../ai/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai/*\": [\"../ai/dist/*.d.ts\", \"../ai/dist/providers/*.d.ts\"],\n\t\t\t\"@earendil-works/pi-tui\": [\"../tui/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-tui/*\": [\"../tui/dist/*.d.ts\", \"../tui/dist/components/*.d.ts\"]\n\t\t},\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\", \"src/**/*.d.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\"]\n}\n","frontmatter":{"extends":"../../tsconfig.base.json","compilerOptions":{"outDir":"./dist","paths":{"@earendil-works/pi-agent-core":["../agent/dist/index.d.ts"],"@earendil-works/pi-agent-core/*":["../agent/dist/*.d.ts"],"@earendil-works/pi-ai":["../ai/dist/index.d.ts"],"@earendil-works/pi-ai/*":["../ai/dist/*.d.ts","../ai/dist/providers/*.d.ts"],"@earendil-works/pi-tui":["../tui/dist/index.d.ts"],"@earendil-works/pi-tui/*":["../tui/dist/*.d.ts","../tui/dist/components/*.d.ts"]},"rootDir":"./src"},"include":["src/**/*.ts","src/**/*.d.ts"],"exclude":["node_modules","dist"]},"isInternal":false,"tokens":215,"sizeBytes":627},{"name":"package.json","path":"cactus-code/packages/tui/package.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/tui/package.json","title":"@earendil-works/pi-tui","category":"anthropic-skill","format":"json","content":"{\n\t\"name\": \"@earendil-works/pi-tui\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Terminal User Interface library with differential rendering for efficient text-based applications\",\n\t\"type\": \"module\",\n\t\"main\": \"dist/index.js\",\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"files\": [\n\t\t\"dist/**/*\",\n\t\t\"native/win32/prebuilds/**/*.node\",\n\t\t\"native/darwin/prebuilds/**/*.node\",\n\t\t\"README.md\"\n\t],\n\t\"keywords\": [\n\t\t\"tui\",\n\t\t\"terminal\",\n\t\t\"ui\",\n\t\t\"text-editor\",\n\t\t\"differential-rendering\",\n\t\t\"typescript\",\n\t\t\"cli\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/tui\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"types\": \"./dist/index.d.ts\",\n\t\"dependencies\": {\n\t\t\"get-east-asian-width\": \"1.6.0\",\n\t\t\"marked\": \"18.0.5\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n","frontmatter":{"name":"@earendil-works/pi-tui","version":"0.80.2","description":"Terminal User Interface library with differential rendering for efficient text-based applications","type":"module","main":"dist/index.js","scripts":{"clean":"shx rm -rf dist","build":"tsgo -p tsconfig.build.json","prepublishOnly":"npm run clean && npm run build"},"files":["dist/**/*","native/win32/prebuilds/**/*.node","native/darwin/prebuilds/**/*.node","README.md"],"keywords":["tui","terminal","ui","text-editor","differential-rendering","typescript","cli"],"author":"Mario Zechner","license":"MIT","repository":{"type":"git","url":"git+https://github.com/earendil-works/pi.git","directory":"packages/tui"},"engines":{"node":">=22.19.0"},"types":"./dist/index.d.ts","dependencies":{"get-east-asian-width":"1.6.0","marked":"18.0.5"},"devDependencies":{"@types/node":"24.12.4"}},"isInternal":false,"tokens":347,"sizeBytes":981},{"name":"tsconfig.build.json","path":"cactus-code/packages/tui/tsconfig.build.json","rawUrl":"https://raw.githubusercontent.com/cactus-compute/cactus/HEAD/cactus-code/packages/tui/tsconfig.build.json","title":"Tui Skill","category":"anthropic-skill","format":"json","content":"{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*\"],\n\t\"exclude\": [\"node_modules\", \"dist\"]\n}","frontmatter":{"extends":"../../tsconfig.base.json","compilerOptions":{"outDir":"./dist","rootDir":"./src"},"include":["src/**/*"],"exclude":["node_modules","dist"]},"isInternal":false,"tokens":58,"sizeBytes":175}],"systemPromptSnippet":"<yakaai_skills repo=\"cactus-compute/cactus\">\n<!-- File: llms.txt (Tokens: ~1127 | Category: root-instruction) -->\n# Cactus\n\n> Energy-efficient AI inference engine for running LLMs, vision models, and speech models on phones, wearables, Macs, and ARM devices like Raspberry Pi. Built by Cactus Compute, Inc. (YC S25).\n\nCactus has three layers: Cactus Kernels (ARM SIMD kernels for Apple, Snapdragon, Google Tensor, Exynos, MediaTek, Raspberry Pi), Cactus Graph (zero-copy computation graph, like PyTorch for mobile), and Cactus Engine (high-level inference API with OpenAI-compatible chat completion, tool calling, auto-RAG, vision, audio, transcription, embeddings, and cloud handoff).\n\nSupported models include Gemma 4 (E2B, E4B with vision + audio), Gemma 3/3n, Qwen 3/3.5, LiquidAI LFM2/LFM2.5 (incl. VL and MoE), Whisper, Moonshine, Parakeet (CTC/TDT), and Nomic Embed. Models run at INT4/INT8 precision with Metal GPU acceleration on supported hardware. Pre-converted weights at https://huggingface.co/Cactus-Compute.\n\n## Docs\n\n- [Engine API](docs/cactus_engine.md): C FFI for LLM inference, chat completion, streaming, tool calling, transcription, embeddings, RAG, vision, and audio\n- [Graph API](docs/cactus_graph.md): Computational graph framework for tensor operations, matrix multiplication, attention, normalization, convolutions, MoE layers, and activation functions\n- [Vector Index](docs/cactus_index.md): On-device vector database with cosine similarity search for RAG applications\n- [Fine-tuning Guide](docs/finetuning.md): Deploying Unsloth LoRA fine-tunes to mobile devices via Cactus\n- [Compatibility](docs/compatibility.md): Runtime and weight versioning across releases\n\n## Bindings\n\n- [Python](python/README.md): Python bindings via ctypes FFI\n- [Swift](bindings/swift/README.md): Swift bindings via C module map (iOS, macOS)\n- [Kotlin](bindings/kotlin/README.md): Kotlin bindings via JNI (Android) and cinterop (iOS via KMP)\n- [Flutter](bindings/flutter/README.md): Dart FFI bindings (iOS, Android)\n- [Rust](bindings/rust/README.md): Raw `extern \"C\"` declarations\n- [React Native](bindings/react-native/README.md): React Native bridge modules (iOS, Android)\n\n## Blog\n\n- [TurboQuant-H](blog/turboquant-h.md): Hadamard rotation for 2-bit per-layer embedding quantization — 4x PLI compression, 40% total model size reduction\n- [Gemma 4 on Cactus](blog/gemma4.md): Native multimodal voice, vision, and audio on-device with hybrid cloud handoff\n- [Hybrid Transcription](blog/hybrid_transcription.md): Sub-150ms transcription with cloud-level accuracy using on-device/cloud hybrid inference\n- [LFM2 24B Review](blog/lfm2_24b_a2b.md): Running LFM2-24B MoE (A2B) locally on Mac for coding use cases\n- [Parakeet CTC 1.1B Review](blog/parakeet.md): Sub-200ms on-device transcription with NVIDIA Parakeet CTC 1.1B on Apple Silicon\n- [LFM-2.5-350m](blog/lfm2.5_350m.md): 140 tok/sec single-core INT8 inference across seven devices\n\n## Key Concepts\n\n- **Cloud Handoff**: When the on-device model's confidence drops below a threshold, Cactus signals `cloud_handoff: true` so the app can route to a cloud API\n- **Auto-RAG**: Pass a corpus directory at init and Cactus automatically retrieves relevant context for each query\n- **Tool Calling**: Define tools as JSON and Cactus returns structured `function_calls` in the response\n- **Tool RAG**: When many tools are defined, Cactus selects the top-k most relevant tools per query\n- **Streaming**: All completion and transcription APIs support token-level streaming callbacks\n- **Audio in Messages**: Gemma 4 models accept `\"audio\": [\"path.wav\"]` in message JSON for native audio understanding\n- **Vision in Messages**: VLM models (Gemma 4, LFM2-VL, Qwen3.5) accept `\"images\": [\"path.png\"]` in message JSON\n- **Thinking**: Models that support chain-of-thought (Gemma 4) return a `thinking` field when `enable_thinking_if_supported` is set\n- **TurboQuant-H**: Hadamard rotation + Lloyd-Max codebook quantization for 2-bit per-layer embeddings, reducing embedding-dominated models by 40%\n- **INT4 Quantization**: Lossy weight quantization for ~50% memory reduction with minimal quality loss\n- **Metal Acceleration**: Apple GPU support for faster inference on Apple silicon\n\n## Links\n\n- GitHub: https://github.com/cactus-compute/cactus\n- Docs: https://docs.cactuscompute.com/\n- Website: https://cactuscompute.com/\n- HuggingFace Weights: https://huggingface.co/Cactus-Compute\n- Reddit: https://www.reddit.com/r/cactuscompute/\n\n<!-- File: cactus-code/packages/agent/package.json (Tokens: ~413 | Category: anthropic-skill) -->\n{\n\t\"name\": \"@earendil-works/pi-agent-core\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"General-purpose agent with transport abstraction, state management, and attachment support\",\n\t\"type\": \"module\",\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t},\n\t\t\"./node\": {\n\t\t\t\"types\": \"./dist/node.d.ts\",\n\t\t\t\"import\": \"./dist/node.js\"\n\t\t},\n\t\t\"./package.json\": \"./package.json\"\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"README.md\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"dependencies\": {\n\t\t\"@earendil-works/pi-ai\": \"^0.80.2\",\n\t\t\"ignore\": \"7.0.5\",\n\t\t\"typebox\": \"1.1.38\",\n\t\t\"yaml\": \"2.9.0\"\n\t},\n\t\"keywords\": [\n\t\t\"ai\",\n\t\t\"agent\",\n\t\t\"llm\",\n\t\t\"transport\",\n\t\t\"state-management\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/agent\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n\n<!-- File: cactus-code/packages/agent/tsconfig.build.json (Tokens: ~127 | Category: anthropic-skill) -->\n{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"paths\": {\n\t\t\t\"@earendil-works/pi-ai\": [\"../ai/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai/*\": [\"../ai/dist/*.d.ts\", \"../ai/dist/providers/*.d.ts\"]\n\t\t},\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\", \"**/*.d.ts\", \"src/**/*.d.ts\"]\n}\n\n<!-- File: cactus-code/packages/ai/package.json (Tokens: ~517 | Category: anthropic-skill) -->\n{\n\t\"name\": \"@earendil-works/pi-ai\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Unified LLM API with automatic model discovery and provider configuration\",\n\t\"type\": \"module\",\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"sideEffects\": [\n\t\t\"./dist/compat.js\"\n\t],\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t},\n\t\t\"./compat\": {\n\t\t\t\"types\": \"./dist/compat.d.ts\",\n\t\t\t\"import\": \"./dist/compat.js\"\n\t\t},\n\t\t\"./providers/*\": {\n\t\t\t\"types\": \"./dist/providers/*.d.ts\",\n\t\t\t\"import\": \"./dist/providers/*.js\"\n\t\t},\n\t\t\"./api/*\": {\n\t\t\t\"types\": \"./dist/api/*.d.ts\",\n\t\t\t\"import\": \"./dist/api/*.js\"\n\t\t},\n\t\t\"./oauth\": {\n\t\t\t\"types\": \"./dist/oauth.d.ts\",\n\t\t\t\"import\": \"./dist/oauth.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"README.md\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"dependencies\": {\n\t\t\"openai\": \"6.26.0\",\n\t\t\"partial-json\": \"0.1.7\",\n\t\t\"typebox\": \"1.1.38\"\n\t},\n\t\"keywords\": [\n\t\t\"ai\",\n\t\t\"llm\",\n\t\t\"openai\",\n\t\t\"anthropic\",\n\t\t\"gemini\",\n\t\t\"bedrock\",\n\t\t\"unified\",\n\t\t\"api\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/ai\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n\n<!-- File: cactus-code/packages/ai/tsconfig.build.json (Tokens: ~69 | Category: anthropic-skill) -->\n{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\", \"**/*.d.ts\", \"src/**/*.d.ts\"]\n}\n\n<!-- File: cactus-code/packages/coding-agent/package.json (Tokens: ~1129 | Category: anthropic-skill) -->\n{\n\t\"name\": \"@earendil-works/pi-coding-agent\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Coding agent CLI with read, bash, edit, write tools and session management\",\n\t\"type\": \"module\",\n\t\"piConfig\": {\n\t\t\"name\": \"cactus\",\n\t\t\"configDir\": \".cactus\"\n\t},\n\t\"bin\": {\n\t\t\"cactus\": \"dist/cli.js\"\n\t},\n\t\"main\": \"./dist/index.js\",\n\t\"types\": \"./dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json && shx chmod +x dist/cli.js && npm run copy-assets\",\n\t\t\"build:binary\": \"npm --prefix ../tui run build && npm --prefix ../ai run build && npm --prefix ../agent run build && npm run build && bun build --compile ./dist/bun/cli.js ./src/utils/image-resize-worker.ts --outfile dist/pi && npm run copy-binary-assets\",\n\t\t\"copy-assets\": \"shx mkdir -p dist/modes/interactive/theme && shx cp src/modes/interactive/theme/*.json dist/modes/interactive/theme/ && shx mkdir -p dist/modes/interactive/assets && shx cp src/modes/interactive/assets/*.png dist/modes/interactive/assets/\",\n\t\t\"copy-binary-assets\": \"shx cp package.json dist/ && shx cp README.md dist/ && shx cp CHANGELOG.md dist/ && shx mkdir -p dist/theme && shx cp src/modes/interactive/theme/*.json dist/theme/ && shx mkdir -p dist/assets && shx cp src/modes/interactive/assets/*.png dist/assets/ && shx mkdir -p dist/export-html/vendor && shx cp src/core/export-html/template.html dist/export-html/ && shx cp src/core/export-html/vendor/*.js dist/export-html/vendor/ && shx cp -r docs dist/ && shx cp -r examples dist/ && shx cp ../../node_modules/@silvia-odwyer/photon-node/photon_rs_bg.wasm dist/\",\n\t\t\"shrinkwrap\": \"node ../../scripts/generate-coding-agent-shrinkwrap.mjs\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build && npm run shrinkwrap\"\n\t},\n\t\"dependencies\": {\n\t\t\"@earendil-works/pi-agent-core\": \"^0.80.2\",\n\t\t\"@earendil-works/pi-ai\": \"^0.80.2\",\n\t\t\"@earendil-works/pi-tui\": \"^0.80.2\",\n\t\t\"@silvia-odwyer/photon-node\": \"0.3.4\",\n\t\t\"chalk\": \"5.6.2\",\n\t\t\"cross-spawn\": \"7.0.6\",\n\t\t\"diff\": \"8.0.4\",\n\t\t\"glob\": \"13.0.6\",\n\t\t\"highlight.js\": \"10.7.3\",\n\t\t\"hosted-git-info\": \"9.0.3\",\n\t\t\"ignore\": \"7.0.5\",\n\t\t\"jiti\": \"2.7.0\",\n\t\t\"minimatch\": \"10.2.5\",\n\t\t\"proper-lockfile\": \"4.1.2\",\n\t\t\"semver\": \"7.8.0\",\n\t\t\"typebox\": \"1.1.38\",\n\t\t\"undici\": \"8.5.0\",\n\t\t\"yaml\": \"2.9.0\"\n\t},\n\t\"overrides\": {\n\t\t\"rimraf\": \"6.1.2\",\n\t\t\"gaxios\": {\n\t\t\t\"rimraf\": \"6.1.2\"\n\t\t}\n\t},\n\t\"optionalDependencies\": {\n\t\t\"@mariozechner/clipboard\": \"0.3.9\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/cross-spawn\": \"6.0.6\",\n\t\t\"@types/diff\": \"7.0.2\",\n\t\t\"@types/hosted-git-info\": \"3.0.5\",\n\t\t\"@types/ms\": \"2.1.0\",\n\t\t\"@types/node\": \"24.12.4\",\n\t\t\"@types/proper-lockfile\": \"4.1.4\",\n\t\t\"@types/semver\": \"7.7.1\",\n\t\t\"shx\": \"0.4.0\"\n\t},\n\t\"keywords\": [\n\t\t\"coding-agent\",\n\t\t\"ai\",\n\t\t\"llm\",\n\t\t\"cli\",\n\t\t\"tui\",\n\t\t\"agent\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/coding-agent\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t}\n}\n\n<!-- File: cactus-code/packages/coding-agent/src/modes/interactive/theme/dark.json (Tokens: ~810 | Category: anthropic-skill) -->\n{\n\t\"$schema\": \"https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json\",\n\t\"name\": \"dark\",\n\t\"vars\": {\n\t\t\"cyan\": \"#00d7ff\",\n\t\t\"blue\": \"#5f87ff\",\n\t\t\"green\": \"#b5bd68\",\n\t\t\"red\": \"#cc6666\",\n\t\t\"yellow\": \"#ffff00\",\n\t\t\"text\": \"#d4d4d4\",\n\t\t\"gray\": \"#808080\",\n\t\t\"dimGray\": \"#666666\",\n\t\t\"darkGray\": \"#505050\",\n\t\t\"accent\": \"#8abeb7\",\n\t\t\"selectedBg\": \"#3a3a4a\",\n\t\t\"userMsgBg\": \"#343541\",\n\t\t\"toolPendingBg\": \"#282832\",\n\t\t\"toolSuccessBg\": \"#283228\",\n\t\t\"toolErrorBg\": \"#3c2828\",\n\t\t\"customMsgBg\": \"#2d2838\"\n\t},\n\t\"colors\": {\n\t\t\"accent\": \"accent\",\n\t\t\"border\": \"blue\",\n\t\t\"borderAccent\": \"cyan\",\n\t\t\"borderMuted\": \"darkGray\",\n\t\t\"success\": \"green\",\n\t\t\"error\": \"red\",\n\t\t\"warning\": \"yellow\",\n\t\t\"muted\": \"gray\",\n\t\t\"dim\": \"dimGray\",\n\t\t\"text\": \"text\",\n\t\t\"thinkingText\": \"gray\",\n\n\t\t\"selectedBg\": \"selectedBg\",\n\t\t\"userMessageBg\": \"userMsgBg\",\n\t\t\"userMessageText\": \"text\",\n\t\t\"customMessageBg\": \"customMsgBg\",\n\t\t\"customMessageText\": \"text\",\n\t\t\"customMessageLabel\": \"#9575cd\",\n\t\t\"toolPendingBg\": \"toolPendingBg\",\n\t\t\"toolSuccessBg\": \"toolSuccessBg\",\n\t\t\"toolErrorBg\": \"toolErrorBg\",\n\t\t\"toolTitle\": \"text\",\n\t\t\"toolOutput\": \"gray\",\n\n\t\t\"mdHeading\": \"#f0c674\",\n\t\t\"mdLink\": \"#81a2be\",\n\t\t\"mdLinkUrl\": \"dimGray\",\n\t\t\"mdCode\": \"accent\",\n\t\t\"mdCodeBlock\": \"green\",\n\t\t\"mdCodeBlockBorder\": \"gray\",\n\t\t\"mdQuote\": \"gray\",\n\t\t\"mdQuoteBorder\": \"gray\",\n\t\t\"mdHr\": \"gray\",\n\t\t\"mdListBullet\": \"accent\",\n\n\t\t\"toolDiffAdded\": \"green\",\n\t\t\"toolDiffRemoved\": \"red\",\n\t\t\"toolDiffContext\": \"gray\",\n\n\t\t\"syntaxComment\": \"#6A9955\",\n\t\t\"syntaxKeyword\": \"#569CD6\",\n\t\t\"syntaxFunction\": \"#DCDCAA\",\n\t\t\"syntaxVariable\": \"#9CDCFE\",\n\t\t\"syntaxString\": \"#CE9178\",\n\t\t\"syntaxNumber\": \"#B5CEA8\",\n\t\t\"syntaxType\": \"#4EC9B0\",\n\t\t\"syntaxOperator\": \"#D4D4D4\",\n\t\t\"syntaxPunctuation\": \"#D4D4D4\",\n\n\t\t\"thinkingOff\": \"darkGray\",\n\t\t\"thinkingMinimal\": \"#6e6e6e\",\n\t\t\"thinkingLow\": \"#5f87af\",\n\t\t\"thinkingMedium\": \"#81a2be\",\n\t\t\"thinkingHigh\": \"#b294bb\",\n\t\t\"thinkingXhigh\": \"#d183e8\",\n\n\t\t\"bashMode\": \"green\"\n\t},\n\t\"export\": {\n\t\t\"pageBg\": \"#18181e\",\n\t\t\"cardBg\": \"#1e1e24\",\n\t\t\"infoBg\": \"#3c3728\"\n\t}\n}\n\n<!-- File: cactus-code/packages/coding-agent/src/modes/interactive/theme/theme-schema.json (Tokens: ~2523 | Category: anthropic-skill) -->\n{\n\t\"$schema\": \"http://json-schema.org/draft-07/schema#\",\n\t\"title\": \"Pi Coding Agent Theme\",\n\t\"description\": \"Theme schema for Pi coding agent\",\n\t\"type\": \"object\",\n\t\"required\": [\"name\", \"colors\"],\n\t\"properties\": {\n\t\t\"$schema\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"description\": \"JSON schema reference\"\n\t\t},\n\t\t\"name\": {\n\t\t\t\"type\": \"string\",\n\t\t\t\"pattern\": \"^[^/]+$\",\n\t\t\t\"description\": \"Theme name. Must not contain '/' because it is reserved for automatic light/dark theme settings.\"\n\t\t},\n\t\t\"vars\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Reusable color variables\",\n\t\t\t\"additionalProperties\": {\n\t\t\t\t\"oneOf\": [\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\"description\": \"Hex color (#RRGGBB), variable reference, or empty string for terminal default\"\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\t\"minimum\": 0,\n\t\t\t\t\t\t\"maximum\": 255,\n\t\t\t\t\t\t\"description\": \"256-color palette index (0-255)\"\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t},\n\t\t\"colors\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Theme color definitions (all required)\",\n\t\t\t\"required\": [\n\t\t\t\t\"accent\",\n\t\t\t\t\"border\",\n\t\t\t\t\"borderAccent\",\n\t\t\t\t\"borderMuted\",\n\t\t\t\t\"success\",\n\t\t\t\t\"error\",\n\t\t\t\t\"warning\",\n\t\t\t\t\"muted\",\n\t\t\t\t\"dim\",\n\t\t\t\t\"text\",\n\t\t\t\t\"thinkingText\",\n\t\t\t\t\"selectedBg\",\n\t\t\t\t\"userMessageBg\",\n\t\t\t\t\"userMessageText\",\n\t\t\t\t\"customMessageBg\",\n\t\t\t\t\"customMessageText\",\n\t\t\t\t\"customMessageLabel\",\n\t\t\t\t\"toolPendingBg\",\n\t\t\t\t\"toolSuccessBg\",\n\t\t\t\t\"toolErrorBg\",\n\t\t\t\t\"toolTitle\",\n\t\t\t\t\"toolOutput\",\n\t\t\t\t\"mdHeading\",\n\t\t\t\t\"mdLink\",\n\t\t\t\t\"mdLinkUrl\",\n\t\t\t\t\"mdCode\",\n\t\t\t\t\"mdCodeBlock\",\n\t\t\t\t\"mdCodeBlockBorder\",\n\t\t\t\t\"mdQuote\",\n\t\t\t\t\"mdQuoteBorder\",\n\t\t\t\t\"mdHr\",\n\t\t\t\t\"mdListBullet\",\n\t\t\t\t\"toolDiffAdded\",\n\t\t\t\t\"toolDiffRemoved\",\n\t\t\t\t\"toolDiffContext\",\n\t\t\t\t\"syntaxComment\",\n\t\t\t\t\"syntaxKeyword\",\n\t\t\t\t\"syntaxFunction\",\n\t\t\t\t\"syntaxVariable\",\n\t\t\t\t\"syntaxString\",\n\t\t\t\t\"syntaxNumber\",\n\t\t\t\t\"syntaxType\",\n\t\t\t\t\"syntaxOperator\",\n\t\t\t\t\"syntaxPunctuation\",\n\t\t\t\t\"thinkingOff\",\n\t\t\t\t\"thinkingMinimal\",\n\t\t\t\t\"thinkingLow\",\n\t\t\t\t\"thinkingMedium\",\n\t\t\t\t\"thinkingHigh\",\n\t\t\t\t\"thinkingXhigh\",\n\t\t\t\t\"bashMode\"\n\t\t\t],\n\t\t\t\"properties\": {\n\t\t\t\t\"accent\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Primary accent color (logo, selected items, cursor)\"\n\t\t\t\t},\n\t\t\t\t\"border\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Normal borders\"\n\t\t\t\t},\n\t\t\t\t\"borderAccent\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Highlighted borders\"\n\t\t\t\t},\n\t\t\t\t\"borderMuted\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Subtle borders\"\n\t\t\t\t},\n\t\t\t\t\"success\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Success states\"\n\t\t\t\t},\n\t\t\t\t\"error\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Error states\"\n\t\t\t\t},\n\t\t\t\t\"warning\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Warning states\"\n\t\t\t\t},\n\t\t\t\t\"muted\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Secondary/dimmed text\"\n\t\t\t\t},\n\t\t\t\t\"dim\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Very dimmed text (more subtle than muted)\"\n\t\t\t\t},\n\t\t\t\t\"text\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Default text color (usually empty string)\"\n\t\t\t\t},\n\t\t\t\t\"thinkingText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking block text color\"\n\t\t\t\t},\n\t\t\t\t\"selectedBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Selected item background\"\n\t\t\t\t},\n\t\t\t\t\"userMessageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"User message background\"\n\t\t\t\t},\n\t\t\t\t\"userMessageText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"User message text color\"\n\t\t\t\t},\n\t\t\t\t\"customMessageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message background (hook-injected messages)\"\n\t\t\t\t},\n\t\t\t\t\"customMessageText\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message text color\"\n\t\t\t\t},\n\t\t\t\t\"customMessageLabel\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Custom message type label color\"\n\t\t\t\t},\n\t\t\t\t\"toolPendingBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (pending state)\"\n\t\t\t\t},\n\t\t\t\t\"toolSuccessBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (success state)\"\n\t\t\t\t},\n\t\t\t\t\"toolErrorBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box (error state)\"\n\t\t\t\t},\n\t\t\t\t\"toolTitle\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box title color\"\n\t\t\t\t},\n\t\t\t\t\"toolOutput\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Tool execution box output text color\"\n\t\t\t\t},\n\t\t\t\t\"mdHeading\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown heading text\"\n\t\t\t\t},\n\t\t\t\t\"mdLink\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown link text\"\n\t\t\t\t},\n\t\t\t\t\"mdLinkUrl\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown link URL\"\n\t\t\t\t},\n\t\t\t\t\"mdCode\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown inline code\"\n\t\t\t\t},\n\t\t\t\t\"mdCodeBlock\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown code block content\"\n\t\t\t\t},\n\t\t\t\t\"mdCodeBlockBorder\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown code block fences\"\n\t\t\t\t},\n\t\t\t\t\"mdQuote\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown blockquote text\"\n\t\t\t\t},\n\t\t\t\t\"mdQuoteBorder\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown blockquote border\"\n\t\t\t\t},\n\t\t\t\t\"mdHr\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown horizontal rule\"\n\t\t\t\t},\n\t\t\t\t\"mdListBullet\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Markdown list bullets/numbers\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffAdded\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Added lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffRemoved\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Removed lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"toolDiffContext\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Context lines in tool diffs\"\n\t\t\t\t},\n\t\t\t\t\"syntaxComment\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: comments\"\n\t\t\t\t},\n\t\t\t\t\"syntaxKeyword\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: keywords\"\n\t\t\t\t},\n\t\t\t\t\"syntaxFunction\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: function names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxVariable\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: variable names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxString\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: string literals\"\n\t\t\t\t},\n\t\t\t\t\"syntaxNumber\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: number literals\"\n\t\t\t\t},\n\t\t\t\t\"syntaxType\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: type names\"\n\t\t\t\t},\n\t\t\t\t\"syntaxOperator\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: operators\"\n\t\t\t\t},\n\t\t\t\t\"syntaxPunctuation\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Syntax highlighting: punctuation\"\n\t\t\t\t},\n\t\t\t\t\"thinkingOff\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: off\"\n\t\t\t\t},\n\t\t\t\t\"thinkingMinimal\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: minimal\"\n\t\t\t\t},\n\t\t\t\t\"thinkingLow\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: low\"\n\t\t\t\t},\n\t\t\t\t\"thinkingMedium\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: medium\"\n\t\t\t\t},\n\t\t\t\t\"thinkingHigh\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: high\"\n\t\t\t\t},\n\t\t\t\t\"thinkingXhigh\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Thinking level border: xhigh (OpenAI codex-max only)\"\n\t\t\t\t},\n\t\t\t\t\"bashMode\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Editor border color in bash mode\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"additionalProperties\": false\n\t\t},\n\t\t\"export\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"description\": \"Optional colors for HTML export (defaults derived from userMessageBg if not specified)\",\n\t\t\t\"properties\": {\n\t\t\t\t\"pageBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Page background color\"\n\t\t\t\t},\n\t\t\t\t\"cardBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Card/container background color\"\n\t\t\t\t},\n\t\t\t\t\"infoBg\": {\n\t\t\t\t\t\"$ref\": \"#/$defs/colorValue\",\n\t\t\t\t\t\"description\": \"Info sections background (system prompt, notices)\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"additionalProperties\": false\n\t\t}\n\t},\n\t\"additionalProperties\": false,\n\t\"$defs\": {\n\t\t\"colorValue\": {\n\t\t\t\"oneOf\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Hex color (#RRGGBB), variable reference, or empty string for terminal default\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"integer\",\n\t\t\t\t\t\"minimum\": 0,\n\t\t\t\t\t\"maximum\": 255,\n\t\t\t\t\t\"description\": \"256-color palette index (0-255)\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n}\n\n<!-- File: cactus-code/packages/coding-agent/tsconfig.build.json (Tokens: ~215 | Category: anthropic-skill) -->\n{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"paths\": {\n\t\t\t\"@earendil-works/pi-agent-core\": [\"../agent/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-agent-core/*\": [\"../agent/dist/*.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai\": [\"../ai/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-ai/*\": [\"../ai/dist/*.d.ts\", \"../ai/dist/providers/*.d.ts\"],\n\t\t\t\"@earendil-works/pi-tui\": [\"../tui/dist/index.d.ts\"],\n\t\t\t\"@earendil-works/pi-tui/*\": [\"../tui/dist/*.d.ts\", \"../tui/dist/components/*.d.ts\"]\n\t\t},\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*.ts\", \"src/**/*.d.ts\"],\n\t\"exclude\": [\"node_modules\", \"dist\"]\n}\n\n<!-- File: cactus-code/packages/tui/package.json (Tokens: ~347 | Category: anthropic-skill) -->\n{\n\t\"name\": \"@earendil-works/pi-tui\",\n\t\"version\": \"0.80.2\",\n\t\"description\": \"Terminal User Interface library with differential rendering for efficient text-based applications\",\n\t\"type\": \"module\",\n\t\"main\": \"dist/index.js\",\n\t\"scripts\": {\n\t\t\"clean\": \"shx rm -rf dist\",\n\t\t\"build\": \"tsgo -p tsconfig.build.json\",\n\t\t\"prepublishOnly\": \"npm run clean && npm run build\"\n\t},\n\t\"files\": [\n\t\t\"dist/**/*\",\n\t\t\"native/win32/prebuilds/**/*.node\",\n\t\t\"native/darwin/prebuilds/**/*.node\",\n\t\t\"README.md\"\n\t],\n\t\"keywords\": [\n\t\t\"tui\",\n\t\t\"terminal\",\n\t\t\"ui\",\n\t\t\"text-editor\",\n\t\t\"differential-rendering\",\n\t\t\"typescript\",\n\t\t\"cli\"\n\t],\n\t\"author\": \"Mario Zechner\",\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/earendil-works/pi.git\",\n\t\t\"directory\": \"packages/tui\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=22.19.0\"\n\t},\n\t\"types\": \"./dist/index.d.ts\",\n\t\"dependencies\": {\n\t\t\"get-east-asian-width\": \"1.6.0\",\n\t\t\"marked\": \"18.0.5\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/node\": \"24.12.4\"\n\t}\n}\n\n<!-- File: cactus-code/packages/tui/tsconfig.build.json (Tokens: ~58 | Category: anthropic-skill) -->\n{\n\t\"extends\": \"../../tsconfig.base.json\",\n\t\"compilerOptions\": {\n\t\t\"outDir\": \"./dist\",\n\t\t\"rootDir\": \"./src\"\n\t},\n\t\"include\": [\"src/**/*\"],\n\t\"exclude\": [\"node_modules\", \"dist\"]\n}\n</yakaai_skills>"}