Alcove

SkillDocs & knowledge

HTTP API-based documentation server (always running). Questions about project architecture, conventions, decisions, code structure, tech debt, env config, progress, or doc health. Also: store and recall agent memory (global memory/ + per-project <project>/memory/ inside the docs vault), init project, audit docs, lint, validate, promote note, update index, search vaults.

Use Alcove in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add Alcove and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the Alcove skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

What this skill tells your AI

The instructions your AI receives, as published by hashgraph-online/awesome-codex-plugins in plugins/epicsagas/alcove/registry/skills/alcove/SKILL.md and read by Ahel’s review.

HTTP API-based documentation server (always running). Auto-detects project by matching CWD against DOCS_ROOT folders.

Paths

All paths are resolved at runtime. ALCOVE_HOME env var overrides the default ~/.alcove.

NameResolved PathDescription
ALCOVE_HOME~/.alcoveRoot of all alcove data
Docs Root~/.alcove/docsProject documentation directories
Vaults Root~/.alcove/vaultsKnowledge base vaults
Config~/.alcove/config.tomlGlobal configuration file
Project Docs~/.alcove/docs/{project}/Per-project documentation

Quick resolution from CLI:

alcove path              # show all resolved paths
alcove path --json       # JSON output (for scripts/AI)
alcove path docs         # docs root only
alcove path vaults       # vaults root only

Prerequisites

The alcove API server must be running. Check and start with:

alcove api status   # check if server is running
alcove api start    # start if not running

Resolve URL and token once at the start of every session:

eval $(alcove api env)
# sets ALCOVE_URL=http://127.0.0.1:<port>  (always)
# sets ALCOVE_TOKEN=<token>                (only if configured)

All commands below use $ALCOVE_URL. If $ALCOVE_TOKEN is set, add -H "Authorization: Bearer $ALCOVE_TOKEN" to every request.

Arguments

ArgAction
verify / rag status1) alcove api status — check daemon is running2) eval $(alcove api env) — resolve URL + token3) curl -s $ALCOVE_URL/health — print health response

When to Use

Any question about project design, status, conventions, decisions, env config, tech debt, code structure, or doc health. Check alcove before answering, not after.

Document Routing

IMPORTANT: This table maps question types to document filenames. When users ask these questions, SEARCH first — do not directly fetch files.

QuestionSearch Keywords
"What does this do?"product requirements PRD
"How is this built?" / code structurearchitecture code structure CODE_INDEX
"What's the status?"progress PROGRESS status
"Why was X chosen?"decisions DECISIONS rationale
"What style to use?"conventions CONVENTIONS style guide
"What env vars needed?"SECRETS_MAP env vars environment
"Any known issues?"technical debt DEBT backlog issues

Workflow: Search → read results. Never fetch PRD.md, ARCHITECTURE.md etc. directly based on this table alone.

API Reference

Search & Discovery

Query Construction

Extract 2-3 key terms from the question. Avoid natural language filler.

QuestionKey TermsQuery
"code structure"code, structureq=code+structure
"Why was X chosen?"why, chosenq=decision (use DECISIONS.md)
"Any known issues?"issues, bugsq=debt (use DEBT.md)
"architecture documentation"architectureq=architecture

Default: 1-2 keywords from the question.

Use the search endpoint. Project is auto-detected from CWD.

# Search current project (default)
curl -s '$ALCOVE_URL/search?q=QUERY'

# Search with options
curl -s '$ALCOVE_URL/search?q=QUERY&limit=10&mode=hybrid'

# Search a specific project
curl -s '$ALCOVE_URL/search?q=QUERY&project=PROJ'

# Search across all projects
curl -s '$ALCOVE_URL/search?q=QUERY&limit=20'

# POST search (JSON body)
curl -s -X POST $ALCOVE_URL/v1/search \
  -H 'Content-Type: application/json' \
  -d '{"q": "QUERY", "limit": 10, "project": "proj", "mode": "hybrid"}'

Response: {"query": "...", "results": [...], "mode": "...", "truncated": false}

Project Operations

