GitHub
Skip to article

CLI command reference

On this page

Use the related skill below for guided work in chat. Names use Claude's / syntax; in Codex use $ or the skill picker. The CLI column is a secondary reference for technical users. “Ask your agent” means there is no dedicated skill for that operation. Skills run the same commands and preserve their review and trust requirements.

For terminal examples, run workspace commands from the workspace root. External projects and stack bundles are sibling directories; adjust their relative paths.

Run commands from your workspace or a subdirectory. From elsewhere, put tdt --workspace PATH before the command. Replace PATH with your workspace path. Use tdt --help and tdt COMMAND --help for options; nested commands also accept --help. Paths with spaces need shell quotes. Replace example IDs and hashes with actual values returned by inspection; a placeholder is never approval.

Skill or chat requestCLI commandPurpose
Ask your agent to initialize or refresh setuptdt init [PATH] --agent bothInitialize or refresh unchanged owned core files; omit PATH for the current directory. Select claude, codex, both or none.
/tdt-mcptdt --workspace PATH mcp register HOST --profile PRESETChoose a host and preset; also supports status HOST and unregister HOST.
/tdt-workspacetdt doctorCheck local layout, ownership and recovery state.
Ask your agent to enable or disable an integrationtdt agent enable codex / tdt agent disable codexAdd or remove that workspace-local host integration; also supports claude.
/tdt-constitutiontdt constitution showRead the current workspace policy and revision hash.
/tdt-review-braintdt brain candidates --status allInspect pending, approved and rejected proposals. Default is pending.
Ask your agent to inspect incomplete capture requeststdt brain requestsList incomplete capture requests.
Ask your agent to make older brain filenames readabletdt brain migrate-names / tdt brain migrate-names --apply --expected-sha256 HASH --user-instruction REFPreview or apply legacy note renames and current brain link updates.
/tdt-searchtdt brain search "query" --limit 10 --depth 1Retrieve current eligible notes with bounded links.
/tdt-search with a provider requesttdt brain providersList installed search providers without executing them.
/tdt-search with an explicit indexing requesttdt brain index --provider ID --rebuildExplicitly rebuild a selected provider index; omit rebuild to reconcile.
/tdt-search with the selected providertdt brain search "query" --provider IDSelect a provider for this query; repeat the option to combine rankings.
/tdt-add-projecttdt project add PATH / tdt project listRegister an external directory unchanged, or list registrations.
/tdt-add-projecttdt project inspect IDReread bounded onboarding evidence.
/tdt-relink-projecttdt project relink OLD NEW_PATHPreview a moved project's registration and reference updates.
/tdt-remove-projecttdt project remove ID [--permanent] / tdt project restore IDPreview archive, unregister or restore.
Project lifecycle skillstdt project references ID / tdt project cleanup IDScan references or preview exact cleanup JSON from stdin.
Ask your agent to validate only; also used by /tdt-install-stack and optional /tdt-stack-builder-createtdt stack validate PATHValidate a local bundle and inspect disclosures.
/tdt-install-stacktdt stack install PATHInstall a local bundle; catalog IDs also work when the registry is available.
/tdt-install-stack with an inspection-only requesttdt stack install ID --inspectDownload and verify a catalog release without installing.
/tdt-workspacetdt stack list / tdt stack docs IDInspect installed provenance or find a stack's local guides. Omit ID to list all guides.
/tdt-update-stacktdt stack update ID --checkInspect a newer replacement without changing workspace state.
/tdt-update-stack after reviewtdt stack update ID --approve HASHApply the exact inspected and user-approved replacement.
/tdt-remove-stacktdt stack remove IDUninstall owned stack runtime files, preserving brain knowledge; uninstall is an alias.
Ask your agent to recover an interrupted operationtdt stack recoverRecover an interrupted lifecycle, refresh, brain filename migration or host-integration transaction.
/tdt-install-stacktdt marketplace search "query"Search the selected HTTPS registry; requires network access.
/tdt-add-skill to author a workflowtdt skill propose / tdt skill propose --updatePropose a named skill or intentionally update a user-owned skill; review before saving.
/tdt-find-skills for inventory; ask your agent for recoverytdt skill list / tdt skill recoverInspect skills/proposals or recover an interrupted user-skill save.
/tdt-uitdt ui read SESSION --after 0Read retained interview responses.
/tdt-uitdt ui close SESSION / tdt ui cleanup SESSIONStop the service, or delete retained session data.

Review and policy writes require an actual decision on displayed contents. Use brain, constitution and skills for proposal, hash and JSON-input details. Executable stack trust is separate from update approval: see stacks. For browser start, present, wait and acknowledgement commands, see UI.

Explicit saves and scratchpad commands:

SkillCLIPurpose
/tdt-capturetdt brain save --user-instruction TEXTSave supplied knowledge; summary JSON on stdin.
/tdt-notetdt brain note --user-instruction TEXTSave scratchpad summary JSON with tags on stdin.
/tdt-search-notestdt brain search QUERY --scope notesSearch scratchpad content and tags.
tdt brain notes [--tag TAG]List scratchpad notes, metadata and IDs.
tdt brain related IDFind scratchpad notes sharing subject tags.

Reminders

tdt reminder configure reads preferences; --timezone IANA --chat on|off updates them. --schedule REFERENCE records an externally configured job; --clear-schedule clears the reference. These commands do not create/delete jobs. tdt reminder add --user-instruction TEXT accepts reminder JSON on stdin. list [--status pending|done|cancelled|all] shows records. edit, snooze, done and cancel require an ID, current --revision and --user-instruction; edit and snooze accept JSON on stdin. check --channel manual|chat|scheduled [--limit N] claims due items; ack ID --token TOKEN records notification, not completion. See reminders for the schema, setup and delivery recovery.

Relays

tdt relay add --from PROJECT --to PROJECT --title TEXT --user-instruction TEXT saves a request from one project to another. Put the request text on stdin. --origin TEXT records where the request came from. list [--project PROJECT] [--status open|done|cancelled|all] shows relays in both directions. show ID shows one relay. done and cancel require an ID, the current --revision and --user-instruction. done also requires --resolution TEXT. See relays.

