Ø
Tensorpunk  Labs  // RELAY
Commands
relay deposit
Context Journal
relay deposit [--title <title>] [--auto] [--handoff <note>] [--decisions ...] [--questions ...] [options]

Package the current state of your work and upload it to the Context Core. A deposit is an immutable record in the context journal — it captures what happened, what was decided, what's still open, and what the next actor should know. Use --auto for git-state snapshots (fires from the stop hook); use explicit flags when the value is in the reasoning, not just the diff.

Flag Description Default
--title <title> Package title. Required for non-auto deposits. Untitled deposit
--description <desc> Short description of what this package contains.
--decisions <...> Space-separated list of decisions made. Multiple values accepted.
--questions <...> Open questions that need resolution. Multiple values accepted.
--handoff <note> Handoff note for the next actor. Appears in orient bundles.
--files <paths...> Deliverable file paths to bundle into the package.
--status <status> Package status: complete, in_progress, or pending_review. complete
--review <type> Review type: human, agent, or none. none
--project <id> Target project ID. Overrides CWD-based project detection. CWD-detected
--parent <id> Parent package ID for explicit lineage chaining. auto from session
--topic <topic> Topic/subject area (e.g., cli, dashboard). Auto-inferred if omitted. auto
--type <type> Artifact type: decision, analysis, handoff, question, milestone. Auto-inferred if omitted. auto
--auto Auto-generate from git state and session info. Used by the stop hook. false
--quiet Suppress output. Useful when running from hooks. false
Examples
# Manual deposit with decisions and handoff $relay deposit \ --title "[KEY] Architecture decision: Supabase over PlanetScale" \ --decisions "Using Supabase for pgvector support" "BSL 1.1 license chosen" \ --handoff "Schema migration in supabase/migrations/. Next: wire client." # Auto-deposit from git state (fires from stop hook) $relay deposit --auto --quiet # Deposit to a specific project with open questions $relay deposit \ --title "Benchmark run complete" \ --project proj_dev_relay \ --questions "Should we embed at ingest or at query time?" \ --status pending_review \ --review human
When to deposit: Self-assess significance. If it includes decisions_made, open_questions, or a meaningful handoff_note — and would score 7+ on importance — deposit it. The stop hook captures git state automatically; manual deposits capture why.
relay pull
Context Retrieval
relay pull [package_id] [--latest] [--project <id>] [--query <terms>]

Pull context packages from the Context Core. Use --latest to get the most recent package for the current project, pass a specific package ID to retrieve by reference, or use --query for semantic search. The pulled package is tracked in the current session and sets the parent for the next deposit.

FlagDescriptionDefault
[package_id] Positional argument. Pull a specific package by ID.
--latest Pull the single most recent package for the project. false
--project <id> Project ID to pull from. Defaults to CWD-detected project. CWD-detected
--query <terms> Semantic search — returns the most relevant package(s) for the search terms.
Examples
# Pull the most recent package $relay pull --latest # Pull from a specific project $relay pull --latest --project proj_dev_relay # Pull a specific package by ID $relay pull pkg_f7b1a8d6... # Semantic search $relay pull --query "embedding strategy decision"
relay orient
Session Start
relay orient [--project <id>] [--json] [--key-packages <n>] [--open-questions <n>] [--window <days>]

Print a compact wake-up bundle for the current (or specified) project. Designed to be called from a Claude Code SessionStart hook so every session begins oriented without the agent having to explicitly pull context. The bundle includes the top-significance packages, the latest meaningful handoff, and the most pressing open questions — all in approximately 250 tokens of markdown.

