Skip to content

CLI ​

OpenAPI is meant for system integration, while the CLI is meant for "a person sitting in front of a terminal." The WinNexo CLI wraps all OpenAPI capabilities into winnexo xxx commands, so you can invoke Digital Workers, run Skills, query resources, and upload knowledge with a single command—no code and no need to look up interface docs. Its alias "Qoder Work" corresponds to that "can-do-anything" partner in the AI workspace—once you install the CLI, Qoder Work gains the real ability to operate WinNexo.

For example: every morning, if you want a "summary of yesterday's customer follow-ups," just type in the terminal winnexo skill run --skill-code daily-customer-recap --arguments '{"date":"yesterday"}' --json, get results in seconds, and redirect them to Notion / Obsidian / email—fully automated. Or, to precipitate a set of minutes into the enterprise knowledge base, winnexo knowledge-base create-text -n "Weekly Meeting Minutes" --text-content "..." --json does it in one line.

The essence of the CLI is turning WinNexo capabilities into a single command on a Unix pipe that can plug into any workflow.

CLI Command Reference ​

Compiled from the output of winnexo --help and each command's --help, covering all commands and subcommands. When invoked by an Agent, always add --json to obtain a structured, parseable response.

Global Options ​

OptionDescription
-v, --versionShow the version number
--jsonJSON-format output (for AI agent consumption, passing through the raw API response directly)
--verboseEnable verbose output (including error stack traces)
--server-domain <url>WinNexo API endpoint URL (overrides the config file)
--user-token <token>Authentication token (overrides the config file)
--tenant-id <id>Tenant ID (overrides the config file, corresponds to the x-tenant-id request header)

Command Overview ​

A total of 19 commands, organized by capability domain.

System & Instance (2) ​

CommandDescriptionSubcommands
healthCheck API connection and authentication status—
instanceInstance information1

Chat (3) ​

CommandDescriptionSubcommands
chatConverse with the AI (streaming/non-streaming, attachments, multi-turn)—
chat-sessionManage chat sessions5
fileFile management (upload chat attachments)1

Quick Skills (1) ​

CommandDescriptionSubcommands
skillManage AI Skills4

My Resources (3) ​

CommandDescriptionSubcommands
personal-directoryPersonal directory management5
sourceManage data sources (including personal resource creation)13
outputOutput query and save2

Knowledge Base (1) ​

CommandDescriptionSubcommands
knowledge-baseManage knowledge bases (including enterprise KB category management and resource upload)17

Scheduled Tasks (1) ​

CommandDescriptionSubcommands
scheduled-taskManage scheduled tasks7

Primary Object Data (1) ​

CommandDescriptionSubcommands
objectMain object data query and favorites2

User, Credit & Billing (2) ​

CommandDescriptionSubcommands
userCurrent user info and credits3
billingCredit consumption billing query1

User & Permission Management (2) ​

CommandDescriptionSubcommands
tenant-userTenant user management (admin)6
user-tokenSelf-service user API Token management4

Organization Sync (1) ​

CommandDescriptionSubcommands
org-syncOrganization structure sync4

Configuration & Interactive (2) ​

CommandDescriptionSubcommands
configManage CLI configuration3
replEnter the interactive command line—

Command Details ​

health — Check API connection and authentication status ​

Verify whether the API endpoint is reachable and whether the authentication credentials are valid. On success, returns the current identity information.

bash
winnexo health
winnexo --json health

Response fields:

FieldTypeDescription
callerTypestringCaller type: user / aliyun_main / aliyun_ram / service
authSourcestringAuthentication source: bearer / aliyun_gateway
tenantIdnumberEffective tenant ID
userIdnumber | nullPlatform user ID
digitalEmployeeNamestring | nullThe currently effective Digital Worker name

chat — Send a chat message ​

Start a conversational interaction with WinNexo AI. The message body is passed as a positional argument; streaming output by default; supports attachments and multi-turn continuation.

bash
winnexo chat <message> [options] --json
OptionAliasRequiredDefaultDescription
<message>YesMessage body (positional argument)
--session-id <id>-sNoSession ID (creates a new session if not provided)
--digital-employee-name <name>-eNoEnv variableDigital Worker name
--content-type <type>NoTextMessage type: Text / Markdown
--file <fileIds>NoAttachment file IDs (comma-separated for multiple)
--no-streamNoStreaming by defaultDisable streaming output
--reuse-last-sessionNofalseReuse the most recent session under this Digital Worker
Streaming mode (default) ​

Outputs the AI's reply content fragments in real time, suitable for interactive scenarios.

bash
winnexo chat "Hello"
winnexo chat "Analyze this month's sales trend" -e customer --json

JSON-mode response:

json
{"content": "The complete AI reply content", "sessionId": "sess-abc123"}

In non-JSON mode, content is output to the terminal in real time.

Non-streaming mode ​

Waits for the complete reply and returns it all at once, suitable for programmatic invocation. The response is compatible with two formats:

bash
winnexo chat "Generate a quarterly summary" --no-stream --json

Format 1 (OpenAI-compatible):

json
{
  "Code": "200",
  "choices": [{"message": {"content": "The complete AI reply"}}],
  "session": {"id": "sess-abc123"}
}

Format 2 (legacy platform):

json
{
  "Code": "200",
  "messages": [{"role": "assistant", "content": "The complete AI reply"}],
  "session": {"id": "sess-abc123"}
}
Attachment conversation and multi-turn conversation ​
bash
# 1. Upload a file to get the fileId
winnexo file upload --file ./report.pdf --json
# → {"Code": "200", "fileRecordId": "file-001"}

# 2. Chat with attachments (separate multiple attachments with commas)
winnexo chat "Help me summarize the key points of this report" --file file-001 --json
winnexo chat "Compare these two datasets" --file file-001,file-002 --json

# 3. Multi-turn conversation: the first turn auto-creates a session, subsequent turns pass sessionId to continue
winnexo chat "Help me look up recent customer data" --json
winnexo chat "Now group it by region" --session-id sess-abc123 --json

chat-session — Manage chat sessions ​

Perform CRUD operations on chat sessions.

SubcommandDescription
list [options]List chat sessions
get [options]Get session details
update [options]Update session information
delete [options]Delete a session
stop [options]Stop a message being generated
chat-session list ​

List chat sessions, supporting keyword and Digital Worker filtering, and pagination.

bash
winnexo chat-session list --json
winnexo chat-session list --page 2 --page-size 10 --json
winnexo chat-session list --keyword "requirement" --json
winnexo chat-session list --digital-employee-name customer --json
OptionAliasRequiredDefaultDescription
--page <num>-pNo1Page number
--page-size <num>No20Items per page
--keyword <text>-kNoSearch keyword
--digital-employee-name <name>-eNoFilter by Digital Worker

