ThreadWave / setup

twitter-cli-setup · web-hosted · not installed locally

Set up ThreadWave with your agent.

First install the CLI, then check sign-in, then check the Chrome extension, and finally verify skills. Your agent opens each page and tells you exactly what to do at each step.

Give this to your agent

Paste it into any supported coding agent.

Machine-readable guide: https://www.threadwave.xyz/cli/setup/agent.md?v=2026-09-24.1

CLI installers

No sudo · no wizard

macOS or Linux

curl -fsSL https://www.threadwave.xyz/cli/install.sh | sh

Windows PowerShell

irm https://www.threadwave.xyz/cli/install.ps1 | iex

Your agent chooses the installer for your operating system, then continues through sign-in, the Chrome connection, and skill installation.

Agent setup guide

From installation to ready.

Your agent follows the current readiness checks and helps you complete each browser step. The same guide is available as Markdown at https://www.threadwave.xyz/cli/setup/agent.md?v=2026-09-24.1.

Take the user through setup

A general request to install or set up ThreadWave means making it ready to use: CLI, ThreadWave sign-in and access, Chrome extension relay, logged-in X session, reusable account context, and the skill suite for the current agent host. An explicit check-only, download-only, or component-scoped request keeps its narrower scope.

For full setup, follow this order: install and verify the CLI → verify ThreadWave sign-in → check Chrome extension configuration → perform the final skill and readiness checks. Verify each step before starting the next user gate. Reuse compatible components and already-verified sign-in; do not reinstall or ask the user to sign in again unnecessarily.

Use the conversation's language. At every step, tell the user what is complete, what you are checking now, and the one action they need to perform. If nothing is needed from the user, say so and continue. Run safe setup commands yourself and open each required page before asking the user to act; do not finish at ‘CLI installed’ or hand the remaining terminal commands back to the user.

Compatibility

CLI installers support macOS, Linux, and Windows. The extension needs Google Chrome. Agent Skills command examples use Node.js with npx (npx.cmd in Windows PowerShell). Only the components being installed need their prerequisites. A skills-only request does not require CLI, login, or extension setup; a full setup follows the sequence in §1.

Step 1 — Install and verify the CLI

The ThreadWave CLI (tw) is available for macOS, Linux, and Windows. These per-user installers download and verify the packaged CLI; administrator access is not needed.

macOS or Linux

curl -fsSL https://www.threadwave.xyz/cli/install.sh | sh

Windows PowerShell

irm https://www.threadwave.xyz/cli/install.ps1 | iex

An existing compatible CLI can be reused. The installer adds tw to the user PATH; an already-running agent may need the managed launcher at $HOME/.local/bin/tw on macOS/Linux or %LOCALAPPDATA%\ThreadWave\bin\tw.cmd on Windows until its environment refreshes.

Run tw --version with the installed launcher and confirm it succeeds before proceeding. Tell the user the CLI is installed and you are checking sign-in next; no user action is needed during this installation step. The Agent Skills npm package below installs skills, not the CLI.

Step 2 — Verify ThreadWave sign-in

CommandPurpose
tw --versionCheck which CLI is available
tw preflight --format jsonCheck readiness and obtain the current next action
tw doctor --format jsonInspect an installation or connection problem

After Step 1 succeeds, run tw preflight --format json and check ThreadWave identity first. If sign-in is required, complete it and rerun preflight to verify identity before opening the extension installation gate. A successful browser page or copied token alone is not verified CLI sign-in. Existing verified identity passes this step without another login. Preflight owns readiness and current access requirements; explain and complete a required access gate before continuing. Validate returned commands and URLs against the installed CLI contract, and preserve any returned agent session in setup/resume commands.