FlagDescriptionDefault
--project <id> Project ID. Omit to use CWD-resolved or configured default. CWD-detected
--json Emit JSON instead of markdown. Useful for programmatic consumption. markdown
--key-packages <n> Number of top-significance packages to include in the bundle. 3
--open-questions <n> Number of open questions to include. 5
--window <days> Time window in days for package selection. Overrides meta control. 14
Examples
# Print orientation bundle for current project $relay orient # JSON output for programmatic use $relay orient --json # More context: 5 key packages, 10 questions, 30-day window $relay orient --key-packages 5 --open-questions 10 --window 30 # In SessionStart hook (non-fatal on error, exits 0) # relay orient --quiet → add to ~/.claude/settings.json SessionStart hooks
Hook integration: relay orient is designed to be non-fatal. If it fails (no packages, misconfigured project), it prints a note to stderr and exits 0 — it will never block session creation.
relay orchestrate
Global Digest
relay orchestrate [--project <id>] [--focus <topic>] [--snippets <n>]

Assemble a comprehensive context digest across one or all projects. Outputs structured data — packages, decisions, open questions, handoff notes, and semantic snippets — to stdout for agent consumption. The calling agent (Claude Code or another LLM) synthesizes the output into insights. Omit --project for a global digest across all registered projects.

FlagDescriptionDefault
--project <id> Project ID for single-project digest. Omit for global digest. all projects
--focus <topic> Focus the digest on a specific topic or area.
--snippets <n> Number of semantic search snippets to include. Increase for deeper context. 25
Examples
# Global digest across all projects $relay orchestrate # Single project digest $relay orchestrate --project proj_dev_relay # Focused digest with more semantic context $relay orchestrate --focus "embedding strategy" --snippets 50
Relay is not the synthesizer. relay orchestrate assembles raw context from the Core and writes it to stdout. The agent reading that output does the analysis. This means synthesis quality scales with your LLM, not with Relay's server.
relay facts
Mutable Whiteboard
relay facts <assert|invalidate|query> [options]

Manage the mutable facts whiteboard — the current-truth layer that sits alongside the immutable package journal. Facts are (subject, relation, object) triples. Asserting a fact with the same (subject, relation) as an existing active fact automatically supersedes it. Use facts for things that change over time: configuration choices, boolean feature flags, who owns what. Packages are the historical record; facts are the current truth.

relay facts assert <subject> <relation> <object>
Assert a fact. Auto-supersedes any existing active fact with the same (subject, relation).
FlagDescription
--source <pkg_id>Optional package ID this fact was derived from.
--project <id>Project ID. Omit to use default.
relay facts invalidate <subject> <relation> [object]
Mark active facts as ended. If object is omitted, all active (subject, relation) facts are ended.
FlagDescription
--project <id>Project ID. Omit to use default.
relay facts query
Query facts. Returns currently-active facts by default.
FlagDescriptionDefault
--subject <s>Filter by subject.
--relation <r>Filter by relation.
--object <o>Filter by object.
--as-of <iso>Time-travel: facts active at this ISO timestamp.now
--include-endedAlso return ended (superseded) facts.false
--limit <n>Cap result count.
--jsonEmit JSON instead of formatted lines.false
--project <id>Project ID. Omit to use default.
Examples
# Assert a boolean flag $relay facts assert session_start_hook installed true # Assert a configuration choice (auto-supersedes prior value) $relay facts assert relay-dashboard font "JetBrains Mono" # Invalidate when something stops being true $relay facts invalidate feature-flag embeddings-enabled # Query all active facts $relay facts query # Time-travel query $relay facts query --as-of 2025-01-01T00:00:00Z --include-ended
relay session
Session Lifecycle
relay session <start|end|status> [options]

Manage the Relay session lifecycle. Sessions track which packages were pulled and deposited, maintain a parent package chain for lineage, and register the actor with the Context Core. The stop hook handles auto-deposit on session exit; relay session start is optional for manual session tracking.

relay session start
Start a new session and register it with the Context Core.
FlagDescription
--project <id>Project ID for this session.
--description <desc>Description of this agent or session instance.
relay session end
End the current session, close it in the Context Core, and clear local session state.
relay session status
Show info about the current active session: project, actor, start time, packages pulled and deposited.
Examples
# Start a tracked session $relay session start --project proj_dev_relay --description "CLI refactor" # Check current session $relay session status # End the session (stop hook does this automatically) $relay session end
relay status
Project Overview
relay status [--project <id>]

