Skip to content

Releases: IdeaSpaces-xyz/cli

CLI 0.6.0 — hosted Threads and Vaults

Choose a tag to compare

@ernests ernests released this 02 Nov 09:34
e26c48f

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 --json lists the Vaults you can reach (GET /vaults, unchanged).
  • ideaspaces threads list --hosted, threads open x_<32 hex> (the head and one page;
    --cursor pages back or forward), threads post x_<32 hex> --reply-to <post> --message …,
    threads new --hosted and threads ack x_<32 hex> --cursor|--seq. A post is sent as
    text/plain and never retried on its own; --post-id resends 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 calls GET /threads/posts.
  • A local Thread folder without its own _agent/agreement.md can 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 deletes credentials.json, ignores IS_API_KEY,
    and refuses every remote call, public reads included. login, power logout and 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

Choose a tag to compare

@ernests ernests released this 27 Oct 07:05
d402284

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 --json checks online. Offline is not signed out.
  • power logout revokes 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_KEY remain 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

Choose a tag to compare

@ernests ernests released this 21 Oct 16:39
c67d848

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

Choose a tag to compare

@ernests ernests released this 21 Oct 14:33
b28461d

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

Choose a tag to compare

@ernests ernests released this 21 Oct 12:21
84e93cd

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

Choose a tag to compare

@ernests ernests released this 15 Oct 04:34
ebb9138

Source-tracked reproducible bundle with CI and tagged publish verification (#248); share access inspection, scoped grant log and cold-write timeout (#229). Bundle SHA-256: 00c11749fcfaeb78b42442bc5edce9b7f3986664f9d1abe7a507722bec984021.

CLI 0.2.21 — Space Map gate 1

Choose a tag to compare

@ernests ernests released this 13 Oct 16:37
75efa91

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

Choose a tag to compare

@ernests ernests released this 13 Oct 12:28
7913ec0

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

Choose a tag to compare

@ernests ernests released this 13 Oct 06:43
7004d23

Derive and record task on agent runs (PR #238, #239).

  • L5: ideaspaces agent run derives a short task field from dispatch post names, ask questions, or consult messages, with fallback to first line and explicit --task override.
  • ideaspaces agent runs surfaces task in 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

Choose a tag to compare

@ernests ernests released this 12 Oct 11:20
d17ca0e

Record agent runs and default Pi trust to saved (PR #235, #236).

  • L5: ideaspaces agent run writes 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 runs reads them back (--json, and filtered by --parent <id>, --agent <path>, --limit <n>).
  • Adds run.records to agent capabilities.
  • X3: defaults Pi project resource trust to saved (no unprompted -a flag).