Response:

json
{
  "Code": "200",
  "total": 15,
  "page": 1,
  "pageSize": 20,
  "data": [
    {
      "id": "sess-001",
      "title": "Sales Analysis Conversation",
      "operating_object_name": "customer",
      "is_expired": false,
      "updated_at": 1716220800
    }
  ]
}
chat-session get ​

Get session details and the most recent messages.

bash
winnexo chat-session get --session-id abc123 --json
winnexo chat-session get -s abc123 --limit 5 --json
OptionAliasRequiredDefaultDescription
--session-id <id>-sYesSession ID
--limit <num>-lNo10Number of recent messages to return (0–20)

Response:

json
{
  "Code": "200",
  "session": {"id": "sess-001", "title": "Sales Analysis Conversation", "is_expired": false, "created_at": 1716220800},
  "messages": [
    {"role": "user", "content": "Analyze the sales data", "status": "completed"},
    {"role": "assistant", "content": "Based on the data...", "status": "completed"}
  ]
}
chat-session update ​

Update the session title or model.

bash
winnexo chat-session update --session-id abc123 --title "New Title" --json
winnexo chat-session update --session-id abc123 --model model_max --json
winnexo chat-session update -s abc123 -t "New Title" -m model_flash --json
OptionAliasRequiredDescription
--session-id <id>-sYesSession ID
--title <title>-tNoNew title
--model <model>-mNoAbstract model name: model_flash / model_plus / model_max
chat-session delete ​

Delete a session.

bash
winnexo chat-session delete --session-id abc123 --json
OptionAliasRequiredDescription
--session-id <id>-sYesSession ID

Response:

json
{"Code": "200", "hardDelete": true}
chat-session stop ​

Stop a message being generated.

bash
winnexo chat-session stop --session-id abc123 --json
winnexo chat-session stop -s abc123 --reason "No longer needed" --json
OptionAliasRequiredDescription
--session-id <id>-sYesSession ID
--reason <text>NoReason for stopping

file — File management ​

Manage files used in chats. file upload is for chat attachments (referenced via chat --file), which is a different scenario from creating personal resources with the source create-* series.

SubcommandDescription
upload [options]Upload a file for chat
file upload ​

Upload a local file to get a fileRecordId for reference by chat --file.

bash
winnexo file upload --file ./report.pdf --json
winnexo file upload -f ./data.csv -o customer --json
OptionAliasRequiredDescription
--file <path>-fYesLocal file path
--operating-object-name <name>-oNoDigital Worker name (auto-resolved by the CLI)

Response:

json
{"Code": "200", "fileRecordId": "file-001", "fileName": "report.pdf"}

fileRecordId is used for reference by the chat --file parameter. file upload is only for chat attachments and does not create a personal resource; to save as a personal resource, use the source get-upload-signature + source create-file flow.


skill — Manage AI Skills ​

Skill query and execution. list / get are for discovering Skills, and run executes a Skill (streaming supported).

SubcommandDescription
list [options]List available Skills
get [options]Get Skill details
run [options]Execute a specified Skill
run-status [options]Query Skill execution status
skill list ​

List the currently available Skills.

bash
winnexo skill list --json
winnexo skill list --keyword "report" --page 1 --page-size 20 --json
OptionAliasRequiredDefaultDescription
--keyword <text>-kNoSearch keyword
--page <num>-pNo1Page number
--page-size <num>No20Items per page

Response:

json
{
  "Code": "200",
  "total": 8,
  "data": [
    {"skillCode": "daily-report", "skillName": "Daily Report Generation", "description": "Generate a daily sales report"}
  ]
}
skill get ​

Get detailed information about a Skill (parameter schema, etc.).

bash
winnexo skill get --skill-code daily-report --json
OptionAliasRequiredDescription
--skill-code <code>-cYesUnique Skill identifier code
skill run ​

Execute a specified Skill. Parameters are passed as a JSON string; streaming output is supported.

bash
winnexo skill run --skill-code daily-report --json
winnexo skill run -c daily-report -a '{"date":"2024-05-01","region":"East China"}' --json
winnexo skill run -c weekly-summary --arguments '{"week":24}' --no-stream --json
OptionAliasRequiredDefaultDescription
--skill-code <code>-cYesUnique Skill identifier code
--arguments <json>-aNoSkill parameters (JSON string)
--no-streamNoStreaming by defaultDisable streaming output

skill run uses streaming output by default (showing the execution process in real time). Add --no-stream to wait for the final result in a script.

skill run-status ​

Query the execution status of an async Skill.

bash
winnexo skill run-status --task-id task-abc123 --json
OptionAliasRequiredDescription
--task-id <id>-tYesSkill execution task ID

scheduled-task — Manage scheduled tasks ​

Full lifecycle management of scheduled tasks, supporting 7 subcommands.

SubcommandDescription
list [options]List scheduled tasks
get [options]Get task details
create [options]Create a scheduled task
update [options]Update a scheduled task
delete [options]Delete a scheduled task
toggle [options]Enable/disable a task
run [options]Run a task immediately
scheduled-task list ​

List scheduled tasks.

bash
winnexo scheduled-task list --json
winnexo scheduled-task list --page 1 --page-size 20 --json
OptionAliasRequiredDefaultDescription
--page <num>-pNo1Page number
--page-size <num>No20Items per page
scheduled-task get ​

Get scheduled task details.

bash
winnexo scheduled-task get --task-id task-001 --json
OptionAliasRequiredDescription
--task-id <id>-tYesTask ID
scheduled-task create ​

Create a scheduled task.

bash
winnexo scheduled-task create \
  --name "Daily Sales Brief" \
  --cron "0 9 * * *" \
  --content "Generate yesterday's sales data brief and push to DingTalk" \
  --json
OptionAliasRequiredDefaultDescription
--name <name>-nYesTask name
--cron <expr>-cYesCron expression
--content <text>YesTask content description
--digital-employee-name <name>-eNoDigital Worker name
--enabled <bool>NotrueWhether enabled
scheduled-task update ​

Update a scheduled task's configuration.

bash
winnexo scheduled-task update --task-id task-001 --name "New Name" --json
winnexo scheduled-task update -t task-001 --cron "0 18 * * *" --json
OptionAliasRequiredDescription
--task-id <id>-tYesTask ID
--content <text>NoTask content description
--enabled <bool>NoWhether enabled

scheduled-task — Manage scheduled tasks ​

Manage the creation, updating, querying of scheduled tasks and tracking of execution records.

