Repository navigation
Releases: IdeaSpaces-xyz/cli
Release list
CLI 0.6.0 — hosted Threads and Vaults
CLI 0.6.0 — hosted Threads and Vaults
The CLI can now name, read and answer a hosted Thread, list your Vaults, and run under an
app that holds its own sign-in.
ideaspaces vaults --jsonlists the Vaults you can reach (GET /vaults, unchanged).ideaspaces threads list --hosted,threads open x_<32 hex>(the head and one page;
--cursorpages back or forward),threads post x_<32 hex> --reply-to <post> --message …,
threads new --hostedandthreads ack x_<32 hex> --cursor|--seq. A post is sent as
text/plainand never retried on its own;--post-idresends the same bytes. A post's
author and date come from the service's record. A 404 means absent or no access.- The exchange posts feed (
threads posts) is unchanged and still callsGET /threads/posts. - A local Thread folder without its own
_agent/agreement.mdcan be read and answered; the
CLI warns once that it has none. A symlinked or dangling Agreement is still refused, and so
is a reply to a post that is not in the Thread. The enclosing Space still needs its
Agreement. IDEASPACES_AUTH=host, for an app that runs this CLI inside agent sessions: the process
never reads, locks, refreshes, writes or deletescredentials.json, ignoresIS_API_KEY,
and refuses every remote call, public reads included.login,power logoutand the Git
credential helper refuse explicitly. Only the hosted Thread and Vault verbs above can call
out, and only with a token passed on--token-fd <n>: read once to EOF before the command
runs, then closed, held in memory, never refreshed, written, logged or echoed. This keeps a
session from spending or changing the terminal's sign-in; it is not a wall against a
same-user process reading the file.
vaults --json passes the service's response through unchanged, by design: the CLI does not
own the Vaults shape. --token-fd consumes its descriptor: the CLI closes it once read.
What has been checked against the service
| Verb | Route | Checked |
|---|---|---|
threads open x_<32 hex> |
GET /threads/{id}, GET /threads/{id}/posts |
Yes: the same calls the desktop app's own hosted Thread client makes. |
threads list --hosted |
GET /threads |
Yes: listed a real hosted Thread, read-only, on 2026-10-30. |
threads post x_<32 hex> |
POST /threads/{id}/posts |
The desktop app's client makes the same call. No post was sent from this CLI. |
threads new --hosted, threads ack, vaults |
POST /threads, POST /threads/{id}/ack, GET /vaults |
Not yet. Covered by tests against recorded responses only. These verbs are new, so no existing command depends on them. A route the service does not serve fails as a named not_found or unavailable state, never as a silent write. |
Install: npm install -g @ideaspaces/cli@0.6.0 (Node 20+ and Git).
Consumer handoff
Publication is approved for the standalone CLI. It opens no Claude Code plugin batch.
| Consumer | Decision / follow-up |
|---|---|
| MCP server | Unchanged. It never sets IDEASPACES_AUTH=host. is_threads still shells threads open/reply for exchange ids (x_ + 24 hex), which route as before; it does not offer the 32-hex hosted Thread verbs in this cut. |
| Skills | Unchanged. No skill teaches the new verbs yet; the existing threads commands keep their names and flags. |
| Pi integration | Still pins CLI commit 75efa91f (0.2.21); unchanged here. The pin moves with the next Pi change. |
| Claude Code plugin | Still vendors CLI 0.5.0 (d402284). Re-vendoring waits for the human to open the next batch. |
The desktop app is the consumer this cut is for: it runs the CLI with IDEASPACES_AUTH=host
and passes its own token on --token-fd. It vendors this release by its merge commit.
Source: the hosted Thread, Vault and host-auth commits, reviewed and merged with this
release's version bump. The bundle is byte-identical to the one built from those commits
before the bump; the version is not embedded in it.
CLI 0.5.0 — sign in to this install
ideaspaces login now signs in this CLI install through your browser (client=cli), with short-lived access and rotating refresh instead of a new long-lived CLI Login key. Manage/revoke this install in the web's Desktop sign-ins list.
- API calls and the Git helper refresh safely; unknown rotation outcomes require fresh sign-in, never blind replay.
status account --jsonchecks online. Offline is not signed out.power logoutrevokes on the server first; if it cannot finish, local credentials remain so you can retry.- The CLI credentials file uses atomic replacement/0600 on POSIX, inherited directory ACLs on Windows; this is not keychain storage.
- Existing authorized keys/
IS_API_KEYremain supported. Browser sign-in requires this CLI's loopback callback (SSH needs forwarding); headless/CI uses an existing authorized key.
Install: npm install -g @ideaspaces/cli@0.5.0 (Node 20+ and Git).
Bundled clients: update their CLI before using this new sign-in. Old bundles cannot refresh these sessions or complete server sign-out. Pi 0.1.44 still pins CLI 0.2.21; the Claude Code plugin still vendors CLI 0.4.0. Their pin/vendor/version and presence-only auth guidance updates are follow-ups, not shipped in this standalone release. No plugin batch or Desktop/keychain release is included.
Source: #258; reviewed version/release cut: #259. Exact release commit: d402284f65b4642046777575ac5aadc0915d85f2.
Verification / known baseline: local serial suite: 102 files, 1384 passed, 1 skipped; typecheck and reproducible clean-installed package check pass, zero runtime dependencies. Post-merge Linux/macOS checks pass. Windows has 23 pre-existing failures across 8 files (1319 passed, 43 skipped); every failure name also failed on the preceding main, and the sign-in suites pass. Windows platform/fixture defects are tracked in #261; the full Windows matrix is not green. Development-toolchain audit findings are tracked in #260; npm audit --omit=dev reports zero.
Publishing uses the existing GitHub OIDC trusted npm workflow. Registry visibility is confirmed separately after that job; a green workflow alone is not the delivery proof.
Full sign-in contract and consumer handoff: release notes.
CLI 0.4.1 — Claude 5.5 roster
claude-models and claude-status name Opus 5.5, Sonnet 5.5, Haiku 5.5 and Fable 5.1 on Claude Code 2.1.305 and later; older binaries keep their versioned roster. Ids and context windows are catalogue estimates (pi-ai 1.3.0), not reported by Claude Code. PR #257 merged at c67d848 after two SLC Comment reviews were read and answered; CI green. This trusted GitHub workflow verifies this tag and package before npm publication.
CLI 0.4.0 — paged Thread look
A generic look now pages Thread and ordinary directory handles with total/shown/nextCursor, --limit, --since and --order older|newer. It opens a post by full msg_ id or unique eight-hex shorthand in a selected Thread or caller root; a Map address ending threads//msg… resolves at its authored pin without a fabricated path or HEAD substitution. Missing and duplicate matches fail with structured unresolved/ambiguous JSON. threads new --map validates the Map before making a folder and writes it on the opening post alongside attached_to. See README for 0.4.0 look usage. PR #256 merged at b28461d with an actual Approve and green CI; protocol 0.29.0 is already published. MCP #62 is merged and plugin #125 stages the merged bundles; publish/installed-tool proof follows in order. This trusted GitHub workflow verifies this tag and package before npm publication.
CLI 0.3.1 — Thread metalayer
Local Thread reads tolerate malformed optional fields and unknown kinds without hiding a Thread; only an unreadable opening blocks writes. threads new --attached-to <type>:<id> writes an opening link (post targets form child edges); threads post --kind mark --mark <value> --reply-to <id> folds status onto the target, and corrections retract marks. Writers validate through protocol 0.28.0 before exclusive create, custom kinds require --yes, and write refuses immutable Thread post paths.
Local JSON migrations: threads list schema ideaspaces.threads.list.v2 and threads open schema ideaspaces.local-thread.open.v3 allow closed: "unknown"; compare === true, never truthiness. Counts include folded marks while timeline does not. See README. CLI PR #255 merged at 84e93cd. 0.3.0 was merged but unpublished; 0.3.1 is the versioned deliverable. Consumer parity: MCP #61 merged, Claude plugin #124 stages the exact merged bundles, Pi pin stays held until its next Pi change, Desktop received the handoff. npm trusted publishing verifies this release tag and package; do not merge plugin until publication is visible.
CLI 0.2.22
CLI 0.2.21 — Space Map gate 1
Includes merged #244, #245 and #246 at main commit 75efa91. Adds repeatable Space Map editing, portable cross-checkout resolution and typed launch orientation, with Map-derived Claude reach disclosed in added_dirs; the shell stays in the POV. The release workflow verifies and publishes @ideaspaces/cli@0.2.21 to npm.
CLI 0.2.20 — Pi runs finish or explain
Pi agent runs wait through Pi's own transient-provider retry instead of ending at an intermediate agent_end (PR #243; SDK #57). The same session and completed tool steps survive the retry. A started --json run that returns or throws with no terminal event emits run_incomplete/run_exception rather than a silent success; late preflight refusals remain stderr-only. A Pi process exit during retry includes the prior cause and conversation id in pi_exit; this changes the pi_exit message text from raw stderr to contextual prose, not its error_type. A cancelled agent run keeps its cancelled event and run-record status but now exits 1, detectable with run.cancelled-nonzero. Completed Pi turns report token usage and cost. New capabilities: pi.retry-terminal, run.terminal-error, run.cancelled-nonzero. External SIGKILL/closed pipes and a hung Pi process remain outside the event guarantee. Batch 17 extension-path, browser-search, duplicate-Agreement and fetch reach follow-ups remain separate.
CLI 0.2.19 — derive and record task on agent runs
Derive and record task on agent runs (PR #238, #239).
- L5:
ideaspaces agent runderives a shorttaskfield from dispatch post names, ask questions, or consult messages, with fallback to first line and explicit--taskoverride. ideaspaces agent runssurfacestaskin text listings and JSON records.- Pi local conversation history preserves and exposes
model_tier.
CLI 0.2.18 — agent run records and default Pi trust to saved
Record agent runs and default Pi trust to saved (PR #235, #236).
- L5:
ideaspaces agent runwrites one record per run (run_id, parent_id, parent_tool_use_id, agent, harness, model_requested, model_observed, conversation_id, status, started_at, ended_at). ideaspaces agent runsreads them back (--json, and filtered by--parent <id>,--agent <path>,--limit <n>).- Adds
run.recordstoagent capabilities. - X3: defaults Pi project resource trust to
saved(no unprompted-aflag).