opencode-skills-collection 4.1.4 → 4.1.6

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.
Files changed (37) hide show
  1. package/bundled-skills/.antigravity-install-manifest.json +21 -1
  2. package/bundled-skills/aas-compose-stack/SKILL.md +39 -0
  3. package/bundled-skills/aas-discover/SKILL.md +35 -0
  4. package/bundled-skills/aas-review-stack/SKILL.md +37 -0
  5. package/bundled-skills/axonx/SKILL.md +374 -0
  6. package/bundled-skills/axonx/references/LICENSE.md +201 -0
  7. package/bundled-skills/browser-extension-launch/SKILL.md +102 -0
  8. package/bundled-skills/browser-extension-launch/references/acceptance.md +103 -0
  9. package/bundled-skills/browser-extension-launch/references/complex-workflow.md +46 -0
  10. package/bundled-skills/browser-extension-launch/references/dependencies.md +62 -0
  11. package/bundled-skills/browser-extension-launch/references/development.md +42 -0
  12. package/bundled-skills/browser-extension-launch/references/efficient-delivery.md +52 -0
  13. package/bundled-skills/browser-extension-launch/references/host-compatibility.md +58 -0
  14. package/bundled-skills/browser-extension-launch/references/playwright-mcp.md +102 -0
  15. package/bundled-skills/browser-extension-launch/references/product-loop.md +35 -0
  16. package/bundled-skills/browser-extension-launch/references/publishing.md +103 -0
  17. package/bundled-skills/browser-extension-launch/references/required-skills.json +153 -0
  18. package/bundled-skills/browser-extension-launch/references/workflow.md +71 -0
  19. package/bundled-skills/byagent/SKILL.md +125 -0
  20. package/bundled-skills/cloudish/SKILL.md +188 -0
  21. package/bundled-skills/define-my-content-pillars/SKILL.md +127 -0
  22. package/bundled-skills/draft-my-comments/SKILL.md +132 -0
  23. package/bundled-skills/etsy-search-listings/SKILL.md +122 -0
  24. package/bundled-skills/etsy-shop-sales-history/SKILL.md +119 -0
  25. package/bundled-skills/fxmacrodata/SKILL.md +224 -0
  26. package/bundled-skills/get-seen-in-replies/SKILL.md +134 -0
  27. package/bundled-skills/jobs-to-be-done-analyst/SKILL.md +1 -1
  28. package/bundled-skills/onboarding-psychologist/SKILL.md +1 -1
  29. package/bundled-skills/placecall/SKILL.md +237 -0
  30. package/bundled-skills/repurpose-into-a-post/SKILL.md +134 -0
  31. package/bundled-skills/same-idea-both-platforms/SKILL.md +111 -0
  32. package/bundled-skills/supercov/SKILL.md +119 -0
  33. package/bundled-skills/turn-this-into-a-thread/SKILL.md +130 -0
  34. package/bundled-skills/why-did-this-post-flop/SKILL.md +130 -0
  35. package/bundled-skills/write-in-my-voice/SKILL.md +140 -0
  36. package/package.json +1 -1
  37. package/skills_index.json +556 -2