SubcommandDescription
list [options]Query the scheduled task list
understand [options]Parse natural-language task intent (must be called before creating)
create [options]Create a scheduled task
update [options]Update a scheduled task
execute [options]Execute a scheduled task immediately
execution-recordsQuery execution records by Digital Worker
execution-detail [options]Get details of a single execution

Common data structure · SegmentItem (rich-text message segment) — the --segments and --description fields are arrays of SegmentItem:

FieldTypeDescription
typestringRequired. text / web_search / mention / skill
contentstringText content, required when type=text
enabledbooleanFeature toggle, optional when type=web_search
namestringObject or Skill name
objectIdstringObject ID, present when type=mention
objectTypestringObject type, present when type=mention
skillCodestringSkill code, present when type=skill

Common data structure · TriggerConfig — the --trigger-config field:

FieldTypeDescription
triggerModestringRequired. manual / scheduled
cronstringCron expression, required in scheduled mode, e.g. "00 09 * * *"

timezone and language are automatically injected by the server.

Common data structure · TaskDetail — the --task-detail field, returned by understand and passed back as-is:

FieldTypeDescription
taskUnderstandstringLLM-polished task understanding
relatedSemanticsarraySemantic entities (entity/attributes)
relatedObjectsarrayRelated objects (name/objectId/objectType/mentionType)
relatedSkillsarrayRelated Skills (name/displayName/skillCode/sourceIds)
scheduled-task list ​
bash
winnexo scheduled-task list --json
winnexo scheduled-task list -k "daily" --page 1 --page-size 20 --json
OptionAliasRequiredDefaultDescription
--page <num>-pNo1Page number
--page-size <num>No20Items per page
--keyword <text>-kNoFuzzy search by task name
--digital-employee-name <name>NoFilter by Digital Worker
scheduled-task understand ​

Must be called before creating a task.

bash
winnexo scheduled-task understand --user-input "Send sales daily at 9 AM" --json
OptionRequiredDescription
--user-input <text>YesNatural-language task description
--digital-employee-name <name>NoDigital Worker name
--segments <json>NoAdditional rich-text segments

Response fields correspond one-to-one with TaskDetail; pass them back as-is when creating.

scheduled-task create ​
bash
winnexo scheduled-task create \
  --name "Daily Sales Report" \
  --description '[{"type":"text","content":"Send sales daily at 9 AM"}]' \
  --trigger-config '{"triggerMode":"scheduled","cron":"00 09 * * *"}' \
  --task-detail '{"taskUnderstand":"...","relatedSemantics":[],"relatedObjects":[],"relatedSkills":[]}' \
  --json
OptionAliasRequiredDescription
--name <name>-nYesTask name (up to 50 chars)
--digital-employee-name <name>NoDigital Worker name
--description <json>NoSegmentItem array (shown to user)
--segments <json>NoRich-text segments sent to AI
--trigger-config <json>NoTriggerConfig object
--task-detail <json>NoTaskDetail object (from understand)
--no-is-openNoDisable after creation
scheduled-task update ​
bash
winnexo scheduled-task update --task-id task-001 \
  --trigger-config '{"triggerMode":"scheduled","cron":"00 10 * * *"}' --json
winnexo scheduled-task update --task-id task-001 --is-open --json
winnexo scheduled-task update --task-id task-001 --no-is-open --json
OptionRequiredDescription
--task-id <id>YesTask ID
--name <name>NoNew task name
--description <json>NoNew task description
--segments <json>NoNew message segments
--trigger-config <json>NoNew trigger configuration
--task-detail <json>NoNew task details
--is-openNoEnable the task
--no-is-openNoDisable the task
scheduled-task execute ​

Manually trigger a task without waiting for Cron.

bash
winnexo scheduled-task execute --task-id task-001 --json
OptionRequiredDescription
--task-id <id>YesTask ID
scheduled-task execution-records ​

Query execution records by Digital Worker.

bash
winnexo scheduled-task execution-records --json
scheduled-task execution-detail ​

Get details of a single execution.

bash
winnexo scheduled-task execution-detail --execution-id exec-001 --json
OptionAliasRequiredDescription
--execution-id <id>-eYesExecution ID

object — Main object data query and favorites ​

SubcommandDescription
list [options]Query main object list data
favorite [options]Favorite or unfavorite an object
object list ​
bash
winnexo object list --object-type company --json
winnexo object list -t company --page 1 --page-size 20 --json
OptionAliasRequiredDefaultDescription
--object-type <type>-tYesObject type identifier
--page <num>-pNo1Page number
--page-size <num>No20Items per page
object favorite ​
bash
winnexo object favorite --object-type company --object-id obj-001 --favorite --json
winnexo object favorite -t company -i obj-001 --no-favorite --json
OptionAliasRequiredDefaultDescription
--object-type <type>-tYesObject type identifier
--object-id <id>-iYesObject ID
--favoriteNotrueFavorite the object
--no-favoriteNoUnfavorite the object

output — Output query and save ​

SubcommandDescription
list [options]Query the output list
save [options]Save an output to a personal directory
output list ​
bash
winnexo output list --json
winnexo output list --page 1 --page-size 20 --json
OptionAliasRequiredDefaultDescription
--page <num>-pNo1Page number
--page-size <num>No20Items per page
output save ​
bash
winnexo output save --output-id out-001 --json
OptionAliasRequiredDescription
--output-id <id>-oYesOutput ID

personal-directory — Personal directory management ​

SubcommandDescription
list [options]List personal directories
create [options]Create a directory
rename [options]Rename a directory
move [options]Move a directory
delete [options]Delete a directory
personal-directory list ​
bash
winnexo personal-directory list --json
personal-directory create ​
bash
winnexo personal-directory create --name "Project Docs" --json
winnexo personal-directory create -n "Sub" --parent-id dir-001 --json
OptionAliasRequiredDescription
--name <name>-nYesDirectory name
--parent-id <id>NoParent directory ID (root if omitted)
personal-directory rename ​
bash
winnexo personal-directory rename --directory-id dir-001 --name "New Name" --json
OptionAliasRequiredDescription
--directory-id <id>-dYesDirectory ID
--name <name>-nYesNew name
personal-directory move ​
bash
winnexo personal-directory move --directory-id dir-002 --target-parent-id dir-001 --json
OptionAliasRequiredDescription
--directory-id <id>-dYesDirectory to move
--target-parent-id <id>NoTarget parent (root if omitted)
personal-directory delete ​
bash
winnexo personal-directory delete --directory-id dir-001 --json
OptionAliasRequiredDescription
--directory-id <id>-dYesDirectory ID

items[].outputItems[].itemId is the output detail ID, used for output save's --item-ids.

output save ​

Batch-save output details as the current user's personal resources.

