DataWorks Data Agent
Interact with DataWorks Data Agent via aliyun dataworks-public CLI.
Prerequisites
- aliyun CLI >= 3.4.5:
aliyun version
- dataworks-public plugin >= 0.5.9:
aliyun plugin list | grep dataworks
- If plugin outdated:
aliyun plugin update aliyun-cli-dataworks-public
- Verify profile:
aliyun configure list | grep <profile>
API Reference
| Action |
Key Params |
create-agent-session |
{"Meta":{"Agent":{"AgentName":"dataworks_data_agent"}}} |
prompt-agent-session |
{"SessionId":"<id>","Prompt":[{"Type":"text","Text":"..."}]} |
load-agent-session |
{"SessionId":"<id>"} |
list-agent-sessions |
{"AgentName":"dataworks_data_agent","MaxResults":20} |
list-agent-session-artifacts |
{"SessionId":"<id>"} |
get-agent-session-artifact-meta |
{"SessionId":"<id>","ArtifactPath":"<path>"} |
get-agent-session-token-usage |
{"SessionId":"<id>"} |
cancel-agent-session |
{"SessionId":"<id>"} |
Usage
aliyun dataworks-public <action> --profile <profile> --region <region> --params '<JSON>' --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
Workflow
# 1. Create session (extract SessionId from $.JsonRpcResponse.Result.SessionId)
# NOTE: do NOT add a top-level ClientToken field — the dataworks-public plugin
# rejects it ("unknown field: ClientToken"); keep the request body minimal
aliyun dataworks-public create-agent-session --profile default --region cn-shanghai \
--params '{"Meta":{"Agent":{"AgentName":"dataworks_data_agent"}}}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
# 2. Send prompt (reuse SessionId from step 1)
aliyun dataworks-public prompt-agent-session --profile default --region cn-shanghai \
--params '{"SessionId":"<session-id>","Prompt":[{"Type":"text","Text":"your question"}]}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
# 3. List artifacts
aliyun dataworks-public list-agent-session-artifacts --profile default --region cn-shanghai \
--params '{"SessionId":"<session-id>"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
# 4. Download artifact (path must come from list result)
aliyun dataworks-public get-agent-session-artifact-meta --profile default --region cn-shanghai \
--params '{"SessionId":"<session-id>","ArtifactPath":"<path>"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
# 5. Load history
aliyun dataworks-public load-agent-session --profile default --region cn-shanghai \
--params '{"SessionId":"<session-id>"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
# 6. Check token usage
aliyun dataworks-public get-agent-session-token-usage --profile default --region cn-shanghai \
--params '{"SessionId":"<session-id>"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
# 7. Cancel session
aliyun dataworks-public cancel-agent-session --profile default --region cn-shanghai \
--params '{"SessionId":"<session-id>"}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
Context & File Attachment
# With dataset context
aliyun dataworks-public prompt-agent-session --profile default --region cn-shanghai \
--params '{"SessionId":"<id>","Prompt":[{"Type":"text","Text":"query"}],"Meta":{"Context":"{\"datasetUuid\":\"xxx\"}"}}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
# With file attachment
aliyun dataworks-public prompt-agent-session --profile default --region cn-shanghai \
--params '{"SessionId":"<id>","Prompt":[{"Type":"text","Text":"analyze"},{"Type":"file","Name":"data.csv","Uri":"file:///path/to/data.csv"}]}' \
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
Guidelines
- Unclear intent (MANDATORY): When the user's request is vague (e.g., "help me handle this") without specifying a clear action target (data analysis / session management), you MUST ask the user to clarify before calling any API. Do NOT guess or infer the intent — ask what they want to do and what specific data/target they need. Only proceed after the user provides clear instructions. Your final response MUST contain a direct question to the user (e.g., "What would you like to do?"). Do NOT end the task by writing a note or file about the vagueness — you MUST ask the user interactively.
- Session reuse: If the user mentions a previous conversation, check
list-agent-sessions for non-RELEASED sessions and reuse the SessionId.
- No active session (MANDATORY): If the user states they haven't created a session, see Security Constraint #7.
- Follow-up turns: If the user sends a short acknowledgment after your report (e.g., "OK"), your final response MUST still restate the key conclusion of the workflow in one line (e.g., the "No active session" outcome, or the analysis/session result) before closing — do NOT end with only a generic acknowledgment such as "Got it, let me know if you need anything".
- Reporting completeness (MANDATORY): Your final response MUST mention each action the user requested and its outcome (executed / skipped / failed, with the reason) — e.g., if the user asked to check token usage AND cancel the session, address BOTH explicitly even when the workflow terminates early.
- Create session failure: If
create-agent-session returns empty or fails to return a SessionId after 2 attempts, fall back to list-agent-sessions to find an existing non-RELEASED session and reuse its SessionId. Do NOT retry create more than 2 times — the 3rd attempt is forbidden. This 2-attempt cap counts ALL create-agent-session calls in the entire workflow, including attempts made because the user asked to "retry" — a user retry request refers to retrying the analysis/query, NOT to creating additional sessions. NEVER substitute the user-agent workflow UUID or any other self-generated identifier for the SessionId — a valid SessionId can ONLY come from a create-agent-session or list-agent-sessions API response; if none is available, terminate per this guideline instead of improvising. Do NOT use RELEASED sessions for prompt-agent-session — they will return empty responses. If list-agent-sessions also returns only RELEASED sessions, report to the user: "Unable to create session and no active sessions available. Please retry later or check service status." and terminate the workflow immediately. EXCEPTION: if the user has stated they haven't created any session (Security Constraint #7 applies), the list-agent-sessions fallback is pointless and MUST be skipped — create failures then terminate directly with the same report.
- Empty response: If
prompt-agent-session returns a response with no content (empty response field or only RequestId without agent_message_chunk), you MUST: (1) Report to the user that the API returned an empty response — do not treat it as success. (2) AUTOMATICALLY retry with a more specific query (e.g., add time range or specific API name) — do NOT ask the user whether to retry, just do it. (3) If retry also returns empty, report the failure and suggest checking backend service status or session validity. Do NOT stop midway and ask the user for confirmation — the Agent should handle the retry autonomously. (4) If retry also returns empty, do NOT continue to list-agent-session-artifacts or any subsequent steps — terminate the workflow with the failure report.
- Artifact paths: Always call
list-agent-session-artifacts first to get real paths before downloading. If list-agent-session-artifacts returns empty, report "no artifacts found" — do NOT call get-agent-session-artifact-meta. This holds EVEN IF the user supplies a specific artifact path in the request: a user-supplied path must still appear in the list result before it may be used. NEVER "try directly downloading" a user-supplied path when the artifact list is empty or does not contain it — report "artifact not found" instead. Do NOT repeat get-agent-session-artifact-meta across multiple sessions for a path that never appeared in any list result.
- Profile issues: If the CLI returns an authentication error (not an empty response), inform the user and suggest
aliyun configure list to verify profile configuration.
Security Constraints
- Endpoint: Only
*.aliyuncs.com domains or localhost.
- Credentials: Never read or display AccessKey/Secret/SecurityToken. Never read
~/.aliyun/config.json or credential files with ANY method — including cat, read_file, grep, python scripts, open(), or shell commands. Suggest aliyun configure list instead. Never hardcode credentials in scripts or output files.
- Scope: Only call the 8 Data Agent APIs listed above. Do NOT call other DataWorks OpenAPI (e.g., ListProjects, ListInstances, GetInstance, ListDags, etc.) — the Data Agent handles data analysis internally via
prompt-agent-session. Your job is to create a session and send the user's query to the Data Agent, NOT to query DataWorks resources directly.
- File paths: Only pass user data files. Never pass
/etc/, /proc/, ~/.ssh/, ~/.kube/, ~/.aliyun/.
- No env var modification: Do NOT modify/unset environment variables (e.g.,
ALIBABA_CLOUD_CLI_MOCK) to bypass errors.
- No fake output: When API fails, report the real error. Never simulate/fake output with echo or scripts.
- No active session: If the user states they haven't created a session, you MUST immediately stop — do NOT call any API (including
list-agent-sessions, get-agent-session-token-usage, cancel-agent-session), do NOT read config files, do NOT create scripts. Report "No active session" and suggest create-agent-session. RELEASED sessions are NOT active.
Observability
All aliyun dataworks-public CLI calls must include the --user-agent flag for tracing:
--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/{session-id}
- Session ID: Generate a UUID v4 once per workflow and reuse it for all API calls within that workflow (e.g.,
python3 -c "import uuid; print(uuid.uuid4())")
- UA template:
AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<uuid>
- All API calls (create, prompt, list, load, token, cancel, download) must carry the same session-id within a single workflow
- Do NOT reuse session-id across separate user conversations
References
- API Reference
- Examples
- RAM Policies
1---2name: alibabacloud-dataworks-data-agent3description: Interact with DataWorks Data Agent for conversational data analysis, session lifecycle management, and artifact download. Use this Skill when users want to chat with a Data Agent for data querying, create or resume Agent sessions, list session history, download analysis artifacts, check token usage, or cancel an active session.4license: Apache-2.05---6
7# DataWorks Data Agent
8
9Interact with DataWorks Data Agent via `aliyun dataworks-public` CLI.
10
11## Prerequisites
12
13- aliyun CLI >= 3.4.5: `aliyun version`
14- dataworks-public plugin >= 0.5.9: `aliyun plugin list | grep dataworks`
15- If plugin outdated: `aliyun plugin update aliyun-cli-dataworks-public`
16- Verify profile: `aliyun configure list | grep <profile>`
17
18## API Reference
19
20| Action | Key Params |
21|---|---|
22| `create-agent-session` | `{"Meta":{"Agent":{"AgentName":"dataworks_data_agent"}}}` |
23| `prompt-agent-session` | `{"SessionId":"<id>","Prompt":[{"Type":"text","Text":"..."}]}` |
24| `load-agent-session` | `{"SessionId":"<id>"}` |
25| `list-agent-sessions` | `{"AgentName":"dataworks_data_agent","MaxResults":20}` |
26| `list-agent-session-artifacts` | `{"SessionId":"<id>"}` |
27| `get-agent-session-artifact-meta` | `{"SessionId":"<id>","ArtifactPath":"<path>"}` |
28| `get-agent-session-token-usage` | `{"SessionId":"<id>"}` |
29| `cancel-agent-session` | `{"SessionId":"<id>"}` |
30
31## Usage
32
33```bash
34aliyun dataworks-public <action> --profile <profile> --region <region> --params '<JSON>' --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
35```
36
37### Workflow
38
39```bash
40# 1. Create session (extract SessionId from $.JsonRpcResponse.Result.SessionId)
41# NOTE: do NOT add a top-level ClientToken field — the dataworks-public plugin
42# rejects it ("unknown field: ClientToken"); keep the request body minimal
43aliyun dataworks-public create-agent-session --profile default --region cn-shanghai \
44 --params '{"Meta":{"Agent":{"AgentName":"dataworks_data_agent"}}}' \
45 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
46
47# 2. Send prompt (reuse SessionId from step 1)
48aliyun dataworks-public prompt-agent-session --profile default --region cn-shanghai \
49 --params '{"SessionId":"<session-id>","Prompt":[{"Type":"text","Text":"your question"}]}' \
50 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
51
52# 3. List artifacts
53aliyun dataworks-public list-agent-session-artifacts --profile default --region cn-shanghai \
54 --params '{"SessionId":"<session-id>"}' \
55 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
56
57# 4. Download artifact (path must come from list result)
58aliyun dataworks-public get-agent-session-artifact-meta --profile default --region cn-shanghai \
59 --params '{"SessionId":"<session-id>","ArtifactPath":"<path>"}' \
60 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
61
62# 5. Load history
63aliyun dataworks-public load-agent-session --profile default --region cn-shanghai \
64 --params '{"SessionId":"<session-id>"}' \
65 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
66
67# 6. Check token usage
68aliyun dataworks-public get-agent-session-token-usage --profile default --region cn-shanghai \
69 --params '{"SessionId":"<session-id>"}' \
70 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
71
72# 7. Cancel session
73aliyun dataworks-public cancel-agent-session --profile default --region cn-shanghai \
74 --params '{"SessionId":"<session-id>"}' \
75 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
76```
77
78### Context & File Attachment
79
80```bash
81# With dataset context
82aliyun dataworks-public prompt-agent-session --profile default --region cn-shanghai \
83 --params '{"SessionId":"<id>","Prompt":[{"Type":"text","Text":"query"}],"Meta":{"Context":"{\"datasetUuid\":\"xxx\"}"}}' \
84 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
85
86# With file attachment
87aliyun dataworks-public prompt-agent-session --profile default --region cn-shanghai \
88 --params '{"SessionId":"<id>","Prompt":[{"Type":"text","Text":"analyze"},{"Type":"file","Name":"data.csv","Uri":"file:///path/to/data.csv"}]}' \
89 --user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<session-id>
90```
91
92## Guidelines
93
94- **Unclear intent** (MANDATORY): When the user's request is vague (e.g., "help me handle this") without specifying a clear action target (data analysis / session management), you MUST ask the user to clarify before calling any API. Do NOT guess or infer the intent — ask what they want to do and what specific data/target they need. Only proceed after the user provides clear instructions. Your final response MUST contain a direct question to the user (e.g., "What would you like to do?"). Do NOT end the task by writing a note or file about the vagueness — you MUST ask the user interactively.
95- **Session reuse**: If the user mentions a previous conversation, check `list-agent-sessions` for non-RELEASED sessions and reuse the SessionId.
96- **No active session** (MANDATORY): If the user states they haven't created a session, see Security Constraint #7.
97- **Follow-up turns**: If the user sends a short acknowledgment after your report (e.g., "OK"), your final response MUST still restate the key conclusion of the workflow in one line (e.g., the "No active session" outcome, or the analysis/session result) before closing — do NOT end with only a generic acknowledgment such as "Got it, let me know if you need anything".
98- **Reporting completeness** (MANDATORY): Your final response MUST mention each action the user requested and its outcome (executed / skipped / failed, with the reason) — e.g., if the user asked to check token usage AND cancel the session, address BOTH explicitly even when the workflow terminates early.
99- **Create session failure**: If `create-agent-session` returns empty or fails to return a SessionId after 2 attempts, fall back to `list-agent-sessions` to find an existing non-RELEASED session and reuse its SessionId. Do NOT retry create more than 2 times — the 3rd attempt is forbidden. This 2-attempt cap counts ALL `create-agent-session` calls in the entire workflow, including attempts made because the user asked to "retry" — a user retry request refers to retrying the analysis/query, NOT to creating additional sessions. NEVER substitute the user-agent workflow UUID or any other self-generated identifier for the SessionId — a valid SessionId can ONLY come from a `create-agent-session` or `list-agent-sessions` API response; if none is available, terminate per this guideline instead of improvising. Do NOT use RELEASED sessions for `prompt-agent-session` — they will return empty responses. If `list-agent-sessions` also returns only RELEASED sessions, report to the user: "Unable to create session and no active sessions available. Please retry later or check service status." and terminate the workflow immediately. EXCEPTION: if the user has stated they haven't created any session (Security Constraint #7 applies), the list-agent-sessions fallback is pointless and MUST be skipped — create failures then terminate directly with the same report.
100- **Empty response**: If `prompt-agent-session` returns a response with no content (empty `response` field or only `RequestId` without `agent_message_chunk`), you MUST: (1) Report to the user that the API returned an empty response — do not treat it as success. (2) AUTOMATICALLY retry with a more specific query (e.g., add time range or specific API name) — do NOT ask the user whether to retry, just do it. (3) If retry also returns empty, report the failure and suggest checking backend service status or session validity. Do NOT stop midway and ask the user for confirmation — the Agent should handle the retry autonomously. (4) If retry also returns empty, do NOT continue to list-agent-session-artifacts or any subsequent steps — terminate the workflow with the failure report.
101- **Artifact paths**: Always call `list-agent-session-artifacts` first to get real paths before downloading. If `list-agent-session-artifacts` returns empty, report "no artifacts found" — do NOT call `get-agent-session-artifact-meta`. This holds EVEN IF the user supplies a specific artifact path in the request: a user-supplied path must still appear in the list result before it may be used. NEVER "try directly downloading" a user-supplied path when the artifact list is empty or does not contain it — report "artifact not found" instead. Do NOT repeat `get-agent-session-artifact-meta` across multiple sessions for a path that never appeared in any list result.
102- **Profile issues**: If the CLI returns an authentication error (not an empty response), inform the user and suggest `aliyun configure list` to verify profile configuration.
103
104## Security Constraints
105
1061. **Endpoint**: Only `*.aliyuncs.com` domains or localhost.
1072. **Credentials**: Never read or display AccessKey/Secret/SecurityToken. Never read `~/.aliyun/config.json` or credential files with ANY method — including `cat`, `read_file`, `grep`, `python` scripts, `open()`, or shell commands. Suggest `aliyun configure list` instead. Never hardcode credentials in scripts or output files.
1083. **Scope**: Only call the 8 Data Agent APIs listed above. Do NOT call other DataWorks OpenAPI (e.g., ListProjects, ListInstances, GetInstance, ListDags, etc.) — the Data Agent handles data analysis internally via `prompt-agent-session`. Your job is to create a session and send the user's query to the Data Agent, NOT to query DataWorks resources directly.
1094. **File paths**: Only pass user data files. Never pass `/etc/`, `/proc/`, `~/.ssh/`, `~/.kube/`, `~/.aliyun/`.
1105. **No env var modification**: Do NOT modify/unset environment variables (e.g., `ALIBABA_CLOUD_CLI_MOCK`) to bypass errors.
1116. **No fake output**: When API fails, report the real error. Never simulate/fake output with echo or scripts.
1127. **No active session**: If the user states they haven't created a session, you MUST immediately stop — do NOT call any API (including `list-agent-sessions`, `get-agent-session-token-usage`, `cancel-agent-session`), do NOT read config files, do NOT create scripts. Report "No active session" and suggest `create-agent-session`. RELEASED sessions are NOT active.
113
114## Observability
115
116All `aliyun dataworks-public` CLI calls must include the `--user-agent` flag for tracing:
117
118```
119--user-agent AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/{session-id}
120```
121
122- **Session ID**: Generate a UUID v4 once per workflow and reuse it for all API calls within that workflow (e.g., `python3 -c "import uuid; print(uuid.uuid4())"`)
123- **UA template**: `AlibabaCloud-Agent-Skills/alibabacloud-dataworks-data-agent/<uuid>`
124- All API calls (create, prompt, list, load, token, cancel, download) must carry the same session-id within a single workflow
125- Do NOT reuse session-id across separate user conversations
126
127## References
128
129- [API Reference](references/api-reference.md)
130- [Examples](references/examples.md)
131- [RAM Policies](references/ram-policies.md)