Working files

  • tdt project create <relative-folder> creates below work/ and registers the project.
  • tdt project inspect <name-or-id> resolves a unique project name or registered path.
  • tdt work search <query> discovers internal working files separately from knowledge.

Read WORK.md before choosing new locations; CLI paths are explicit and do not parse conventions.

Project lifecycle mutations require --apply, the preview --expected-sha256, and --user-instruction. See project lifecycle.

Local MCP reads

Both profiles advertise two fixed resources, tdt://workspace/context and tdt://workspace/policy, and one argument-free prompt, tdt-start. Resources return the same JSON result envelopes as tdt_workspace_context and tdt_constitution_read, using a 128-KiB result budget. Context includes the selected profile and its actual tool catalog. The server reads current files on each request; hosts must refresh cached resources before acting. Oversized or unavailable context fails the resource request without partial content. Use the tools for explicit budgets and ordinary structured refusals. Unknown resource URIs and nonempty catalog cursors refuse; there are no resource templates, subscriptions, change notifications, arbitrary file URIs or external reads.

Selecting tdt-start returns static startup instructions to read fresh context, then use the relevant installed guides/skills for the user's actual request. It does not embed workspace text or grant permission to write, execute, capture or register a host. Unknown prompts and arguments refuse. Hosts that do not expose resources or prompts can use the existing tools directly; connecting the server does not automatically invoke the prompt or activate a native slash command.

Install the optional dependency with pipx inject thisdamnthing 'mcp>=2.3,<3' for an existing pipx installation, or install thisdamnthing[mcp] in a Python virtual environment. Configure your local MCP host to launch tdt with:

Code
{
  "command": "tdt",
  "args": ["--workspace", "/path/to/workspace", "mcp", "serve", "--profile", "read-only"]
}

Replace the workspace path with an initialized workspace. The process stays bound to that directory and uses stdin/stdout for MCP. Manual configuration remains available. Use /tdt-mcp for guided host and preset selection; see MCP registration.

The default read-only catalog has 52 tools; everyday has 91 in total. The following list covers reads and selected everyday counterparts:

  • tdt_brain_names_preview: complete legacy filename migration preview in both profiles, including renames and replacement contents (null removes an old path). Up to 1 MiB output budget; oversized output refuses without partial content. Shared read lock, no note or registry writes. Returns proposal_sha256 binding renames and complete before/after contents, including derived catalog writes.
  • tdt_brain_names_apply (everyday): apply with the preview expected_sha256 and actual user_instruction. Stale plans refuse; identical completed retries preserve later edits. Prepared/completed backups are limited to 8 MiB, including no-op outcomes.
  • tdt_brain_names_status: read retained outcome by proposal_sha256 before retry or CLI fallback. CLI equivalent: tdt brain names-status HASH. Journals require CLI recovery and reread; unknown does not prove the operation never ran.
  • tdt_brain_repair_status: read the retained outcome by exact proposal_sha256 in either profile. After an uncertain apply, read this before retry or CLI fallback. CLI equivalent: tdt brain repair-status <hash>.
  • tdt_brain_repair_apply (everyday): supply identical changes, preview expected_sha256 and actual user_instruction. Returns a small completion receipt and backup path. Identical completed retries preserve later edits.
  • tdt_brain_repair_preview: validate 1–20 changes against current audit hashes and return complete replacements plus a proposal hash, without writing notes or backups. Increase the result budget (up to 1 MiB) or reduce the batch if needed. Apply explicitly authorized changes through tdt_brain_repair_apply (everyday) or tdt brain repair with identical changes and the returned hash.
  • tdt_brain_audit: paginated structural findings and canonical note hashes, with scan limitations and unreadable-note omissions.
  • tdt_brain_graph: the complete brain as nodes and typed links, for a graph view. Nodes include the index, projects, knowledge, pending candidates, sessions, scratchpad notes and tags. The tool returns titles and metadata, not note bodies. Follow next_cursor until it is null. The revision changes when a node or link changes.
  • tdt_capture_requests / tdt_capture_request_read: bounded hook request inventory and exact status/provenance, without transcript reads.
  • tdt_workspace_context: current complete constitution, WORK.md and tool names.
  • tdt_workspace_status: bounded operational counts and recovery markers.
  • tdt_recovery_preview: select kind: stack or kind: skill to inspect a complete validated rollback plan without writes. before holds rollback destinations, after holds attempted writes; null means absent and base64 objects hold binary bytes. Current files must match either version. directories lists stack-created directories considered for empty-directory removal; skill recovery also attempts to remove empty skill directories for newly created files. Journal input is capped at 8 MiB; increase output budget_bytes up to 1 MiB if needed. No partial output. journal_sha256 binds semantic journal contents for tdt_recovery_apply. absent refers only to the selected journal. On explicit recovery instruction, use tdt stack recover or tdt skill recover; CLI revalidates current files but does not bind to this hash. Reread retained operation outcomes afterward. A refusal does not identify the specific conflict; preserve the journal and inspect locally. No lock breaking or automatic retry is provided.
  • tdt_recovery_apply (everyday): after complete preview review and explicit user authorization, pass the selected kind, expected_sha256 from the preview and actual user_instruction. Bounded shared CLI validation and rollback run under the exclusive workspace lock; absent/changed journals and local conflicts refuse. The small rolled_back receipt fits the minimum budget. No durable outcome or approval audit is retained. After uncertainty inspect the preview, affected files and original operation outcomes before any newly authorized retry or CLI fallback. An absent journal does not prove success. Interrupted rollback retains its journal. Other references to CLI transaction recovery below can use this reviewed tool for stack/skill journals; policy locks and other recovery mechanisms are excluded.
  • tdt_reminder_settings: timezone, chat preference and external scheduler reference.
  • tdt_reminder_list / tdt_reminder_read: reminder summaries and complete Markdown.
  • tdt_relay_list / tdt_relay_read: relay summaries and one relay with its request text. Everyday adds tdt_relay_add, tdt_relay_done and tdt_relay_cancel.
  • tdt_project_list: paginated registered projects, including archived/missing state.
  • tdt_project_read: registry details and complete retained registration Markdown.
  • tdt_project_operation_status: exact proposal hash; historical outcome reconciliation before retry or CLI fallback.
  • tdt_project_remove_preview: exact registered id and explicit mode (archive or unregister); complete replacements and the CLI proposal hash, without writes or source deletion.
  • tdt_project_restore_preview: exact registered id; preview restoring active status, even with a missing source directory. Unregistered entries cannot be restored this way.
  • tdt_project_cleanup_preview: exact project id and 1–20 changes with path, current expected_sha256, and complete content (explicit null deletes the whole file). Returns full replacements, scan coverage and CLI proposal hash; up to 1 MiB output budget, shared read lock, no writes. Use everyday tdt_project_cleanup_apply with identical changes, hash and actual user instruction. Cleanup outcomes are retained by proposal hash.
  • tdt_project_relink_preview: exact registered id and absolute existing destination path; complete mechanical updates, new identity and preserved brain link. Source files and historical provenance remain intact. All lifecycle previews allow up to 1 MiB budget_bytes; oversized results refuse without partial output. Everyday apply tools use identical inputs, preview hash and the actual user instruction; reference cleanup is separate.
  • tdt_project_references: paginated literal references and skipped entries for an exact project ID.
  • tdt_project_inspect: bounded source evidence from an explicitly selected registered project.
  • tdt_guides_list / tdt_guide_read: installed core and declared stack guides.
  • tdt_skill_list / tdt_skill_read: canonical core, user and stack skills.
  • tdt_skill_inventory: paginated live skill content prefixes across canonical and host folders for overlap review, including unmanaged skills. Ownership labels do not verify assets; truncated content is incomplete evidence. Also inspect retained proposals with status all. No execution or host history access.
  • tdt_skill_propose / tdt_skill_review (everyday): shared-core proposal submission and explicit approve/decline for one exact ID. update defaults false; review requires the actual user_instruction reference. Small ID/status receipts fit the minimum budget. Read complete proposals before review and reconcile proposal plus live inventory after uncertainty before retry or CLI fallback. Interrupted transactions require CLI recovery. No execution or history access.
  • tdt_skill_proposals / tdt_skill_proposal_read: paginated retained user skill proposals and complete behavior, sources, decisions and recorded ownership. Defaults to pending; select approved, declined or all explicitly. Historical approval does not prove the version is installed. These reads never execute skill instructions, inspect host histories, propose or approve skills.
  • tdt_constitution_read: complete constitution and its revision.
  • tdt_constitution_save (everyday): complete approved markdown, current expected_sha256 (or missing) and actual user_instruction approval reference (1–240 characters, one line). Uses the CLI policy lock and revision checks; appends an audit reference. The final policy must fit 6000 UTF-8 bytes. Returns only the saved SHA256 so the receipt fits the minimum budget. Read the complete policy back. After uncertainty reread before retry or CLI fallback; no retained outcome or automatic retry. Does not enable hooks or recover policy state.
  • tdt_brain_search: literal search of approved knowledge with bounded links.
  • tdt_brain_read: read an eligible note using a path or URI returned by search.
  • tdt_candidate_list: paginated summaries; status is pending (default), rejected or all.
  • tdt_candidate_read: complete candidate Markdown and its core review hash.
  • tdt_candidate_review_status: complete candidate or promoted knowledge by exact ID, review history, revision and approval destination.
  • tdt_note_list: paginated scratchpad summaries with subject tags.
  • tdt_note_read: complete scratchpad Markdown, explicitly labeled unapproved.
  • tdt_note_search: paginated scratchpad summaries matching a literal phrase in title, body or tags.
  • tdt_note_related: paginated scratchpad summaries with shared tags, selected by exact note ID.
  • tdt_work_search: bounded working-file discovery by filename and supported text.
  • tdt_work_read: bounded working text by workspace-relative path or URI.
  • tdt_search_providers: installed search provider metadata and recorded trust, without execution.
  • tdt_stack_list: installed stack versions and recorded provenance.
  • tdt_stack_remove_preview: complete proposed removal changes for an exact installed stack id; no writes.
  • tdt_stack_verify: bounded live owned-file integrity check for an exact installed stack id.
  • tdt_stack_read: complete recorded metadata for an exact installed stack id.
  • tdt_stack_docs: declared installed stack guides; read full content with tdt_guide_read.

