MINARA

Workspace integration and wallet deposit watch

Workspace integration and wallet deposit watch

OpenClaw workspace integration

The agent reads + writes a workspace dir at ~/.minara/workspace/ (override via --workspace) containing markdown files modelled on OpenClaw's AGENTS.default schema: SOUL.md (identity), AGENTS.md (rules), IDENTITY.md, USER.md, MEMORY.md (curated long-term), HEARTBEAT.md (between-session memo), BOOTSTRAP.md (first-run only), and memory/YYYY-MM-DD-*.md (daily logs). Templates ship under src/workspace/templates/. minara setup seeds them on first run. The seed is idempotent and never overwrites a file the user has already edited.

WORKSPACE_HEARTBEAT_ENABLED

per-turn HEARTBEAT.md state writer.

  • What it controls: when on, after every turn the agent writes <workspace>/HEARTBEAT.md with last_seen, session_id, surface, turn_count, last_user_query, plus heuristic open_loops extracted from the reply. The writer preserves any user-edited ## Schedule section verbatim across writes.
  • When to disable: read-only workspace mounts, CI runs, privacy- sensitive contexts where you don't want a session memo on disk.
  • When unset: ON.
  • Format: 0/false/no/off to disable; anything else (default) keeps it on.
  • Setting home: Settings → Preferences (schema key)

WORKSPACE_DAILY_LOG_ENABLED

append per-session daily logs.

  • What it controls: when on, each cadence flushes every unjournaled chat_turns row after a durable SQLite watermark into <workspace>/memory/YYYY-MM-DD-<session>.md. Rows retain their real session id, surface, and runtime source; correlation ids are never used as session ids. Per-session files avoid multi-process append races.
  • When to enable: long-running deployments where you want the agent to accumulate working memory you can later promote to MEMORY.md.
  • When unset: OFF (the workspace stays small until explicitly opted in).
  • Format: 1/true/yes/on to enable.
  • Setting home: Settings → Preferences (schema key)

WORKSPACE_DAILY_LOG_INTERVAL

turns between daily-log appends.

  • What it controls: cadence for flushing the chat_turns backlog above. Every due flush writes all rows after the watermark, so increasing the interval delays persistence but does not sample or drop intervening turns.
  • When unset: 5 turns.
  • Format: positive integer.
  • Setting home: Not a user-facing setting

WORKSPACE_DREAM_ENABLED

WORKSPACE_DREAM_ENABLED: periodic personal-memory projection.

  • What it controls: Refreshes the shared personal-memory pipeline, then projects up to 20 selected active facts into a generated block in MEMORY.md. The block has a 12 KB budget, filters likely secrets and wallet addresses, and reflects corrections and deletions. Manual text outside the block is preserved. Existing legacy generated sections are archived before replacement. Daily logs are not an input or a prerequisite.
  • When to enable: Enable for a readable workspace snapshot of selected memories. Refresh uses the normal extraction and review pipeline when eligible new conversation turns exist; the file projection itself makes no model call.
  • When unset: OFF.
  • Format: 1/true/yes/on to enable.
  • Setting home: Settings → Preferences (schema key)

WORKSPACE_DREAM_INTERVAL_HOURS

dream consolidation cadence.

  • What it controls: hours between dreaming runs. The scheduler skips a tick when the previous run is still in flight, so a slow LLM call can't pile up. Has no effect when WORKSPACE_DREAM_ENABLED is off.
  • When unset: 24 (one consolidation pass per day).
  • Format: positive number (hours, can be fractional).
  • Setting home: Not a user-facing setting

WORKSPACE_DREAM_LOCK_TTL_MS

TTL for the dream lockfile.

  • What it controls: how long a <workspace>/.dreaming.lock file is honored before it's considered stale and reclaimable by another process. Should reflect the longest reasonable duration for a single dream pass (LLM call + IO), NOT the interval between passes. The lock prevents the REPL and HTTP gateway from both consolidating the generated MEMORY.md block when their tick windows overlap. NFS workspaces are not supported (the underlying O_EXCL semantics are not guaranteed atomic across all NFS clients) — keep dreaming on a single host. Has no effect when WORKSPACE_DREAM_ENABLED is off.
  • When unset: 1800000 (30 minutes).
  • Format: positive integer (milliseconds).
  • Setting home: Not a user-facing setting