bash
winnexo output save --item-ids item-001 --mode link --json
winnexo output save --item-ids item-001,item-002,item-003 --mode copy --json
winnexo output save --item-ids item-001 --mode link --directory-id dir-123 --json
OptionRequiredDescription
--item-ids <ids>YesOutput detail ID list, comma-separated, max 50 per batch
--mode <mode>YesSave method: link (idempotent) / copy (snapshot)
--directory-id <id>NoTarget personal directory ID; uses default if omitted
  • link — Creates a link to the original output, idempotent, updates with the original
  • copy — Creates an independent snapshot, does not change with the original

personal-directory — Personal directory management (detailed) ​

SubcommandDescription
create [options]Create a directory under personal resources
list [options]Drill-down query of directory contents
update [options]Update directory info
move-resource [options]Move a resource between directories
retry-failed [options]Retry all failed data sources in a directory
personal-directory create ​
bash
winnexo personal-directory create --name "Project Files" --json
winnexo personal-directory create --name "Weekly" --parent-directory-id dir_abc123 --json
OptionAliasRequiredDescription
--operating-object-name <name>-oAutoDigital Worker name (auto-resolved)
--name <name>-nYesDirectory name
--parent-directory-id <id>NoParent directory ID; root if omitted
--description <text>NoDirectory description
personal-directory list ​
bash
winnexo personal-directory list --directory-id root --json
winnexo personal-directory list --directory-id dir_abc123 --json
OptionAliasRequiredDefaultDescription
--directory-id <id>-dYesDirectory ID; pass "root" for root
--page <num>-pNo1Page number
--page-size <num>No20Items per page
--sort-field <field>NonameSort field
--sort-order <order>NoascSort direction
--source-types <json>NoResource type filter JSON array
personal-directory update ​
bash
winnexo personal-directory update --directory-id dir_abc123 --name "New Name" --json
OptionAliasRequiredDescription
--directory-id <id>-dYesDirectory unique ID
--name <name>-nNoNew name
--description <text>NoNew description
personal-directory move-resource ​
bash
winnexo personal-directory move-resource \
  --source-directory-id dir_abc \
  --target-directory-id dir_xyz \
  --source-id src-001 --json
OptionRequiredDescription
--source-directory-id <id>YesSource directory ID
--target-directory-id <id>YesTarget directory ID
--source-id <id>YesResource ID to move
personal-directory retry-failed ​
bash
winnexo personal-directory retry-failed --directory-id dir_abc123 --json
OptionAliasRequiredDescription
--directory-id <id>-dYesDirectory ID (recursively includes subdirectories)

source — Manage data sources (including personal resource creation) ​

Resource details, uploading various personal resources (text/file/online doc/meeting), renaming, object binding, and preview.

SubcommandDescription
get [options]Get resource details
get-upload-signature [options]Get OSS direct-upload signature
create-text [options]Upload a text resource
create-file [options]Upload a file resource
create-aliding-doc [options]Upload an AliDing online document
create-aliding-kb [options]Create an AliDing knowledge base
create-aliding-meeting [options]Upload an AliDing meeting
create-dingtalk-meeting [options]Upload a DingTalk meeting
create-feishu-minute [options]Upload a Feishu Minute
create-voice-meeting [options]Upload an offline meeting
rename [options]Rename a data source
replace-bindings [options]Fully replace data source object bindings
preview [options]Preview personal KB knowledge content
source get ​
bash
winnexo source get --source-id src-001 --json
winnexo source get --source-id src-001 --include-details --json
OptionRequiredDescription
--source-id <id>YesResource ID
--include-detailsNoInclude detailed config (settings/notes/structuredTables/unstructuredDocs)
source get-upload-signature ​

Get a pre-signed URL for direct PUT upload to OSS.

bash
winnexo source get-upload-signature --filename report.pdf --json
OptionRequiredDescription
--filename <name>YesFile name (with extension)
--operating-object-name <name>NoDigital Worker name
--expires <seconds>NoSignature expiration (60-86400, default 3600)
--content-type <type>NoFile Content-Type (auto-inferred if omitted)
--scope <scope>NoResource scope: source (personal) / knowledge (enterprise KB)

Upload flow: get-upload-signature → PUT to the returned uploadSignatureUrl → call source create-file with fileUrl/filePath.

source create-text ​
bash
winnexo source create-text -o customer -n "Meeting Notes" --text-content "Today we discussed Q3 plans..." --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name
--name <name>-nYesResource display name
--text-content <text>YesPlain text body
--directory-id <id>NoTarget personal directory ID
--description <text>NoResource description
source create-file ​
bash
winnexo source create-file -o customer -n "Report" \
  --file-path "uploads/2026/06/file.pdf" --file-record-id record-001 --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name
--name <name>-nYesResource display name
--file-path <path>YesFile OSS persistent path
--file-public-url <url>NoPublic file URL (with signature)
--file-name <name>NoOriginal file name (with extension)
--file-ext <ext>NoFile extension (e.g. pdf, docx)
--file-record-id <id>NoFile record ID
--directory-id <id>NoTarget personal directory ID
source create-aliding-doc ​
bash
winnexo source create-aliding-doc -o customer -n "Product Design Doc" \
  --file-public-url "https://alidocs.dingtalk.com/i/nodes/xxx" --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name
--name <name>-nYesResource display name
--file-public-url <url>YesAliDing online document public URL
--directory-id <id>NoTarget personal directory ID
source create-aliding-kb ​
bash
winnexo source create-aliding-kb -o customer \
  --kb-url "https://alidocs.dingtalk.com/i/nodes/xxx" --sync-enabled --sync-cron "0 0 * * *" --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name
--kb-url <url>YesAliDing knowledge base public URL
--kb-name <name>NoKB display name; back-filled by server if omitted
--directory-id <id>NoTarget personal directory ID
--sync-enabledNoEnable scheduled sync
--sync-cron <cron>NoCron expression (required when --sync-enabled)
source create-aliding-meeting ​
bash
winnexo source create-aliding-meeting -o customer -n "Weekly Meeting" \
  --oss-url "https://oss.example.com/audio.mp3" --shanji-url "https://shanji.example.com/xxx" --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name
--name <name>-nYesResource display name
--oss-url <url>YesPublic audio/video OSS URL
--shanji-url <url>YesOriginal Shanji link
--directory-id <id>NoTarget personal directory ID
--notes <text>NoMeeting notes (optional, assists analysis)
source create-dingtalk-meeting ​
bash
winnexo source create-dingtalk-meeting -o customer -n "DingTalk Weekly" --room-code 123456789 --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name
--name <name>-nYesResource display name
--room-code <code>YesDingTalk meeting room code
--credential-id <id>NoCredential ID (uses system default if omitted)
--directory-id <id>NoTarget personal directory ID
--notes <text>NoMeeting notes (optional)
source create-feishu-minute ​
bash
winnexo source create-feishu-minute -o customer -n "Feishu Minute" \
  --minute-token abc123token --credential-id cred-001 --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name