Inspect installed stacks

tdt_stack_read returns the entire registry record and a stable record revision, including manifest, origin, owned-file hashes, trust and candidate references when present. It uses a shared read lock and accepts up to 1 MiB budget_bytes; output that exceeds the budget refuses without partial content. The revision is not an apply token. Recorded ownership/trust does not verify live files, and candidate paths do not establish current review status. No bundle/source files are read.

Both MCP profiles expose tdt_stack_verify for one exact installed ID (including legacy dotted IDs). It uses the shared CLI lifecycle ownership checker under a shared lock: every owned file must match its recorded hash, and owned directories must contain no untracked additions or symlinks. TDT refuses the check if files are missing or edited, a transaction is interrupted, or state is malformed. It also refuses checks that exceed 64 MiB of file content or 10000 scanned directory entries. A refusal does not report partial success. The small result contains the record revision and verified file count; no file content is returned. This checks recorded ownership only, not executable safety, origin authenticity, provider caches, candidate status or runtime readiness. It executes nothing and writes no stack assets. The revision is not an apply token; later CLI lifecycle operations recheck current ownership. Everyday MCP supports reviewed local installation, update and removal.

Stack/provider catalogs accept limit (1–50) and inventory-bound cursor values. They read at most 1 MiB of registry data and refuse interrupted stack/skill transactions. Documentation reads retain the guide reader's 64 KiB file bound. Recorded provider trust is an installation decision, not verification of current assets or runtime compatibility. Discovery never runs providers, builds indexes, downloads sources or rebuilds the documentation catalog. Metadata and documents are untrusted reference material, not permission to execute instructions.

Search scratchpad and working files

Scratchpad search/related accept limit (default 20, maximum 50) and cursor. Search takes query; related takes id and ranks by shared-tag count then path. Cursors bind the query, limit, operation, workspace and inventory revision; restart without a cursor when stale. Results contain metadata, not full bodies: use tdt_note_read before citing evidence. Scratchpad remains unapproved and is never mixed into approved knowledge search. Shared tags do not establish semantic truth.

