An LLM (Claude) exposed as a 9P filesystem.
llm9p enables users, scripts, and AI agents to interact with an LLM through standard filesystem operations. Write a prompt to a file, read the response from the same file.
go install github.com/NERVsystems/llm9p/cmd/llm9p@latest
Or build from source:
git clone https://github.com/NERVsystems/llm9p
cd llm9p
go build -o llm9p ./cmd/llm9p
export ANTHROPIC_API_KEY=sk-ant-...
./llm9p -addr :5640
Using 9pfuse (Plan 9 from User Space):
mkdir -p /mnt/llm
9pfuse localhost:5640 /mnt/llm
On macOS with plan9port:
9 mount localhost:5640 /mnt/llm
# Ask a question
echo "What is 2+2?" > /mnt/llm/ask
cat /mnt/llm/ask
# View token usage
cat /mnt/llm/tokens
# Change model
echo "claude-3-haiku-20240307" > /mnt/llm/model
# Adjust temperature
echo "0.5" > /mnt/llm/temperature
# View conversation history
cat /mnt/llm/context
# Add a system message
echo "You are a helpful coding assistant." > /mnt/llm/context
# Reset conversation
echo "" > /mnt/llm/new
# View help
cat /mnt/llm/_example
/llm/
├── ask # Write prompt, read response (same file)
├── model # Read/write: current model name
├── temperature # Read/write: temperature float (0.0-2.0)
├── tokens # Read-only: last response token count
├── new # Write anything to start fresh conversation
├── context # Read: conversation history; Write: add system message
├── _example # Read-only: usage examples
└── stream/ # Streaming interface
└── chunk # Read blocks until next chunk, EOF on completion
| File | Read | Write |
|---|---|---|
ask |
Returns last LLM response | Sends prompt to LLM, stores response |
model |
Returns current model name | Sets model for subsequent requests |
temperature |
Returns current temperature | Sets temperature (0.0-2.0) |
tokens |
Returns last response token count | Permission denied |
new |
Permission denied | Any write resets conversation state |
context |
Returns JSON conversation history | Appends system message to context |
_example |
Returns usage examples | Permission denied |
stream/chunk |
Blocks until next chunk, returns it | Permission denied |
#!/bin/sh
# ask.sh - Simple LLM query script
if [ -z "$1" ]; then
echo "Usage: $0 <question>"
exit 1
fi
echo "$1" > /mnt/llm/ask
cat /mnt/llm/ask
| Flag | Default | Description |
|---|---|---|
-addr |
:5640 |
Address to listen on |
-debug |
false |
Enable debug logging |
| Variable | Required | Description |
|---|---|---|
ANTHROPIC_API_KEY |
Yes | Your Anthropic API key |
claude-sonnet-4-202505140.74096MIT