--name <name>-nYesResource display name
--minute-token <token>YesFeishu Minute token (unique identifier)
--credential-id <id>YesCredential ID
--directory-id <id>NoTarget personal directory ID
source create-voice-meeting ​

Upload an offline meeting.

bash
winnexo source create-voice-meeting -o customer -n "Offline Recording" \
  --file-url "https://oss.example.com/meeting.mp3" --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name
--name <name>-nYesResource display name
--file-url <url>YesOffline meeting audio file URL
--directory-id <id>NoTarget personal directory ID
source rename ​
bash
winnexo source rename --source-id src-001 --new-name "New Name" --json
OptionAliasRequiredDescription
--source-id <id>-sYesData source ID
--new-name <name>-nYesNew data source name
source replace-bindings ​

Fully replace data source object bindings.

bash
winnexo source replace-bindings --source-id src-001 \
  --object-bindings '[{"objectType":"customer","objectId":"c1"}]' --json
# Clear all bindings
winnexo source replace-bindings --source-id src-001 --object-bindings '[]' --json
OptionAliasRequiredDescription
--source-id <id>-sYesData source ID
--object-bindings <json>YesJSON array with objectType/objectId; pass [] to clear
source preview ​

Preview personal KB knowledge content (only your own resources).

bash
winnexo source preview --source-id src-001 --json
OptionRequiredDescription
--source-id <id>YesKnowledge ID (data source unique identifier)

Key fields: previewType (OSS_IMM / IMAGE / AUDIO / VIDEO / HTML / DING_TALK / VOICE_MEETING / CONTENT), previewUrl (preview link for non-CONTENT types), content (text content for CONTENT type), publicUrl (public file URL).

All create-* resource commands are async; initial status is usually PENDING, then transitions to READY or FAILED; poll with source get --source-id <id>.


knowledge-base — Manage knowledge bases ​

Query, categorize, and upload resources to enterprise knowledge bases.

SubcommandDescription
list [options]Admin query of enterprise KBs (no permission filtering)
visible-list [options]Query KBs visible to a Digital Worker (USE permission filtered)
visible-contents [options]Drill-down query of visible KB contents
submit-source [options]Submit a personal resource to an enterprise KB
create-aliding [options]Create an AliDing KB to personal resources
move-resource [options]Move a resource between enterprise KB directories
rename-source [options]Rename an enterprise KB data source
retry-failed [options]Retry all failed data sources in a directory
update-source-tags [options]Update data source tags
create-directory [options]Create an enterprise KB category
update-directory [options]Update an enterprise KB category
list-directories [options]Get enterprise KB category list
get-source [options]Get enterprise KB knowledge details
preview-source [options]Preview enterprise KB knowledge content
create-text [options]Upload plain text to enterprise KB
create-file [options]Upload a file to enterprise KB
create-aliding-doc [options]Upload an AliDing doc to enterprise KB
knowledge-base list ​

Admin query, no permission filtering, supports directory drill-down.

bash
winnexo knowledge-base list --json
winnexo knowledge-base list --keyword "product" --json
winnexo knowledge-base list --directory-id kb-dir-001 --source-types '["FILE"]' --json
OptionAliasRequiredDefaultDescription
--directory-id <id>-dNoDirectory ID; empty or root returns KB list, otherwise drills down
--page <num>-pNo1Page number
--page-size <num>No20Items per page
--sort-field <field>NonameSort field
--sort-order <order>NoascSort direction
--keyword <text>-kNoSearch keyword (only effective at KB list level)
--source-types <json>NoResource type filter, JSON array
knowledge-base visible-list ​

Filtered by USE permission, returns the KBs accessible to a Digital Worker.

bash
winnexo knowledge-base visible-list -o customer --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name

directoryId is used for visible-contents drill-down.

knowledge-base visible-contents ​

Drill-down query of visible KB contents.

bash
winnexo knowledge-base visible-contents -o customer -d kb-001 --json
OptionAliasRequiredDefaultDescription
--operating-object-name <name>-oYesDigital Worker name
--directory-id <id>-dYesKB directory ID
--page <num>-pNo1Page number
--page-size <num>No20Items per page
--sort-field <field>NonameSort field
--sort-order <order>NoascSort direction
--source-types <json>NoResource type filter
knowledge-base submit-source ​

Submit a personal resource to an enterprise KB directory.

bash
winnexo knowledge-base submit-source --source-id src-001 --target-directory-id kb-dir-002 --json
OptionAliasRequiredDescription
--source-id <id>-sYesPersonal resource ID
--target-directory-id <id>-tYesTarget enterprise KB directory ID
knowledge-base create-aliding ​

Create an AliDing KB from a URL to personal resources; content synced asynchronously.

bash
winnexo knowledge-base create-aliding -o customer --kb-url "https://alidocs.dingtalk.com/i/nodes/xxx" --json
OptionAliasRequiredDescription
--operating-object-name <name>-oYesDigital Worker name
--kb-url <url>YesAliDing KB public URL
--kb-name <name>NoDisplay name (fetched remotely if omitted)
--directory-id <id>NoTarget personal directory ID
--object-bindings <json>NoObject bindings JSON array
--sync-config <json>NoScheduled sync config, e.g. {"enabled":true,"cron":"0 0 * * *"}

Initial status is RUNNING; transitions to READY or FAILED after sync. Poll via personal-directory list.

knowledge-base move-resource ​
bash
winnexo knowledge-base move-resource \
  --source-directory-id kb-dir-001 --target-directory-id kb-dir-002 \
  --source-id src-001 --knowledge-id kb-001 --json