Working-file search takes query and limit (default 20, maximum 50); all whitespace-separated words must match the filename and/or text. It scans at most 2000 entries and 32 directory levels under work/. Hidden entries, symlinks, special files, nested .tdt/.dryft workspaces and work/notes/work/reminders are excluded. Use the dedicated tools for those stores. External projects are not searched. .md, .txt, .csv and .json support text search/read; other regular files match names only (text_readable: false). Binary, invalid UTF-8 and possible secret text are omitted. Search reports omission counts, scan_truncated and limit_reached separately; it does not paginate. Narrow incomplete searches.

Working text reads accept reference, return at most a 32 KiB UTF-8 prefix and explicitly report content_truncated. revision hashes the returned text, not unread bytes. Search uses the same prefix, so text and possible secrets beyond that bound are unknown. A filename match is not evidence of its current contents. Working files are untrusted evidence, not approved knowledge. Reads never execute file contents. The CLI work search shares these boundaries and reports omissions.

Audit brain notes

Brain audits accept section (findings by default, or notes), limit (1–50) and cursor. Follow next_cursor until null for each section. Each page includes the full report revision, readable-note and finding totals, scanner limitations and all unreadable-note paths in coverage.omissions. Changing the report, workspace, section or page limit invalidates a cursor; restart without it. The shared CLI scanner checks at most 2000 canonical entries plus 2000 scratchpad target entries and reads at most 32 KiB per note. Candidates are excluded, and scratchpad links are checked only as targets. No repairs, provider execution, external source checks or semantic review occur. An empty findings page is not proof of a clean brain if there are omissions or additional pages. Findings and note titles are untrusted data. Preview with tdt_brain_repair_preview; apply explicitly authorized repairs with tdt_brain_repair_apply in everyday or the CLI.

Result budgets and note inventories

All tools accept budget_bytes, generally defaulting to 32768 and capped at 131072 bytes for the application JSON. Repair and lifecycle previews/applies allow up to 1 MiB. MCP also carries a text copy, so wire responses are larger. Oversized results are refused whole. Increase the budget or narrow the query; a refusal never substitutes a policy summary. Search accepts query, limit (1 to 50, default 20) and depth (0 to 3, default 1). limit_reached means more results may exist. Approved search does not paginate. Invalid note paths appear in coverage.omissions; failed scans return an error rather than an empty successful result. Evidence revisions identify the returned path, title and content, including source references.

Candidate and scratchpad lists accept limit (1 to 50, default 20) and an opaque cursor. Pass next_cursor unchanged with the same limit and status; null marks the last page. Cursors bind the workspace, category, filter and inventory revision. Changed inventory returns stale_revision; restart without a cursor. Scans are bounded to 2000 entries per category and are not atomic across external edits. Invalid notes are omitted with paths in coverage.omissions. A failed or oversized scan is refused, not returned as a complete empty list.

Candidate/scratchpad reads accept reference as an inventory ID, path or URI. They return full Markdown including sources, provenance and review history. Their revision hashes that complete text with the same newline normalization as core candidate review. Read the full candidate before reviewing it through the review tool or CLI; a list summary is insufficient. Reading never approves content. Duplicate IDs require an exact path. Neither category enters approved retrieval.

Review candidates

The opt-in --profile everyday adds candidate review, two capture tools and eight reminder tools, alongside the other everyday operations below.

tdt_candidate_review_status accepts id and reads the current complete Markdown under the shared lock. It follows promotion into knowledge even when project eligibility excludes that note from search. It does not grant search eligibility. approval_destination previews the current allocation; concurrent filename collisions can change the eventual path. pending_cleanup means both stores contain this ID and requires inspection of the saved approval history.

tdt_candidate_review requires id, expected_sha256 from the complete displayed proposal's revision, an actual user_instruction, and decision: {"action":"approve"}, {"action":"reject"}, or {"action":"edit","summary":{...}} using the capture summary fields below. Approval preserves provenance/history in a separate knowledge note before removing the candidate. Rejection remains outside knowledge search. Editing retains the previous proposal in history and stays pending until a new explicit approval. The small receipt fits the minimum 1024-byte budget. Stale hashes, nonpending candidates, secrets, lock conflicts and stack recovery markers refuse writes.

After an uncertain response, read exact review status and compare saved history with the original instruction, decision and proposal hash. Do not repeat completed edits or rejections with a fresh hash. An interrupted approval may leave pending_cleanup; only the identical original approval can finish deletion after the shared core verifies the saved canonical content. If state is unreadable, leave recovery for later. Candidate reads/saves do not authenticate user consent. Use the current hook token to suppress automatic capture for review turns.

Capture requests and recovery

tdt_capture_requests accepts status (requested by default, captured, skipped or all), limit and cursor. Scans refuse malformed state and exceedances of 2000 entries or 32768 bytes per request. Cursors expire when inventory changes. tdt_capture_request_read accepts an exact request_id; neither reader reads the transcript path stored in provenance. Inventory order never identifies the active conversation.

tdt_capture_submit requires the existing request_id delivered by the current host hook and a discriminated payload: {"action":"skip"} or {"action":"summary","summary":{"title":"...","kind":"fact","body":"...", "sources":["user message with locator"],"links":["index"],"project":null}}. Kinds are fact, decision, question or inference; shared core summary limits and secret checks apply. Provenance comes from the saved request. Capture creates a pending candidate only. Replays return the saved captured/skipped status without accepting replacement content. After a lost response, read request status before retrying or using CLI fallback; a partial candidate write can be reconciled by resubmitting the original request.

tdt_capture_suppress requires the exact current request-hook token. Use it for user saving restrictions or explicit save/review/reminder work. Repeats are safe within that turn; stale tokens fail. Tokens and request IDs are explicit context, not authenticated host identity. MCP does not create hook requests or turn tokens, register hooks, or enable automatic capture. Enabled hooks prefer these tools on the server bound to their workspace, with CLI fallback when unavailable. After an uncertain capture response, read the exact request through MCP or tdt --workspace <root> brain request <request-id> (bounded JSON, no transcript read). Captured/skipped is final; requested permits one identical CLI retry. If status cannot be read, leave recovery for later. Same-token suppression may be repeated safely through CLI. Neither fallback bypasses permission or validation refusals. Refresh existing owned workspace resources to receive updated hooks. Both writes share core locking, refuse stack recovery state, and return receipts within the minimum 1024-byte budget. CLI fallback requires host permission. Hosts may display recovery commentary even when hooks request internal capture. Power-loss recovery remains unverified.