Returned actionAgent's next step
loginRun tw login and open its sign-in page. Tell the user: ‘The CLI is installed. Please sign in on the page I opened. After signing in, copy the Magic token, paste it into the text input of this same conversation, and send it.’ Wait for the token in the current session; do not ask the user to enter it in a separate window or wait for another prompt. Run the installed CLI's tw login complete, supply the received token through stdin, and verify completion. Never echo it into command arguments, logs, or diagnostics. If copying is blocked, guide manual selection and Ctrl+C (Command+C on Mac). Rerun preflight and confirm identity before Step 3.
setupAfter identity is verified, run the returned setup command. Tell the user sign-in is verified and you are checking Chrome extension configuration next. Follow its validated continuation through §6 and §7, then resume the same setup session.
complete_subscriptionRun the returned access command (tw subscribe) to open the access/checkout page. Explain the current offer and wait for the user's choice and payment. Existing usable access skips this gate.
Other repair or update actionPerform the documented safe repair within scope, preserving official installer and compatibility checks. If the same state recurs, use tw doctor --format json and the evidence to diagnose it; do not loop unchanged commands.
continueConfirm data.state=ready, then verify the skill installation in §8 before reporting full setup complete.

Keep commands that are still waiting for browser interaction alive. After the user acts, finish the pending command or returned completion/resume action and recheck preflight. Continue until readiness passes or a specific user action or verified blocker remains; report that state accurately and resume when it is resolved.

Step 3 — Check Chrome extension configuration

Official Chrome Web Store entry: https://www.threadwave.xyz/cli/extension. Store item ID: edbdcoacmbgickleofmielabjoelbnak.

Only after Step 2 verifies identity, check whether the Chrome extension is configured and connected. If it is already ready, tell the user the check passed and proceed without opening the store. If it is missing, open the official installation link above in the Chrome profile used for X and tell the user: ‘Sign-in is verified. Please click Add to Chrome, then Add extension on the page I opened, and tell me when it is installed.’ If already installed but disabled, open chrome://extensions/ and ask the user to enable ThreadWave. Wait for the requested action, resume setup, and verify the relay connects before proceeding. Do not treat clicking an install button as connection verification.

Let the CLI open and attach its X tab. If X is signed out, bring that tab forward and tell the user: ‘The extension is connected. Please sign in to X in this tab and tell me when you are done.’ Then resume setup and verify the account context. A tab opened in a separate agent browser is not proof that the CLI's Chrome session is connected. A skills-only update does not require installing or repairing the extension.

When the user is needed

Present only the current user gate; do not ask for login, extension installation, and X sign-in all at once. Open the required page first, then explain the one action needed now: confirm Chrome permissions, complete ThreadWave sign-in, sign in to X, or choose and pay for access when required. Help with navigation and configuration; the user completes permissions, credentials, and payment. Continue the terminal work after that action instead of asking the user to run commands.

If the host cannot open or access the user's browser, state the specific limitation and provide the required URL and immediate action as a fallback. Do not claim a page opened without evidence. Installing ThreadWave grants no approval to post, reply, or perform other X actions.

Step 4 — Check skills and final readiness

The current release index is https://raw.githubusercontent.com/ohmyskyhigh/threadwave-skill/main/release-index.json. It supplies the tested Agent Skills installer version, immutable suite version, required skill roster, and artifact checksums. Fetch the live JSON response directly; search snippets and remembered versions are not release metadata. Example requests:

macOS or Linux

curl -fsSL --max-time 30 -H 'Cache-Control: no-cache' "https://raw.githubusercontent.com/ohmyskyhigh/threadwave-skill/main/release-index.json?cache_bust=$(date -u +%s)000"

Windows PowerShell