# List projects
curl -s $ALCOVE_URL/projects

# Init project
curl -s -X POST $ALCOVE_URL/projects \
  -H 'Content-Type: application/json' \
  -d '{"project_name": "myproj", "project_path": "/abs/path"}'

# Project docs overview (with sizes and classification)
curl -s $ALCOVE_URL/projects/PROJECT/docs

# Audit doc health
curl -s $ALCOVE_URL/projects/PROJECT/audit

# Validate against policy.toml
curl -s $ALCOVE_URL/projects/PROJECT/validate

# Configure project settings
curl -s -X PUT $ALCOVE_URL/projects/PROJECT/config \
  -H 'Content-Type: application/json' \
  -d '{"core_files": ["PRD.md", "ARCHITECTURE.md"]}'

# Read a doc file
curl -s '$ALCOVE_URL/docs/PRD.md?project=PROJECT'
curl -s '$ALCOVE_URL/docs/reports/weekly.md?project=PROJECT&offset=0&limit=2000'

# Index code structure
curl -s -X POST $ALCOVE_URL/index-code \
  -H 'Content-Type: application/json' \
  -d '{"source_path": "/abs/path/src", "language": "rust", "project": "PROJECT"}'
ActionMethodEndpoint
List projectsGET/projects
Init projectPOST/projects
Project docs overviewGET/projects/{name}/docs
Audit projectGET/projects/{name}/audit
Validate docsGET/projects/{name}/validate
Configure projectPUT/projects/{name}/config
Read doc fileGET/docs/{path}?project=name
Index codePOST/index-code

Index & Maintenance

# Update index — incremental (changed/added/deleted files only), all projects
curl -s -X POST $ALCOVE_URL/index
# ↑ DEFAULT for "make new docs searchable" or "rebuild index"

# Update index — single project only
curl -s -X POST $ALCOVE_URL/projects/PROJECT/index
# ↑ ONLY when explicitly targeting a specific project

# Check changed files since last index
curl -s '$ALCOVE_URL/changes?auto_rebuild=true'

# Lint docs
curl -s '$ALCOVE_URL/lint?project=PROJECT'

Rule: Default to /index (global). Use /projects/{name}/index only when task specifies a single project.

⚠️ NEVER run alcove rebuild / alcove vault rebuild (CLI) to make new docs searchable — they DELETE the entire index and vectors, then re-embed everything, leaving search on grep fallback until done. /index above is incremental (unchanged files are skipped) and is the only update path agents ever need. The rebuild CLI only runs in an interactive terminal (y/N approval, no flag bypass) — agents cannot run it at all.

ActionMethodEndpoint
Update index (all projects)POST/index
Update index (single project)POST/projects/{name}/index
Check changesGET/changes?auto_rebuild=true
Lint projectGET/lint?project=name

Vault Operations

# List vaults
curl -s $ALCOVE_URL/vaults

# Search vaults
curl -s '$ALCOVE_URL/vaults/search?q=QUERY&vault=*&limit=20'

# Backup vault
curl -s -X POST $ALCOVE_URL/vaults/backup \
  -H 'Content-Type: application/json' \
  -d '{"vault_name": "myvault"}'

# Promote document into doc-repo
curl -s -X POST $ALCOVE_URL/promote \
  -H 'Content-Type: application/json' \
  -d '{"source": "/abs/path/notes.md", "project": "PROJECT", "copy": true}'
ActionMethodEndpoint
List vaultsGET/vaults
Search vaultGET/vaults/search?q=...
Backup vaultPOST/vaults/backup
Promote docPOST/promote

