palinode
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PALINODE_DIR | No | Path to the memory directory (default ~/.palinode) | ~/.palinode |
| PALINODE_API_TOKEN | No | API token for authentication when the API is exposed beyond loopback |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| palinode_session_initA | Session-start context: call this FIRST in a new conversation. Returns the resolved project scope with recent session snapshots, core memories, recent decisions, and open action items as a bounded digest. |
| palinode_listA | List memory files, optionally filtered by category, core status or frontmatter. Use to browse what memories exist before reading or searching. |
| palinode_readA | Read the full contents of a memory file. Use after palinode_list or palinode_search to see the complete content of a specific file. |
| palinode_searchA | Search Palinode memory for relevant context about people, projects, decisions, insights, or research. Returns the most relevant memory file excerpts ranked by configured hybrid or lexical retrieval. |
| palinode_saveA | Save a memory (fact, decision, insight, project update) worth keeping across sessions. Requires exactly one of |
| palinode_ingestA | Fetch a URL and save it as a research reference in Palinode memory. |
| palinode_statusA | Check Palinode health plus the effective read-only capture/recall pause state, policy provenance, and resolved project scope. |
| palinode_historyA | Show the change history of a memory file. Tracks renames (--follow) and includes diff stats per commit. Use detail='full' for the commit-level evolution view. |
| palinode_entitiesA | List all known entities, or get memory files referencing a specific entity. |
| palinode_consolidateA | Run a manual knowledge consolidation pass. Set |
| palinode_archive_expiredA | Archive ephemeral memories whose |
| palinode_archiveA | Retire one specific memory that is wrong or obsolete. Sets |
| palinode_restoreA | Bring one archived memory back into default recall — the inverse of |
| palinode_unretractA | Withdraw one preference's mention-level retraction from one memory: un-strikes every |
| palinode_forget_withdrawA | Take a forget request back. Given the memory that holds the request ('please forget that I…'), restores every memory it archived, un-strikes every mention it retracted, and archives the request record(s) so they stop acting as the retraction. Each step is its own audited commit; failures are reported per target. |
| palinode_diffA | Show what memories changed recently. Use to review what was learned, decisions made, or facts updated in the last N days. |
| palinode_blameA | Trace a fact back to when it was first recorded. Shows which session or commit created each line in a memory file. |
| palinode_traceA | Compose the full provenance lineage of a memory file into one view: source citations, when it was first saved and last changed, the supersession trail, typed contradiction/evidence links, and how often it has been recalled. Rows whose provenance is not yet captured render an honest placeholder. Read-only. |
| palinode_explainA | Explain one delivery of context: given the bundle_id a search receipt returned, show which memories were supplied, the exact revision of each (and whether its source changed since), the resolved scope, the calling surface, each record's disposition, and the coverage qualifiers. Fields that were never recorded are reported as unavailable with the reason, never guessed. This is supplied context only — no evidence that anyone acted on it is recorded. Read-only. |
| palinode_rollbackA | Revert a memory file to a previous version. Safe: creates a new commit preserving the old version in history. Defaults to dry run. A rollback that would undo a retirement (archive/supersede/retraction) is named in the preview and refused unless undo_retirements=true; prefer palinode_restore to bring a retired memory back. |
| palinode_pushA | Sync memory changes to GitHub for backup and cross-machine access. |
| palinode_triggerA | Register or manage a prospective trigger for Palinode. When a future user message semantically matches the description, the specified memory file will be automatically injected. |
| palinode_session_endA | Call at the end of a coding or chat session to capture key outcomes to persistent memory. Writes a session summary to today's daily notes and appends status to relevant project files. Provide a brief summary of what was accomplished, decisions made, and any blockers. |
| palinode_lintB | Scan memory for health issues: orphaned files, stale active files (>90 days), missing frontmatter fields, and potential contradictions. Returns a report without modifying files. |
| palinode_reviewA | Advisory project-memory review. Composes the deterministic health signals (stale files, long-unresolved open questions, open contradictions, orphans, missing descriptions, wiki drift) scoped to a project, and proposes corrective ops (PROPOSE_ARCHIVE/UPDATE/SUPERSEDE). Read-only — proposes, never applies. Omit |
| palinode_correctionsA | List correction candidates mined from harness session transcripts: moments the user overturned a decision, rejected an approach and said why, or asked for something to be remembered. Each candidate quotes a bounded span of the user's own words with the session, turn and project it came from. Advisory and read-only — candidates are proposals awaiting review, never applied, and the list is empty unless the store's operator enabled transcript capture and named the transcript paths in config. Running a fresh detection pass is deliberately an operator action on the CLI or REST API, not something this tool can trigger. |
| palinode_correction_previewA | Show exactly what correcting or retiring one memory would change — and change nothing. Returns the old text, the proposed new text, the affected document (and claim), its exact source revision, the rationale, where the correction came from, the project scope, the supersedes/superseded_by relation that would be recorded, every other record that quotes or derives from the target (reported, never rewritten), and the recovery command. Call this before palinode_correction_apply: the revision it returns is what apply requires back, so a target that changed in between is refused rather than silently merged. |
| palinode_correction_applyA | Apply a correction previewed by palinode_correction_preview. Requires |
| palinode_correction_dismissA | Record that a correction candidate was reviewed and declined. Writes no memory: the candidate's queue row is marked dismissed, with the reason, and kept — which is what stops a later transcript scan proposing the same span again. A reason is required, because a dismissal with none is indistinguishable from a candidate nobody ever looked at. |
| palinode_correction_undoA | Preview (default) or apply the undo of a correction. Without |
| palinode_dedup_suggestA | Given draft memory content the LLM is about to save, return the top-K existing memory files whose embeddings are semantically near it. Use BEFORE writing a new memory to decide 'create new' vs 'update existing'. Each result includes a |
| palinode_orphan_repairA | Given a |
| palinode_cluster_neighborsA | Given a memory file path, find the top-K semantically related files that are NOT currently linked to or from it (no existing [[wikilink]] in either direction). Use during wiki-maintenance passes to surface implicit relationships that no wikilink yet captures — the LLM can then propose new cross-links. Preprocessing strips wikilink syntax and the auto-generated |
| palinode_topic_coverageA | Given a topic phrase (not a file), check whether any wiki page already covers it. Returns {covered: bool, best_match: str | null, similarity: float}. Use BEFORE ingesting new content to ask 'is this already covered?'. Different framing from palinode_dedup_suggest: takes a short topic phrase rather than full draft content, and answers the binary 'already covered?' question. |
| palinode_resolveA | Ask what memory holds RIGHT NOW about a question, or about one record. Returns the assertions that stand (with their evidence and source revisions), what replaced what, conflicts with every side intact, and what is explicitly unknown. Use instead of palinode_search when you want the current answer rather than a list of hits. Read-only; a tight budget can shrink the answer but never turns a conflict into a settled one. Retired records are left out, as in search, unless include_retired=true. |
| palinode_doctorA | Fast palinode health check (<500ms). Skips network probes and canary writes. Checks path integrity, config consistency, and env-var drift. Use this first; call palinode_doctor_deep when results are unclear. |
| palinode_doctor_deepA | Full palinode health check including network probes and canary write tests. Takes 10-15s. Use when palinode_doctor reports unclear results or you need to verify the API, watcher, and service connectivity. |
| palinode_promptA | List, read, or activate versioned LLM prompts stored as memory files in the prompts/ directory. Use 'list' to browse available prompts, 'read' to view a specific prompt's content, or 'activate' to set a prompt version as active (deactivates others of the same task). |
| palinode_dependsA | Return the dependency tree for a milestone or task slug, or list all unblocked items. Reads depends_on / blocks / parallel_with frontmatter from ProjectSnapshot files. Set unblocked=true to answer 'what can I work on right now?' across all slugs. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 39 tools
The set contains several overlapping clusters: retrieval (search/resolve/dedup_suggest/topic_coverage/cluster_neighbors/orphan_repair), health (status/doctor/doctor_deep/lint/review), and retirement/undo (archive/archive_expired/restore/unretract/forget_withdraw/rollback/correction_*). The descriptions explicitly differentiate use cases, but the agent must read carefully and can still misselect within these families.
Every tool uses the palinode_ prefix and lower snake_case, which is highly predictable. However, the internal pattern mixes verb_noun (palinode_read, palinode_save, palinode_archive) with noun_noun (palinode_session_init, palinode_topic_coverage, palinode_correction_preview), so it is not a uniform verb_noun convention.
At 39 tools, the surface is very heavy for a memory server. Many tools are narrow variants (e.g., five health/diagnostic tools and multiple similarity-lookup tools), which exceeds the 25-tool threshold and risks overwhelming agents despite each having a niche.
The surface covers the memory lifecycle comprehensively: create/read/search/resolve, archive/restore/retire/undo, provenance/history/blame/trace, health/lint/review, session boundaries, triggers, prompts, and dependency tracking. No obvious lifecycle gap exists, and the absence of hard-delete is an intentional design choice, not a missing operation.