~kris/9p

llm9p

ref: cc50c152427ab6de87d7df00285347d6672fdfea llm9p/README.md -rw-r--r-- 10.7 KiB
cc50c152 — Kris Yotam 4 months ago master
docs: update repo URL to sr.ht
43312541 — pdfinn 7 months ago
docs: Update README to reflect pluggable backend architecture

- Change tagline to be backend-agnostic
- Add Supported Backends section with current and planned backends
- Update Requirements to list backend options
- Make Environment Variables section clearer about when API key is needed
- Update How It Works to reference generic LLM backend

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4e8ff274 — pdfinn 7 months ago
feat: Add system prompt file for persistent persona configuration

- Add system file (read/write) to set system prompt
- System prompt persists across conversation resets
- Add SystemPrompt() and SetSystemPrompt() to Backend interface
- Update both API and CLI clients to support dedicated system prompt
- Update documentation and examples

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
054039ea — pdfinn 7 months ago
feat: Add CLI backend for Claude Max subscription

Add support for using Claude Code CLI as an alternative backend,
allowing users with Claude Max subscriptions to use llm9p without
API tokens.

New files:
- internal/llm/backend.go: Backend interface for swappable LLM providers
- internal/llm/cli_client.go: CLI-based client using `claude` command

Changes:
- Add -backend flag: 'api' (default) or 'cli'
- Refactor llmfs to use Backend interface instead of concrete Client
- Model names normalized for CLI (opus, sonnet, haiku)

Usage:
  ./llm9p -backend cli  # Uses Claude Max subscription
  ./llm9p -backend api  # Uses Anthropic API (default)

Limitations of CLI backend:
- Token counting not available (always 0)
- Streaming is simulated (full response as single chunk)
- Uses short model names (opus, sonnet, haiku)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
20386977 — pdfinn 7 months ago
feat: Add stream/ask file to trigger streaming requests

- Add StreamAskFile to start streaming via write to stream/ask
- Read chunks from stream/chunk as they arrive
- Update documentation with streaming examples and verified tests
- Update _example file with correct streaming instructions

Streaming workflow:
1. Write prompt to stream/ask to start streaming
2. Read from stream/chunk to get chunks (blocks until available)
3. EOF returned when stream completes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
0f0dfed7 — pdfinn 7 months ago
docs: Add 9P introduction and Infernode instructions

- Add "What is 9P?" section explaining the protocol for newcomers
- Add comprehensive Infernode (Inferno OS) mounting instructions
- Add troubleshooting section with common issues and solutions
- Add verified test cases section documenting tested scenarios
- Add "How It Works" explanation of the request flow
- Include tips for Infernode users (use 127.0.0.1, create mount point first)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
68199d2a — pdfinn 7 months ago
feat: Initial implementation of llm9p - LLM as 9P filesystem

Exposes Claude as a 9P filesystem, enabling interaction through
standard file operations:

- ask: write prompt, read response (shim pattern)
- model: read/write current model name
- temperature: read/write sampling temperature
- tokens: read-only token count from last response
- new: write to reset conversation
- context: read JSON history, write to add system message
- _example: usage documentation
- stream/chunk: blocking read for streaming responses

Includes:
- Full 9P2000 protocol implementation (stdlib only)
- Anthropic SDK integration with conversation state
- Streaming support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>