OptionAliasRequiredDescription
--source-directory-id <id>YesSource directory ID
--target-directory-id <id>YesTarget directory ID
--source-id <id>-sYesResource ID to move
--knowledge-id <id>-kYesTarget KB ID
knowledge-base rename-source ​
bash
winnexo knowledge-base rename-source --source-id src-001 --new-name "New Name" --json
OptionAliasRequiredDescription
--source-id <id>-sYesData source ID
--new-name <name>-nYesNew name
knowledge-base retry-failed ​
bash
winnexo knowledge-base retry-failed --directory-id kb-dir-001 --json
OptionAliasRequiredDescription
--directory-id <id>-dYesEnterprise KB directory ID (recursive)
knowledge-base update-source-tags ​
bash
winnexo knowledge-base update-source-tags --source-id src-001 --source-tags '["FAQ","Important"]' --json
OptionAliasRequiredDescription
--source-id <id>-sYesData source ID
--source-tags <json>NoJSON string list; pass empty to clear tags
knowledge-base create-directory ​
bash
winnexo knowledge-base create-directory --name "Product Docs" --json
OptionAliasRequiredDescription
--name <name>-nYesCategory name
--parent-directory-id <id>NoParent category ID; root if omitted
--description <text>NoCategory description
knowledge-base update-directory ​
bash
winnexo knowledge-base update-directory --directory-id kb-dir-001 --name "New Category" --json
OptionAliasRequiredDescription
--directory-id <id>-dYesCategory ID to update
--name <name>-nNoNew category name
--description <text>NoNew description
--parent-directory-id <id>NoNew parent category ID
knowledge-base list-directories ​
bash
winnexo knowledge-base list-directories --json
winnexo knowledge-base list-directories --directory-id kb-dir-001 --json
OptionAliasRequiredDefaultDescription
--directory-id <id>-dNoParent category ID; returns root tree if omitted
--sort-field <field>Nogmt_createSort field
--sort-order <order>NodescSort direction
knowledge-base get-source ​
bash
winnexo knowledge-base get-source --source-id src-001 --json
OptionAliasRequiredDescription
--source-id <id>-sYesKnowledge ID
knowledge-base preview-source ​

Preview enterprise KB knowledge content (requires DEVELOPMENT_KB_VIEW permission).

bash
winnexo knowledge-base preview-source --source-id src-001 --json
OptionAliasRequiredDescription
--source-id <id>-sYesKnowledge ID

Key fields: previewType (OSS_IMM / IMAGE / AUDIO / VIDEO / HTML / DING_TALK / VOICE_MEETING / CONTENT), previewUrl, content, fileName, fileExt, publicUrl.

knowledge-base create-text ​
bash
winnexo knowledge-base create-text -n "FAQ" --text-content "Frequently asked questions..." --json
OptionAliasRequiredDescription
--name <name>-nYesResource display name
--text-content <text>YesPlain text body
--operating-object-name <name>-oNoDigital Worker name
--directory-id <id>-dNoTarget directory ID
--knowledge-id <id>NoKnowledge base ID
--source-tags <json>NoResource tags JSON list
knowledge-base create-file ​
bash
winnexo knowledge-base create-file -n "Manual.pdf" --file-path "uploads/2026/06/manual.pdf" --directory-id kb-dir-001 --json
OptionAliasRequiredDescription
--name <name>-nYesResource display name
--file-path <path>YesFile OSS persistent path
--operating-object-name <name>-oNoDigital Worker name
--file-public-url <url>NoPublic file URL
--file-name <name>NoOriginal file name
--file-ext <ext>NoFile extension
--file-record-id <id>NoFile record ID
--directory-id <id>-dNoTarget directory ID
--knowledge-id <id>NoKnowledge base ID
--source-tags <json>NoResource tags JSON list
knowledge-base create-aliding-doc ​
bash
winnexo knowledge-base create-aliding-doc -n "Product Design" --file-public-url "https://alidocs.dingtalk.com/i/nodes/xxx" --json
OptionAliasRequiredDescription
--name <name>-nYesResource display name
--file-public-url <url>YesAliDing online document public URL
--operating-object-name <name>-oNoDigital Worker name
--directory-id <id>-dNoTarget directory ID
--knowledge-id <id>NoKnowledge base ID
--source-tags <json>NoResource tags JSON list

user — Current user info and credits ​

Manage the current logged-in user's own info and credits (for managing other users in the tenant, use tenant-user).

SubcommandDescription
getGet current user info
update [options]Update user info
creditsQuery credit usage
user get ​
bash
winnexo user get --json
user update ​

Update user info. At least one option must be provided.

bash
winnexo user update --name "New Name" --json
winnexo user update --language-preference zh-CN --profile-role-info "Product Manager" --json
OptionAliasRequiredDescription
--name <name>-nNoDisplay name
--avatar <url>NoAvatar URL
--language-preference <lang>NoLanguage preference (zh-CN / en-US)
--profile-role-info <text>NoUser role description (max 100 chars)
--offering <text>NoCapabilities/service description (max 1000 chars)
--self-introduction <text>NoSelf-introduction (max 1000 chars)
user credits ​

Query credit usage.

bash
winnexo user credits --json
FieldTypeDescription
creditLimitnumberFormal credit limit
usedCreditsnumberUsed formal credits
remainingCreditsnumberRemaining formal credits
shadowCreditLimitnumberShadow credit limit (trial credits not actually charged)
shadowUsedCreditsnumberUsed shadow credits
shadowRemainingCreditsnumberRemaining shadow credits

instance — Instance information ​

SubcommandDescription
expire-timeQuery instance expiration time
instance expire-time ​
bash
winnexo instance expire-time --json

billing — Credit billing query ​

Billing records the credit details consumed by every operation on the platform.

SubcommandDescription
list [options]Paginated billing list query
billing list ​

Paginated billing query with filters for user, operation type, status, time range, and biz source.

bash
winnexo billing list --json
winnexo billing list --page 2 --page-size 50 --no-ignore-zero --json
winnexo billing list --start-time 2026-05-01T00:00:00Z --end-time 2026-05-31T23:59:59Z --json
winnexo billing list --operation CHAT --status COMPLETED --json
OptionAliasRequiredDefaultDescription
--page <num>-pNo1Page number
--page-size <num>No20Items per page
--user-id <id>NoFilter by user ID
--operation <type>NoFilter by operation type
--status <status>NoFilter by status
--start-time <datetime>NoStart time (ISO 8601)
--end-time <datetime>NoEnd time (ISO 8601)
--biz-type <type>NoFilter by biz source type
--biz-id <id>NoFilter by biz source ID
--no-ignore-zeroNoShow all records (including credit=0); by default credit=0 records are filtered out

totalCreditCost is a string decimal (e.g. "1.5") for precision; isShadow=true means shadow billing (not actually charged). Default filters out credit=0 records.


config — Manage CLI configuration ​

Manages configuration stored in ~/.winnexo/config.json.

SubcommandDescription
set <key> <value>Set a config value
get <key>Get a config value
listList all config
config set ​
bash
winnexo config set server_domain https://api.winnexo.com
winnexo config set user_token wn_xxxxxxxxxxxx
config get ​
bash
winnexo config get server_domain
config list ​
bash
winnexo config list

repl — Enter the interactive command line ​

Enter REPL interactive mode; text input is sent as a message (streamed), first input auto-creates a session.

bash
winnexo repl

