@aiagenta2z/agtm 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -3,14 +3,18 @@
3
3
 
4
4
  [GitHub](https://github.com/aiagenta2z/agtm)|[AI Agent Marketplace CLI Doc](https://www.deepnlp.org/doc/ai_agent_marketplace)|[DeepNLP AI Agent Marketplace](https://www.deepnlp.org/store/ai-agent) | [OneKey Gateway](https://deepnlp.org/doc/onekey_gateway) | [Agent MCP OneKey Router Ranking](https://www.deepnlp.org/agent/rankings) | [NodeJS agtm](https://www.npmjs.com/package/@aiagenta2z/agtm)
5
5
 
6
- `agtm` (AI Agent Management CLI) unifies skill management, agent registration, marketplace search, and provider CLI execution. Install skills from GitHub, log and rate skill runs, upload agent metadata to registries, query the public marketplace, and run agent toolchains with fuzzy hints.
6
+ `agtm` (AI Agent Manager CLI) unifies skill management, agent registration, marketplace search, and provider CLI execution. Install skills from GitHub, log and rate skill runs, upload agent metadata to registries, query the public marketplace, and run agent toolchains with fuzzy hints.
7
7
 
8
8
  ## Features
9
9
 
10
- *`agtm skills`*: Manage Skills, Add Skills, List Skills, Log Skills Performance, Skills performance Evaluator, compare to realworld benchmarks
11
- *`agtm upload`*: AI Agent Registry, register local agent meta information of json or yaml format(agent.json/agent.yaml) or sync your github source meta including README.md
12
- *`agtm search`*: Search the open source AI Agent Marketplace, including github community, huggingface community, product hunt community, deepnlp ai agent marketplace index, etc
13
- *`agtm run`*: Run agent clis, don't need to remember, with the powerful hints and completion ability, just type a few characters and "--hint" will help you complete the command line.
10
+ **agtm skills**: Manage Skills, Add Skills, List Skills, Log Skills Performance, Skills performance Evaluator, compare to realworld benchmarks
11
+ **agtm upload**: AI Agent Registry, register local agent meta information of json or yaml format(agent.json/agent.yaml) or sync your github source meta including README.md
12
+ **agtm search**: Search the open source AI Agent Marketplace, including github community, huggingface community, product hunt community, deepnlp ai agent marketplace index, etc
13
+ **agtm run**: Run agent clis, don't need to remember, with the powerful hints and completion ability, just type a few characters and "--hint" will help you complete the command line.
14
+
15
+ The agent cli run hint from "play" to "playwright" complete cli.
16
+
17
+ <img src="docs/static/snapshot_playwright_google.png" width="400px" />
14
18
 
15
19
  Furthermore, `agtm` provides memory to track skill outputs and enables performance rating against industry job level benchmarks. This allows you to score each skill execution and assign a professional tier to your AI Agent's capabilities—for example, evaluating its performance as equivalent to that of an L3 or L5 software engineer, marketing professional, etc.
16
20
 
@@ -18,6 +22,7 @@ Furthermore, `agtm` provides memory to track skill outputs and enables performan
18
22
  skill_id run_times score level
19
23
  ------------------- --------- ----- -----
20
24
  code_success_skills 5 0.9 L3(100%)
25
+ code_fail_skills 4 0.9 L3(100%)
21
26
  ```
22
27
 
23
28
  ## Quickstart
@@ -29,20 +34,59 @@ code_success_skills 5 0.9 L3(100%)
29
34
  npm install -g @aiagenta2z/agtm
30
35
  ```
31
36
 
37
+ ### Run a playwright Webpage cli
32
38
  Setup hint and skills benchmark
33
39
  ```shell
34
- agtm setup --levels ## Needed before `agtm rate`, to sync the benchmarks json to local folder
35
- agtm setup --hint ## Needed before `agtm run`
40
+ npx agtm setup --levels ## Needed before `agtm rate`, to sync the benchmarks json to local folder
41
+ npx agtm setup --hint ## Needed before `agtm run`
42
+ ```
43
+
44
+ ```shell
45
+ npm install -g @playwright/cli@latest
46
+ agtm run play
47
+
48
+ ### hint to "playwright-cli goto" command line
36
49
  ```
37
50
 
38
- Agtm CLI Options
51
+ Result Hint
52
+ ```shell
53
+ Selected Skill/Cli is microsoft/playwright-cli
54
+
55
+ Enter command to run (leave empty to list cli hints): play
56
+
57
+ Complete the Cli with your arguments or leave blank and press Enter
58
+
59
+ Final command line [playwright-cli goto <url>]:
60
+ playwright-cli goto https://www.google.com
61
+ agtm run microsoft/playwright-cli playwright-cli goto https://www.google.com
62
+
63
+ ### Browser `default` opened with pid 4603.
64
+ - default:
65
+ - browser-type: chrome
66
+ - user-data-dir: <in-memory>
67
+ - headed: false
68
+ ---
69
+
70
+ ### Ran Playwright code
71
+ await page.goto('https://www.google.com');
72
+
73
+
74
+ ### Page
75
+ - Page URL: https://www.google.com/
76
+ - Page Title: Google
77
+ ### Snapshot
78
+ - [Snapshot](.playwright-cli/page-2026-03-22T03-08-05-614Z.yml)
79
+ ```
80
+
81
+
82
+ ## Agtm CLI Options
39
83
 
40
84
  | CLI | Command and Options | Document |
41
85
  |-------------|-------------------------------------------|--------------------------------|
42
- | agtm skills | add, list, log, rate | [Doc](../docs/skills/README.md) |
43
- | agtm search | --q query | [Doc](../docs/registry/README.md) |
44
- | agtm upload | --github --config to local agent meta | [Doc](../docs/registry/README.md) |
45
- | agtm run | --hint agent-cli hint and auto completion | [Doc](../docs/run/README.md) |
86
+ | agtm skills | add, list, log, rate | [Doc](./docs/skills/README.md) |
87
+ | agtm search | --q query | [Doc](./docs/registry/README.md) |
88
+ | agtm upload | --github --config to local agent meta | [Doc](./docs/registry/README.md) |
89
+ | agtm run | --hint agent-cli hint and auto completion | [Doc](./docs/run/README.md) |
46
90
 
47
91
  ## `skills`
48
92
 
@@ -52,27 +96,27 @@ Download and add skills to your agent directory.
52
96
 
53
97
  #### Usage
54
98
  ```
55
- agtm skills add <unique_id>
56
- agtm skills add <github_url>
57
- agtm skills add <github_url> -a <agent_id>
58
- agtm skills add <owner_id/repo_id> -s <skill_id>
99
+ npx agtm skills add <unique_id>
100
+ npx agtm skills add <github_url>
101
+ npx agtm skills add <github_url> -a <agent_id>
102
+ npx agtm skills add <owner_id/repo_id> -s <skill_id>
59
103
  ```
60
104
 
61
105
  #### Example
62
106
  ```
63
- agtm skills add anthropics/skills -a claude-code ## install skills only to claude-codex
64
- agtm skills add msitarzewski/agency-agents
65
- agtm skills add aiagenta2z/onekey-gateway
66
- agtm skills add msitarzewski/agency-agents -s academic-anthropologist -a codex
67
- agtm skills add anthropics/skills -s skill-creator -a claude-code --global
107
+ npx agtm skills add anthropics/skills -a claude-code ## install skills only to claude-codex
108
+ npx agtm skills add msitarzewski/agency-agents
109
+ npx agtm skills add aiagenta2z/onekey-gateway
110
+ npx agtm skills add msitarzewski/agency-agents -s academic-anthropologist -a codex
111
+ npx agtm skills add anthropics/skills -s skill-creator -a claude-code --global
68
112
  ```
69
113
 
70
114
  ### skills list
71
115
 
72
116
  #### Usage
73
117
  ```
74
- agtm skills list
75
- agtm skills list --agent <agent_id> --global
118
+ npx agtm skills list
119
+ npx agtm skills list --agent <agent_id> --global
76
120
  ```
77
121
  Lists installed skills with `agent`, `skill_id`, `description`, install `path`, average `score`, and aggregated `level` (if ratings exist).
78
122
 
@@ -80,9 +124,9 @@ Lists installed skills with `agent`, `skill_id`, `description`, install `path`,
80
124
 
81
125
  #### Example
82
126
  ```
83
- agtm skills list
84
- agtm skills list --agent codex
85
- agtm skills list --agent claude-code --global
127
+ npx agtm skills list
128
+ npx agtm skills list --agent codex
129
+ npx agtm skills list --agent claude-code --global
86
130
  ```
87
131
 
88
132
 
@@ -90,15 +134,16 @@ agtm skills list --agent claude-code --global
90
134
 
91
135
  #### Usage
92
136
  ```
93
- agtm skills log <skill_id> --data '<json_payload>'
137
+ npx agtm skills log <skill_id> --data '<json_payload>'
94
138
  ```
139
+
95
140
  - Persists a run record at `.agtm/skills/log/<uuid>.json` (or the `--logDir` you supply).
96
141
  - `<json_payload>` must contain at least `input` and `output`; optional fields (meta, rating, level) are accepted.
97
142
 
98
143
  #### Example
99
144
  ```
100
- agtm skills log <skill_id> --data '{"input":"write a website for store","output":"success"}'
101
- agtm skills log code_success_skills --data '{"input":"generate sql","output":"ok","meta":{"agent":"claude-code"}}'
145
+ npx agtm skills log <skill_id> --data '{"input":"write a website for store","output":"success"}'
146
+ npx agtm skills log code_success_skills --data '{"input":"generate sql","output":"ok","meta":{"agent":"claude-code"}}'
102
147
  ```
103
148
 
104
149
  ### skills rate
@@ -107,14 +152,14 @@ agtm skills log code_success_skills --data '{"input":"generate sql","output":"ok
107
152
 
108
153
  To use the rate command, have to setup the benchmark levels configuration. save to `./agtm/levels/*.json` files
109
154
  ```shell
110
- agtm setup --levels
155
+ npx agtm setup --levels
111
156
  ```
112
157
 
113
158
  #### Usage
114
159
  ```
115
- agtm skills rate prepare --skill_id <skill_id> --prompt "<eval_prompt>" --benchmark <path/benchmark.json>
116
- agtm skills rate apply --skill_id <skill_id> --result '<result_json>'
117
- agtm skills rate show --skill_id <skill_id>
160
+ npx agtm skills rate prepare --skill_id <skill_id> --prompt "<eval_prompt>" --benchmark <path/benchmark.json>
161
+ npx agtm skills rate apply --skill_id <skill_id> --result '<result_json>'
162
+ npx agtm skills rate show --skill_id <skill_id>
118
163
  ```
119
164
  - `prepare` exports logs plus the top benchmark slices (e.g., Google SWE L3–L7) for an external evaluator.
120
165
  - `apply` writes evaluator outputs (`rating`, `level`) back to each log.
@@ -122,9 +167,9 @@ agtm skills rate show --skill_id <skill_id>
122
167
 
123
168
  #### Example
124
169
  ```
125
- agtm skills rate prepare --skill_id code_success_skills --prompt "Evaluate the results" --benchmark path/customized_agent_benchmark.json
126
- agtm skills rate apply --skill_id code_success_skills --result '{"results":[{"log_id":"3679a3fe-4d97-4eb1-83bc-f83d711be195","rating":0.90,"level":"L4"}]}'
127
- agtm skills rate show --skill_id code_success_skills
170
+ npx agtm skills rate prepare --skill_id code_success_skills --prompt "Evaluate the results" --benchmark path/customized_agent_benchmark.json
171
+ npx agtm skills rate apply --skill_id code_success_skills --result '{"results":[{"log_id":"3679a3fe-4d97-4eb1-83bc-f83d711be195","rating":0.90,"level":"L4"}]}'
172
+ npx agtm skills rate show --skill_id code_success_skills
128
173
  ```
129
174
  Sample output:
130
175
  ```
@@ -1,21 +1,261 @@
1
1
  {
2
2
  "microsoft/playwright-cli": {
3
3
  "hints": [
4
- {
5
- "cli": "playwright-cli open [url]",
6
- "hint": "open browser, optionally navigate to url"
7
- },
8
- {
9
- "cli": "playwright-cli goto <url> ",
10
- "hint": "navigate to a url"
11
- }
4
+ { "cli": "playwright-cli open [url]", "hint": "open browser, optionally navigate to url" },
5
+ { "cli": "playwright-cli goto <url>", "hint": "navigate to a url" },
6
+ { "cli": "playwright-cli close", "hint": "close the browser page" },
7
+ { "cli": "playwright-cli type <text>", "hint": "type text into editable element" },
8
+ { "cli": "playwright-cli click <ref> [button]", "hint": "click an element" },
9
+ { "cli": "playwright-cli dblclick <ref> [button]", "hint": "double click an element" },
10
+ { "cli": "playwright-cli fill <ref> <text>", "hint": "fill text into input field" },
11
+ { "cli": "playwright-cli drag <startRef> <endRef>", "hint": "drag and drop between elements" },
12
+ { "cli": "playwright-cli hover <ref>", "hint": "hover over element" },
13
+ { "cli": "playwright-cli select <ref> <val>", "hint": "select dropdown option" },
14
+ { "cli": "playwright-cli upload <file>", "hint": "upload file(s)" },
15
+ { "cli": "playwright-cli check <ref>", "hint": "check checkbox or radio" },
16
+ { "cli": "playwright-cli uncheck <ref>", "hint": "uncheck checkbox or radio" },
17
+ { "cli": "playwright-cli snapshot", "hint": "capture page snapshot" },
18
+ { "cli": "playwright-cli snapshot --filename=<file>", "hint": "save snapshot to file" },
19
+ { "cli": "playwright-cli eval <func> [ref]", "hint": "run JS on page or element" },
20
+ { "cli": "playwright-cli dialog-accept [prompt]", "hint": "accept dialog" },
21
+ { "cli": "playwright-cli dialog-dismiss", "hint": "dismiss dialog" },
22
+ { "cli": "playwright-cli resize <w> <h>", "hint": "resize browser window" },
23
+ { "cli": "playwright-cli go-back", "hint": "go to previous page" },
24
+ { "cli": "playwright-cli go-forward", "hint": "go to next page" },
25
+ { "cli": "playwright-cli reload", "hint": "reload current page" },
26
+ { "cli": "playwright-cli press <key>", "hint": "press a key" },
27
+ { "cli": "playwright-cli keydown <key>", "hint": "key down event" },
28
+ { "cli": "playwright-cli keyup <key>", "hint": "key up event" },
29
+ { "cli": "playwright-cli mousemove <x> <y>", "hint": "move mouse" },
30
+ { "cli": "playwright-cli mousedown [button]", "hint": "mouse button down" },
31
+ { "cli": "playwright-cli mouseup [button]", "hint": "mouse button up" },
32
+ { "cli": "playwright-cli mousewheel <dx> <dy>", "hint": "scroll mouse wheel" },
33
+ { "cli": "playwright-cli screenshot [ref]", "hint": "take screenshot" },
34
+ { "cli": "playwright-cli screenshot --filename=<file>", "hint": "save screenshot to file" },
35
+ { "cli": "playwright-cli pdf", "hint": "save page as pdf" },
36
+ { "cli": "playwright-cli pdf --filename=<file>", "hint": "save pdf to file" },
37
+ { "cli": "playwright-cli tab-list", "hint": "list browser tabs" },
38
+ { "cli": "playwright-cli tab-new [url]", "hint": "open new tab" },
39
+ { "cli": "playwright-cli tab-close [index]", "hint": "close tab" },
40
+ { "cli": "playwright-cli tab-select <index>", "hint": "switch tab" },
41
+ { "cli": "playwright-cli state-save [filename]", "hint": "save storage state" },
42
+ { "cli": "playwright-cli state-load <filename>", "hint": "load storage state" },
43
+ { "cli": "playwright-cli cookie-list [--domain]", "hint": "list cookies" },
44
+ { "cli": "playwright-cli cookie-get <name>", "hint": "get cookie value" },
45
+ { "cli": "playwright-cli cookie-set <name> <value>", "hint": "set cookie" },
46
+ { "cli": "playwright-cli cookie-delete <name>", "hint": "delete cookie" },
47
+ { "cli": "playwright-cli cookie-clear", "hint": "clear all cookies" },
48
+ { "cli": "playwright-cli localstorage-list", "hint": "list localStorage" },
49
+ { "cli": "playwright-cli localstorage-get <key>", "hint": "get localStorage value" },
50
+ { "cli": "playwright-cli localstorage-set <key> <value>", "hint": "set localStorage" },
51
+ { "cli": "playwright-cli localstorage-delete <key>", "hint": "delete localStorage entry" },
52
+ { "cli": "playwright-cli localstorage-clear", "hint": "clear localStorage" },
53
+ { "cli": "playwright-cli sessionstorage-list", "hint": "list sessionStorage" },
54
+ { "cli": "playwright-cli sessionstorage-get <key>", "hint": "get sessionStorage value" },
55
+ { "cli": "playwright-cli sessionstorage-set <key> <value>", "hint": "set sessionStorage" },
56
+ { "cli": "playwright-cli sessionstorage-delete <key>", "hint": "delete sessionStorage entry" },
57
+ { "cli": "playwright-cli sessionstorage-clear", "hint": "clear sessionStorage" },
58
+ { "cli": "playwright-cli route <pattern> [opts]", "hint": "mock network requests" },
59
+ { "cli": "playwright-cli route-list", "hint": "list routes" },
60
+ { "cli": "playwright-cli unroute [pattern]", "hint": "remove routes" },
61
+ { "cli": "playwright-cli console [min-level]", "hint": "show console logs" },
62
+ { "cli": "playwright-cli network", "hint": "list network requests" },
63
+ { "cli": "playwright-cli run-code <code>", "hint": "execute playwright code" },
64
+ { "cli": "playwright-cli tracing-start", "hint": "start tracing" },
65
+ { "cli": "playwright-cli tracing-stop", "hint": "stop tracing" },
66
+ { "cli": "playwright-cli video-start", "hint": "start video recording" },
67
+ { "cli": "playwright-cli video-stop [filename]", "hint": "stop video recording" },
68
+ { "cli": "playwright-cli open --browser=<name>", "hint": "open with specific browser" },
69
+ { "cli": "playwright-cli open --extension", "hint": "connect via extension" },
70
+ { "cli": "playwright-cli open --persistent", "hint": "use persistent profile" },
71
+ { "cli": "playwright-cli open --profile=<path>", "hint": "use custom profile" },
72
+ { "cli": "playwright-cli open --config=<file>", "hint": "use config file" },
73
+ { "cli": "playwright-cli delete-data", "hint": "delete browser data" },
74
+ { "cli": "playwright-cli -s=<name> <cmd>", "hint": "run command in named session" },
75
+ { "cli": "playwright-cli -s=<name> close", "hint": "close named session" },
76
+ { "cli": "playwright-cli -s=<name> delete-data", "hint": "delete session data" },
77
+ { "cli": "playwright-cli list", "hint": "list all sessions" },
78
+ { "cli": "playwright-cli close-all", "hint": "close all browsers" },
79
+ { "cli": "playwright-cli kill-all", "hint": "force kill all browsers" }
12
80
  ]
13
81
  },
14
82
  "googleworkspace/cli": {
15
83
  "hints": [
16
84
  {
17
- "cli": "gws drive files list --params",
18
- "hint": "List the 10 most recent files"
85
+ "cli": "gws auth setup",
86
+ "hint": "initialize Google Cloud project and OAuth"
87
+ },
88
+ {
89
+ "cli": "gws auth login",
90
+ "hint": "login with OAuth credentials"
91
+ },
92
+ {
93
+ "cli": "gws auth login --scopes <services>",
94
+ "hint": "login with specific scopes"
95
+ },
96
+ {
97
+ "cli": "gws auth export --unmasked",
98
+ "hint": "export credentials for CI or headless usage"
99
+ },
100
+ {
101
+ "cli": "gws <service> <resource> <method> --params '<json>'",
102
+ "hint": "call any Google Workspace API method"
103
+ },
104
+ {
105
+ "cli": "gws <service> <resource> <method> --json '<json>'",
106
+ "hint": "send JSON body payload"
107
+ },
108
+ {
109
+ "cli": "gws schema <service.resource.method>",
110
+ "hint": "inspect API request/response schema"
111
+ },
112
+ {
113
+ "cli": "gws drive files list --params '{\"pageSize\": 10}'",
114
+ "hint": "list recent Drive files"
115
+ },
116
+ {
117
+ "cli": "gws drive files list --params '{\"pageSize\": 100}' --page-all",
118
+ "hint": "stream paginated results as NDJSON"
119
+ },
120
+ {
121
+ "cli": "gws drive files create --json '{\"name\": \"file\"}' --upload <file>",
122
+ "hint": "upload file to Drive"
123
+ },
124
+ {
125
+ "cli": "gws sheets spreadsheets create --json '{\"properties\": {\"title\": \"Sheet\"}}'",
126
+ "hint": "create a spreadsheet"
127
+ },
128
+ {
129
+ "cli": "gws sheets spreadsheets values get --params '<json>'",
130
+ "hint": "read spreadsheet values"
131
+ },
132
+ {
133
+ "cli": "gws sheets spreadsheets values append --params '<json>' --json '<json>'",
134
+ "hint": "append rows to spreadsheet"
135
+ },
136
+ {
137
+ "cli": "gws gmail users messages list --params '<json>'",
138
+ "hint": "list Gmail messages"
139
+ },
140
+ {
141
+ "cli": "gws gmail users messages get --params '<json>'",
142
+ "hint": "get email content"
143
+ },
144
+ {
145
+ "cli": "gws chat spaces messages create --params '<json>' --json '<json>'",
146
+ "hint": "send Chat message"
147
+ },
148
+ {
149
+ "cli": "gws calendar events list --params '<json>'",
150
+ "hint": "list calendar events"
151
+ },
152
+ {
153
+ "cli": "gws calendar events insert --json '<json>'",
154
+ "hint": "create calendar event"
155
+ },
156
+ {
157
+ "cli": "gws docs documents get --params '<json>'",
158
+ "hint": "read a document"
159
+ },
160
+ {
161
+ "cli": "gws <service> --help",
162
+ "hint": "show all commands and helper methods for a service"
163
+ },
164
+ {
165
+ "cli": "gws gmail +send --to <email> --subject <text> --body <text>",
166
+ "hint": "send an email"
167
+ },
168
+ {
169
+ "cli": "gws gmail +reply --message-id <id> --body <text>",
170
+ "hint": "reply to an email"
171
+ },
172
+ {
173
+ "cli": "gws gmail +triage",
174
+ "hint": "show unread inbox summary"
175
+ },
176
+ {
177
+ "cli": "gws gmail +watch",
178
+ "hint": "stream new emails as NDJSON"
179
+ },
180
+ {
181
+ "cli": "gws sheets +append --spreadsheet <id> --values <csv>",
182
+ "hint": "append row to spreadsheet"
183
+ },
184
+ {
185
+ "cli": "gws sheets +read --spreadsheet <id>",
186
+ "hint": "read spreadsheet values"
187
+ },
188
+ {
189
+ "cli": "gws docs +write --document <id> --text <text>",
190
+ "hint": "append text to document"
191
+ },
192
+ {
193
+ "cli": "gws drive +upload <file> --name <name>",
194
+ "hint": "upload file with metadata"
195
+ },
196
+ {
197
+ "cli": "gws calendar +insert",
198
+ "hint": "create calendar event quickly"
199
+ },
200
+ {
201
+ "cli": "gws calendar +agenda",
202
+ "hint": "show upcoming events"
203
+ },
204
+ {
205
+ "cli": "gws calendar +agenda --timezone <tz>",
206
+ "hint": "show agenda in specific timezone"
207
+ },
208
+ {
209
+ "cli": "gws workflow +standup-report",
210
+ "hint": "generate daily standup summary"
211
+ },
212
+ {
213
+ "cli": "gws workflow +meeting-prep",
214
+ "hint": "prepare for upcoming meeting"
215
+ },
216
+ {
217
+ "cli": "gws workflow +weekly-digest",
218
+ "hint": "weekly summary of meetings and emails"
219
+ },
220
+ {
221
+ "cli": "gws workflow +email-to-task",
222
+ "hint": "convert email into task"
223
+ },
224
+ {
225
+ "cli": "gws chat +send --space <id> --text <message>",
226
+ "hint": "send chat message"
227
+ },
228
+ {
229
+ "cli": "gws events +subscribe",
230
+ "hint": "subscribe to workspace events"
231
+ },
232
+ {
233
+ "cli": "gws events +renew",
234
+ "hint": "renew event subscription"
235
+ },
236
+ {
237
+ "cli": "gws modelarmor +sanitize-prompt",
238
+ "hint": "sanitize user prompt"
239
+ },
240
+ {
241
+ "cli": "gws modelarmor +sanitize-response",
242
+ "hint": "sanitize model response"
243
+ },
244
+ {
245
+ "cli": "gws <service> <resource> <method> --dry-run",
246
+ "hint": "preview API request without executing"
247
+ },
248
+ {
249
+ "cli": "gws <service> <resource> <method> --page-all",
250
+ "hint": "auto paginate results"
251
+ },
252
+ {
253
+ "cli": "gws <service> <resource> <method> --page-limit <n>",
254
+ "hint": "limit number of pages"
255
+ },
256
+ {
257
+ "cli": "gws <service> <resource> <method> --sanitize <template>",
258
+ "hint": "sanitize API response using Model Armor"
19
259
  }
20
260
  ]
21
261
  },
@@ -36,10 +276,514 @@
36
276
  {
37
277
  "cli": "onekey llm --payload <json|@file>",
38
278
  "hint": "Run a raw LLM request using a pre-formatted JSON payload or configuration file"
279
+ },
280
+ {
281
+ "cli": "onekey agent bing-image-search-mcp/bing-image-search-mcp search_images '{\"query\": \"Eiffel Tower sunset\", \"limit\": 5}'",
282
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
283
+ },
284
+ {
285
+ "cli": "onekey agent bing-image-search-mcp/bing-image-search-mcp search_images_batch '{\"query_list\": [\"Eiffel Tower sunset\", \"Louvre at night\"], \"limit\": 3}'",
286
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
287
+ },
288
+ {
289
+ "cli": "onekey agent baidu-maps-sse/baidu-maps-sse maps_geocode '{\"address\": \"Times Square, New York\"}'",
290
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
291
+ },
292
+ {
293
+ "cli": "onekey agent baidu-maps-sse/baidu-maps-sse maps_reverse_geocode '{\"latitude\": 40.758, \"longitude\": -73.9855}'",
294
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
295
+ },
296
+ {
297
+ "cli": "onekey agent baidu-maps-sse/baidu-maps-sse maps_search_places '{\"query\": \"Italian restaurants\", \"location\": {\"latitude\": 40.758, \"longitude\": -73.9855}, \"radius\": 500}'",
298
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
299
+ },
300
+ {
301
+ "cli": "onekey agent baidu-maps-sse/baidu-maps-sse maps_place_details '{\"place_id\": \"ChIJmQJIxlVYwokRLgeuocVOGVU\"}'",
302
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
303
+ },
304
+ {
305
+ "cli": "onekey agent baidu-maps-sse/baidu-maps-sse maps_distance_matrix '{\"origins\": [\"Times Square, NY\"], \"destinations\": [\"Central Park, NY\"], \"mode\": \"driving\"}'",
306
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
307
+ },
308
+ {
309
+ "cli": "onekey agent baidu-maps-sse/baidu-maps-sse maps_elevation '{\"locations\": [{\"latitude\": 36.057944, \"longitude\": -112.125168}]}'",
310
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
311
+ },
312
+ {
313
+ "cli": "onekey agent baidu-maps-sse/baidu-maps-sse maps_directions '{\"origin\": \"Golden Gate Bridge\", \"destination\": \"Ferry Building San Francisco\", \"mode\": \"driving\"}'",
314
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
315
+ },
316
+ {
317
+ "cli": "onekey agent brave-search/brave-search brave_web_search '{\"query\": \"latest AI research 2026\"}'",
318
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
319
+ },
320
+ {
321
+ "cli": "onekey agent brave-search/brave-search brave_local_search '{\"query\": \"coffee near Times Square\"}'",
322
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
323
+ },
324
+ {
325
+ "cli": "onekey agent google-search/google-search google_search '{\"query\": \"US inflation rate February 2026\", \"num\": 5, \"start\": 0}'",
326
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
327
+ },
328
+ {
329
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_area_chart '{}'",
330
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
331
+ },
332
+ {
333
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_bar_chart '{}'",
334
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
335
+ },
336
+ {
337
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_boxplot_chart '{}'",
338
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
339
+ },
340
+ {
341
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_column_chart '{}'",
342
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
343
+ },
344
+ {
345
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_district_map '{}'",
346
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
347
+ },
348
+ {
349
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_dual_axes_chart '{}'",
350
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
351
+ },
352
+ {
353
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_fishbone_diagram '{}'",
354
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
355
+ },
356
+ {
357
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_flow_diagram '{}'",
358
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
359
+ },
360
+ {
361
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_funnel_chart '{}'",
362
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
363
+ },
364
+ {
365
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_histogram_chart '{}'",
366
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
367
+ },
368
+ {
369
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_line_chart '{}'",
370
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
371
+ },
372
+ {
373
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_liquid_chart '{}'",
374
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
375
+ },
376
+ {
377
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_mind_map '{}'",
378
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
379
+ },
380
+ {
381
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_network_graph '{}'",
382
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
383
+ },
384
+ {
385
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_organization_chart '{}'",
386
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
387
+ },
388
+ {
389
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_path_map '{}'",
390
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
391
+ },
392
+ {
393
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_pie_chart '{}'",
394
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
395
+ },
396
+ {
397
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_pin_map '{}'",
398
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
399
+ },
400
+ {
401
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_radar_chart '{}'",
402
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
403
+ },
404
+ {
405
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_sankey_chart '{}'",
406
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
407
+ },
408
+ {
409
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_scatter_chart '{}'",
410
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
411
+ },
412
+ {
413
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_treemap_chart '{}'",
414
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
415
+ },
416
+ {
417
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_venn_chart '{}'",
418
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
419
+ },
420
+ {
421
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_violin_chart '{}'",
422
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
423
+ },
424
+ {
425
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_waterfall_chart '{}'",
426
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
427
+ },
428
+ {
429
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_word_cloud_chart '{}'",
430
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
431
+ },
432
+ {
433
+ "cli": "onekey agent mcp-server-chart/mcp-server-chart generate_spreadsheet '{}'",
434
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
435
+ },
436
+ {
437
+ "cli": "onekey agent tavily-remote-mcp/tavily-remote-mcp tavily_search '{\"query\": \"NVIDIA earnings\", \"max_results\": 5, \"search_depth\": \"advanced\"}'",
438
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
439
+ },
440
+ {
441
+ "cli": "onekey agent tavily-remote-mcp/tavily-remote-mcp tavily_extract '{\"urls\": [\"https://example.com/article\"], \"extract_depth\": \"advanced\", \"format\": \"markdown\"}'",
442
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
443
+ },
444
+ {
445
+ "cli": "onekey agent tavily-remote-mcp/tavily-remote-mcp tavily_crawl '{\"url\": \"https://example.com\", \"max_depth\": 1, \"max_breadth\": 10, \"limit\": 20}'",
446
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
447
+ },
448
+ {
449
+ "cli": "onekey agent tavily-remote-mcp/tavily-remote-mcp tavily_map '{\"url\": \"https://example.com/docs\", \"max_depth\": 1, \"max_breadth\": 10, \"limit\": 30}'",
450
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
451
+ },
452
+ {
453
+ "cli": "onekey agent tavily-remote-mcp/tavily-remote-mcp tavily_research '{\"input\": \"Impact of AI on healthcare\", \"model\": \"pro\"}'",
454
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
455
+ },
456
+ {
457
+ "cli": "onekey agent google-maps/google-maps maps_geocode '{\"address\": \"Times Square, New York\"}'",
458
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
459
+ },
460
+ {
461
+ "cli": "onekey agent google-maps/google-maps maps_reverse_geocode '{\"latitude\": 40.758, \"longitude\": -73.9855}'",
462
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
463
+ },
464
+ {
465
+ "cli": "onekey agent google-maps/google-maps maps_search_places '{\"query\": \"Italian restaurants\", \"location\": {\"latitude\": 40.758, \"longitude\": -73.9855}, \"radius\": 500}'",
466
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
467
+ },
468
+ {
469
+ "cli": "onekey agent google-maps/google-maps maps_place_details '{\"place_id\": \"ChIJmQJIxlVYwokRLgeuocVOGVU\"}'",
470
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
471
+ },
472
+ {
473
+ "cli": "onekey agent google-maps/google-maps maps_distance_matrix '{\"origins\": [\"Times Square, NY\"], \"destinations\": [\"Central Park, NY\"], \"mode\": \"driving\"}'",
474
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
475
+ },
476
+ {
477
+ "cli": "onekey agent google-maps/google-maps maps_elevation '{\"locations\": [{\"latitude\": 36.057944, \"longitude\": -112.125168}]}'",
478
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
479
+ },
480
+ {
481
+ "cli": "onekey agent google-maps/google-maps maps_directions '{\"origin\": \"Golden Gate Bridge\", \"destination\": \"Ferry Building San Francisco\", \"mode\": \"driving\"}'",
482
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
483
+ },
484
+ {
485
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_scrape '{\"url\": \"https://example.com/api-docs\", \"formats\": [\"json\"], \"onlyMainContent\": true}'",
486
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
487
+ },
488
+ {
489
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_map '{\"query\": \"webhook\"}'",
490
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
491
+ },
492
+ {
493
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_search '{\"query\": \"product pricing site:example.com\"}'",
494
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
495
+ },
496
+ {
497
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_crawl '{\"url\": \"https://example.com\"}'",
498
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
499
+ },
500
+ {
501
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_check_crawl_status '{\"crawl_id\": \"crawl-123\"}'",
502
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
503
+ },
504
+ {
505
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_extract '{\"url\": \"https://example.com\", \"selector\": \"h1\"}'",
506
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
507
+ },
508
+ {
509
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_agent '{\"task\": \"find pricing\", \"url\": \"https://example.com\"}'",
510
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
511
+ },
512
+ {
513
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_agent_status '{\"job_id\": \"job-123\"}'",
514
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
515
+ },
516
+ {
517
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_browser_create '{\"profile\": \"default\"}'",
518
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
519
+ },
520
+ {
521
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_browser_execute '{\"browser_id\": \"browser-1\", \"script\": \"document.title\"}'",
522
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
523
+ },
524
+ {
525
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_browser_delete '{\"browser_id\": \"browser-1\"}'",
526
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
527
+ },
528
+ {
529
+ "cli": "onekey agent firecrawl-mcp/firecrawl-mcp firecrawl_browser_list '{}'",
530
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
531
+ },
532
+ {
533
+ "cli": "onekey agent perplexity/perplexity perplexity_ask '{\"question\": \"Who won the 2024 World Series?\"}'",
534
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
535
+ },
536
+ {
537
+ "cli": "onekey agent perplexity/perplexity perplexity_research '{\"query\": \"renewable energy policies US\"}'",
538
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
539
+ },
540
+ {
541
+ "cli": "onekey agent perplexity/perplexity perplexity_reason '{\"topic\": \"impact of quantum computing\"}'",
542
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
543
+ },
544
+ {
545
+ "cli": "onekey agent perplexity/perplexity perplexity_search '{\"query\": \"best VR headsets 2026\"}'",
546
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
547
+ },
548
+ {
549
+ "cli": "onekey agent github/github add_comment_to_pending_review '{}'",
550
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
551
+ },
552
+ {
553
+ "cli": "onekey agent github/github add_issue_comment '{}'",
554
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
555
+ },
556
+ {
557
+ "cli": "onekey agent github/github create_branch '{}'",
558
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
559
+ },
560
+ {
561
+ "cli": "onekey agent github/github create_or_update_file '{}'",
562
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
563
+ },
564
+ {
565
+ "cli": "onekey agent github/github create_pull_request '{}'",
566
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
567
+ },
568
+ {
569
+ "cli": "onekey agent github/github create_repository '{}'",
570
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
571
+ },
572
+ {
573
+ "cli": "onekey agent github/github delete_file '{}'",
574
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
575
+ },
576
+ {
577
+ "cli": "onekey agent github/github fork_repository '{}'",
578
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
579
+ },
580
+ {
581
+ "cli": "onekey agent github/github get_commit '{}'",
582
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
583
+ },
584
+ {
585
+ "cli": "onekey agent github/github get_file_contents '{}'",
586
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
587
+ },
588
+ {
589
+ "cli": "onekey agent github/github get_label '{}'",
590
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
591
+ },
592
+ {
593
+ "cli": "onekey agent github/github get_latest_release '{}'",
594
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
595
+ },
596
+ {
597
+ "cli": "onekey agent github/github get_me '{}'",
598
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
599
+ },
600
+ {
601
+ "cli": "onekey agent github/github get_release_by_tag '{}'",
602
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
603
+ },
604
+ {
605
+ "cli": "onekey agent github/github get_tag '{}'",
606
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
607
+ },
608
+ {
609
+ "cli": "onekey agent github/github get_team_members '{}'",
610
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
611
+ },
612
+ {
613
+ "cli": "onekey agent github/github get_teams '{}'",
614
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
615
+ },
616
+ {
617
+ "cli": "onekey agent github/github issue_read '{}'",
618
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
619
+ },
620
+ {
621
+ "cli": "onekey agent github/github issue_write '{}'",
622
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
623
+ },
624
+ {
625
+ "cli": "onekey agent github/github list_branches '{}'",
626
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
627
+ },
628
+ {
629
+ "cli": "onekey agent github/github list_commits '{}'",
630
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
631
+ },
632
+ {
633
+ "cli": "onekey agent github/github list_issue_types '{}'",
634
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
635
+ },
636
+ {
637
+ "cli": "onekey agent github/github list_issues '{}'",
638
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
639
+ },
640
+ {
641
+ "cli": "onekey agent github/github list_pull_requests '{}'",
642
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
643
+ },
644
+ {
645
+ "cli": "onekey agent github/github list_releases '{}'",
646
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
647
+ },
648
+ {
649
+ "cli": "onekey agent github/github list_tags '{}'",
650
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
651
+ },
652
+ {
653
+ "cli": "onekey agent github/github merge_pull_request '{}'",
654
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
655
+ },
656
+ {
657
+ "cli": "onekey agent github/github pull_request_read '{}'",
658
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
659
+ },
660
+ {
661
+ "cli": "onekey agent github/github pull_request_review_write '{}'",
662
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
663
+ },
664
+ {
665
+ "cli": "onekey agent github/github push_files '{}'",
666
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
667
+ },
668
+ {
669
+ "cli": "onekey agent github/github request_copilot_review '{}'",
670
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
671
+ },
672
+ {
673
+ "cli": "onekey agent github/github search_code '{}'",
674
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
675
+ },
676
+ {
677
+ "cli": "onekey agent github/github search_issues '{}'",
678
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
679
+ },
680
+ {
681
+ "cli": "onekey agent github/github search_pull_requests '{}'",
682
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
683
+ },
684
+ {
685
+ "cli": "onekey agent github/github search_repositories '{}'",
686
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
687
+ },
688
+ {
689
+ "cli": "onekey agent github/github search_users '{}'",
690
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
691
+ },
692
+ {
693
+ "cli": "onekey agent github/github sub_issue_write '{}'",
694
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
695
+ },
696
+ {
697
+ "cli": "onekey agent github/github update_pull_request '{}'",
698
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
699
+ },
700
+ {
701
+ "cli": "onekey agent github/github update_pull_request_branch '{}'",
702
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
703
+ },
704
+ {
705
+ "cli": "onekey agent gemini-nano-banana/gemini-nano-banana generate_image_gemini '{\"model\": \"gemini-2.5-flash-image\", \"prompt\": \"sunrise over mountains\", \"aspect_ratio\": \"16:9\", \"image_size\": \"1K\"}'",
706
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
707
+ },
708
+ {
709
+ "cli": "onekey agent gemini-nano-banana/gemini-nano-banana generate_image_nano_banana '{\"model\": \"gemini-2.5-flash-image\", \"prompt\": \"robot reading book\", \"aspect_ratio\": \"16:9\", \"image_size\": \"1K\"}'",
710
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
711
+ },
712
+ {
713
+ "cli": "onekey agent gemini-nano-banana/gemini-nano-banana generate_image_nano_banana_with_reference '{\"model\": \"gemini-3-pro-image-preview\", \"prompt\": \"winter coat style\", \"images\": [\"https://avatars.githubusercontent.com/u/242328252\"], \"aspect_ratio\": \"1:1\"}'",
714
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
715
+ },
716
+ {
717
+ "cli": "onekey agent gemini-nano-banana/gemini-nano-banana ocr_extract_text_from_image '{\"images\": [\"https://avatars.githubusercontent.com/u/242328252\"], \"model\": \"gemini-3-flash-preview\"}'",
718
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
719
+ },
720
+ {
721
+ "cli": "onekey agent gemini-nano-banana/gemini-nano-banana list_items_from_image '{\"images\": [\"https://avatars.githubusercontent.com/u/242328252\"], \"model\": \"gemini-3-flash-preview\", \"output_json\": true}'",
722
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
723
+ },
724
+ {
725
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_direction_bicycling '{\"origin\": \"116.481028,39.989643\", \"destination\": \"116.465302,40.004717\"}'",
726
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
727
+ },
728
+ {
729
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_direction_driving '{\"origin\": \"116.481028,39.989643\", \"destination\": \"116.465302,40.004717\"}'",
730
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
731
+ },
732
+ {
733
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_direction_transit_integrated '{\"origin\": \"116.481028,39.989643\", \"destination\": \"116.465302,40.004717\", \"city\": \"北京\", \"cityd\": \"上海\"}'",
734
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
735
+ },
736
+ {
737
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_direction_walking '{\"origin\": \"116.481028,39.989643\", \"destination\": \"116.465302,40.004717\"}'",
738
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
739
+ },
740
+ {
741
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_distance '{\"origins\": \"116.481028,39.989643|116.465302,40.004717\", \"destination\": \"116.481028,39.989643\", \"type\": \"1\"}'",
742
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
743
+ },
744
+ {
745
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_geo '{\"address\": \"Beijing Capital Airport\", \"city\": \"北京\"}'",
746
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
747
+ },
748
+ {
749
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_regeocode '{\"location\": \"116.481488,39.990464\"}'",
750
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
751
+ },
752
+ {
753
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_ip_location '{\"ip\": \"8.8.8.8\"}'",
754
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
755
+ },
756
+ {
757
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_schema_personal_map '{\"orgName\": \"Weekend Trip\", \"lineList\": [{\"title\": \"Day1\", \"pointInfoList\": [{\"name\": \"Tiananmen\", \"lon\": 116.3975, \"lat\": 39.9087, \"poiId\": \"B000A8UIN8\"}]}]}'",
758
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
759
+ },
760
+ {
761
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_around_search '{\"keywords\": \"coffee\", \"location\": \"116.481488,39.990464\", \"radius\": \"2000\"}'",
762
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
763
+ },
764
+ {
765
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_search_detail '{\"id\": \"B0FFFABCD1\"}'",
766
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
767
+ },
768
+ {
769
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_text_search '{\"keywords\": \"Tsinghua University\", \"city\": \"北京\", \"citylimit\": true}'",
770
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
771
+ },
772
+ {
773
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_schema_navi '{\"lon\": \"116.3975\", \"lat\": \"39.9087\"}'",
774
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
775
+ },
776
+ {
777
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_schema_take_taxi '{\"slon\": \"116.3975\", \"slat\": \"39.9087\", \"sname\": \"Tiananmen\", \"dlon\": \"116.481028\", \"dlat\": \"39.989643\", \"dname\": \"Sanlitun\"}'",
778
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
779
+ },
780
+ {
781
+ "cli": "onekey agent amap-maps-streamableHTTP/amap-maps-streamableHTTP maps_weather '{\"city\": \"北京\"}'",
782
+ "hint": "Invoke a specific agent by ID with structured JSON data or a file input"
39
783
  }
40
784
  ]
41
785
  },
42
- "openai/codex-cli": {
786
+ "openai/codex-cli": {
43
787
  "hints": [
44
788
  {
45
789
  "cli": "codex",
package/dist/agtm-cli.js CHANGED
@@ -458,7 +458,7 @@ async function handleSkillsAdd(options) {
458
458
  process.exit(1);
459
459
  return;
460
460
  }
461
- console.log("INFO: Staring to fetch skills...");
461
+ console.log("INFO: Starting to fetch skills...");
462
462
  const resolved = resolveSkillSource(source);
463
463
  const skills = discoverSkills(resolved.root);
464
464
  if (skills.length === 0) {
@@ -1214,10 +1214,53 @@ function loadCombinedHints(useGlobal) {
1214
1214
  function buildIdTrie(hints) {
1215
1215
  const trie = createTrie();
1216
1216
  for (const id of Object.keys(hints)) {
1217
- insertTrie(trie, id, id);
1217
+ for (let i = 0; i < id.length; i++) {
1218
+ insertTrie(trie, id.substring(i), id);
1219
+ }
1218
1220
  }
1219
1221
  return trie;
1220
1222
  }
1223
+ function buildInvertedIndex(hints) {
1224
+ const index = {};
1225
+ for (const [id, entry] of Object.entries(hints)) {
1226
+ if (!entry.hints)
1227
+ continue;
1228
+ for (const item of entry.hints) {
1229
+ const doc = { id, cli: item.cli, hint: item.hint || '' };
1230
+ const text = `${id} ${item.cli} ${item.hint || ''}`.toLowerCase();
1231
+ const tokens = Array.from(new Set(text.split(/[^a-z0-9]+/)));
1232
+ for (const token of tokens) {
1233
+ if (!token)
1234
+ continue;
1235
+ if (!index[token])
1236
+ index[token] = [];
1237
+ if (!index[token].some(d => d.id === doc.id && d.cli === doc.cli)) {
1238
+ index[token].push(doc);
1239
+ }
1240
+ }
1241
+ }
1242
+ }
1243
+ return index;
1244
+ }
1245
+ function searchInvertedIndex(index, query) {
1246
+ const tokens = query.toLowerCase().split(/[^a-z0-9]+/).filter(Boolean);
1247
+ if (tokens.length === 0)
1248
+ return [];
1249
+ let results = new Map();
1250
+ for (const [key, docs] of Object.entries(index)) {
1251
+ for (const token of tokens) {
1252
+ if (key.includes(token)) {
1253
+ for (const doc of docs) {
1254
+ const docKey = `${doc.id}::${doc.cli}`;
1255
+ if (!results.has(docKey)) {
1256
+ results.set(docKey, doc);
1257
+ }
1258
+ }
1259
+ }
1260
+ }
1261
+ }
1262
+ return Array.from(results.values());
1263
+ }
1221
1264
  function buildCliTrie(hints) {
1222
1265
  const trie = createTrie();
1223
1266
  for (const item of hints) {
@@ -1233,9 +1276,19 @@ function filterCliHints(hints, query, limit) {
1233
1276
  }
1234
1277
  const trimmed = query.trim().toLowerCase();
1235
1278
  if (trimmed) {
1236
- const scored = hints
1237
- .map((item) => ({ item, score: fuzzyScore(trimmed, item.cli) }))
1238
- .filter((entry) => entry.score > 0);
1279
+ const queryTokens = Array.from(new Set(trimmed.split(/[^a-z0-9]+/))).filter(Boolean);
1280
+ const scored = hints.map((item) => {
1281
+ const text = `${item.cli} ${item.hint || ''}`.toLowerCase();
1282
+ let tokenMatches = 0;
1283
+ for (const token of queryTokens) {
1284
+ if (text.includes(token)) {
1285
+ tokenMatches += 1;
1286
+ }
1287
+ }
1288
+ const fScore = fuzzyScore(trimmed, item.cli);
1289
+ const score = tokenMatches * 10 + fScore;
1290
+ return { item, score };
1291
+ }).filter((entry) => entry.score > 0);
1239
1292
  scored.sort((a, b) => b.score - a.score || a.item.cli.localeCompare(b.item.cli));
1240
1293
  return scored.slice(0, limit).map((entry) => entry.item);
1241
1294
  }
@@ -1358,14 +1411,35 @@ async function selectSkillId(hints, input, limit = 5, trie) {
1358
1411
  }
1359
1412
  const activeTrie = trie || buildIdTrie(hints);
1360
1413
  const prefix = input || '';
1361
- let suggestions = searchTrie(activeTrie, prefix, limit);
1362
- if (suggestions.length === 0 && prefix) {
1414
+ let trieSuggestions = searchTrie(activeTrie, prefix, limit);
1415
+ let hintMatches = new Set();
1416
+ let finalSuggestions = [];
1417
+ if (prefix) {
1418
+ const index = buildInvertedIndex(hints);
1419
+ const docs = searchInvertedIndex(index, prefix);
1420
+ const scoredDocs = new Map();
1421
+ for (const doc of docs) {
1422
+ scoredDocs.set(doc.id, (scoredDocs.get(doc.id) || 0) + 1);
1423
+ }
1424
+ const sortedDocs = Array.from(scoredDocs.entries()).sort((a, b) => b[1] - a[1]);
1425
+ for (const [id] of sortedDocs) {
1426
+ finalSuggestions.push(id);
1427
+ hintMatches.add(id);
1428
+ }
1429
+ }
1430
+ for (const id of trieSuggestions) {
1431
+ if (!finalSuggestions.includes(id)) {
1432
+ finalSuggestions.push(id);
1433
+ }
1434
+ }
1435
+ if (finalSuggestions.length === 0 && prefix) {
1363
1436
  const scored = ids
1364
1437
  .map((id) => ({ id, score: fuzzyScore(prefix, id) }))
1365
1438
  .filter((entry) => entry.score > 0);
1366
1439
  scored.sort((a, b) => b.score - a.score || a.id.localeCompare(b.id));
1367
- suggestions = scored.slice(0, limit).map((entry) => entry.id);
1440
+ finalSuggestions = scored.slice(0, limit).map((entry) => entry.id);
1368
1441
  }
1442
+ let suggestions = finalSuggestions.slice(0, limit);
1369
1443
  if (suggestions.length === 0) {
1370
1444
  return null;
1371
1445
  }
@@ -1377,7 +1451,8 @@ async function selectSkillId(hints, input, limit = 5, trie) {
1377
1451
  trackedLog('');
1378
1452
  trackedLog('Skill ID suggestions:');
1379
1453
  suggestions.forEach((value, index) => {
1380
- trackedLog(` ${index + 1}. ${highlightMatches(value, prefix)}`);
1454
+ const hintBadge = hintMatches.has(value) ? ', \x1b[32m[hints]\x1b[0m' : '';
1455
+ trackedLog(` ${index + 1}. ${highlightMatches(value, prefix)}${hintBadge}`);
1381
1456
  });
1382
1457
  const selected = await promptSelection('Select skill id (number or id): ', suggestions);
1383
1458
  printedLines += 1; // prompt line
@@ -1491,8 +1566,28 @@ function countConsoleLogLines(message) {
1491
1566
  return 1;
1492
1567
  return message.split('\n').length;
1493
1568
  }
1569
+ /**
1570
+ If input json is single quoted already, don't double quote
1571
+ '{"a":1}': unchanged
1572
+ "{"a":1}": unchanged
1573
+ {"a":1}: '{"a":1}'
1574
+ */
1575
+ function safelyQuoteArgs(cmd) {
1576
+ return cmd.replace(/(['"])?({[^{}]*})(['"])?/g, (match, open, json, close) => {
1577
+ // already quoted properly → keep as-is
1578
+ if (open && close && open === close) {
1579
+ return match;
1580
+ }
1581
+ // wrap ONLY the JSON part
1582
+ return `'${json.replace(/'/g, `'\\''`)}'`;
1583
+ });
1584
+ }
1585
+ /**
1586
+ Usage: agtm run <unique_id> <cli>
1587
+ */
1494
1588
  async function handleRun(idArg, commandArgs = [], options = {}) {
1495
1589
  const isAgent = (options.mode || 'human').toLowerCase() === MODE_AGENT;
1590
+ const originalIdArg = idArg;
1496
1591
  // first load local hints
1497
1592
  // 1. Install Local and Global Cache
1498
1593
  let hints = loadCombinedHints(false);
@@ -1527,17 +1622,41 @@ async function handleRun(idArg, commandArgs = [], options = {}) {
1527
1622
  if (!idArg || !activeHints[idArg]) {
1528
1623
  const query = idArg || '';
1529
1624
  const trie = cachedIdTrie || buildIdTrie(activeHints);
1530
- let suggestions = searchTrie(trie, query, 2);
1531
- if (suggestions.length === 0 && query) {
1625
+ let trieSuggestions = searchTrie(trie, query, 5);
1626
+ let hintMatches = new Set();
1627
+ let finalSuggestions = [];
1628
+ if (query) {
1629
+ const index = buildInvertedIndex(activeHints);
1630
+ const docs = searchInvertedIndex(index, query);
1631
+ const scoredDocs = new Map();
1632
+ for (const doc of docs) {
1633
+ scoredDocs.set(doc.id, (scoredDocs.get(doc.id) || 0) + 1);
1634
+ }
1635
+ const sortedDocs = Array.from(scoredDocs.entries()).sort((a, b) => b[1] - a[1]);
1636
+ for (const [id] of sortedDocs) {
1637
+ finalSuggestions.push(id);
1638
+ hintMatches.add(id);
1639
+ }
1640
+ }
1641
+ for (const id of trieSuggestions) {
1642
+ if (!finalSuggestions.includes(id)) {
1643
+ finalSuggestions.push(id);
1644
+ }
1645
+ }
1646
+ if (finalSuggestions.length === 0 && query) {
1532
1647
  const scored = ids
1533
1648
  .map((id) => ({ id, score: fuzzyScore(query, id) }))
1534
1649
  .filter((entry) => entry.score > 0);
1535
1650
  scored.sort((a, b) => b.score - a.score || a.id.localeCompare(b.id));
1536
- suggestions = scored.slice(0, 2).map((entry) => entry.id);
1651
+ finalSuggestions = scored.slice(0, 5).map((entry) => entry.id);
1537
1652
  }
1653
+ let suggestions = finalSuggestions.slice(0, 5);
1654
+ // In agent mode, if we have a very strong single match, we might want to use it.
1655
+ // But for now, let's just print suggestions and exit as before, but with better ranking.
1538
1656
  console.log('\nSkill ID suggestions:');
1539
1657
  suggestions.forEach((value, index) => {
1540
- console.log(` ${index + 1}. ${highlightMatches(value, query)}`);
1658
+ const hintBadge = hintMatches.has(value) ? ', \x1b[32m[hints]\x1b[0m' : '';
1659
+ console.log(` ${index + 1}. ${highlightMatches(value, query)}${hintBadge}`);
1541
1660
  const entry = activeHints[value];
1542
1661
  if (entry?.hints?.length) {
1543
1662
  const preview = entry.hints.slice(0, 2).map((h) => `${h.cli}${h.hint ? ` # ${h.hint}` : ''}`);
@@ -1547,6 +1666,7 @@ async function handleRun(idArg, commandArgs = [], options = {}) {
1547
1666
  process.exit(1);
1548
1667
  }
1549
1668
  let finalCommandArgs = commandArgs;
1669
+ // Adjust idArg and finalCommandArgs if necessary
1550
1670
  if (finalCommandArgs.length > 0 && activeHints[finalCommandArgs[0]]) {
1551
1671
  idArg = finalCommandArgs[0];
1552
1672
  finalCommandArgs = finalCommandArgs.slice(1);
@@ -1557,7 +1677,10 @@ async function handleRun(idArg, commandArgs = [], options = {}) {
1557
1677
  const hintEntry = activeHints[idArg];
1558
1678
  if (!finalCommandArgs || finalCommandArgs.length === 0) {
1559
1679
  console.log('\nCommand hints:');
1560
- hintEntry?.hints?.slice(0, 5).forEach((item, index) => {
1680
+ // USE originalIdArg to filter hints even in agent mode if no command specified
1681
+ const searchQuery = (originalIdArg && originalIdArg !== idArg) ? originalIdArg : '';
1682
+ const suggestions = filterCliHints(hintEntry.hints || [], searchQuery, 5);
1683
+ suggestions.forEach((item, index) => {
1561
1684
  const hintText = item.hint ? ` # ${item.hint}` : '';
1562
1685
  console.log(` ${index + 1}. ${item.cli}${hintText}`);
1563
1686
  });
@@ -1643,7 +1766,8 @@ async function handleRun(idArg, commandArgs = [], options = {}) {
1643
1766
  if (!finalCommandArgs || finalCommandArgs.length === 0) {
1644
1767
  let chosen = null;
1645
1768
  if (hintEntry?.hints && hintEntry.hints.length > 0) {
1646
- const query = await promptCommandLine(`\nEnter command to run (leave empty to list cli hints): `, ``);
1769
+ const defaultQuery = (originalIdArg && originalIdArg !== idArg) ? originalIdArg : '';
1770
+ const query = await promptCommandLine(`\nEnter command to run (leave empty to list cli hints): `, defaultQuery);
1647
1771
  const searchQuery = query || '';
1648
1772
  chosen = await selectCliHint(hintEntry.hints, searchQuery);
1649
1773
  }
@@ -1670,19 +1794,32 @@ async function handleRun(idArg, commandArgs = [], options = {}) {
1670
1794
  console.error('\n❌ Error: Missing command to run.');
1671
1795
  process.exit(1);
1672
1796
  }
1673
- const finalCommandLine = finalCommandArgs.join(' ');
1797
+ let finalCommandLine = finalCommandArgs.join(' ');
1674
1798
  console.log("\nComplete the Cli with your arguments or leave blank and press Enter");
1675
1799
  const edited = await promptCommandLine(`\nFinal command line [${finalCommandLine}]:\n`, `${finalCommandLine}`);
1800
+ // if (edited && edited.trim()) {
1801
+ // finalCommandArgs = edited.split(/\s+/).filter(Boolean);
1802
+ // }
1803
+ // IMPORTANT: do NOT split anymore, keep the json in <cli> not split again agtm run <id> <cli>
1676
1804
  if (edited && edited.trim()) {
1677
- finalCommandArgs = edited.split(/\s+/).filter(Boolean);
1805
+ finalCommandLine = edited.trim();
1678
1806
  }
1807
+ // re-add quotes for JSON
1808
+ finalCommandLine = safelyQuoteArgs(finalCommandLine);
1679
1809
  const [command, ...args] = finalCommandArgs;
1680
- const printable = `agtm run ${idArg} ${finalCommandArgs.join(' ')}`.trim();
1810
+ const printable = `agtm run ${idArg} ${finalCommandLine}`.trim();
1681
1811
  console.log(`\u001b[32m${printable}\u001b[0m`);
1682
1812
  if (options.print || options.dryRun) {
1683
1813
  return;
1684
1814
  }
1685
- const child = spawn(command, args, { stdio: 'inherit' });
1815
+ if (LOG_ENABLE) {
1816
+ console.log(`finalCommandLine is ${finalCommandLine}`);
1817
+ }
1818
+ const child = spawn(finalCommandLine, {
1819
+ stdio: 'inherit',
1820
+ shell: true
1821
+ });
1822
+ // const child = spawn(command, args, { stdio: 'inherit' });
1686
1823
  child.on('error', (err) => {
1687
1824
  if (err.code === 'ENOENT') {
1688
1825
  console.error(`\n❌ Error: Command not found: ${command}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aiagenta2z/agtm",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "agtm: CLI Tool for AI Agent Management, Skills, Agent Registry, Benchmarks and Hints in AI Agent Marketplace\n",
5
5
  "main": "dist/agtm-cli.js",
6
6
  "type": "module",