Show a project status overview: the 10 most recent packages with their status labels, any packages pending review, and a summary of open questions. A quick health check for the current project without needing to pull full package content.

FlagDescriptionDefault
--project <id>Project ID to check status for.CWD-detected
Examples
# Status for CWD project $relay status # Status for a specific project $relay status --project proj_dev_relay
relay daily
Daily Workflow
relay daily <boot|logoff> [options]

Structured daily workflow commands. boot runs a global orchestrate, cross-references your Obsidian TODOs, and prints a morning brief. logoff summarizes the day's activity, reconciles the TODO list against what was done, and deposits a day summary to the meta project. Integrates with Obsidian Vault via the obsidian_vault config key.

relay daily boot
Morning check-in. Runs global orchestrate, reads TODO TODAY and TODO TOMORROW from Obsidian, prints a structured daily brief.
FlagDescriptionDefault
--todo-today <path>Override path to TODO TODAY markdown file.Obsidian vault
--todo-tomorrow <path>Override path to TODO TOMORROW markdown file.Obsidian vault
--depositDeposit the boot analysis to the configured meta project.false
--focus <topic>Focus area for the orchestrate pass.
--quietSuppress progress messages to stderr.false
relay daily logoff
Evening wrap-up. Runs global orchestrate, reconciles today's TODO list (done vs. incomplete), carries incomplete items forward, and deposits a day summary.
FlagDescriptionDefault
--thoughts <text>End-of-day reflection to include in the summary (deposited to thoughts project if configured).
--skip-depositGenerate the summary without depositing it.false
--quietSuppress progress messages.false
Examples
# Morning: orchestrate all projects + Obsidian TODO cross-reference $relay daily boot # Morning + deposit to meta project $relay daily boot --deposit # Evening wrap-up with reflection $relay daily logoff --thoughts "Embeddings decision resolved. Now: wire reranker." # Evening without auto-deposit $relay daily logoff --skip-deposit
Config keys: Set relay config set obsidian_vault /path/to/vault to enable TODO integration. meta_project and thoughts_project control where deposits go. See relay config.
relay projects
Project Management
relay projects <list|create|info|archive|restore> [options]

Manage Relay projects. Each project is an isolated context namespace with its own package journal and facts whiteboard. Projects are referenced by their ID (e.g., proj_dev_relay) in all other commands. Projects can be soft-archived when they go dormant — archived projects are hidden from listings and digests, and auto-deposits routed to them are skipped.

relay projects list
List all projects you have access to, showing their IDs and names. Archived projects are hidden by default.
FlagDescriptionDefault
-a, --include-archivedInclude archived projects in the list. Archived rows are tagged [ARCHIVED].false
relay projects create <name>
Create a new project with the given name.
FlagDescription
--description <desc>Project description.
relay projects info [id]
Show full project details as JSON.
relay projects archive <id>
Soft-archive a project by stamping archived_at. Reversible — no data is deleted. Once archived: deposits routed to this project are skipped (auto-deposits exit cleanly, manual deposits error), the project is hidden from relay projects list, and relay orchestrate's global digest excludes it.
FlagDescriptionDefault
--forceRequired to archive the meta project (proj_dev_relay) — guarded to prevent accidentally silencing the project that owns Relay itself.false
relay projects restore <id>
Restore a previously-archived project to active state by clearing archived_at. Deposits and digests resume immediately.
Examples
# List active projects $relay projects list # List everything, including archived $relay projects list -a # Create a new project $relay projects create "ExampleApp" --description "Backend service" # Inspect a project $relay projects info proj_dev_relay # Archive a dormant project $relay projects archive proj_old_experiment # Restore an archived project $relay projects restore proj_old_experiment # Archive the meta project (guarded — requires --force) $relay projects archive proj_dev_relay --force
Meta-project guard: The Relay meta project (proj_dev_relay) is the project that owns Relay's own context. Archiving it without --force is rejected to prevent footguns — silencing it would mute the system that's tracking the rest of your work.
relay backup
Export & Portability
relay backup [--project <id>] [--out <path>] [--all-projects]