Built-in commands:

CommandDescription
/helpShow help
/statusView current session state (session ID, Digital Worker, message count)
/newStart a new session (clear current sessionId)
/clearClear screen
/e <name>Set Digital Worker (aliases: /employee, /digital-employee-name)
/exitExit REPL (alias: /quit, or press Ctrl+D)

Agents should not use repl; use the chat command with --json instead.


org-sync — Organization structure sync ​

Enumerate sync configs, register custom organizations, push department trees and member relationships, and query sync task results.

SubcommandDescription
list-configsEnumerate available sync configs (saml/oauth2/wecom/custom)
create-custom [options]Register a purely custom organization
sync [options]Push department tree + member relationships (async task)
query [options]Query sync task results
org-sync list-configs ​
bash
winnexo org-sync list-configs --json
org-sync create-custom ​

Register a purely custom organization. Note: custom organizations only support department tree sync, not member relationship sync.

bash
winnexo org-sync create-custom --corp-id my-org --corp-name "My Organization" --json
OptionRequiredDescription
--corp-id <id>YesCustom org identifier (format: ^[a-z0-9][a-z0-9\-]{2,63}$)
--corp-name <name>NoOrg display name (same as corpId if omitted)
org-sync sync ​

Accept department tree and member data, create an async sync task. Returns taskId for query polling.

bash
winnexo org-sync sync --platform-type custom --corp-id my-org \
  --departments '[{"deptId":"root","deptName":"HQ","parentDeptId":null,"order":0}]' --json

# Sync members (SAML/OAuth2 scenario)
winnexo org-sync sync --platform-type saml --corp-id "https://idp.example.com" --sync-members \
  --departments '[{"deptId":"root","deptName":"Root"}]' \
  --members '[{"deptId":"root","accountId":"user@example.com","name":"Alice"}]' --json
OptionRequiredDescription
--platform-type <type>YesPlatform type: saml / oauth2 / custom
--corp-id <id>YesCorp identifier (must match list-configs result)
--departments <json>YesDepartment list JSON
--sso-settings-id <id>NoSSO config ID (auto-inferred for SAML/OAuth2)
--sync-membersNoSync member relationships (not supported in custom mode)
--members <json>NoMember list JSON (required when syncMembers=true)
org-sync query ​

Query sync task status by taskId. Status flow: PENDING → RUNNING → COMPLETED / FAILED / TIMEOUT / CANCELED. Recommended polling interval: 3–5 seconds.

bash
winnexo org-sync query --task-id 12345 --json
OptionRequiredDescription
--task-id <id>YesSync task ID (returned by sync command)

custom mode does not support member sync; total departments + members capped at 50,000.


tenant-user — Tenant user management (admin) ​

Manage any user under the current tenant (admin operations). Distinct from user (manage self).

SubcommandDescription
create [options]Create a user and add to current tenant
update [options]Update user info (including enable/disable, role change, user group adjustment)
remove [options]Remove user from current tenant (preserves user entity)
get [options]Query user details
list [options]Paginated query of tenant members
reset-password [options]Admin reset of user password

System role codes: SUPER_ADMIN / SYSTEM_ADMIN / SEMANTIC_ADMIN / SKILL_ADMIN / KB_ADMIN / AGENT_ADMIN / APPLICATION_USER (default).

tenant-user create ​
bash
winnexo tenant-user create -a user001 -n "Alice" --json
winnexo tenant-user create -a user001 -n "Alice" -r '["APPLICATION_USER","SEMANTIC_ADMIN"]' --json
OptionAliasRequiredDescription
--account-id <id>-aYesWINNEXO login account (unique)
--display-name <name>-nYesDisplay name (unique within tenant)
--role-codes <json>-rNoSystem role codes JSON list; defaults to APPLICATION_USER
--password-encrypted <cipher>-pNoRSA-OAEP-SHA256 encrypted password; uses system default if omitted
tenant-user update ​

All fields optional; roleCodes and userGroupIds use full-replacement semantics.

bash
winnexo tenant-user update -u 123 --active false --json
winnexo tenant-user update -u 123 -n "New Name" -r '["APPLICATION_USER"]' --json
winnexo tenant-user update -u 123 -g '["group1","group2"]' --json
OptionAliasRequiredDescription
--user-id <id>-uYesTarget user ID
--display-name <name>-nNoNew display name
--role-codes <json>-rNoNew role list JSON (full replacement)
--active <bool>NoEnable/disable (true/false)
--user-group-ids <json>-gNoNew user group ID list JSON (full replacement)

Disabling a user is subject to "last super admin protection": cannot disable the tenant's last super administrator.

tenant-user remove ​

Remove a user from the current tenant. User entity is preserved; only removes tenant association.

bash
winnexo tenant-user remove -u 123 --json
OptionAliasRequiredDescription
--user-id <id>-uYesUser ID to remove
tenant-user get ​

Query user details by userId or accountId.

bash
winnexo tenant-user get -u 123 --json
winnexo tenant-user get -a user001 --json
OptionAliasRequiredDescription
--user-id <id>-uOne ofUser ID
--account-id <id>-aOne ofWINNEXO login account
tenant-user list ​
bash
winnexo tenant-user list --json
winnexo tenant-user list -k "Zhang" --active true --json
winnexo tenant-user list -r '["APPLICATION_USER"]' --json
OptionAliasRequiredDefaultDescription
--page <num>-pNo1Page number
--page-size <num>No20Items per page (max 100)
--keyword <text>-kNoSearch keyword (fuzzy match on name and account)
--active <bool>NoEnable/disable status filter
--role-codes <json>-rNoFilter by roles JSON array
tenant-user reset-password ​

Reset user password. Without --password-encrypted, resets to system default.

bash
winnexo tenant-user reset-password -u 123 --json
winnexo tenant-user reset-password -u 123 -p '<rsa_encrypted_password>' --json
OptionAliasRequiredDescription
--user-id <id>-uYesTarget user ID
--password-encrypted <cipher>-pNoRSA-OAEP-SHA256 encrypted new password

user-token — User API Token self-service management ​

Self-service API Token management for end users; only caller_type=user may call; operations are bound to the Token holder.

SubcommandDescriptionEndpoint
infoQuery current user’s Token statusPOST /openapi/getTokenInfo
enableEnable API Token (idempotent)POST /openapi/enableToken
disableDisable API TokenPOST /openapi/disableToken
resetReset API Token (old invalidated + new issued)POST /openapi/resetToken
user-token info ​
bash
winnexo user-token info --json
FieldTypeDescription
enabledbooleanWhether Token is enabled (ACTIVE Token exists)
tokenMaskedstring | nullMasked Token value
gmtCreatestring | nullToken creation time (ISO 8601)
user-token enable ​

