readlisted
Install: claude install-skill 7xuanlu/origin
# /read
Surface a page's identity so the user can decide whether to open it.
`/read` is **preview, not full text**. The body is on disk; preview
keeps chat scannable, dodges Bash output truncation, and respects the
"md is canonical, viewer is the user's editor" model.
## How to invoke
Two shapes accepted:
1. **Page id** (starts with `page_`; legacy `concept_` ids still work) → direct fetch.
2. **Title or freeform word** → search, pick best match, fetch.
Both end with the same preview block.
### 1. Direct id
Call the MCP tool to fetch the page:
```
get_page(page_id="<id>")
```
The response is a JSON object wrapping `{ "page": {...} }`. Read
`title`, `summary`, `space`, and `source_memory_ids` off the page,
then look up the md filename in `~/.origin/pages/.origin/state.json`:
```
Bash: python3 -c '
import json, os, sys
state_path = os.path.expanduser("~/.origin/pages/.origin/state.json")
pid = "<id>"
filename = None
try:
with open(state_path) as f:
filename = json.load(f).get("pages", {}).get(pid, {}).get("file")
except FileNotFoundError:
pass
print(f"~/.origin/pages/{filename}" if filename else "(no md projection on disk)")
'
```
Combine the page fields with the resolved md path and emit the preview
block.
### 2. Title or freeform word
Search first, then fetch the top hit by id and run the same preview
block. Always resolve through the `search_pages` MCP tool — never
derive a slug client-side (skill heuristics drift from the canonical
`slugify()` o