@@ -0,0 +1,374 @@
1
+ ---
2
+ name: axonx
3
+ description: "Develop AxonX research plugins and operate quantitative research tasks through CLI or MCP, inspecting execution status, logs, artifacts, and lineage."
4
+ category: finance
5
+ risk: critical
6
+ source: "https://github.com/FlowLLM-AI/AxonX/tree/862b90da9c49c3bdee4c2ab9ef896c415aee9f45/skills/axonx"
7
+ source_repo: FlowLLM-AI/AxonX
8
+ source_type: community
9
+ license: Apache-2.0
10
+ license_source: "https://github.com/FlowLLM-AI/AxonX/blob/862b90da9c49c3bdee4c2ab9ef896c415aee9f45/LICENSE"
11
+ date_added: "2026-10-04"
12
+ tags: [quantitative-research, mcp, backtesting, python]
13
+ ---
14
+
15
+ # AxonX Development and Operations Guide
16
+
17
+ This guide can be read independently or installed as an Agent skill. Documentation and source links use absolute URLs, so copying this file does not depend on its original directory. The maintained project is [FlowLLM-AI/AxonX](https://github.com/FlowLLM-AI/AxonX).
18
+
19
+ Source paths such as `plugins/a158/...` are relative to the root of an AxonX source checkout, not to this document or the Agent workspace. Run source development and plugin build commands from that checkout. Workspace paths passed to Jobs such as `preview_file` are relative to the selected service's workspace. Package installation alone does not provide the example plugin sources.
20
+
21
+ ## When to Use This Skill
22
+
23
+ - Use when developing or modifying AxonX research plugins and their typed Task contracts.
24
+ - Use when a user requests AxonX research task submission, execution tracking, failure investigation, or artifact inspection.
25
+ - Use when integrating an external Agent with an existing AxonX MCP service.
26
+
27
+ ## Security & Safety Notes
28
+
29
+ This skill is labeled `critical` because it documents package installation, task submission, remote shell execution, cancellation, deletion, and artifact replacement. Establish the user's requested operation and exact service/workspace first. Do not treat command examples as authorization. Request clarification when the execution target or the scope of a destructive operation is unclear; existing explicit authorization remains valid. Never expose service or data-provider tokens in reports, logs, or committed files. Back up irreplaceable artifacts before authorized replacement or deletion.
30
+
31
+ ## Prepare the Environment and Service
32
+
33
+ Use Python 3.12+ on macOS or Linux for local Task execution. In your chosen working directory, create and activate a virtual environment, then install the core:
34
+
35
+ ```bash
36
+ python3 -m venv .venv
37
+ source .venv/bin/activate
38
+ pip install axonx
39
+ axonx help
40
+ ```
41
+
42
+ For the prebuilt Studio UI, install `axonx[studio]` instead. Research plugins are installed separately. For source development, clone the project, enter its root, and install it in an activated virtual environment:
43
+
44
+ ```bash
45
+ git clone https://github.com/FlowLLM-AI/AxonX.git
46
+ cd AxonX
47
+ pip install -e .
48
+ ```
49
+
50
+ Configure credentials through environment variables or a `.env` file discovered from the process working directory or its parents. Before starting a local service, replace the token placeholder with your own value:
51
+
52
+ ```bash
53
+ export AXONX_SERVICE_TOKEN='replace-with-your-local-service-token'
54
+ axonx start --service.host 127.0.0.1
55
+ ```
56
+
57
+ Keep that process running. In another terminal, activate the same environment and configure the same token, then run `axonx version` to verify the connection. The default port is `1024`; the default workspace is `.axonx` under the startup directory. If using an existing service, obtain its address and authentication configuration before making calls. Keep one execution target for plugin queries, submissions, status, logs, and artifact inspection.
58
+
59
+ For MCP clients, connect to `http://127.0.0.1:1024/mcp` using Streamable HTTP and the header `Authorization: Bearer <service-token>`; replace the address and token with those of your service. Discover tools from the connected service rather than assuming a fixed tool catalog. The CLI examples below describe the same operations; use the discovered MCP input schemas when calling tools.
60
+
61
+ The built-in `demo` Task can verify submission and tracking without market-data or model credentials; the Alpha158 workflow requires its research plugin and prepared input data. Market-data downloads require `AXONX_TUSHARE_TOKEN`; model-backed Agents require separate model configuration. See [Quick start](https://flowllm-ai.github.io/AxonX/en/getting-started/quickstart), [Research workflow](https://flowllm-ai.github.io/AxonX/en/research/workflow), and [MCP integration](https://flowllm-ai.github.io/AxonX/en/agent/mcp-integration) for complete setup examples.
62
+
63
+ When using this document as a skill, perform only the operations required by the user's request. Documentation examples do not authorize installation, task execution, deletion, or remote changes by themselves. For changes to the source checkout, follow its `AGENTS.md` and [contribution guide](https://github.com/FlowLLM-AI/AxonX/blob/main/CONTRIBUTING.md).
64
+
65
+ ## Background
66
+
67
+ AxonX is a harness framework for financial quantitative research, organizing data acquisition and ETL, factor analysis, model training, prediction, and backtesting into Tasks with consistent input/output contracts.
68
+ Plugins register research implementations; Tasks link upstream and downstream work through Task IDs. The CLI and HTTP service support submitting execution on local or remote machines and querying machine resources, runtime status, and logs.
69
+ The framework records task configuration, dependencies, result metadata, and artifacts in the workspace, and provides Agents with task, dependency graph, and file query tools to verify research results, investigate failures, and reuse upstream data.
70
+
71
+ - Authentication: when service authentication is enabled, configure local `AXONX_SERVICE_TOKEN` or remote `AXONX_TARGET_TOKEN` in environment variables or `.env` beforehand.
72
+ - Local operations: use the “Command” column without `--target`. Submit and query Tasks and machine resources directly through the local AxonX HTTP service.
73
+ - Discover remote machines: use `axonx list_machines` to query addresses (`address`, such as
74
+ `http://192.168.1.10:1024`) and health status (`healthy`) for all machines configured in the local service's `targets`, then use `axonx machine_status --target <host:port>` to inspect candidates'
75
+ CPU, memory, and GPU resources.
76
+ - Remote operations: once the target address is known, append `--target <host:port>` from the “Remote arguments” column to commands that support remote operation.
77
+
78
+ `192.168.1.10:1024` in the tables is an example target address; replace it before execution. `—` means remote operation is unsupported.
79
+
80
+ ## Plugin Development
81
+
82
+ A plugin can register multiple Tasks; the a158 example registers five Task types in `plugins/a158/axonx_alpha158/plugin.yaml`. The a158
83
+ paths, class names, registered names, and dependency chain here are illustrative; replace them with actual definitions when developing other research plugins. Plugin installation and Task submission are separate operations.
84
+
85
+ ### Required authoring contracts
86
+
87
+ Every plugin Task must directly or indirectly inherit `BaseTask` and follow the public authoring contract in
88
+ [`axonx/task/core/task.py`](https://github.com/FlowLLM-AI/AxonX/blob/main/axonx/task/core/task.py). Registration alone does not replace this contract:
89
+
90
+ - Declare a fixed `task_type`, `input_cls`, `output_cls`, and a detailed class docstring. Input and output models must
91
+ inherit `BaseInputParams` and `BaseOutputParams` from [`core/params.py`](https://github.com/FlowLLM-AI/AxonX/blob/main/axonx/task/core/params.py).
92
+ - Implement `build_task_steps()` to yield synchronous callables in execution order, and `build_output_params()` to
93
+ return a validated instance of the declared `output_cls`; returning a plain dictionary does not satisfy the contract.
94
+ - Preserve framework-managed Task identity, context, lifecycle, and metadata persistence. Use `self.task_dir`,
95
+ `source_task_dir()`, and `resolve_workspace_path()` for task artifacts and workspace paths; leave execution and
96
+ status recording to the framework runtime.
97
+
98
+ [`axonx/task/contracts/`](https://github.com/FlowLLM-AI/AxonX/tree/main/axonx/task/contracts) provides optional standard research Task and parameter classes
99
+ for ETL, Analysis, Train, Predict, and Backtest. For these research stages, prefer the corresponding `Base*Task`,
100
+ `Base*InputParams`, and `Base*OutputParams` classes. Once adopted, their required fields, types, and validators are part
101
+ of the plugin's contract: preserve them and declare additional fields in subclasses. A custom Task may inherit
102
+ `BaseTask` directly with its own parameter models, but must still follow the core contract; registration does not
103
+ require every Task to inherit one of the five research base classes.
104
+
105
+ Before implementation, read [Task contracts](https://flowllm-ai.github.io/AxonX/en/reference/task-contracts), [Task lifecycle](https://flowllm-ai.github.io/AxonX/en/concepts/task-lifecycle),
106
+ and [Research artifact contracts](https://flowllm-ai.github.io/AxonX/en/reference/research-artifacts). Standard Python fields alone do not guarantee
107
+ compatibility with downstream plugins or Studio; also satisfy the artifact mappings and presentation fields used by
108
+ the intended consumers.
109
+
110
+ ### Task Types
111
+
112
+ | Type | Concept and purpose |
113
+ | -------- | --------------------------------------------------------------------------------- |
114
+ | ETL | Clean and align raw data to generate datasets for subsequent research. |
115
+ | Analysis | Analyze factors in an ETL dataset to diagnose factor quality and performance. |
116
+ | Train | Train a model using an ETL dataset, producing the model and training results. |
117
+ | Predict | Generate predictions using a model produced by Train and its associated ETL data. |
118
+ | Backtest | Backtest Predict results to evaluate strategy performance. |
119
+
120
+ Tasks link upstream and downstream through Task IDs. The a158 example's main dependency chain is ETL → Train → Predict → Backtest; Analysis uses ETL data for factor analysis.
121
+
122
+ ### Development Steps
123
+
124
+ #### 1. Modify Code and Registration
125
+
126
+ For ETL, the minimal structure includes input parameters, output parameters, a Task implementation, and registration. The following is a structural example; replace `...` in `transform` with actual ETL
127
+ logic that reads input and writes results to `self.state["output"]`.
128
+
129
+ `plugins/a158/axonx_alpha158/etl.py`:
130
+
131
+ ```python
132
+ from pathlib import Path
133
+
134
+ from axonx.task.contracts import BaseETLInputParams, BaseETLOutputParams, BaseETLTask
135
+
136
+
137
+ class Alpha158InputParams(BaseETLInputParams):
138
+ input_dir: Path = Path("tushare")
139
+
140
+
141
+ class Alpha158OutputParams(BaseETLOutputParams):
142
+ pass # Use the ETL base class's output fields directly
143
+
144
+
145
+ class Alpha158Task(BaseETLTask):
146
+ """Clean and align raw market data to create an ETL dataset for training and factor analysis.
147
+ """
148
+
149
+ input_cls = Alpha158InputParams
150
+ output_cls = Alpha158OutputParams
151
+ input_params: Alpha158InputParams
152
+
153
+ def build_task_steps(self):
154
+ yield self.transform
155
+
156
+ def transform(self):
157
+ # Read data from self.resolve_workspace_path(self.input_params.input_dir),
158
+ # save artifacts to self.task_dir, and populate self.state["output"].
159
+ ...
160
+
161
+ def build_output_params(self):
162
+ return self.output_cls(**self.state["output"])
163
+ ```
164
+
165
+ A Task class must define a nonempty class docstring, used as the Task definition's `description`. Without it, Task resolution and definition queries raise
166
+ `TypeError: Task ... must define a detailed class docstring`. Describe the task's purpose, input, and artifacts; method docstrings alone are insufficient.
167
+
168
+ `BaseETLOutputParams` already defines required fields `output_file`, `rows`, and `date_range`, so `self.state["output"]` must contain at least these three fields. Add fields to
169
+ `Alpha158OutputParams` when additional results are needed.
170
+
171
+ `plugins/a158/axonx_alpha158/plugin.yaml` registers the Task name used by the CLI:
172
+
173
+ ```yaml
174
+ tasks:
175
+ a158_etl: axonx_alpha158.etl:Alpha158Task
176
+ ```
177
+
178
+ `a158_etl` is the `--task` value for submission; the Python module precedes the colon and the Task class name follows it.
179
+
180
+ For a new plugin, the package directory must contain `__init__.py`, and `plugins/a158/pyproject.toml` must declare the plugin entry point and registration file distributed with the package. The existing a158 plugin already configures these:
181
+
182
+ ```toml
183
+ [project.entry-points."axonx.plugins"]
184
+ alpha158 = "axonx_alpha158"
185
+
186
+ [tool.setuptools.package-data]
187
+ axonx_alpha158 = ["plugin.yaml"]
188
+ ```
189
+
190
+ #### 2. Install the Plugin
191
+
192
+ Build a wheel from source and install it into the current Python environment:
193
+
194
+ ```bash
195
+ axonx plugin install plugins/a158
196
+ ```
197
+
198
+ For Task execution on a remote machine, append `--target 192.168.1.10:1024`; the CLI uploads the wheel and installs it on the target service.
199
+
200
+ #### 3. Confirm Plugin and Task Registration
201
+
202
+ - Confirm installation: use `axonx plugin list` to verify that the target plugin is installed and `error` is empty; keys in the returned `tasks` mapping are registered names for `--task`.
203
+ - View definitions: use `axonx get_task_definition --task a158_etl` to inspect the selected Task's description, type, and input/output schemas.
204
+ - Use a consistent target: append the same `--target 192.168.1.10:1024` for remote queries and submission. Explicitly specify the service address when the local service uses a different Python environment as well.
205
+
206
+ #### 4. Check Execution Resources
207
+
208
+ - Use `axonx machine_status` to query CPU, memory, and GPU resources on the execution machine; append `--target 192.168.1.10:1024` for remote execution.
209
+ - Confirm that the machine meets the research task's resource requirements before submitting a Task to that service.
210
+
211
+ #### 5. Submit Tasks
212
+
213
+ Run only the Tasks needed for the current change and reuse unaffected successful upstream artifacts. Control variables: change only the factor being evaluated, keeping all other data, intervals, and parameters consistent with the baseline.
214
+
215
+ - Add factors: ETL → Train → Predict → Backtest.
216
+ - Update model architecture: Train → Predict → Backtest, reusing existing ETL.
217
+ - Update position management: run only Backtest, reusing existing Predict.
218
+
219
+ Run Analysis only when factor diagnostics are needed. Select the following commands as required.
220
+
221
+ | Command name | Description | Command | Remote arguments |
222
+ | ------------ | --------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------- |
223
+ | `submit` | Submit ETL to clean data and generate a dataset; the example specifies the data start date. | `axonx submit --task a158_etl --start-date 20150101` | `--target 192.168.1.10:1024` |
224
+ | `submit` | Submit Analysis to analyze factors in the specified ETL artifacts. | `axonx submit --task a158_factor --source-tasks '<etl_task_id>'` | `--target 192.168.1.10:1024` |
225
+ | `submit` | Submit Train to train a model using the specified ETL dataset. | `axonx submit --task a158_train --source-tasks '<etl_task_id>'` | `--target 192.168.1.10:1024` |
226
+ | `submit` | Submit Predict to generate predictions using the specified Train model and its associated ETL data. | `axonx submit --task a158_predict --source-tasks '<train_task_id>'` | `--target 192.168.1.10:1024` |
227
+ | `submit` | Submit Backtest to evaluate the specified Predict results. | `axonx submit --task a158_backtest --source-tasks '<predict_task_id>'` | `--target 192.168.1.10:1024` |
228
+
229
+ - Registered Task name: `--task a158_etl` corresponds to a key in `plugin.yaml`'s `tasks`, pointing to `axonx_alpha158.etl:Alpha158Task`. Obtain registered Task names from
230
+ `tasks` keys returned by `axonx plugin list`; use `axonx get_task_definition --task a158_etl` to view the complete definition.
231
+ - Input parameters: the Task's `input_cls` defines types and defaults. The CLI converts hyphens to underscores: for example, `--start-date` corresponds to
232
+ `Alpha158InputParams.start_date`, read through `self.input_params.start_date`; `--input-dir` corresponds to `input_dir`. Undeclared fields are rejected.
233
+ - Task naming: omit `--task-name` by default. Names are generated as `YYYYMMDDHH` plus four random letters or digits, yielding Task IDs such as
234
+ `etl#a158_etl#<generated name>`. Pass a name only when the user specifies one; **reusing an explicit name replaces artifacts after the previous execution finishes**.
235
+ - Return values: inspect the response's `success` and `answer` in full. Successful submission means only that execution was accepted. `answer` contains `task_id`, `run_id`, and `task`, but not
236
+ `state`. Record both actual returned IDs to wait for this run. Downstream `source-tasks` uses the successful upstream `task_id`; do not guess IDs.
237
+ - Upstream/downstream linkage: fill `--source-tasks` with Task IDs returned by successful upstream tasks. Separate multiple IDs with commas, such as `'<id1>,<id2>'`; an empty value means no upstream tasks.
238
+ Downstream tasks locate artifacts through upstream `metadata.json`.
239
+ - Execution target: omit `--target` locally; for remote execution, append the arguments in the table and replace the address with the actual target.
240
+
241
+ #### 6. Track Execution and Inspect Artifacts
242
+
243
+ - Use the actual Task ID and Run ID from submission to wait, query status, read logs, and inspect artifacts on the same service.
244
+ - Inspect the complete `answer` from `status`, `wait_task`, or `stream_task`: verify `task_id`, `run_id`, and `state`, and review
245
+ `result`, `error`, `exit_code`, `log_path`, step progress, and other fields. `status`'s `success` means the query succeeded, not that the Task succeeded.
246
+ - Continue waiting while `state` is `queued` or `running`; submit downstream tasks only after `succeeded`. For `failed` or `cancelled`, inspect errors and logs first.
247
+ - `wait_task` requires the returned `task_id` and `run_id` to wait for that execution. Resubmitting the same Task ID changes Run ID; a mismatch produces an error. Use
248
+ `--poll-interval 1` to set the polling interval in seconds (must exceed 0; default 1). For long tasks, use `--client-timeout 86400` to increase the client request timeout; it does not set
249
+ a Task execution time limit. `wait_task` returns `success: true` only when the final state is `succeeded`.
250
+
251
+ | Command name | Description | Command | Remote arguments |
252
+ | --------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ---------------------------- |
253
+ | `wait_task` | Wait for the specific run returned by submission and check final `answer.state`. | `axonx wait_task --task-id '<etl_task_id>' --run-id '<etl_run_id>' --client-timeout 86400` | `--target 192.168.1.10:1024` |
254
+ | `status` | Query the submitted ETL Task's status to confirm success. | `axonx status --task-id '<etl_task_id>'` | `--target 192.168.1.10:1024` |
255
+ | `read_task_log` | Read recent logs for this ETL Task to inspect output or investigate failures. | `axonx read_task_log --task-id '<etl_task_id>'` | `--target 192.168.1.10:1024` |
256
+ | `preview_file` | Inspect successful ETL metadata to obtain the dataset artifact path for downstream use. | `axonx preview_file --path 'etl/<etl_task_id>/metadata.json'` | `--target 192.168.1.10:1024` |
257
+
258
+ For other Tasks, use their actual Task IDs and workspace paths for the corresponding type. See the CLI API below for live tracking, dependency graph queries, and data preview commands.
259
+
260
+ ## CLI API
261
+
262
+ - Example values: replace IPs, Task IDs, and upload path placeholders with actual values from configuration or service responses.
263
+ - Parameter format: place regular Job parameters after the Job name; pass JSON arrays as a single shell argument.
264
+ - Execution timeout: `shell`'s `--timeout` is the Job execution timeout; `--client-timeout` is the client request timeout. Use the latter for long Task waits.
265
+ - Execution conditions: **execute destructive Jobs and `shell` only when the current task requires them and the target has been confirmed**.
266
+
267
+ ### Startup and Local Execution
268
+
269
+ | Command name | Description | Command | Remote arguments |
270
+ | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | ---------------------------- |
271
+ | `help` | Show CLI usage, local commands, and how to call service Jobs. | `axonx help` | — |
272
+ | `start` | Load the registered `default` configuration when none is specified and start the local HTTP service. | `axonx start` | — |
273
+ | `start` | Start the service with an explicitly specified YAML file; the example path is relative to the AxonX repository root and can be replaced with the actual configuration file. | `axonx start --config axonx/config/default.yaml` | — |
274
+ | `exec` | List executable registered Task names and entry classes in the current Python environment without running a Task. | `axonx exec` | — |
275
+ | `exec` | Execute the specified ETL Task in the current process and output results without HTTP submission. | `axonx exec --task a158_etl --start-date 20150101` | — |
276
+ | `version` | Query version information for the connected AxonX service. | `axonx version` | `--target 192.168.1.10:1024` |
277
+
278
+ ### Plugin Management
279
+
280
+ - Local management: omit `--target` to operate directly on the current Python environment.
281
+ - Remote management: pass `--target` to query or modify the target service's plugins.
282
+ - Inspection and building: source inspection and wheel building happen locally.
283
+ - Local `plugin inspect` accepts a source directory, wheel path, or installed plugin name; remote inspection accepts only a distribution or plugin name installed on the target service, such as
284
+ `axonx-alpha158`. Do not simply append `--target` to local path examples; remote inspection does not upload source or wheels.
285
+
286
+ | Command name | Description | Command | Remote arguments |
287
+ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | ---------------------------- |
288
+ | `plugin list` | List installed plugins in the current environment or target service; `tasks` keys are registered Task names. | `axonx plugin list` | `--target 192.168.1.10:1024` |
289
+ | `plugin show` | View a plugin's version, registered contributions, dependencies, and other information. | `axonx plugin show axonx-alpha158` | `--target 192.168.1.10:1024` |
290
+ | `plugin inspect` | Inspect a plugin installed in the current environment or target service; pass its distribution or plugin name. | `axonx plugin inspect axonx-alpha158` | `--target 192.168.1.10:1024` |
291
+ | `plugin inspect` | Build a wheel from local source or reuse a cached wheel to inspect plugin metadata without installation. | `axonx plugin inspect plugins/a158` | — |
292
+ | `plugin inspect` | Inspect plugin metadata from an existing local wheel without rebuilding or installing; replace the path with the actual file. | `axonx plugin inspect '<plugin_wheel_path>'` | — |
293
+ | `plugin build` | Build from source or reuse a cached wheel and output its path, checksum, and plugin metadata without installation. | `axonx plugin build plugins/a158` | — |
294
+ | `plugin build` | Generate a wheel in the specified directory for later distribution or installation. | `axonx plugin build plugins/a158 --output .axonx/plugins/dist` | — |
295
+ | `plugin install` | Build a wheel locally from source and install it directly; with a remote target, upload and install it on the target service. | `axonx plugin install plugins/a158` | `--target 192.168.1.10:1024` |
296
+ | `plugin install` | Install an existing local wheel; with a remote target, upload and install it on the target service. | `axonx plugin install '<plugin_wheel_path>'` | `--target 192.168.1.10:1024` |
297
+ | `plugin uninstall` | Uninstall the specified plugin from the current environment or target service. | `axonx plugin uninstall axonx-alpha158` | `--target 192.168.1.10:1024` |
298
+
299
+ ### Machines
300
+
301
+ | Command name | Description | Command | Remote arguments |
302
+ | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ---------------------------- |
303
+ | `list_machines` | Query addresses and health status for machines in the connected service's `targets` to select an execution target. | `axonx list_machines` | `--target 192.168.1.10:1024` |
304
+ | `machine_status` | Query CPU, memory, and GPU information for the machine hosting the connected service. | `axonx machine_status` | `--target 192.168.1.10:1024` |
305
+ | `shell` | Execute a shell command on the machine hosting the connected service; the example queries the current directory with a 30-second Job timeout. | `axonx shell --command 'pwd' --timeout 30` | `--target 192.168.1.10:1024` |
306
+
307
+ ### Task Submission and Execution
308
+
309
+ | Command name | Description | Command | Remote arguments |
310
+ | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------- |
311
+ | `get_task_definition` | Query a complete Task definition; `--task` takes the registered name, not a Task ID or instance name. | `axonx get_task_definition --task a158_etl` | `--target 192.168.1.10:1024` |
312
+ | `submit` | Submit ETL with a framework-generated name; record `answer.task_id`, `answer.run_id`, and `answer.task`. | `axonx submit --task a158_etl --start-date 20150101` | `--target 192.168.1.10:1024` |
313
+ | `submit` | Use an explicit name to generate a fixed Task ID; reusing it replaces artifacts after the previous run finishes. | `axonx submit --task a158_etl --task-name default --start-date 20150101` | `--target 192.168.1.10:1024` |
314
+ | `submit` | Submit training using the actual Task ID of a successful ETL as the data source. | `axonx submit --task a158_train --source-tasks '<etl_task_id>'` | `--target 192.168.1.10:1024` |
315
+ | `wait_task` | Wait for the specified Run ID to finish and return complete status; the response succeeds only for `succeeded`. | `axonx wait_task --task-id '<task_id>' --run-id '<run_id>' --client-timeout 86400` | `--target 192.168.1.10:1024` |
316
+ | `stream_task` | Continuously output a Task's progress and logs until completion, then return final status. | `axonx stream_task --task-id '<task_id>' --stream true` | `--target 192.168.1.10:1024` |
317
+ | `list_task_ids` | List Task IDs with status files for subsequent queries. | `axonx list_task_ids` | `--target 192.168.1.10:1024` |
318
+ | `list_task_statuses` | Get a list of Task status snapshots to inspect multiple tasks. | `axonx list_task_statuses` | `--target 192.168.1.10:1024` |
319
+ | `status` | Get the current status snapshot for a Task without continuously following logs. | `axonx status --task-id '<task_id>'` | `--target 192.168.1.10:1024` |
320
+ | `read_task_log` | Read the tail of a Task's log once, up to 65536 bytes by default, to inspect recent output. | `axonx read_task_log --task-id '<task_id>'` | `--target 192.168.1.10:1024` |
321
+ | `read_task_log` | Read from a specified byte offset; the example starts at the beginning, and subsequent reads can use the response's `next_offset`. | `axonx read_task_log --task-id '<task_id>' --offset 0 --limit 65536` | `--target 192.168.1.10:1024` |
322
+ | `get_task_context` | Collect status, metadata and log paths, dependency graph, and upstream/downstream relationships for investigation or further research. | `axonx get_task_context --task-id '<task_id>'` | `--target 192.168.1.10:1024` |
323
+ | `get_task_graph` | Query the dependency graph containing a Task to inspect nodes, edges, and upstream/downstream links. | `axonx get_task_graph --task-id '<task_id>'` | `--target 192.168.1.10:1024` |
324
+ | `cancel` | Cancel a queued or running Task. | `axonx cancel --task-id '<task_id>'` | `--target 192.168.1.10:1024` |
325
+ | `delete_tasks` | Delete finished Tasks or Tasks with only metadata, together with their files; even one ID must be passed as a JSON array. | `axonx delete_tasks --task-ids '["<task_id>"]'` | `--target 192.168.1.10:1024` |
326
+ | `delete_tasks` | Delete multiple finished Tasks or Tasks with only metadata, together with their files. | `axonx delete_tasks --task-ids '["<task_id_1>","<task_id_2>"]'` | `--target 192.168.1.10:1024` |
327
+
328
+ ### Workspace and Synchronization
329
+
330
+ | Command name | Description | Command | Remote arguments |
331
+ | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------- |
332
+ | `list_entries` | Query the connected service's workspace root for existing Task type directories and other entries. | `axonx list_entries --path ''` | `--target 192.168.1.10:1024` |
333
+ | `list_entries` | Query files and subdirectories in the specified ETL Task directory to locate actual artifact paths. | `axonx list_entries --path 'etl/<etl_task_id>'` | `--target 192.168.1.10:1024` |
334
+ | `list_task_runs` | List run directories containing `metadata.json` by Task type; the example queries ETL. | `axonx list_task_runs --task-type etl` | `--target 192.168.1.10:1024` |
335
+ | `preview_file` | Read a Task's `metadata.json` to inspect configuration, dependencies, and artifact paths. | `axonx preview_file --path 'etl/<etl_task_id>/metadata.json'` | `--target 192.168.1.10:1024` |
336
+ | `preview_file` | Preview CSV or Parquet rows; the example skips 200 rows and returns at most 100. Obtain the path from actual artifacts. | `axonx preview_file --path '<artifact_path>' --offset 200 --limit 100` | `--target 192.168.1.10:1024` |
337
+ | `delete_entries` | Delete workspace files or directories; even a single path must be passed as a JSON array. | `axonx delete_entries --paths '["etl/<etl_task_id>/old.csv"]'` | `--target 192.168.1.10:1024` |
338
+ | `delete_entries` | Delete multiple workspace files or directories; all paths are relative to the workspace. | `axonx delete_entries --paths '["<workspace_path_1>","<workspace_path_2>"]'` | `--target 192.168.1.10:1024` |
339
+ | `sync_tasks` | Use the staged archive path returned by the target service to replace Task directories carried in the archive; this command does not upload files itself. | `axonx sync_tasks --path '<staged_archive_path>'` | `--target 192.168.1.10:1024` |
340
+
341
+ - Artifact paths: after a successful run, metadata is written to `workspace/<task_type>/<task_id>/metadata.json`; `preview_file` uses workspace-relative paths.
342
+ - Actual values: obtain upload archive paths, target service addresses, and Task IDs from real configuration or service responses before executing the corresponding commands.
343
+
344
+ ## Examples
345
+
346
+ ### Inspect an existing research run
347
+
348
+ After connecting to the service identified by the user, obtain its actual task IDs and inspect a selected run:
349
+
350
+ ```bash
351
+ axonx list_task_ids
352
+ axonx status --task-id '<actual_task_id>'
353
+ axonx read_task_log --task-id '<actual_task_id>'
354
+ axonx get_task_graph --task-id '<actual_task_id>'
355
+ ```
356
+
357
+ Replace the placeholder using the service response and use the same target and authentication for every call. These queries do not submit a new research task.
358
+
359
+ ### Develop a research plugin
360
+
361
+ For a request to add a factor, inspect the existing plugin and Task definition, implement the change using the authoring contracts above, and run the affected repository checks. Install and execute only when requested for the selected environment. Reuse successful upstream artifacts and keep the data window and other comparison parameters fixed.
362
+
363
+ ## Limitations
364
+
365
+ - Local Task execution supports Python 3.12+ on macOS/Linux; Windows is not a supported local runtime.
366
+ - An AxonX service and its configured credentials are required for HTTP/MCP operations. This file alone does not deploy a service.
367
+ - Research plugins, market data, and model configuration are separate dependencies. Example IDs and addresses are placeholders.
368
+ - The ETL code above is structural pseudocode and needs a real transform and complete output fields before execution.
369
+ - Backtest results do not establish future investment performance; compare costs and data assumptions before interpreting them.
370
+ - Source development requires an AxonX checkout; paths inside examples refer to that checkout or the selected service workspace as stated above.
371
+
372
+ ## Source and License
373
+
374
+ Copyright 2026 FlowLLM-AI. Adapted from the AxonX development guide and Skill at commit `862b90da9c49c3bdee4c2ab9ef896c415aee9f45`, licensed under Apache-2.0; the license is included at `references/LICENSE.md`. This contribution adds catalog metadata, trigger guidance, safety notes, examples, and limitations. Source attribution does not imply endorsement by this catalog.
@@ -0,0 +1,201 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright 2026 FlowLLM-AI
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.