Create and deliver reminders

The reminder tools are:

  • tdt_reminder_create requires title, body, due_at, an explicit IANA timezone, and user_instruction. Resolve the intended date/time with the user; due_at must include an offset matching that timezone. Title/body limits are 160/1500 characters, with one title line and at most 20 body lines.
  • tdt_reminder_edit accepts a nonempty changes object containing any of title, body, due_at and timezone. Omitted fields remain unchanged; null values are refused. Changing timezone requires a matching due_at.
  • tdt_reminder_snooze requires changes.due_at in the future and optionally changes.timezone; otherwise it uses the reminder's existing timezone.
  • tdt_reminder_complete and tdt_reminder_cancel retain the record and change its task status. Completion is separate from notification.

Every edit, snooze or task-status change requires its exact id, the integer reminder_revision from a fresh read (not the Markdown hash), and user_instruction describing the user's request. Changes advance the revision and clear delivery claims. Text-only edits preserve prior notification; changing the due time or snoozing rearms it. Creation coalesces exact pending duplicates without changing their provenance, notification or revision. Finished records do not block creation of a new reminder.

Creation, edits and task-status changes return a small receipt containing ID, status and the reminder revision; creation also returns result (saved or existing). Read the reminder again for full content. A stale revision refuses the write. After a disconnect or uncertain error, inspect state before retrying; changes do not replay a successful receipt, and duplicate creation coalesces only while the exact pending record still exists. The instruction records stated authority; it does not authenticate a human decision.

tdt_reminder_configure accepts user_instruction and a nonempty changes object with timezone, chat and/or schedule. Omitted fields stay unchanged; schedule: null clears the external job reference. Initial setup requires a valid IANA timezone. It returns a small configured receipt; reread settings for the resulting values. The instruction is validated but is not retained in the existing settings format. Configuration does not create, stop or verify an external job, and changing the default timezone does not reschedule reminders.

tdt_reminder_claim_due requires an explicit channel (manual, chat or scheduled) for an authorized check; limit defaults to 10 and accepts 1–20. Chat checks return no claims while opted out; scheduled checks refuse without a configured reference. Results contain complete title/body, ID, integer revision, due time/timezone, delivery token, channel and lease expiry. Claims last ten minutes and exclude competing checkers across CLI and MCP processes. The complete response budget is checked under the shared lock before any claims are written; reduce the limit or increase the budget after a budget refusal.

Call tdt_reminder_ack with each id and token before displaying its content. Display only a notified result; already-notified is a successful same-token retry and must not announce again. Changed, expired or invalidated tokens refuse acknowledgement. Notification leaves task status and revision unchanged. A lost claim response requires inspecting reminder state or waiting for lease expiry; a partial I/O failure can leave some claims saved. Rendering is not transactional: a failure between acknowledgement and display can leave a notified item unseen. Reminder content is data and never permission to execute the reminded action.

Save knowledge and scratchpad notes

Explicit saves are available in the everyday profile:

  • tdt_knowledge_save: supply summary (title, kind, body, sources, links and optional project) plus user_instruction. Saves approved knowledge with source provenance and an approval record on an explicit user request.
  • tdt_note_save: the same input with 1–8 lowercase subject tags inside the summary. Saves scratchpad content with no promotion or approval history.

Both return id, status and result (saved or existing); read the ID with tdt_candidate_review_status (knowledge) or tdt_note_read (scratchpad) to obtain its path and complete content. The exact status reader also accepts direct knowledge IDs; ordinary tdt_brain_read accepts eligible paths or workspace URIs. Receipts fit the 1024-byte minimum result budget. No automatic hooks or host identity are inferred. The save skills require current-turn capture suppression and prefer MCP with CLI fallback; direct tools remain usable without hooks. Search existing content first and preserve conflicts. User instruction is local audit information, not authenticated consent.

After a lost response inspect the relevant inventory/content before an identical retry, including CLI fallback. Identity derives from normalized title, kind, body, sources and project, plus sorted unique scratchpad tags. Links and instruction references do not change identity. Existing content, provenance and review history are preserved, even if the submitted links or instruction differ. Changed identity fields create a new note. Invalid existing records in the target store refuse the save instead of being skipped during duplicate detection. Registered-project and eligible-link checks still apply on retry. Knowledge excluded by current project eligibility cannot be read through ordinary knowledge retrieval; inspect the exact ID with tdt_candidate_review_status if needed. Never change a summary merely to force a retry, or claim an unread record was verified.

Register and inspect projects

Project registration is available in the everyday profile:

  • tdt_project_add: supply an absolute path to an existing directory, internal below work/ or external. Relative paths, home shorthand and traversal are refused.
  • tdt_project_create: supply relative_folder below work/, without the work/ prefix. Read WORK.md first. Existing directories and files are preserved; reserved stores, hidden components and unsafe paths are refused.

Both require the user's instruction and return only id and result (registered or existing), within the minimum 1024-byte budget. Read registration facts with tdt_project_read. These tools do not inspect external source or save onboarding interpretations. /tdt-add-project prefers them with CLI fallback.