Agent Memory (#37)

Durable cross-session memory stored INSIDE the docs vault — global notes in <docs_root>/memory/, project notes in <docs_root>/<project>/memory/. Plain markdown, git-versioned with the vault, indexed on store. valid_until (ISO 8601) makes time-sensitive facts drop out of recall automatically.

Scope routing:

  • Facts about the user, tools, or environment → global (omit project)
  • Facts tied to one project → include "project": "<name>" (folder must exist under docs_root)
# Store global memory (title defaults to first line)
curl -s -X POST $ALCOVE_URL/memory/store \
  -H 'Content-Type: application/json' \
  -d '{"content": "user prefers turbofish syntax", "valid_until": "2027-01-01T00:00:00Z"}'

# Store project-scoped memory
curl -s -X POST $ALCOVE_URL/memory/store \
  -H 'Content-Type: application/json' \
  -d '{"content": "uses rustls, never openssl", "project": "alcove"}'

# Recall — global + merged project scope, one ranked list (hybrid BM25 + vector)
curl -s '$ALCOVE_URL/memory/recall?q=syntax+preference&project=alcove&limit=10'
ActionMethodEndpoint
Store memoryPOST/memory/store
Recall memoriesGET/memory/recall?q=...&project=...

Notes are editable/removable directly in those folders; changes are picked up on next store (which re-indexes). memory/ folders are excluded from the main project index — /memory/recall is the only search path for them. The former separate ~/.alcove/vaults/memory vault is superseded.

Doc Graph (backlinks/related) — requires doc-graph feature

# Docs linking TO a file (backlinks)
curl -s '$ALCOVE_URL/docs/backlinks?file=PROJECT/PRD.md'

# Docs a file links TO (related)
curl -s '$ALCOVE_URL/docs/related?file=PROJECT/PRD.md'

# Stamp last_verified=now on a doc
curl -s -X POST '$ALCOVE_URL/docs/verify?file=PROJECT/PRD.md'

# Count docs excluded from recall by expiry
curl -s $ALCOVE_URL/docs/expired
ActionMethodEndpoint
BacklinksGET/docs/backlinks?file=...
Related docsGET/docs/related?file=...
Verify docPOST/docs/verify?file=...
Expired countGET/docs/expired

Expired docs (valid_until in the past) are excluded from backlinks/related recall in both directions.

MCP Proxy (Legacy)

The JSON-RPC proxy remains available for MCP clients:

curl -s -X POST $ALCOVE_URL/mcp \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"TOOL_NAME","arguments":{}}}'

Health Check

curl -s $ALCOVE_URL/health
# → {"status": "ok", "version": "x.y.z", "docs_root_configured": true, "projects": N}

Rules

Scope

Default: current project. Ambiguous → ask. Global only on explicit request.

Before writing code

  1. CONVENTIONS.md → project-specific rules
  2. CODE_INDEX.md → compact module/type/function overview (avoids reading dozens of source files)
  3. For research/reference material → search vaults via GET /vaults/search?q=...

Answering questions

Never answer from memory. Call GET /projects/{name}/docs → GET /docs/{path}?project=name for the relevant file → summarize. Do not dump full files unless asked.

Doc status disambiguation

User saysEndpoint
validate, policy, complianceGET /projects/{name}/validate
lint, broken link, orphan, staleGET /lint?project=name
audit, organize, cleanup, what's missingGET /projects/{name}/audit (runs both validate + lint)
changed, stale index, new filesGET /changes?auto_rebuild=true

Ambiguous → call audit_project (broadest).

Acting on audit results

  • alcove → project repo: OK for public-facing docs derived from internal content
  • project repo → alcove: OK to restructure reference materials
  • Internal docs → project repo: NEVER expose PRD/ARCHITECTURE/etc.
  • Always confirm before moving/deleting files
  • Re-run validate + lint after cleanup

Promoting notes

Path provided → act immediately: POST /promote with the source path. No matching project → inbox/. Then POST /index.

After development

Proactively capture at natural stopping points:

  • Architecture change → ARCHITECTURE.md
  • Decision rationale → DECISIONS.md
  • Bug/workaround → DEBT.md
  • Coding pattern → CONVENTIONS.md
  • Env var → SECRETS_MAP.md
  • Progress → PROGRESS.md

Read → append with date → POST /index.

Signals

GitHub stars
1k
Forks
316
Last commit
Oct 2026
Advanced
Item type
skill
Key
alcove
Source
github.com/hashgraph-online/awesome-codex-plugins