hstack docs
hstack is the portable skill + MCP bundle for h.computer. One curl drops a fully-wired folder into your CLI agent (Claude Code, Codex, Cursor, Aider, Continue, Pi, Hermes, Zed). Then your agent can read, write, and reason about H over REST or MCP.
Quickstart
Three steps from zero to your CLI agent talking to H.
1. Install the bundle
curl -fsSL https://h.computer/install.sh | sh
Drops a hstack/ folder with AGENTS.md, skills, and MCP configs into CWD. Override location with HSTACK_DIR=~/.hstack.
2. Sign in and grab a key
Open h.computer/auth to sign in (email or SMS, no password), then h.computer/admin to reveal an hk_… key.
export H_API_KEY=hk_xxxxxxxxxxxxxxxx
3. Make your first call
# Public read (no key needed)
curl -s https://h.computer/api/v1/now | jq .
# Authenticated write
curl -X POST https://h.computer/api/v1/status \
-H "X-H-Api-Key: $H_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"hello from my CLI agent","kind":"status"}'One-curl install
The installer is a single shell script. It's idempotent — safe to re-run to refresh skills and MCP configs.
# default: drops ./hstack/ into CWD curl -fsSL https://h.computer/install.sh | sh # custom location HSTACK_DIR=~/.hstack curl -fsSL https://h.computer/install.sh | sh
After install, your folder looks like:
hstack/
├── AGENTS.md # read first by Claude Code / Codex / Cursor
├── SETUP.md # human-readable 3-step quickstart
├── openapi/openapi.json # full OpenAPI spec (snapshot)
├── mcp/
│ ├── h.computer.json # raw mcp.json wire format
│ ├── claude-desktop.json
│ └── cursor.json
└── skills/
├── post-status.md
├── queue-blog-idea.md
├── append-journal.md
├── recompile-journal.md
└── search.mdAuthentication
Two tiers: public reads need nothing, owner writes need an hk_ API key in the X-H-Api-Key header.
X-H-Api-Key: hk_xxxxxxxxxxxxxxxx # OR Authorization: Bearer hk_xxxxxxxxxxxxxxxx
Generate, rotate, and revoke keys at /admin. Each request is logged with route, status, latency, and per-key totals.
Read endpoints
All GET endpoints are public. Base URL: https://h.computer/api/v1.
GET /api/v1/now # current focus + status GET /api/v1/today # today's journal entry (falls back to latest) GET /api/v1/feed # living feed cards GET /api/v1/blog # latest posts (?tag=weekly|monthly to filter) GET /api/v1/digests # weekly + monthly rollups, split by kind GET /api/v1/papers # research-paper ledger GET /api/v1/journal # daily logs (?date=YYYY-MM-DD for one entry) GET /api/v1/stats # snapshot across all surfaces GET /api/v1/search # unified search (?q=...&kinds=blog,journal,paper)
Write endpoints
All writes require an hk_ key. Every call is rate-aware and logged.
POST /status — push to the living feed
curl -X POST https://h.computer/api/v1/status \
-H "X-H-Api-Key: $H_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"shipped hstack docs","kind":"status"}'POST /post-idea — queue a blog idea
curl -X POST https://h.computer/api/v1/post-idea \
-H "X-H-Api-Key: $H_API_KEY" \
-H "Content-Type: application/json" \
-d '{"idea":"why agents need taste, not just tools","tags":["agents","taste"]}'POST /log — append to today's journal
Non-destructive — appends a heading + block to today's entry. Creates the day if missing.
curl -X POST https://h.computer/api/v1/log \
-H "X-H-Api-Key: $H_API_KEY" \
-H "Content-Type: application/json" \
-d '{"heading":"midday","text":"shipped the docs revamp","source":"cli"}'PATCH /journal — rewrite a day
Replaces fields by default. Pass "replace_body": false to append instead. Upserts when no entry exists for that date.
curl -X PATCH https://h.computer/api/v1/journal \
-H "X-H-Api-Key: $H_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"2026-06-15","title":"new title","body":"# new body\n...","status":"published"}'DELETE /journal — remove a day
curl -X DELETE -H "X-H-Api-Key: $H_API_KEY" \ "https://h.computer/api/v1/journal?date=2026-06-15"
POST /journal/recompile — re-run the AI compiler
Pulls fresh data from connected sources, then rewrites title + summary + body in newsletter shape with [n] citations.
curl -X POST https://h.computer/api/v1/journal/recompile \
-H "X-H-Api-Key: $H_API_KEY" \
-H "Content-Type: application/json" \
-d '{"date":"2026-06-15","force":true}'OpenAPI spec
The full spec is served at /api/v1/openapi.json. Generate a typed client with any OpenAPI codegen.
# typescript types npx openapi-typescript https://h.computer/api/v1/openapi.json -o h.d.ts # python client openapi-python-client generate --url https://h.computer/api/v1/openapi.json
MCP server
Streamable HTTP MCP endpoint at https://h.computer/api/public/mcp. Authenticate with the same X-H-Api-Key header — owner-scoped tools require any valid hk_ key, public tools require nothing.
{
"mcpServers": {
"h.computer": {
"url": "https://h.computer/api/public/mcp",
"headers": {
"X-H-Api-Key": "${H_API_KEY}",
"Accept": "application/json, text/event-stream"
}
}
}
}Client configs
The installer writes ready-to-paste configs into hstack/mcp/. Highlights:
Claude Desktop / Claude Code
{
"mcpServers": {
"h.computer": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://h.computer/api/public/mcp",
"--header", "X-H-Api-Key:${H_API_KEY}"],
"env": { "H_API_KEY": "hk_xxx" }
}
}
}Cursor / Zed / native HTTP MCP clients
{
"mcpServers": {
"h.computer": {
"url": "https://h.computer/api/public/mcp",
"headers": { "X-H-Api-Key": "${H_API_KEY}" }
}
}
}Tool reference
push_status— append to feed [key]queue_blog_idea— queue idea [key]append_journal— add to a day [key]update_journal— rewrite a day [key]delete_journal— drop a day [key]recompile_journal— re-run AI compiler [key]list_journal_drafts— filter by status [key]folder_write— write to Folder.md [key]get_now— current focus + feedget_feed— last N items by kindget_blog— published posts (optional tag)get_papers— research ledgerget_journal— index or one dayget_stats— aggregate snapshotget_project— lookup by namesearch— full-text across surfacessearch_youmd— search inside you.mdfolder_list/folder_read/folder_searchget_fitness_summaryget_recent_activities/get_best_efforts
Skill bundle
Each skill is a markdown file under hstack/skills/. Load them as Claude Skills, Cursor rules, or just cat them into a system prompt.
---
name: post-status
description: Push a status update to h.computer's living feed.
auth: hk_ key required
---
POST https://h.computer/api/v1/status
curl -X POST https://h.computer/api/v1/status \
-H "X-H-Api-Key: $H_API_KEY" -H "Content-Type: application/json" \
-d '{"text":"shipped X","kind":"status"}'AGENTS.md
The installer writes a top-level AGENTS.md with the 3-step quickstart and a map of every endpoint. Claude Code, Codex, Cursor, Aider, and OpenCode all pick it up automatically. Point any other agent at this file and it learns the surface.
Today card
Drop today's journal entry on any site:
<div id="h-today" data-h-theme="auto"></div> <script src="https://h.computer/api/v1/today.js" async></script>
Now pill
Inline status pill for footers, bios, README badges:
<span id="h-now"></span> <script src="https://h.computer/api/v1/now.js" async></script>
Activity grid
A weekly journal heatmap (set data-h-weeks 4–53):
<div id="h-grid" data-h-weeks="16"></div> <script src="https://h.computer/api/v1/grid.js" async></script>
Year in review
Compact monthly bar chart + stats card:
<div id="h-year" data-h-theme="auto"></div> <script src="https://h.computer/api/v1/year.js" async></script>
Rate limits
No hard rate limit yet — be a good citizen. Burst abuse gets the key revoked. Per-key request counts and recent-activity tails are visible to the owner at /admin.
Errors
All REST endpoints return { "error": "...", "details"?: "..." } with an appropriate HTTP status. MCP tools return { isError: true, content: [{ type: "text", text: "..." }] }.
401 — missing or invalid hk_ key 403 — key doesn't have permission for this surface 404 — no entry / record for that date or slug 422 — body failed Zod validation (see "details") 429 — rate-limited (rare; per-key cooldown) 5xx — upstream timeout or internal error
Why hstack
Most agents are stateless tools. h.computer is a living interface to a specific person. hstack lets any other agent borrow that interface — read what's on the mind, write into the feed, queue ideas, recompile the day — over the exact same surface the site itself uses. No second-class API.
The protocol is portable. The reference implementation is single-tenant today; multi-tenant {you}.computer instances are on the waitlist at /auth.