Project onboarding adds two tools:

  • tdt_project_inspect (both profiles): pass the exact registered id. Reads up to 100 top-level names and ten allowlisted docs/manifests, at most 4 KiB each, from an active available project. This explicitly reads internal or external source. It returns registration facts, brain_link, names, documents and an evidence notice. Documents carry exact source, text and truncated, or an omitted reason. Missing/unsafe/unreadable files and possible secrets are reported as omissions; inventory/content truncation also sets coverage flags. Directory components and documents cannot be symlinks. No recursive scan, command execution or project writes occur. Increase budget_bytes up to 131072 if the result does not fit; budget refusal returns no partial evidence.
  • tdt_project_propose (everyday): pass id and summary with title, kind, concise body, 1–8 source references and links (prefer inspection's brain_link). Optional summary project must be null/absent or match id. Interpretations should use kind inference and cite the inspected evidence. Returns candidate id, status and result (saved or existing) within 1024 bytes. New proposals are pending, with project provenance and no approval. Read full saved content with tdt_candidate_review_status; promotion requires the ordinary explicit candidate review.

/tdt-add-project prefers these tools with CLI inspect/propose fallback. Identical proposal retries preserve existing bytes, including edited or reviewed content; they may return pending, approved or rejected. After an uncertain write, inspect candidate inventory and exact review status (or saved Markdown) before retrying the identical summary. Malformed records, duplicate identities, interrupted promotion, mismatched provenance, archived/missing projects, lock conflicts and pending stack recovery refuse proposal writes. Resolve the existing state rather than changing the summary to force a new identity. Project source stays unchanged.

After an uncertain response, inspect project list/read before an identical retry. Creation can leave a directory before registration completes. Registration writes its note before its registry entry; retry preserves an exact interrupted note and completes the registry. Existing registrations retain their note and identity. Malformed or duplicate registration notes, invalid or oversized registries, lock conflicts and pending workspace recovery refuse writes. Archived projects require restore; moved projects require explicit relinking. Never register a replacement identity to bypass those workflows. Internal creation is covered by the same lock as registration. It does not scaffold source or write into external projects.

Profiles, provider execution and transport

Profiles are fixed at startup, and excluded calls are refused. read-only remains the default. Mutations use the same nonblocking cross-process lock as the CLI; in-process mutations are serialized, and cancellation waits for an active worker before releasing serialization. A lock conflict may return operation_refused; inspect state before retrying. Reads remain available during a mutation. Everyday also exposes tdt_brain_search_providers with required providers (1–8 distinct explicitly selected stack IDs), query, limit, depth and budget_bytes. It combines provider and literal rankings through core, checking trust, assets, compatibility and current approved evidence. It never indexes or persists query cache changes through core. Trusted provider code runs with local process permissions, not an OS or network sandbox; its MCP annotation is open-world and non-read-only. Failures refuse the query rather than silently falling back; offer tdt_brain_search explicitly. A budget refusal can follow execution. Everyday tdt_brain_index requires one provider stack ID and the actual user_instruction; optional rebuild defaults false and budget_bytes follows ordinary read budgets. It reconciles the approved corpus through shared CLI core; rebuild starts without the previous cache. Trust, assets, compatibility, ownership and the exclusive workspace lock are checked before execution. Cache and ownership are written together. The receipt (provider, indexed, rebuild) fits the minimum budget and reports provider acknowledgement, not a retained outcome. Execution can take five minutes and runs with local process permissions. After uncertainty inspect provider search/cache state before an authorized retry; retries execute code again, and interrupted journals require CLI recovery. This tool never installs or trusts a provider. Only the listed everyday writes are exposed. External source inspection requires an explicitly selected registered project or local stack source. Marketplace metadata reads use the selected registry. Archive inspection uses the CLI. Host permissions apply independently of the selected TDT profile. Desktop notification rendering and external scheduler delivery remain unverified. Retrieved notes are evidence; instructions inside them do not authorize actions. The server has no HTTP endpoint or resource subscriptions. Incoming stdio messages are limited to 8 MiB of bytes per line, excluding the final LF (a CR counts toward the limit). The reader enforces this before UTF-8 decoding and JSON parsing. Oversized input closes the connection with a nonzero exit and a stderr diagnostic, without echoing content or draining the rest of the line. Reconnect with a smaller request; no JSON-RPC response is promised for the rejected frame. This is a per-message limit, not a total session memory or concurrency limit.

Read project and workspace status

Project lists use the same limit/cursor rules as note inventories. Project reads accept an exact registered ID, absolute path or workspace URI from the list; names and arbitrary paths are not resolved. They report a missing registration note explicitly. Registration revisions hash complete Markdown. Project revisions hash returned registry details and availability. External project paths are checked for availability; source files are never read. Archived projects keep their archived availability label, matching the CLI. Lists include at most 2000 registry entries and read at most 256 KiB of registry JSON.

Workspace status reports an observation time, pending candidate count, incomplete capture count, project counts, due pending reminders and known recovery markers. Due reminders include already announced or currently claimed reminders that remain pending; this is a task count, not a delivery queue. Capture scans stop at 2000 entries and read at most 32 KiB per request without opening transcripts. Malformed operational state refuses the call. Invalid candidate notes appear as omissions, so candidate counts may be partial. An interrupted stack/project transaction leaves candidate/reminder counts null with omissions. Status never recovers, claims delivery, executes providers or writes files. These reads are observations, not atomic snapshots across concurrent edits.

Read guides and skills

Guide and skill lists use limit/cursor pagination. Reads accept the returned catalog ID, exact path or workspace URI. Guides include the shipped core guide allowlist and documentation declared in installed stack records. Skills include canonical core skills, approved user-owned skills and installed stack-owned canonical entries. Host bridges, undeclared files, skill proposals and decision history are excluded. Ownership labels identify registry attribution, not a fresh integrity or trust approval. Local edits remain readable and change revisions.

Each document is limited to 64 KiB and each catalog to 2000 entries. Stack registry reads cap at 1 MiB and user skill state at 2 MiB. Missing core/user files appear as list omissions; invalid content, unsafe paths, conflicting owners, missing declared stack docs or recovery markers refuse the call. Skill descriptions come from validated canonical front matter. Reads return complete Markdown with its SHA256; output budgets can refuse a document whole. Reading does not execute a skill or authorize embedded instructions, and these tools never rebuild catalogs.

Read reminders

Reminder lists use the same limit/cursor rules, sorted by due time and ID. status accepts pending (default), done, cancelled or all. Pending includes future, already notified and claimed reminders; listing is not a delivery check. claimed means a stored claim exists, including an expired claim. Reads accept an exact ID, workspace-relative path or bound URI and return complete Markdown. revision is the SHA256 of that text; reminder_revision is the core integer edit revision. Delivery changes invalidate cursors even when the edit revision stays unchanged. Reads never claim, acknowledge, complete or schedule reminders. Malformed or duplicate records refuse the inventory; files are limited to 32 KiB and scanning to 2000 entries. Reminder text remains operational data, separate from approved knowledge.

Use browser interviews

Everyday MCP exposes tdt_ui_start, tdt_ui_present, tdt_ui_status, tdt_ui_read, tdt_ui_wait, tdt_ui_ack, tdt_ui_close and tdt_ui_cleanup. Present accepts the page object directly, using the same core validation as CLI. Start defaults to no browser launch and returns the private local URL. Status returns connection/round/cursor metadata without page content or credentials. Read/wait include complete events and original prompts, defaulting to one event; use next_after while has_more is true. Increase budget_bytes up to 1 MiB for large events. Budget refusal never acknowledges events. Waits are bounded to 30 seconds and do not hold the MCP mutation lock. A cancelled MCP call does not cancel the interview. After uncertain start/present responses inspect retained state/current round before retrying; present always creates a new round. Close retains answers; cleanup deletes them and requires explicit user instruction. These tools do not submit answers on the user's behalf or promote them to knowledge.

MCP project reference review

tdt_project_references is available in both profiles. Supply an exact project id, optional section (references by default, or skipped), limit and cursor. Removed projects remain addressable while their registration note is retained. Every page includes project identity, reference/skipped totals, scan truncation and limitations. Cursors bind the entire report, project, section and page size; restart after changes. Skipped details have their own paginated section so omissions cannot silently disappear behind the reference page.

The shared CLI scan checks at most 5000 entries in brain/work and supported text files up to 256 KiB; it skips hidden paths, symlinks, unsupported/unreadable files and possible secrets. It does not scan external project source. Literal matches are review hints, not ownership or permission to delete. Everyday supports separately authorized reference cleanup writes. A result-budget refusal returns no partial page.

MCP project lifecycle apply and outcomes

Both profiles expose tdt_project_operation_status with an exact proposal_sha256. Everyday adds tdt_project_remove_apply (exact id, explicit mode: archive or unregister), tdt_project_restore_apply (id) and tdt_project_relink_apply (id, absolute path). Each apply requires the same preview inputs, expected_sha256 and actual user_instruction/reference. Review complete previews before applying within the user's authorized scope. Source directories remain untouched; reference cleanup requires separate review.

Apply returns a small receipt with status, operation, project_id, hash and backup path. The project ID is the resulting identity, including after relink or unregister. After uncertainty, read status before retry or CLI fallback: tdt project operation-status HASH. completed is historical success, not proof current files match; identical retries return it without changing later edits. Use original arguments and instruction even after the old registration disappears. Changed arguments or instruction for the same retained hash refuse.

prepared means backup/intent retained without committed completion; inspect before identical retry. unknown means no retained record, not proof it never ran and not permission to apply. Legacy UUID backups are not indexed. recovery_required means a shared transaction journal exists; use the indicated CLI recovery and reread. Completion and registry/note writes share the journal; rollback restores prepared state. Status reads share the read lock; applies use the exclusive workspace lock. Indexed backups refuse above 8 MiB before writes.

MCP reference cleanup apply

Everyday exposes tdt_project_cleanup_apply with identical id and changes from tdt_project_cleanup_preview, expected_sha256 and actual user_instruction. Review complete replacements and scan coverage; null content deletes the entire file. Archive/unregister permission alone does not authorize reference cleanup. CLI cleanup shares the same hashes, validation, backups and retained outcomes. Use tdt_project_operation_status after uncertainty before retry or CLI fallback. Identical completed retries preserve later changes even after the removed registration note was deleted. Keep that note until the final batch so additional reference scans can resolve the project. Cleanup completion and file changes share the recoverable transaction; legacy UUID cleanup backups remain unindexed.

Remove an installed stack through MCP

Both MCP profiles expose tdt_stack_remove_preview for an exact installed ID. It uses the shared CLI removal planner and returns complete before/after contents: owned bundle/host skill and provider cache deletions, registry changes and the refreshed documentation catalog/ownership. Null means deletion or absence; base64 objects represent binary content. Candidate and approved notes, user skills and project artifacts remain. Removal may prune empty owned directories.

Preview checks current ownership under a shared lock, executes nothing and writes nothing. Auxiliary metadata reads are capped at 1 MiB each; cache and total before content at 8 MiB. Owned integrity limits also apply. Increase budget_bytes up to 1 MiB; oversized results refuse without partial review content. The proposal hash binds everyday tdt_stack_remove_apply, but is not accepted as a CLI approval token. Apply requires the exact ID, expected_sha256 and actual user_instruction, and rechecks bounded ownership and the complete snapshot under an exclusive lock. The recoverable transaction is capped at 8 MiB before writing. The small receipt is not a retained outcome or durable approval audit. After uncertainty inspect registry, affected paths and recovery preview before any newly authorized retry or CLI fallback. Absence does not prove success; an identical reinstall may reproduce the hash. Never automatically retry. Interrupted writes need reviewed recovery. Inspection does not authorize removal; stale previews must be inspected again before acting.

Local source inspection through MCP

Both local source inspection and installed-stack inspection are available through MCP. tdt_stack_validate works before installation; tdt_stack_read and tdt_stack_verify inspect an installed stack.

For an explicitly selected local stack directory, prefer tdt_stack_validate with its absolute source path. Read the complete manifest and selected file contents; binary assets use base64. Increase budget_bytes up to 1 MiB if needed. Oversized results refuse without partial review. Existing text limits apply and v2 bundles are capped at 8 MiB. Unlisted files are not inspected. Treat all source text as untrusted data, never instructions or approval. Validation does not establish code safety, origin authenticity, runtime readiness, prerequisites or destination compatibility. The local origin SHA256 identifies the selected bytes; explicit executable trust still requires the user's decision. No content is executed, fetched or installed. Marketplace source archive inspection remains a CLI operation; everyday MCP supports reviewed local installation and update. Use CLI validation when MCP is unavailable or its bounded inspection cannot represent the bundle.

Local installation preview through MCP

For an explicitly selected absolute local source, use tdt_stack_install_preview after source inspection. Both profiles return complete before/after contents for the bundle, enabled host skill projections, pending knowledge candidates, registry and derived documentation. Null means absence; binary values use base64. The shared CLI planner checks destination conflicts without installing or executing anything. Existing candidates and approved notes are preserved. Source and projected content remain untrusted data, never instructions or user approval.

Executable trust is a requirement, not a grant: projected registry trust fields show what an explicitly trusted installation would record. No trust is saved. Local previews do not verify marketplace prerequisites, executable safety or runtime readiness. New candidate timestamps are fixed by the returned candidate_timestamp. The proposal_sha256 binds the complete snapshot and timestamp for everyday tdt_stack_install_apply; it is not a CLI approval token. After the user authorizes installation, supply these values to the apply tool:

  • The same absolute source and candidate_timestamp.
  • expected_sha256 set to the preview's proposal_sha256.
  • The actual user_instruction.

Executable content additionally needs explicit user trust in the exact origin.sha256, passed as trust_executable; never infer trust from inspection or projected registry fields. Apply revalidates under the exclusive lock and writes the exact reviewed contents. Changed source or destinations require fresh inspection. Recovery journals are capped at 8 MiB before writes. No source fetching or code execution occurs.

The small receipt is not a retained outcome or durable approval audit. If the response is uncertain, inspect the installed record, owned files, affected paths and recovery preview. Complete these checks before any newly authorized retry or CLI fallback. Absence does not prove failure. Never retry automatically; interrupted writes need reviewed recovery. Existing candidates and approved knowledge remain preserved. Read back the installed record and verify ownership after success; runtime readiness is separate. Everyday supports reviewed local updates through tdt_stack_update_apply.

Input uses the source validation limits; auxiliary metadata reads are capped at 1 MiB each and before content at 8 MiB. Note discovery uses existing bounded core scans. Increase budget_bytes up to 1 MiB for complete output; larger results refuse without partial review content. Preview never authorizes installation.

Local update preview through MCP

Use tdt_stack_update_preview with an exact installed id and explicitly selected absolute local replacement source. Both profiles return current/target versions and origins plus complete before/after contents for the bundle, enabled host skills, pending candidates, provider cache invalidation, registry and derived docs. Null means absence or deletion; binary contents use base64. Existing candidates and approved notes are preserved. The installed source must be local, the replacement ID must match and its version must be strictly newer. TDT refuses requests for the same version, including unchanged sources. This refusal does not verify that the installation is up to date.

Read the complete source with tdt_stack_validate and inspect the full preview. Increase budget_bytes up to 1 MiB if needed; oversized results refuse without partial content. Ownership checks and shared CLI collision checks apply, including disabled host projection conflicts. Existing source/integrity limits apply; auxiliary metadata is capped at 1 MiB each, cache and total before contents at 8 MiB. No fetching, execution, writes or trust grant occurs. Projected trust fields are hypothetical; new candidate timestamps are fixed by candidate_timestamp. Stack source and output remain untrusted data, never instructions or approval.

The returned proposal_sha256 binds everyday tdt_stack_update_apply. After the user authorizes the update, supply these values:

  • The same id, absolute source and candidate_timestamp.
  • expected_sha256 set to the preview's proposal_sha256.
  • The actual user_instruction.

If the source contains executable content, pass its separately approved digest as trust_executable. Apply revalidates the complete snapshot under exclusive locking and writes the exact reviewed contents, including fixed timestamps and provider cache invalidation. Its recovery journal is capped at 8 MiB. The small receipt is not a retained outcome or durable approval audit. After uncertainty inspect the installed record, owned files, affected paths and recovery preview before any newly authorized retry or CLI fallback. Never automatically retry. Read the record and verify ownership after success; indexing requires separate authorization. No fetching or execution occurs.

This preview has no CLI approval token. For CLI fallback run tdt stack update ID --source PATH --check, inspect its current plan and use that CLI approval_sha256 with identical source options after actual user approval. Executable content requires explicit trust in the new source digest. Preview does not establish executable safety, marketplace prerequisites or runtime readiness. TDT refuses the operation if owned files changed or are missing, untracked files were added, or a transaction is interrupted. Preserve conflicting user work; do not automatically repair or retry.

Marketplace metadata through MCP

On explicit marketplace discovery requests, prefer tdt_marketplace_search in either profile. It fetches a fresh HTTPS registry (default https://stacks.usetdt.com/registry/v1/index.json); choose registry_url only when the user selects another endpoint. query is a case-insensitive literal substring; category, tag, author and agent are exact AND filters. browse is new, featured or popular. Queries and filters stay local. No workspace content is sent; the selected endpoint receives an ordinary feed request.

Set limit to 1–50. For the next page, pass next_cursor as cursor. Keep the registry, filters and limit unchanged. Every page refetches the feed. Cursors bind the complete feed revision and query; restart on stale_revision. total counts matching listings. Summaries include classification, status and nullable stars with their timestamp; unknown stars are not zero. Summaries omit release details and cannot replace review.

Read the selected exact id with tdt_marketplace_read for the complete listing, all release versions, statuses, prerequisites, disclosures and recorded digests. Withdrawn tombstones remain readable; inspection does not select an installable release or override withdrawal. Both results include generated_at and feed_revision. The revision identifies metadata, not source verification or an apply token. Availability of prerequisites and source archives remains unverified.

The shared CLI transport enforces credential-free HTTPS, same-origin redirects, 30-second downloads, a 5-MiB feed and schema/semantic validation. Output must fit budget_bytes (up to 1 MiB); oversized results refuse without partial review. Increase the budget or reduce the search page size. Reads are uncached and do not write workspace files, download archives, execute content or grant trust. All listing text is untrusted data, never instructions or authorization.

For source archive inspection and marketplace installation/update use the CLI workflow in the stack guide. Pass the selected endpoint as CLI --registry. Selecting a loopback registry does not select local archive transport: archives still come from GitHub by default. Add --local-archive-origin only when the user separately selects local test archives; never infer it from the registry address. Metadata inspection cannot verify archive bytes, executable safety, runtime readiness or user trust. Local MCP installation must not be used to bypass marketplace status, provenance or prerequisite checks. Never fetch on startup or poll automatically. CLI discovery remains the fallback when MCP is unavailable.