Enable API Token (idempotent if ACTIVE Token already exists).

bash
winnexo user-token enable --json
FieldTypeDescription
tokenstringToken plaintext (returned only this once; store securely)
tokenMaskedstringMasked Token value
user-token disable ​
bash
winnexo user-token disable --json
FieldTypeDescription
disabledbooleanWhether operation succeeded
user-token reset ​

Reset API Token (old permanently invalidated + new issued).

bash
winnexo user-token reset --json
FieldTypeDescription
tokenstringNew Token plaintext (returned only this once)
tokenMaskedstringMasked new Token value

After reset, the old Token is permanently invalidated and unrecoverable. The new Token plaintext is only returned in this response; store it securely.


Output Format ​

Human-readable mode (default) ​

Default output with colors and icons for the terminal; tables formatted with cli-table3.

JSON mode (--json) ​

With the --json flag, output passes through the raw API response (POP gateway format) without additional wrapping.

bash
winnexo --json health

On error:

json
{
  "status": "error",
  "message": "Health check failed",
  "error": "Unauthorized"
}

Exit Codes ​

Exit codeMeaning
0Success
1API error
2Parameter validation error
3Authentication error

Credential Configuration ​

WinNexo CLI supports three credential configuration methods, from highest to lowest priority:

  1. CLI arguments: --server-domain / --user-token / --tenant-id
  2. Environment variables: WINNEXO_SERVER_DOMAIN / WINNEXO_USER_TOKEN / WINNEXO_DEFAULT_TENANT_ID / WINNEXO_DEFAULT_DIGITAL_EMPLOYEE_NAME
  3. Config file: ~/.winnexo/config.json
json
{
  "server_domain": "https://your-api-endpoint.com",
  "user_token": "wn_xxxxxxxxxxxx",
  "tenant_id": "10001",
  "digital_employee_name": "customer"
}

How It Works ​

mermaid
graph LR
    A[Your terminal / script / IDE] --> B[winnexo CLI]
    B -->|Env-var identity| C[WinNexo OpenAPI]
    C --> D[Digital Workers / Skills / Resources / Knowledge]

The CLI obtains identity and service address via four environment variables:

Env variableMeaningSource
WINNEXO_SERVER_DOMAINWinNexo server addressPersonal Settings → Open Integration
WINNEXO_USER_TOKENBearer Token (wn_ prefix)Personal Settings → Open Integration → Enable UserToken
WINNEXO_DEFAULT_TENANT_IDDefault tenant ID (x-tenant-id header)Personal Settings → Open Integration
WINNEXO_DEFAULT_DIGITAL_EMPLOYEE_NAMEDefault Digital Worker namePersonal Settings → Open Integration

Credentials resolve in priority: CLI arguments → environment variables → config file (~/.winnexo/config.json).

Module Composition ​

For installation instructions, see Use WinNexo in External AI Workspaces.

Manual Installation ​

If you prefer not to let the AI operate on your system:

bash
# macOS Apple Silicon
curl -L -o /tmp/winnexo \
  "https://winnexo-common.oss-cn-shanghai.aliyuncs.com/1.7.20260709/cli/release/winnexo-v1.0.0-darwin-arm64"
sudo mv /tmp/winnexo /usr/local/bin/winnexo
sudo chmod +x /usr/local/bin/winnexo

# macOS only: remove quarantine + ad-hoc codesign (avoid "damaged" prompt)
sudo xattr -rd com.apple.quarantine /usr/local/bin/winnexo
sudo codesign --sign - /usr/local/bin/winnexo

# Configure env variables (write to ~/.zshrc then source)
export WINNEXO_SERVER_DOMAIN="https://your-api-endpoint.com"
export WINNEXO_USER_TOKEN="wn_your-token-here"
export WINNEXO_DEFAULT_TENANT_ID="10001"
export WINNEXO_DEFAULT_DIGITAL_EMPLOYEE_NAME="customer"

winnexo --version
winnexo health --json

For other platforms, replace the binary name with darwin-x64 / linux-x64 / linux-arm64 / win-x64.exe. Without sudo, install to ~/.local/bin/ and add to PATH.

Typical Scenarios ​

Scenario 1: Daily automated customer summary ​

Add a line to crontab:

bash
0 9 * * 1-5 winnexo skill run --skill-code customer-daily-recap \
  --arguments '{"date": "yesterday"}' --json \
  > ~/Documents/notes/$(date +%Y%m%d).json

Every weekday at 9 AM, a local copy of yesterday’s customer follow-up summary is auto-generated (JSON, can be piped to Markdown).

Scenario 2: Bulk ingest ​

50 PDFs in a folder to upload to the KB:

bash
for f in ./contracts/*.pdf; do
  winnexo knowledge-base create-file -n "$(basename "$f")" \
    --file-path "$f" --directory-id kb-dir-001 --json
done

The CLI uploads one by one, auto-ingests—10x faster than manual drag.

Scenario 3: IDE workflow ​

Writing a tech proposal in VS Code and want to reference last week’s meeting minutes:

bash
winnexo output list --keyword "weekly meeting" --json
# Get a source-id from the output list
winnexo source preview --source-id $ID --json

Paste the output into your proposal.

Scenario 4: CI/CD pipeline ​

After deployment, have the Digital Worker write a release note:

bash
winnexo skill run --skill-code release-note-writer \
  --arguments "{\"version\": \"$VERSION\", \"diff\": \"$(git log --oneline ...)\"}" --json \
  | tee CHANGELOG.md

Best Practices ​

✓
"Install via 'paste the prompt to the AI workspace' for minimum effort"—don’t pick binaries yourself, don’t modify PATH yourself; let Qoder Work (AI workspace) run the official prompt. If something goes wrong, it can troubleshoot directly.
✓
"Run `--help` before typing a command"—`winnexo skill --help`, `winnexo knowledge-base --help` give full subcommand listings.
✓
"Don’t hardcode credentials in scripts"—read `WINNEXO_USER_TOKEN` and other env vars; use Secrets in CI/CD.
i
For credential reset instructions, see Manage UserToken.
i
"Restart the terminal after installing on Windows"—PATH changes don’t take effect in already-open terminals.

Try It ​

One-click install via AI workspace
Verify
winnexo --version
winnexo health --json
If it returns `callerType: user` and `authSource: bearer`, you’re set.
Run a simple Skill
winnexo skill list --json               # See available Skills
winnexo skill run --skill-code $CODE --arguments '{}' --json   # Run one
Plug it into your workflow

crontab, Makefile, CI, IDE Tasks—all can use it directly.


Related reading: OpenAPI, Custom Skills