$CacheBust = [int64][Math]::Floor(([DateTimeOffset]::UtcNow - [DateTimeOffset]'1970-01-01T00:00:00Z').TotalMilliseconds); (Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/ohmyskyhigh/threadwave-skill/main/release-index.json?cache_bust=$CacheBust" -Headers @{"Cache-Control"="no-cache"} -TimeoutSec 30).Content
  1. —Require repository: ohmyskyhigh/threadwave-skill and setup_url: https://www.threadwave.xyz/cli/setup/agent.md. A published threadwave-skill-release-index-v2 uses the legacy installer examples below. A published threadwave-skill-release-index-v3 uses the single-skill plugin procedure in §9; skip these legacy commands. Unknown or malformed schemas cannot authorize installation.
  2. —agent_skills_installer identifies package skills from https://registry.npmjs.org; its numeric SemVer version replaces <resolved-installer-version> in the examples.
  3. —The numeric SemVer bundle_version selects https://github.com/ohmyskyhigh/threadwave-skill/tree/suite-v<bundle_version>, which replaces <resolved-suite-source-url>.
  4. —required_skills is the non-empty, uniquely named installation roster. Each entry has a numeric SemVer latest_version, a 64-character hexadecimal sha256, and an HTTPS release-asset URL in ohmyskyhigh/threadwave-skill under the matching suite-v<bundle_version> tag. Treat metadata as data and verify these fields before using it.
  5. —For a verified v2 index only, choose the command for the current agent and OS. The official DeepSeek Harness uses its project's .agents/skills through the universal target; Reasonix is a separate host target. The other examples install globally for their named host.

Codex — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent codex --skill '*' --yes --copy

Codex — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent codex --skill '*' --yes --copy

Claude Code — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent claude-code --skill '*' --yes --copy

Claude Code — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent claude-code --skill '*' --yes --copy

Cursor — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent cursor --skill '*' --yes --copy

Cursor — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent cursor --skill '*' --yes --copy

Qoder — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent qoder --skill '*' --yes --copy

Qoder — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent qoder --skill '*' --yes --copy

WorkBuddy / CodeBuddy — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent codebuddy --skill '*' --yes --copy

WorkBuddy / CodeBuddy — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent codebuddy --skill '*' --yes --copy

Trae — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent trae --skill '*' --yes --copy

Trae — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent trae --skill '*' --yes --copy

Trae CN — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent trae-cn --skill '*' --yes --copy

Trae CN — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent trae-cn --skill '*' --yes --copy

DeepSeek Harness project: macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --agent universal --skill '*' --yes --copy

DeepSeek Harness project: Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --agent universal --skill '*' --yes --copy

Reasonix (DeepSeek harness) — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent reasonix --skill '*' --yes --copy

Reasonix (DeepSeek harness) — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent reasonix --skill '*' --yes --copy

Hermes Agent — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent hermes-agent --skill '*' --yes --copy

Hermes Agent — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent hermes-agent --skill '*' --yes --copy

OpenClaw — macOS or Linux

npx --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent openclaw --skill '*' --yes --copy

OpenClaw — Windows PowerShell

npx.cmd --yes --prefer-online --registry=https://registry.npmjs.org skills@<resolved-installer-version> add <resolved-suite-source-url> --global --agent openclaw --skill '*' --yes --copy

For a v3 index, complete §9 instead of running the legacy installer. For full setup, perform this final check after verified login and extension configuration, including the CLI's required X and account-context checks. Compare the current host's installed skills with the fetched release index. If every required skill is already at the indexed version, reuse it without reinstalling. Otherwise run the selected installation yourself and verify the complete required suite; these commands need Node.js with npx (npx.cmd in Windows PowerShell). Tell the user you are performing the final skill check and no action is needed from them. A skills-only request can run this section independently.

Report full setup complete only after preflight returns data.state=ready with data.action.id=continue and the required skill suite is verified. This confirms CLI/native integration, ThreadWave identity and usable access, Chrome relay, logged-in X session, and reusable account context. For a scoped update, verify only the selected components and return to the invoking preflight to resume the original request.

Single-skill plugin installation and updates / 单技能插件安装与更新

Use this section only after the public release index identifies threadwave-skill-release-index-v3. It must declare exactly one required skill named threadwave, with its latest_version matching bundle_version, a valid supported-version range and a verified immutable archive/checksum. The complete plugin bundle must match that release. Until v3 is publicly available, use the verified v2 installation above; never guess a future version or remove working skills for an unavailable replacement.

The plugin identity remains threadwave-skill, displayed as ThreadWave. Its only public skill is threadwave; tweet, reply, snapshot, notifications and support are internal flows. Daily planning is unavailable. Codex uses its supported plugin management; other advertised hosts install the same single-skill bundle through their supported installation route.

An update_available notification is a reminder, not installation authorization. Continue the original task. An explicit request to update is authorization for that component; do not ask again. A skills-only update preserves the CLI and extension; a CLI-only update uses the existing CLI updater and does not reinstall skills. Read this guide when applying an update, not on every task or unchanged reminder.

仅在公开发布索引为 threadwave-skill-release-index-v3 时使用本节。更新通知只作提醒,不中断当前任务,也不自动安装;用户已明确要求更新时,不重复确认。只更新所请求的组件。

Current installation / 当前安装Action / 操作
Fresh install / 未安装Install the verified new plugin; skip removal. / 安装已验证的新插件,跳过卸载。
Legacy standalone skills / 旧独立技能Remove identified legacy skill package files, then install the plugin. / 删除已识别的旧技能文件,再安装插件。
Old plugin / 旧插件Uninstall through host plugin management, then install the new plugin. / 使用宿主插件管理卸载旧插件,再安装新插件。
Both / 两者都有Remove both legacy installations before installing the new plugin. / 先移除两种旧安装,再安装新插件。
Already migrated / 已迁移Use the supported normal plugin update; do not repeat legacy removal. / 使用正常插件更新,不重复执行旧版迁移。
  1. 01Verify the replacement before removal: resolve its public version/source, verify artifact integrity, inspect the package's CLI compatibility and confirm the host's actual install/uninstall capabilities. A missing/incompatible CLI is a separate scoped dependency, not permission to silently update it. For a local marketplace, confirm the ThreadWave source points to the verified new release so reinstalling cannot select an old local copy. Never fabricate a plugin command.
  2. 02Identify only official ThreadWave end-user installations in the host's configured user/project discovery roots, including legacy roots when present. Use published legacy roster metadata to identify retired peers and check an official twitter-harness or duplicate threadwave installation. Distinguish package files from local user configuration and data. Leave unrelated skills and maintainer threadwave-release skills intact.
  3. 03Remove the old package files and uninstall the old plugin through supported host management. If both exist, remove both. For symlinked skills, remove only the discovery link and leave its target intact. Create no backups. Preserve local user configuration, authentication, account context, tasks, drafts, schedules and approval evidence, even when stored beside package files. Do not recursively delete a directory containing user settings/data, wipe a shared plugin cache, or reset the CLI. Only required plugin registration changes are allowed. If removal fails, stop before installing a duplicate replacement.
  4. 04Install the verified threadwave-skill plugin with exactly one public threadwave skill. Preserve existing user settings rather than overwriting them with package defaults. Use the host's available installation tools; when the host requires a user-only installation action, present that exact action and continue verification afterward.
  5. 05Refresh host discovery and start a fresh agent session if the old instructions remain loaded. Verify the expected version, exactly one public threadwave skill, no retired peers or duplicate standalone copies, preserved local configuration/data, and the home screen without creating tasks. Do not promise a native /tw slash command when the host does not register one.
  6. 06If installation or discovery fails, report the incomplete state and use the supported repair route for the verified new package. Preserve configuration/data during repair; do not restore retired skills or reset user settings. After verified success, reload the installed skill version, clear the satisfied reminder and resume the original request using its existing refs; never recreate or resend completed work.

迁移顺序:先验证新版本和安装来源 → 识别旧技能或插件 → 删除旧安装 → 安装新插件 → 刷新并验证。无需备份;始终保留本地用户配置、登录信息、账号上下文、任务、草稿、计划和审批记录。只移除旧技能/插件文件;符号链接只删除链接,不删除目标。卸载失败时不继续安装重复副本。

安装失败时保留配置并修复新安装,如实说明尚未完成。成功后确认只有一个 threadwave 技能,更新当前版本信息,再通过原有任务引用继续工作;不重建或重复发送已有任务。首次从旧版迁移才执行先卸载再安装,后续使用宿主支持的普通插件更新。

Installation notes

  1. —Choose tools and diagnostics that fit the user's environment, while preserving the full-setup step order in §1. A scoped update changes only the requested components and then returns to its invoking workflow.
  2. —Use official distributions and preserve their archive, checksum, signature, notarization, publisher, and Web Store identity checks. An integrity or trust failure needs resolution, not a bypass.

Report an unresolved setup failure

For an unexpected unresolved installation/setup failure, use threadwave-error-support when available. Normal sign-in, payment, permissions, pacing and approval gates are not bugs. Report automatically within existing conversation-level reporting authorization; otherwise obtain consent once for private identity/contact and sanitized context/JSONL to the backend plus a sanitized public issue. Prepare-only requests remain unsent.

If the trusted CLI can run and help/capabilities advertise it, write factual agent/context JSON yourself and run tw support report --input <report.json> --format json. The CLI detects OS/CLI facts, uses existing authentication, collects actual sanitized JSONL and submits both together. tw support export remains local-only and returns the absolute file location (data.output_path in JSON). Do not use the retired support status or HTML diagnostic export commands.

If the CLI cannot run, the setup agent submits the same multipart protocol directly using an available HTTPS client. Use POST https://api.threadwave.xyz/api/v1/support/issue-reports, no redirects, and a 30-second timeout. Multipart fields are metadata (JSON text, at most 64 KiB) and jsonl (actual UTF-8 .jsonl file, application/x-ndjson, at most 24 MiB and 8192 bytes per line). The agent writes and attaches the files; the user does not copy/paste or upload them. No GitHub sign-in, source checkout, or GitHub token is required.

Without usable ThreadWave authentication, only install/setup reports are accepted, with an explicit user-supplied contact email marked unverified by the backend. Ask only for missing contact; never infer or scrape it. The authenticated path derives user identity from the existing session; never transmit credentials in metadata or obtain a new login just to report an installer failure.

Replace every placeholder in the following metadata before sending. Generate one UUID before the first attempt and retain it and the event timestamp on retry. Detect OS as Linux, Windows or macOS; use unknown and null when unavailable. Record the actual agent name (including hosts outside the supported installation roster), available version and provenance detected/supplied/unavailable. Host disclosure does not prove compatibility or incompatibility.

Keep requested action, invoked command, independently observed received input, and observed output/error separate. Never infer received input from invocation or invent a missing error code. Text fields are at most 2048 characters, agent/version fields at most 80. Sanitize secrets, tokens, cookies, authorization, user content, raw prompts, private refs, URLs, handles and private paths. Describe only what happened and the missing expected result; do not add suspected causes, diagnoses or compatibility verdicts.

No-CLI metadata shape (replace placeholders; unavailable observations remain null)

{
  "schema_version": "threadwave-support-report-v1",
  "report_id": "<generate one UUID; reuse it on retry>",
  "occurred_at": "<observed ISO timestamp with timezone>",
  "environment": {
    "os": "unknown",
    "release": null,
    "architecture": null,
    "cli_version": null
  },
  "agent": {
    "name": "unknown",
    "version": null,
    "provenance": "unavailable"
  },
  "context": {
    "phase": "install",
    "description": "<sanitized observed failure>",
    "requested_action": "<sanitized requested action>",
    "invoked_command": null,
    "received_input": null,
    "error_code": null,
    "error_message": null,
    "exit_code": null,
    "output": null
  },
  "contact": "<user-supplied contact email>",
  "attachment": {
    "source": "setup",
    "reason": null
  }
}

For setup evidence, include one JSONL row per actual sanitized observation: schema_version=threadwave-setup-observation-v1, ts=UTC ISO timestamp with milliseconds, stage=install or setup, message=bounded sanitized observation (at most 2048 characters), and optional error_code=observed stable code. Never fabricate CLI history. When no safe observation file can be collected, omit the jsonl part and set attachment to {"source":"unavailable","reason":"<factual reason>"}; disclose missing evidence. For an actual CLI-export attachment, source is cli and reason is null.

The backend keeps identity/contact, factual context and JSONL private. It creates a sanitized issue in ohmyskyhigh/threadwave-errors with protected maintainer evidence links. Never post directly to GitHub or upload raw logs, screenshots, HTML, credentials or browser state.

Only a receipt matching the submitted UUID with state=submitted and a canonical https://github.com/ohmyskyhigh/threadwave-errors/issues/<number> URL confirms an issue. State=stored means private evidence was accepted but issue creation is incomplete or uncertain. A rejected/unavailable endpoint is unsubmitted; a timeout or malformed receipt is unconfirmed. Keep the original task failure separate and preserve local metadata/JSONL. Use the CLI-returned metadata_path for retries; direct fallback reuses its original metadata file. An empty issue search is not proof of absence. Respect Retry-After on 429. Do not recursively report report failures or retry the original X mutation.

Stop if origin, checksum, size, archive, signature, notarization, publisher, Web Store identity, or platform trust validation fails. Do not bypass the warning or substitute a repository build.