Slash Commands
Every `/command` available inside the REPL
REPL slash commands are registered in
apps/agent/src/gateway/repl-commands.ts
and surfaced through a ReplCommand registry that /help reads to
render its catalog. The registry is the single source of truth.
This page mirrors it.
Anything typed in the REPL that does not start with / is
forwarded to the agent as a natural-language prompt.
Naming convention
Command names are flat, lowercase, hyphen-separated tokens
(^/[a-z0-9]+(-[a-z0-9]+)*$). The secondary action is encoded in the
name with a hyphen, never typed as a space-separated sub-action.
/workflow-new,/workflow-run,/autopilot-new,/autopilot-pause,/strategy-deploy,/agent-run.- Single-word names are reserved for list / navigation verbs:
/workflows,/autopilot,/watchlist,/markets,/profile. - A trailing argument may be a value (
/strategy-deploy <id>,/deposit <crypto|card>). It is never an action verb: use/agent-new, not/agents create. - View toggles (
/context) stay single-word.
This is the standard for new commands and the migration target for
existing ones. The capability-unification work moves both surfaces onto
one shared CapabilityDescriptor list
(packages/types/src/capabilities.ts); until then the web set still
mirrors the REPL (see the next section). Legacy space sub-action forms
(for example /agents create) and the /? help alias are unchanged for
now; the rollout adds the hyphenated commands and then keeps the old
spellings only as deprecated parse shims hidden from /help.
Two slash-command surfaces
The web UI ships an independent slash-command registry at
apps/web-ui/src/lib/slash-commands.ts.
It is not generated from or kept identical to the REPL registry — the
two evolve separately because REPL and web UI have different
capabilities. The web set is a smaller, curated subset of "prompt
shortcuts" and "skill convergence" templates with four dispatch kinds:
- pipeline — bypasses the normal chat flow.
/deep-researchruns the server pipeline on/chat;/institutionnavigates to/institution?send=…where the route wraps the first turn intominara_institution_analyze. - skill-converge — rewrites the typed slash into a templated prompt
that pushes the LLM toward a specific tool. The web templates are
copied verbatim from the REPL versions in
repl-commands-minara.tsso behavior stays in lockstep. Each entry has arestPolicy:requiredaborts on empty args,forbiddenaborts on extra args,optional-contextappends free text as an addendum. - route — calls react-router's
navigate(path)for nav shortcuts like/preferences,/workflows,/autopilot,/skills,/profile. The REPL's same-name commands do their own functional work in the terminal (list, show, toggle) and are unchanged by the web dispatcher. - passthrough — recognized slash command but no rewrite; the raw text is sent to the agent as ordinary chat.
The dispatcher lives at
apps/web-ui/src/lib/slash-command-dispatch.ts.
Web UI surfaces (chat input picker, command omnibox at Cmd/Ctrl+K, and
recent-commands recall) all share the same registry, so adding an entry
once exposes it everywhere.
The rest of this page documents the REPL surface.
Interactive argument prompting
Every command with required positional arguments walks you through the missing fields step-by-step instead of erroring. Type a bare command and the REPL will ask for each required field in turn, validate your answer, and let you fix a bad input without retyping the whole line.
you> /swap
› Amount (number or 'all'): 0.5
› From token (e.g. USDC): usdc
› To token (e.g. ETH): ethRules of thumb:
- Only required args are prompted. Optional trailing args (e.g.
[chain]for/swap) stay positional — pass them on the command line if you need them. - Invalid values re-prompt just the bad field. If you type
/swap abc USDC ETH, onlyAmountis re-prompted. Your already- validUSDC/ETHare kept. - Three empty answers in a row cancels with
× cancelled. /closeand/cancelrender a live picker. Typing a bare/closefetches your open perps positions and shows a numbered list — reply with an index, the token symbol, ora/all.- HTTP gateway is unchanged. Non-interactive surfaces still
receive the classic
Usage: ...error when required args are missing — prompting only kicks in when there's a real TTY.
Helpers live in
apps/agent/src/gateway/repl-prompts.ts
(collectArgs, pickFromList). See
Conventions §10.
Keyboard shortcuts
Two input overlays layer on top of readline while the REPL is at the
prompt. Both are no-ops on non-TTY stdin (CI, pipes, the HTTP gateway)
and never interfere with the slash-command autocomplete dropdown — if
the dropdown is already visible (you're mid-/ prefix), the hotkeys
below defer to it.
Ctrl+R — reverse history search
Opens a one-line overlay below the prompt showing the most recent history entry that contains your query:
(reverse-i-search) 'swap': /swap AAPL USD- Type to narrow the query; matches filter in real time.
- Press Ctrl+R again to jump to the next-older match.
- Enter commits the current match to the input line (not auto-submitted — you can keep editing).
- Esc cancels. If the query has no match, the overlay shows
(failed reverse-i-search) 'xyz':and Enter also cancels. - Printable keys extend the query; Backspace trims it. Arrow keys and other navigation are consumed silently so they don't abort the search unexpectedly.
Ctrl+P — command palette
Opens a searchable dropdown of every registered slash command:
palette: 'help'
┌───────────────────────────────────────────────────────┐
│ > /help Show every registered command │
│ /history Dump recent conversation history │
└───────────────────────────────────────────────────────┘- Type to fuzzy-match against command name, aliases, and description (subsequence match — all query chars must appear in order, case- insensitive, with exact-prefix name hits ranked first).
- ↑/↓ (or j/k when the query is empty) move the pointer.
- Enter commits
/<command>with a trailing space to the input line so you can keep typing arguments. - Esc cancels.
Session control
/help
Show the categorized catalog of every registered command.
/help/quit / /exit
Gracefully shut down the REPL. Flushes the audit log and closes the SQLite connection.
/clear
Clear conversation history only. The skill session (currently active skills, risk ceiling, pending confirmations) is preserved.
/new / /reset
Clear conversation history and reset the skill session. Useful when switching tasks mid-session.
/stop
Cancel the currently-running agent turn. Aborts the in-flight LLM
HTTP request mid-stream via an AbortController. The turn is
marked aborted in the audit log.
/retry
Re-run the previous user message. Pops the last assistant turn from history and invokes the agent loop with the same prompt.
/model [<model>]
Show or change the active LLM model. Without an argument, prints
the current model. With an argument, persists AGENT_MODEL=<id>
to ~/.minara/env so the next boot picks it up.
/model
/model claude-sonnet-4-6/theme [<name>|reset]
Switch the REPL colour theme. Without an argument, opens an
interactive picker that previews each palette with a live swatch;
arrow keys pick, Enter confirms. /theme <name> sets directly;
/theme reset restores the default (minara).
/theme
/theme blade-runner
/theme resetAvailable themes:
minara— default, editorial-fintech brand palette (256-color)hermes-legacy— 8-color fallback for older terminalsblade-runner— amber + neon pinkfsociety— all-green hacker aestheticdigital-soul— purple + pink
The active choice persists to $MINARA_DATA_DIR/ui-theme.json and
is restored on the next boot. On terminals that don't advertise
256-color support (COLORTERM unset and TERM missing
256color), rendering is forced to hermes-legacy with a
one-line warning — the user's pick is still remembered so upgrading
to a capable terminal restores it automatically.
/connect [<platform>] [--test|--remove]
Connect, test, or remove an outbound messaging platform. Mirrors the
minara gateway CLI subcommand but lives inside the REPL so you don't
have to exit to add a credential. Persists to ~/.minara/env (mode
0600); the running agent hot-reloads the gateway map so workflows can
use the new platform on the next dispatch.
/connect # numbered list of all 7 providers + status
/connect telegram # interactive credential entry
/connect slack --test # send a test ping to verify the connection
/connect telegram --remove # strip every credential field for the platformSupported platforms: telegram, slack, discord, whatsapp,
signal, email, home_assistant.
During interactive entry:
- Required fields require a non-empty value (3 retries before cancel).
- Optional fields skip immediately on blank.
- Re-config: fields that already have a value show
(currently set, blank to keep). To explicitly clear an optional field, use/connect <platform> --removefirst to wipe everything, then re-enter the values you want.
Token typing is currently visible on screen via the slash command (the
CLI subcommand minara gateway add masks tokens). For sensitive
credentials, prefer the CLI subcommand or set the env vars in your
shell rc.
/goal [goal text]
Set a standing goal for the session and start working on it
immediately. After every turn an LLM judge inspects the agent's
reply; while the verdict is "not done" the loop auto-injects a
continuation prompt and runs another turn — until the judge
confirms completion, the turn budget runs out (default 20,
GOAL_MAX_TURNS), or you pause. Bare /goal prints the goal's
status: text, state, turns used, last verdict, and criteria.
Continuation turns are ordinary turns: fund-moving confirmations
still fire, and /stop (or Ctrl+C) pauses the goal.
/goal port the RSI strategy and get the backtest passing
/goal/goal-add <criterion>
Add an acceptance criterion to the standing goal mid-loop. The judge requires evidence for every criterion before declaring the goal done, and continuation prompts list them.
/goal-drop <n>
Remove acceptance criterion n (1-based, as numbered by /goal).
/goal-pause
Pause automatic continuation. The goal keeps its state and can be resumed later — including after a REPL restart.
/goal-resume
Resume a paused goal. Resets the turn budget and the judge's parse-failure counter, then kicks off a continuation turn.
/goal-clear
Clear the standing goal. Terminal: set a new one with /goal <text>.
Agent control
/history [N]
Print the last N entries of conversation history with role and
content preview. Default N=10.
/history
/history 25/profile [show | set <tag> <value> | clear <tag> | prompt [text|clear] | refresh [dim]]
View or edit personalization (financial profile, user tags, custom
prompt). Bare /profile (or /profile show) prints the snapshot. The
write subcommands accept either canonical tag names ("Risk Profile")
or slugs (risk-profile). When run without args in interactive mode,
each subcommand falls back to a picker.
/profile # snapshot
/profile set risk-profile Conservative # set a tag
/profile clear risk-profile # explicitly clear a tag (source=user)
/profile prompt "Reply concisely." # set custom prompt
/profile prompt clear # clear custom prompt
/profile refresh # force-rebuild all dimensions
/profile refresh trading_summary # force-rebuild one dimensionAll /profile set and /profile clear writes are recorded with
source: "user", which beats both learned_preference
(preference-system bridge writes) and inferred (autoscan rebuild)
under the three-tier precedence rule. The snapshot also surfaces a
hint when one or more learned preferences are pending approval — type
/preferences pending to review them.
refresh [trading_summary | tags | memories | all] force-rebuilds the
targeted dimension(s) immediately, bypassing the normal threshold +
min-interval gates used by the event-driven path. Useful after you
make a large change (import new wallets, set a hard constraint) and
want it reflected in the next turn's system prompt without waiting.
The forced refresh path also runs MinaraHistorySync.runOnce() before
the rebuild, pulling fresh perps fills (per sub-wallet) and spot
activities from Minara's /v1/perp-wallets/fills and
/v1/tx/cross-chain/activities endpoints into the local mirror tables.
That way the rebuilt platform_wallet_summary reflects whatever you
just did on Minara web or mobile, not just the last cached state.
Routine refreshes (no force) rely on the syncer's own 5-minute
throttle and the safety-net tick instead.
/remember <content>
Save a fact to long-term personalization memory immediately, and
force a tags rebuild so the new fact shows up in the next turn's
snapshot without waiting for the debounce window.
/remember I only hold BTC and ETH spot positions
/remember Never trade meme coins or leverage above 3xStatements are written with category='personalization' and
subcategory='preference'. Max length is the
maxMemoryStatementLen config (default 120 characters) — longer
input is rejected with a usage error. For unconstrained fact
extraction via the LLM (mem0-v3-style), let the event-driven
rebuilder run on its own or call /profile refresh memories.
/preferences [list|pending|show|approve|reject|deprecate|undo] (alias /prefs)
Manage learned preferences mined from your conversation by the
preference-evolution system (Financial Auto-Memory). M2 added
approve / reject / deprecate; M3 adds undo + the keyword
scanner + tool-level enforcement.
/preferences pending # awaiting approval
/preferences list # all preferences
/preferences list active # filter by state
/preferences show <id> # full detail (interactive picker if id omitted)
/preferences approve <id> # proposed → active (picker if id omitted)
/preferences reject <id> # proposed → rejected
/preferences deprecate <id> # active → deprecated
/preferences undo <id> # M3: strong-signal auto-activations within the undo window (picker if id omitted)When id is omitted in interactive mode, the REPL renders a picker
sourced from the appropriate state queue (approve/reject from
proposed; deprecate from active; undo from auto-activated
rows inside the 24h window). All four mutations are CAS-guarded:
a concurrent writer that beat your call returns a targeted error
with the row's current state, not silent overwrite.
M3 brings two new automatic behaviors:
- strong-signal keyword auto-activation: a user message
containing an unambiguous negation (
never,绝不,kill switch, etc.) targeting a tool-action verb (trade,buy,swap, …) creates ahard_constraintand auto-activates it. The LLM appends a notice to its reply telling you what was remembered + theundopath. Default 24h window perPREFERENCE_HARD_UNDO_WINDOW_HOURS. - tool-level enforcement: once a
hard_constraintis active,swap_tokens/buy_token/sell_token/transfer_token/open_perps_position/minara_autopilot_createrefuse to execute when the intent's subjects overlap the constraint. The refusal error points at/preferences deprecate <id>for the permanent override.
Each preference has three classifying axes: kind (one of
personal_style, behavioral_preference, hard_constraint),
dimension (e.g. risk, asset_class, methodology, style,
constraint), and state (proposed, active, deprecated,
rejected).
When PREFERENCE_LEARNING=1, the agent loop also surfaces preference
graduation cards in-chat — every few turns you may see the agent ask
something like "I noticed you keep mentioning X — want me to remember
this as a permanent preference? (yes / no / later)". Reply directly
in the chat; the parser maps your reply (bilingual EN+ZH) to the same
approve / reject / deprecate transitions above. later snoozes the
ask for PREFERENCE_ASK_COOLDOWN_HOURS (default 24h).
/context
Zero-LLM token estimator across the current system prompt,
conversation history, and tool set. Warns when the context is
getting large and suggests /compress.
/prompt
Dump the fully rendered system prompt blocks (identity, catalog, active skills, signal context, pending confirmations). Each block is truncated for readability. Useful for debugging prompt construction and cache boundaries.
/compress [--keep N]
Summarize the oldest history turns via Haiku into a single dense
synthetic system message. Keeps the N most-recent turns verbatim
(default N=6). The compression is one extra LLM call and
measurably shrinks the prompt on long sessions.
/compress
/compress --keep 10Skills and workspace
/skills [list|active|activate <id>]
Inspect or force-activate domain skills.
/skills # show the catalog
/skills list # equivalent
/skills active # only currently active skills
/skills activate market.spot/skills activate goes through the same L3 risk gate as the LLM's
activate_skills tool. High-risk skills still produce a pending
confirmation.
/skill-search <query>
Search the skills.sh ecosystem for installable third-party skills,
ranked by install count. The agent runs search_skills and shows the
top owner/repo@skill candidates. Web surface only; in the REPL use
minara skills search instead.
/skill-install <owner/repo>[@<skill>]
Install a skill from the skills.sh ecosystem. The agent runs
install_skill, which downloads the package, writes a tracked Minara
package, and reloads the catalog so it's usable in the same session.
A bare owner/repo installs every skill in the repo. Web surface
only; in the REPL use minara skills install instead.
/workspace [soul|agents|identity|user|memory|heartbeat|bootstrap]
Print a workspace md file via the workspace loader. The runtime
workspace lives at ~/.minara/workspace/ (override with the
--workspace flag or MINARA_WORKSPACE_DIR env). Defaults to
soul when called without arguments.
soul:SOUL.md— identity, voice, boundaries.agents:AGENTS.md— session startup rules, safety defaults.identity:IDENTITY.md— display name, emoji, vibe.user:USER.md— user profile (timezone, focus, risk tolerance).memory:MEMORY.md— curated long-term facts, preferences, decisions.heartbeat:HEARTBEAT.md— between-session memo (last_seen, open loops, notes-to-self, user-owned## Schedule).bootstrap:BOOTSTRAP.md— first-run onboarding playbook. Archived asBOOTSTRAP.md.done.<timestamp>after the agent acknowledges withBOOTSTRAP_DONE.
To edit these files interactively, use the Web UI's Settings → Workspace panel (manual save with sha256 OCC), or edit them on disk while the agent is between sessions.
/soul
Alias for /workspace soul. Prints the active SOUL.md.
/identity
Alias for /workspace identity. Prints the active IDENTITY.md.
/heartbeat
Alias for /workspace heartbeat. Prints the active HEARTBEAT.md,
including the ## State block (last_seen / session_id /
turn_count / last_user_query), ## Open loops, ## Notes to self,
and the user-owned ## Schedule section.
/add-dir [--permanent] <path>
Lets the assistant read and write inside a folder outside its own
workspace. By default the grant lasts only for the current session;
pass --permanent to keep it across restarts. The app's own data
directory and any folder above it can't be authorized. Credential
files inside an authorized folder (.env, id_rsa, *.pem,
*.key, .aws/credentials, …) stay read-blocked.
/remove-dir <path>
Removes a folder from the allowed list (both the session grant and any permanent grant for that path).
/list-dirs
Shows the folders the assistant may use beyond its workspace, split into "always allowed" (permanent) and "allowed this session".
Finance
/kill
Activate the trading kill switch. Halts every tool at tier ≥ 2
until /unkill is called. Writes an entry to tier_events so
the decision is auditable.
/unkill
Deactivate the kill switch and resume trading.
/status
Print risk manager status: kill switch state, daily spend, total tools registered, review engine state, active skill session.
/budget
Today's LLM spend by task category. Read from
learning/budget-tracker.ts against the daily_spend table.
/autopilot list
List enabled autopilot strategies with their symbols and per-trade caps. Read-only view. Autopilot is started and stopped from the REPL via the agent rather than from this command.
/x402 preauth [list|grant|revoke|help]
Manage x402 paywall pre-authorization sessions. A session lets the agent auto-pay (no per-call confirmation) for matching x402 paywalls until the TTL expires, the budget is exhausted, or the session is revoked. The grant call itself ALWAYS goes through the §3b two-step confirm gate; only the per-call payments inside the session window skip the prompt.
/x402 preauth list [--all]
# active sessions only by default; --all includes revoked / expired / exhausted
/x402 preauth grant <scope> [opts]
# scope: provider:<id> | domain:<host> | any
# opts: --ttl 24h | --ttl 7d | --ttl forever
# --per-call <USDC> --budget <USDC> --chain <chain>
/x402 preauth revoke <session_id>
# immediate; subsequent payments fall back to two-step confirmscope=any + ttl=forever is the most permissive grant possible —
the handler requires double-explicit yes/yes confirmation in the
REPL before persisting. Caps (--per-call, --budget, --ttl)
are bounded by the env vars in
Environment Variables → x402 paywall pre-authorization.
Set X402_PREAUTH_DISABLE=1 to short-circuit the entire feature
during incident response.
Observability
/scenarios [pending|list|show|approve|reject|deprecate|debug|purge]
Manage the L0.5 scenario learning system. Requires SCENARIO_LEARNING=1.
| Subcommand | Description |
|---|---|
(bare) or pending | Show scenarios awaiting graduation approval (quarantined + gate_passed_at set) |
list [state] | All scenarios (builtin + learned). Optional state filter: proposed, quarantined, graduated, rejected |
show <id> | Full detail: playbook text, keywords, confidence, usage, source turns |
approve <id> | Graduate → immediately active in the classifier (hot-reload, no restart) |
reject <id> [reason] | Reject with optional reason (interactive prompt if missing) |
deprecate <id> | Remove a graduated learned scenario from the classifier |
debug on|off | Let quarantined (not yet graduated) scenarios participate in classification for testing |
purge | Delete old rejected + stale proposed entries + miss candidates |
When an <id> argument is missing, the REPL offers an interactive picker
via pickFromList. Non-interactive contexts (HTTP gateway, tests) get a
Usage: error instead.
Source: apps/agent/src/gateway/repl-commands.ts — scenariosCommand.
/migrate [export | import | manifest] (M5)
Export or import the full Minara configuration as a .tar.gz
bundle. Three sub-commands, all of which thin-dispatch to the same
handlers as minara migrate export|import|manifest:
/migrate export [--packages defaults|all|csv] [--output PATH] [--passphrase-env ENV]Write a bundle of the chosen packages to disk./migrate import <bundle> [--strategy merge|replace|audit-only] [--packages csv] [--confirm-hard] [--passphrase-env ENV]Apply a bundle to the live system./migrate manifest <bundle>Print the bundle's manifest without unpacking the rest.
Bundles contain up to 10 packages (6 default-on, 4 opt-in). The
secrets package requires passphrase encryption; the
hard_constraint rows in the preferences package require an
explicit --confirm-hard. See the
CLI subcommands reference for
the full per-package table.
Source: apps/agent/src/gateway/repl-commands.ts — migrateCommand.
/methodologies
List graduated trading methodologies by asset class with pass/fail counts. See Learning System.
/workflows
List workflow instances: running, completed, and recently failed. Useful for checking whether a cron fire actually did anything.
/agents [list|create|run <id> [input]|archive <id>]
Manage Custom Agents — saved bundles of system prompt + skill subset + tool subset + risk ceiling + triggers, runnable from REPL / CLI / HTTP / workflow steps / cron. See Custom Agents for the full guide.
/agents # list (default)
/agents list # equivalent
/agents create # interactive wizard
/agents run <id> [input] # one-shot run; live picker if id omitted
/agents archive <id> # soft-delete; confirm prompt; picker if id omittedBehavior:
list(default) — every registered agent with version, risk ceiling, discovery mode, trigger summary, and name.create— interactivecollectArgsflow that prompts for name, system prompt, then walks a skill picker. Requires a TTY; the non-interactive equivalent isminara agents create --from <file.json>.run <id> [input]— launches an ad-hoc workflow instance for the agent and prints the instance id. Stream the live event feed via/workflowsor the Web UI. With no<id>, the REPL renders a live picker.archive <id>— soft-deletes the agent and tears down its attached cron / event triggers. Prompts fory/Nconfirmation. With no<id>, renders a live picker.
Source: src/gateway/repl-commands.ts — agentsCommand.
/agent-list, /agent-new, /agent-pause, /agent-resume, /schedule
Shortcuts for the Custom Agent flows. /agents stays for back-compat.
/agent-list # same as /agents list
/agent-new # same as /agents create
/agent-pause [<id>] # pause a scheduled agent (live picker if id omitted)
/agent-resume [<id>] # resume a paused agent (live picker if id omitted)
/schedule [reminder text] # create a reminder agent (fires once or recurring)/agent-list— lists your Custom Agents (delegates to/agents list)./agent-new— interactive create flow (delegates to/agents create)./agent-pause [id]//agent-resume [id]— flip an agent's scheduler. Pausing stops its scheduled / event / one-shot runs (a manual Run still works); resuming re-arms them. With no<id>the REPL renders a live picker. Reusesstore.update({ enabled })+registerAgentTriggers./schedule [text]— fast path for a reminder. Collects the reminder text, then asks for the schedule: once in N minutes, once at a date/time (ISO 8601 with a UTC offset), or a repeating cron expression. Builds a minimal, tool-less agent that fires the reminder; a one-shot reminder archives itself after it runs.
The web UI exposes the same set as skill-converge / route slash
commands. There /agent-new is conversational — instead of popping
the wizard modal, it drives the author_custom_agent tool: the assistant
fills sensible defaults (self-directed discovery, no fund moves, manual
trigger), writes the system prompt, and asks only about what it can't
decide. /agent-pause and /agent-resume drive the set_agent_enabled
tool (resolve the agent by name, then toggle). The wizard modal is still
available from the "Create Agent" button on the Agents page.
Source: src/gateway/repl-commands.ts — agentListCommand, agentNewCommand, agentPauseCommand, agentResumeCommand, scheduleCommand.
/recall <role> [query…]
BM25-ranked search over reflected cases for a specific reasoning
role. Only cases that have been reflected on AND classified as
logic_error / missing_data are returned — variance and
exogenous cases are stored for audit but filtered from retrieval
so noise never pollutes future reasoning.
Without a role argument, the REPL prompts you with a numbered
list of declared roles (derived from every skill's memoryRoles).
Without a query, it prompts for one interactively.
Output: case id, decision tag, outcome %, error type, decision prose, and the reflected lesson.
/reflect <role> [--force] [--asset BTC]
Run the RoleMemoryReflector against pending entries for a role.
For each entry old enough to satisfy the role's minAgeHours gate
the reflector:
- collects the outcome (price delta or custom probe)
- runs the role's post-hoc probes in parallel (news, price trajectory, on-chain events)
- asks the LLM to classify as
logic_error/missing_data/exogenous/variance - for the first two types only, asks the LLM to produce a crisp actionable lesson keyed on the role's declared failure modes
- writes everything back via
role_memory
--force bypasses the minAgeHours gate (debug only). --asset
limits the sweep to pending entries for a single ticker.
Summary output counts reconciled / skipped / errors and breaks the reconciled set down by classification type.
/logs [N] [--level debug|info|warn|error]
Print the last N log entries from the in-memory ring buffer
(default N=30). Optionally filter by level. The ring buffer is
separate from the on-disk daily log; this command gives you a
snapshot of the current session.
/logs
/logs 100
/logs 50 --level warn/loglevel [debug|info|warn|error]
Get or set the stderr log mirror threshold. File logging always captures debug; this only affects what's echoed to your terminal.
/loglevel # show current
/loglevel debug # setInstitution mode
/institution <ticker | ticker1 ticker2 … | natural-language query> [debate] [risk]
Convene the multi-agent institution. Builds a natural-language replay
message that calls the minara_institution_analyze tool through the
agent loop, so the normal skill-activation and confirmation hooks
still apply. The tool itself is read-only — it returns a Markdown
report + a structured proposal but never moves funds. To act on a
recommendation, explicitly invoke a fund-moving tool (swap_tokens /
open_perps_position / minara_ss_deploy) on a separate turn; those
tools enforce their own two-step preview / confirm gate.
The REPL detects three input shapes and dispatches the matching tool parameter:
| Input shape | Example | Tool call |
|---|---|---|
| Single ticker | /institution BTC | ticker="BTC" |
| Multiple tickers (space or comma) | /institution BTC ETH SOL or /institution BTC,ETH,SOL | tickers=["BTC","ETH","SOL"] + intent="auto" |
| Free-form natural language | /institution 10万U怎么配BTC、黄金、美股 | query="…" + intent="auto" |
Free-form queries flow through the tool's clarify-loop: if the
quick-LLM extractor returns ambiguous candidates the tool replies with
status: "waiting_for_input" and the REPL surfaces the candidate list
for you to confirm before re-calling.
The optional debate and risk positional integers (only applicable
in single-ticker mode) override INSTITUTION_MAX_DEBATE_ROUNDS and
INSTITUTION_MAX_RISK_ROUNDS for one call (clamped to [1, 5]).
If no input is provided, the REPL prompts for it interactively.
/institution BTC
/institution AAPL 2
/institution ETH 2 2
/institution BTC ETH SOL
/institution 请分析SpaceX和OpenAI上市后哪个更值得买Cost note: a single run is roughly 25 LLM calls; multi-ticker scales
that by min(N, INSTITUTION_MAX_PARALLEL_TICKERS) (default 5). See
Institution Mode env vars.
/institution-history [--ticker BTC] [--limit 20]
Aliases: /inst-history
List recent Institution Mode runs from the institution_runs SQLite
table. Shows run_id, ticker / asset_class, the PM's 5-tier rating,
holding status (open / auto_stale / finalized), the linked
report://... artifact, the PM thesis (truncated), and a per-window
alpha summary built from the institution_reflections rows that the
daily cron has accumulated.
/institution-history
/institution-history --ticker BTC
/institution-history --limit 30For non-interactive batch / cron use, the same data is available via
minara institution history — see the subcommands reference.
Multi-ticker mode
Pass tickers: ["BTC", "ETH"] (or use natural language like
"BTC vs ETH 怎么选") and the institution runs Phase 1-6 in parallel
for each candidate (capped by INSTITUTION_MAX_PARALLEL_TICKERS,
default 5), then a Phase 7 Allocator role synthesises across them
into a single AllocatorRecommendation covering compare /
allocate / hybrid mode. The optional intent argument
(compare | allocate | auto) hints which mode the Allocator
should favour; default auto infers from the input mix.
Deep research
/deep-research <topic…> [--mode light|heavy] [--formats html,pdf,docx,charts]
Aliases: /dr
Run the multi-stage deep-research pipeline and materialize a report as Markdown + any of the requested output formats. If the topic is omitted, the REPL prompts for it interactively.
/deep-research BTC ETF flows in 2026
/dr "SPX mean reversion" --mode heavy --formats html,pdf,docxMinara wallet, trading, and market shortcuts
These commands are typing shortcuts for the Minara wallet, trading, and market APIs. Every handler builds a natural-language replay message that goes through the agent loop, so the normal skill activation and confirmation hooks still apply. Fund-moving commands embed a fresh-confirmation envelope regardless of prior "yes" answers in the session.
Source: apps/agent/src/gateway/repl-commands-minara.ts.
Wallet and crypto market reads
/balance
Aliases: /portfolio
Show the full portfolio across every wallet and chain.
/positions
Show open perps positions with PnL.
/crypto <ticker> [chain]
Look up a crypto ticker and get a short summary (price, 24h change, 7d trend, market cap, sentiment, one-line takeaway).
/crypto btc
/crypto sol solana/trending [crypto|stocks|all] [--category <name>]
Trending markets — defaults to both crypto and stocks. Pass crypto
or stocks to narrow the scope.
/trending
/trending crypto --category memes
/trending stocks/markets [type | sector | symbol]
Aliases: /markets-overview
A market briefing. With no argument, a full cross-asset overview:
indices, futures, forex, treasury yields, sector rotation, crypto
fear & greed, top movers, headlines, and upcoming earnings. Pass an
asset type (crypto, stocks, commodities, forex, indices) to
focus on one class, a sector or track (defi, AI, tech) for sector
rotation, or a ticker for a focused deep-dive.
/markets
/markets crypto
/markets defi
/markets BTC/search <query>
Search tokens or tickers by name. Query is rest-of-line — no quoting needed.
/fear-greed
Aliases: /fg
Crypto fear & greed index snapshot.
Stocks and equities (FMP-backed)
All stock commands are powered by the external.fmp MCP server.
/stock <ticker>
Aliases: /quote
Quote a stock: price, day change, market cap, P/E, 52-week range.
/financials <ticker> [annual|quarter]
Latest income statement, balance sheet, cash flow, and key ratios. Defaults to quarterly.
/earnings <ticker>
Upcoming earnings date and last 4 quarters EPS actual vs. estimate.
/analysts <ticker>
Analyst price targets, ratings distribution, recent rating changes.
/news <ticker>
Latest company news headlines.
/filings <ticker>
Recent SEC filings (10-K, 10-Q, 8-K) with dates and links.
/compare <ticker1> <ticker2> [ticker3…]
Side-by-side comparison of 2+ tickers: P/E, gross margin, revenue growth YoY, market cap, analyst price targets.
/compare aapl msft nvda/earnings-review <ticker>
Aliases: /er, /earnings-note
Full post-earnings review for a covered name: pulls the print + 8-K
- analyst consensus in parallel, attempts to read the call (best-effort
via 8-K Exhibit 99.1 → IR website), builds a variance table, writes
the coverage model to
earnings/<TICKER>/<YYYY-Qn>-model.xlsx, and drafts the post-earnings note with a recommendation block toearnings/<TICKER>/<YYYY-Qn>-note.docx.
Distinct from /earnings, which is a quick read of the earnings
calendar + last 4 quarters EPS — /earnings-review produces drafts
for human review.
/earnings-review NVDA/tlh
Aliases: /harvest
Tax-loss harvesting scan over the current portfolio. Pulls realized
YTD PnL + activities + holdings, identifies positions with material
unrealized loss, runs the wash-sale screen across the 61-day window
(±30 days), and recommends 2-3 replacement securities per viable
candidate that maintain factor exposure without triggering the
wash-sale rule. Output is a CSV under tax/tlh-candidates-<YYYY-MM-DD>.csv
plus a chat summary.
Always leads with the standard "Not tax advice" disclaimer block — TLH involves jurisdiction-specific rules and the user must consult a licensed CPA before acting. Read-only — execution stays in the standard trade-tool confirm flow.
/tlh/sector <theme>
Sector or theme deep-dive deliverable. Builds the universe via
thematic ETFs / DefiLlama categories, fans out parallel comps for
both equities and crypto when the theme is hybrid, then writes a
markdown report to research/sector/<theme>-<YYYY-MM-DD>.md covering
thesis, macro context, two comps tables, a bridge paragraph, top
picks, risks, and catalysts.
For hybrid themes (e.g. AI infrastructure, DePIN, stablecoin issuers), the report covers BOTH equity and crypto sides plus a connective bridge paragraph — Minara's differentiating output over Anthropic's reference market-researcher agent (which is equity-only).
/sector AI infrastructure
/sector DePIN landscape
/sector regional banksMacro markets
/commodity <symbol>
Aliases: /comm
Quote a commodity (e.g. GCUSD gold, CLUSD crude, SIUSD silver).
/fx <pair>
Aliases: /forex
Quote a forex pair (EURUSD, USDJPY, GBPUSD, …).
/index <symbol>
Aliases: /idx
Quote a market index (SPX, NDX, DJI, VIX, …).
/macro
One-screen macro snapshot: SPX, NDX, VIX, US10Y, DXY, gold, oil, BTC — one line each plus a two-sentence overall read.
Fund-moving: spot trades and transfers
Every fund-moving command embeds a structured
```minara-confirm envelope and a fresh-authorization clause, so
prior "yes" answers in the same session do not auto-approve.
Confirmation gates are always re-run for these commands regardless
of the tool's CONFIRM_ONCE tier.
/swap <amount> <from> <to> [chain]
Swap one token for another. Dry-runs first, then requires explicit confirmation on the quote.
/swap 0.5 usdc eth
/swap all eth usdc base/buy <amount-usd> <token> [chain]
Buy a token with USD/USDC. A leading $ on the amount is accepted.
/buy 50 btc
/buy $100 sol solana/sell <amount> <token> [chain]
Sell a token to USDC. Balance-checked before the quote — refuses to auto-swap from another asset if the balance falls short.
/send <amount> <token> <address> [chain]
Send tokens to an address. Address is loosely validated (EVM hex,
Solana base58, or name.eth/name.sol) and read back to you
character-by-character inside the confirmation envelope.
/pay <amount> <address> [token] [chain]
Same as /send but defaults to USDC when the token is omitted.
Fund-moving: perps
/long <token> <margin-usd> [leverage]
Open a long perps position. margin-usd is the collateral. Leverage
is optional — append it like 10x.
/long btc 500 10x
/long eth $200 5/short <token> <margin-usd> [leverage]
Open a short perps position. Same shape as /long.
/close [<token|all>]
Aliases: /close-order
Close a perps position. If you omit the target, the REPL fetches
your live positions and renders a numbered picker — reply with the
index, the token, or a/all. Only touches positions, not resting
limit orders.
/close # interactive picker
/close eth
/close all/cancel [<order-id|all>] [symbol]
Cancel an open perps order (or all). When called bare, the REPL
prompts for the order id — run /positions or ask the agent to
list open orders first so you know which id to type. Use
/cancel all to cancel everything, or /cancel all <symbol> to
scope to one symbol.
Funding
/deposit [crypto|card]
Start a deposit flow. Without an argument, the agent asks which
method you prefer. crypto shows addresses, card returns a
MoonPay-style on-ramp link.
/receive
Show deposit addresses across every supported chain.
Strategy Studio (BETA)
End-to-end author → backtest → optimize → deploy flow on the Minara
Strategy Studio surface. The /strategy-new command authors locally:
it replays a prompt that tells the agent to activate the
minara-strategy-codegen skill, write the strategy as a .ts file in
its sandbox, and backtest it with that skill's scripts. The skill
fetches the live pine-runtime syntax per run, so a syntax change
upstream needs no client change. Deployment runs on the upstream
engine; the authoring artifacts (code, version history) live locally.
The strategy lifecycle commands (/strategy-deploy, /strategy-start,
/strategy-stop) do NOT prompt for a fresh confirmation — _deploy
is the one-time authorization moment, after which start / stop /
config updates are scheduling on an already-authorized strategy. The
agent still surfaces a structured preview before each call.
/strategies [status]
List strategies you own. Pass an optional status (e.g. ACTIVE,
INACTIVE) to filter. Renders id, name, status, symbol, and PnL
inline — does not call the LLM.
/strategies
/strategies ACTIVE/drafts
List your strategy-studio AI chat drafts (chat session id, title, latest version, last update). Read-only, does not call the LLM.
/marketplace [search]
Browse the strategy marketplace. Optional positional turns into a tag filter. Read-only.
/marketplace
/marketplace BTC trend/strategy-new <symbol> <interval> <goal>
Author a new strategy locally. Replays a prompt that tells the agent to
activate the minara-strategy-codegen skill, write the strategy as a
.ts file in its sandbox, and backtest it with that skill's scripts.
The agent iterates in an open loop (read errors, edit the file, re-run),
then persists the code via minara_ss_chat_add_version.
/strategy-new BTCUSDT 1h rsi mean reversion with bollinger bands
/strategy-new ETHUSDT 4h trend following with macd/strategy-deploy [strategyId|chatId]
Deploy a strategy version (paper or live). Without an argument, the
REPL fetches your strategies and prompts you to pick. The agent then
pulls minara_ss_deploy_configs, surfaces a structured preview
(executionMode, sub-account, symbols, leverage, allocation, max
drawdown), and waits for your explicit OK before calling
minara_ss_deploy.
/strategy-start <strategyId>
Start a stopped strategy. Bare invocation pickers from the inactive list.
/strategy-stop <strategyId>
Stop a running strategy. Bare invocation pickers from the active list. The agent reminds you that any open position remains open until you unwind it (deactivate ≠ unwind).
/strategy-backtest [strategyId|chatId]
Run a persisted backtest on a saved version (minara_ss_backtest_run).
For a one-off check on inline code, suggest
minara_ss_backtest_ephemeral instead.
Registry shape
Each command is a ReplCommand:
interface ReplCommand {
name: string; // "/status"
aliases?: string[]; // ["/kill-switch"]
description: string; // one-line summary for /help
usage?: string; // "/compress [--keep N]"
category: Category; // "session" | "agent_control" | ...
run(argv: string[], ctx: ReplContext): Promise<ReplResult>;
}The BUILTIN_COMMANDS array in
repl-commands.ts
lists them in display order for /help. Adding a new command
means appending to that array and creating a new page section
here in the same commit. See Conventions §6.