Export a project's packages, facts, sessions, and blob payloads to a local directory. Output is protocol-portable — NDJSON for tabular data, a blobs/ subdirectory for binary deliverables — so any conformant Agentic Protocol implementation (not just Relay) can consume the result. Safe to run while Relay is in use; the backup is read-only against the live store.

FlagDescriptionDefault
--project <id> Target project. Resolved from CWD via ~/.relay/config.json project_paths if omitted. CWD-detected
--out <path> Output directory. Created if missing. ./relay-backup-<iso>/
--all-projects Back up every accessible project. Each project lands in its own subdirectory under --out. false
Output layout
relay-backup-2026-04-18T21-02-00Z/ manifest.json # project metadata + counts + protocol version packages.ndjson # one Context Package per line (§6 wire format) facts.ndjson # one Fact per line (§7 wire format) sessions.ndjson # one Session per line (§5.5) blobs/ # package deliverables, named by content hash sha256-abc123....bin sha256-def456....bin
Examples
# Backup the CWD-resolved project to default ./relay-backup-<iso>/ $relay backup # Backup a specific project to a chosen path $relay backup --project proj_dev_relay --out ~/backups/relay-2026-04 # Backup every project (each becomes a subdirectory) $relay backup --all-projects --out ~/backups/relay-full
Resolution rules: if you pass neither --project nor --all-projects and the CWD has no project_paths mapping, the command errors out rather than guessing.
Protocol-portable: Backups use the §6 / §7 wire formats from the Agentic Protocol spec. Any other conformant implementation can ingest the same NDJSON — useful for migrating off Relay, archiving long-term, or moving between Supabase projects.
Coming in v0.2
Roadmap

The export side of portability shipped in v0.1. The import side and the cross-implementation sync layer are landing in v0.2, alongside pluggable storage adapters that let Relay run against backends other than Supabase.

relay restore <backup-path>
Inverse of relay backup. Reads a backup directory (NDJSON + blobs) and replays it into the active Core. Idempotent — re-importing the same backup is safe.
relay sync <remote>
Stream packages and facts between two conformant implementations over the wire format. Bidirectional, with conflict policy following the immutable append + supersession model from §5.1 of the protocol.
Pluggable storage adapters
A RelayStorage interface lets Relay run against backends other than Supabase. SQLite (single-user, embedded) is first; flat-file NDJSON and S3-backed object stores follow.
Track the roadmap: see open question 6 in the Agentic Protocol spec § 16.
relay config
Configuration
relay config <show|set|get> [key] [value]

Read and write the global Relay configuration file at ~/.relay/config.json. All other commands read from this file. Keys use underscores internally but accept hyphens on the command line (auto-normalized).

relay config show
Print the full config as JSON.
relay config set <key> <value>
Set a config value. Hyphens in keys are normalized to underscores.
relay config get <key>
Print a single config value.
Common config keys
# Core connection $relay config set core-url https://your-project.supabase.co $relay config set api-key your-anon-key # Actor identity $relay config set actor-id your-name $relay config set actor-type human # Default project (used when CWD is not mapped) $relay config set default-project proj_dev_relay # Obsidian integration $relay config set obsidian_vault /Users/you/Documents/Obsidian\ Vault # Daily workflow projects $relay config set meta_project proj_meta_id $relay config set thoughts_project proj_thoughts_id # View current config $relay config show
CWD project mapping: To auto-detect which project to deposit to based on your working directory, add project_paths to ~/.relay/config.json manually: { "project_paths": { "/path/to/repo": "proj_abc123" } }. The stop hook uses this to route auto-deposits without flags.