REPORT_BUNDLE_CHART_PNGS

fall back to PNG-bundled charts in deep-research HTML / PDF reports instead of interactive ECharts.

  • What it controls: when set, the gateway's deep-research branch passes ["html", "pdf", "charts"] to renderDeepResearchReport so bundleChartPngs runs and the HTML embeds each chart://<id> as a static <img src="charts/<id>.png"> tag (rendered server-side via headless playwright). When unset, the default since v7, the gateway passes ["html", "pdf"] only and every chart:// link expands to the canonical ECharts embed pattern (<div class="echart-host"> + inline <script> hydrated from the echarts CDN). Default produces interactive charts with zoom + tooltip + saveAsImage PNG download.
  • Which skill / tool consumes it: the deep-research pipeline (src/gateway/api.ts handleChatStream deep-research branch).
  • When to set it: operators who export reports for offline distribution (where the echarts CDN is unreachable) or who cannot tolerate the ~120 KB CDN script being fetched on open. Trade-off: PNG-bundled charts are static — no zoom, no tooltip, no PNG download button. Headless playwright must be installed (already a project dep) so chart materialisation can run.
  • When unset: interactive ECharts (CDN-hydrated). Open the HTML in a browser with network access to see charts; offline charts degrade to a small "chart unavailable" placeholder per the embed script's try/catch.
  • Format: 1 / true (enable) — any other value, or unset, disables.
  • Setting home: Settings → Preferences (schema key)

WALLET DEPOSIT WATCH

Real-time deposit-detection SSE endpoint (POST /v1/wallet/deposits/watch). Powers the green-flip in the Portfolio DepositModal for perps USDC/Arbitrum addresses. Two chain transports; the agent picks at boot: 1. Alchemy (preferred) — set ALCHEMY_API_KEY. Uses alchemy_getAssetTransfers (purpose-built incoming-transfer query) + alchemy_pendingTransactions WS subscription for real mempool sighting. Free tier: 300M CU / month. 2. Public RPC fallback — when no ALCHEMY_API_KEY. Polls eth_getLogs every 5s for the USDC Transfer event filtered to the deposit address. No mempool visibility (the pending event is not emitted in this mode). What it controls: WALLET_DEPOSIT_WATCH_ENABLED — master switch for the SSE endpoint. Default ON in dev so the feature works out of the box; set to false / 0 to disable cleanly. When off, the web-ui's DepositStatus pill shows "Live updates unavailable" and the user can still copy the address normally. Which skill / tool consumes it: apps/agent/src/wallet-watch/* and the api.ts handleWalletDepositsWatch handler.

WALLET_DEPOSIT_WATCH_ENABLED

WALLET_DEPOSIT_WATCH_ENABLED=true

  • Setting home: Settings → Preferences (schema key)

ALCHEMY_API_KEY

Alchemy API key for Arbitrum. One key works across all Alchemy chains. Optional — without it the watcher falls back to the public Arbitrum RPC (no mempool detection). ALCHEMY_API_KEY=abc123...

  • Setting home: Settings → API Keys

ALCHEMY_NETWORK

Alchemy network enum string. arb-mainnet is the only one we care about today (perps wallet deposits = USDC on Arbitrum). Override only if you point ALCHEMY_API_KEY at a testnet for end-to-end QA. ALCHEMY_NETWORK=arb-mainnet

  • Setting home: Not a user-facing setting

ARBITRUM_RPC_URL

Public Arbitrum RPC URL — used when ALCHEMY_API_KEY is unset.

SOLANA_RPC_URL

Public Solana RPC URL — used by the spot deposit watcher for the Solana chain. Non-EVM, so Alchemy isn't auto-wired; this URL is tried first, then the foundation-grade public list (api.mainnet- beta.solana.com, solana-rpc.publicnode.com, …) in order. The transport polls getSignaturesForAddress on the user's USDC token accounts every 5 seconds and flips to credited on the confirmed commitment.

DEPOSIT_WATCH_TIMEOUT_MS

How long a watch session lingers before auto-close (ms). Default 20 minutes — long enough for slow chain confirmation but caps resource use on a forgotten-open modal. DEPOSIT_WATCH_TIMEOUT_MS=1200000

  • Setting home: Not a user-facing setting

On this page