x_aeon_agents 1.0.31 โ 1.0.32
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +246 -148
- data/lib/x_aeon_agents/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 59c6b413059e9d1c9736beb7b8c254f9e8c16fc704c95fa45e9485d3e8d887e6
|
|
4
|
+
data.tar.gz: 933c880d6d65f72d20e519cab4003f7dd626447d8cde056fddf6bb21391f5ef3
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8a68a25a261b073291db1e465a46fe99b1c9ec6338a09935c47160fd4fd3bca7802c8be801b59299d368c43102db64f6248779a7eee7976d2dd879f12d4e389a
|
|
7
|
+
data.tar.gz: 1e86923809fcc90787957de6b3ad5b982f4500df5733d48ddb5d8dad5efc0dc2dd1102ee5ca7ad2f7725d47d448d3eda4ede8a2fa2238f5749f5aa1a56c4f25e
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
# [v1.0.32](https://github.com/Muriel-Salvan/x_aeon_agents/compare/v1.0.31...v1.0.32) (2026-09-10 16:56:38)
|
|
2
|
+
|
|
3
|
+
### Patches
|
|
4
|
+
|
|
5
|
+
* [docs: restructure README and ship example config template](https://github.com/Muriel-Salvan/x_aeon_agents/commit/681d705042f160b1504b222570467775aeed188a)
|
|
6
|
+
|
|
1
7
|
# [v1.0.31](https://github.com/Muriel-Salvan/x_aeon_agents/compare/v1.0.30...v1.0.31) (2026-09-10 15:11:18)
|
|
2
8
|
|
|
3
9
|
### Patches
|
data/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# x_aeon_agents
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
**Executable software-engineering workflows for coding agents** โ a Ruby gem that packages composable AI agents behind an `xaa` CLI and a reusable library to automate everyday development workflows.
|
|
6
6
|
|
|
7
7
|
[](https://github.com/Muriel-Salvan/x_aeon_agents/actions/workflows/continuous_integration.yml)
|
|
8
8
|
[](https://codecov.io/gh/Muriel-Salvan/x_aeon_agents)
|
|
@@ -13,16 +13,16 @@
|
|
|
13
13
|
|
|
14
14
|
</div>
|
|
15
15
|
|
|
16
|
-
**x_aeon_agents**
|
|
16
|
+
**x_aeon_agents** turns coding agents into participants in *explicit, repeatable and quality software-engineering processes* โ instead of letting the agent invent its own workflow on the fly.
|
|
17
17
|
|
|
18
|
-
Powered by the `xaa` command-line interface (and usable as a library too), it
|
|
18
|
+
Powered by the `xaa` command-line interface (and usable as a **Ruby library** too), it packages a suite of composable AI agents that automate everyday development tasks:
|
|
19
19
|
|
|
20
20
|
- ๐ฌ **Pull Request reviews** โ automatically read, address and reply to GitHub review comments
|
|
21
21
|
- ๐ **Commit messages** โ generate meaningful descriptions for your staged changes
|
|
22
|
+
- ๐ **Issue implementation** โ turn GitHub issues into working code and open Pull Requests
|
|
22
23
|
- ๐ **README generation** โ build documentation sections straight from your codebase
|
|
23
24
|
- ๐ **Git diff interpretation** โ summarize what changed and why
|
|
24
|
-
-
|
|
25
|
-
- ๐ ๏ธ **Task bootstrapping** โ create git worktrees and feature branches in seconds
|
|
25
|
+
- ๐ฟ **Task bootstrapping** โ create git worktrees and feature branches in seconds
|
|
26
26
|
- ๐ง **Skill templating** โ generate reusable agent workflows from ERB templates
|
|
27
27
|
|
|
28
28
|
Use it as a **โก CLI** in your terminal or as a **๐ฆ library** inside your Ruby projects.
|
|
@@ -33,16 +33,16 @@ Use it as a **โก CLI** in your terminal or as a **๐ฆ library** inside your Ru
|
|
|
33
33
|
- [Prerequisites](#prerequisites)
|
|
34
34
|
- [Install](#install)
|
|
35
35
|
- [Configure](#configure)
|
|
36
|
-
- [Optional configuration file](#optional-configuration-file)
|
|
37
36
|
- [Use the CLI](#use-the-cli)
|
|
38
37
|
- [Use as a library](#use-as-a-library)
|
|
39
38
|
- [Requirements](#requirements)
|
|
40
39
|
- [Features](#features)
|
|
41
40
|
- [Public API](#public-api)
|
|
42
41
|
- [Executable: `xaa`](#executable-xaa)
|
|
42
|
+
- [Config DSL file (`.x_aeon_agents.rb`)](#config-dsl-file-x_aeon_agentsrb)
|
|
43
43
|
- [`XAeonAgents::Config`](#xaeonagentsconfig)
|
|
44
|
-
- [`XAeonAgents::AgentOptions`](#xaeonagentsagentoptions)
|
|
45
44
|
- [`XAeonAgents::GenHelpers`](#xaeonagentsgenhelpers)
|
|
45
|
+
- [`XAeonAgents::Logger`](#xaeonagentslogger)
|
|
46
46
|
- [Documentation](#documentation)
|
|
47
47
|
- [Library public API](#library-public-api)
|
|
48
48
|
- [How it works](#how-it-works)
|
|
@@ -78,10 +78,12 @@ Use it as a **โก CLI** in your terminal or as a **๐ฆ library** inside your Ru
|
|
|
78
78
|
|
|
79
79
|
### Prerequisites
|
|
80
80
|
|
|
81
|
-
- Ruby `>= 3.1`
|
|
82
|
-
-
|
|
83
|
-
-
|
|
84
|
-
-
|
|
81
|
+
- **Ruby** `>= 3.1` (RubyGems/Bundler required to install the gem)
|
|
82
|
+
- **Git** command-line client available in `PATH`
|
|
83
|
+
- **GitHub CLI (`gh`)** installed and authenticated for Pull Request / issue features
|
|
84
|
+
- An **OpenRouter API key** (`OPENROUTER_API_KEY`) to power the AI agents
|
|
85
|
+
- A **GitHub token** (`GITHUB_TOKEN`) for features that talk to GitHub
|
|
86
|
+
- Optionally a **Cline API key** (`CLINE_API_KEY`) when driving the Cline agent
|
|
85
87
|
|
|
86
88
|
### Install
|
|
87
89
|
|
|
@@ -103,79 +105,24 @@ bundle install
|
|
|
103
105
|
|
|
104
106
|
### Configure
|
|
105
107
|
|
|
106
|
-
Export the required credentials as environment variables (the CLI
|
|
108
|
+
Export the required credentials as environment variables (the CLI and library read them automatically):
|
|
107
109
|
|
|
108
110
|
```bash
|
|
109
111
|
export OPENROUTER_API_KEY="sk-or-..."
|
|
110
112
|
export GITHUB_TOKEN="ghp_..."
|
|
111
113
|
```
|
|
112
114
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
You can fine-tune behaviour with an optional `.x_aeon_agents.rb` configuration file, read at the start of every `xaa` command:
|
|
116
|
-
|
|
117
|
-
- `~/.x_aeon_agents.rb` โ in your **home directory**, for *global / user-level* settings;
|
|
118
|
-
- `.x_aeon_agents.rb` โ in the **current project directory**, for *project-level* settings;
|
|
119
|
-
- any path stored in the **`X_AEON_AGENTS_CONFIG`** environment variable, for *explicitly designated* settings.
|
|
120
|
-
|
|
121
|
-
When several exist, they are evaluated in that order and the last one wins: the project file overrides the global one, and the `X_AEON_AGENTS_CONFIG` file overrides them both. Exposed directives:
|
|
122
|
-
|
|
123
|
-
- `debug true` / `debug false` โ enable or disable debug logging. An explicit `--debug` / `--no-debug` command-line flag always overrides it, and when neither the file nor a flag sets a value, the `X_AEON_AGENTS_DEBUG` environment variable is still honoured.
|
|
124
|
-
- `cline_api_key`, `openrouter_api_key` and `github_token` โ declare, using a block, custom Ruby code to retrieve the corresponding secret when it is needed, instead of relying on the `CLINE_API_KEY` / `OPENROUTER_API_KEY` / `GITHUB_TOKEN` environment variables:
|
|
115
|
+
For fine-tuning, you can create an optional `.x_aeon_agents.rb` configuration file in your home directory (`~/.x_aeon_agents.rb` for global settings) or in the current project directory (for project-level settings). It is evaluated at the start of every `xaa` command. See the [Config DSL file](#config-dsl-file-x_aeon_agentsrb) section for the full DSL reference. For example, to enable debug logging and declare a secret retrieval block:
|
|
125
116
|
|
|
126
117
|
```ruby
|
|
127
|
-
|
|
118
|
+
debug true
|
|
119
|
+
|
|
120
|
+
openrouter_api_key do
|
|
128
121
|
# Any Ruby code that returns the key
|
|
129
122
|
File.read('/path/to/my/key').strip
|
|
130
123
|
end
|
|
131
124
|
```
|
|
132
125
|
|
|
133
|
-
The block is evaluated lazily, only the first time the secret is actually needed, and its result is then cached for the whole session.
|
|
134
|
-
- `setup_project` โ declare, using a block, the steps to execute in a freshly created git worktree to install the project's dependencies (used by the `start-task` command):
|
|
135
|
-
|
|
136
|
-
```ruby
|
|
137
|
-
setup_project do
|
|
138
|
-
system 'bundle install'
|
|
139
|
-
end
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
The block is evaluated right after the worktree has been created, with the current directory set to the worktree. If it is not defined, no setup step is executed.
|
|
143
|
-
- `test_project_cmd` โ declare the command line used to run the project's tests suite, executed by the `implement` command after each code change and after each fix made by the Tester agent:
|
|
144
|
-
|
|
145
|
-
```ruby
|
|
146
|
-
test_project_cmd 'bundle exec rspec'
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
If it is not defined, the `implement` command does not run any tests.
|
|
150
|
-
- `on_open_worktree` โ declare, using a block, a callback to execute every time the `start-task` command opens a worktree (freshly created or already existing), after the branch has been pushed to the remote. The block is given the worktree's directory as parameter:
|
|
151
|
-
|
|
152
|
-
```ruby
|
|
153
|
-
on_open_worktree do |dir|
|
|
154
|
-
system "VSCodium.exe \"#{dir}\""
|
|
155
|
-
end
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
If it is not defined, nothing is executed when a worktree is opened.
|
|
159
|
-
|
|
160
|
-
- `configure_agent` โ declare, using a block, the default kwargs to be used when initializing agents of a given class. The block is evaluated every time an agent of this class is instantiated: it is given the currently merged configuration of the agent (a Hash of kwargs, that can be modified in place), and can return a Hash of additional kwargs to be merged into this configuration:
|
|
161
|
-
|
|
162
|
-
```ruby
|
|
163
|
-
configure_agent(:PlanGeneratorAgent) do
|
|
164
|
-
{
|
|
165
|
-
model: 'deepseek/deepseek-v4-flash',
|
|
166
|
-
cli_options: { plan: true }
|
|
167
|
-
}
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
configure_agent(:PlanGeneratorAgent) do |agent_config|
|
|
171
|
-
agent_config[:skills].push('applying-ruby-conventions')
|
|
172
|
-
agent_config
|
|
173
|
-
end
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
This method is re-entrant: it can be called several times for the same agent class, from the same config file or from different ones (global, project, env-var designated): each call sees the configuration accumulated by the previous ones, in the order the config files are evaluated. This lets a global config define base settings, and a project config read and adapt them.
|
|
177
|
-
For example, to always run in debug mode inside a given project, create a `.x_aeon_agents.rb` file in that project directory containing `debug true`.
|
|
178
|
-
|
|
179
126
|
### Use the CLI
|
|
180
127
|
|
|
181
128
|
The `xaa` command is installed alongside the gem. Run it from inside any Git repository.
|
|
@@ -204,18 +151,12 @@ Generate or update the project README from the codebase:
|
|
|
204
151
|
xaa generate-readme
|
|
205
152
|
```
|
|
206
153
|
|
|
207
|
-
Ask a quick one-off question to the agent:
|
|
154
|
+
Ask a quick one-off question to the AI agent:
|
|
208
155
|
|
|
209
156
|
```bash
|
|
210
157
|
xaa prompt "What is the capital of France?"
|
|
211
158
|
```
|
|
212
159
|
|
|
213
|
-
Bootstrap a new task in a git worktree:
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
xaa start-task --branch feature/my-task
|
|
217
|
-
```
|
|
218
|
-
|
|
219
160
|
### Use as a library
|
|
220
161
|
|
|
221
162
|
Require the gem and configure it in your Ruby code:
|
|
@@ -234,53 +175,160 @@ XAeonAgents::Agents::CommitterAgent.new.run
|
|
|
234
175
|
|
|
235
176
|
## Requirements
|
|
236
177
|
|
|
237
|
-
- **
|
|
178
|
+
- **Operating system** โ any platform supported by Ruby (Linux, macOS, Windows)
|
|
179
|
+
- **Ruby** `>= 3.1` (with RubyGems/Bundler) โ the `xaa` CLI and the library are Ruby-based
|
|
238
180
|
- **Git** command-line client in `PATH` โ the agents operate on repositories, branches, worktrees and commits
|
|
239
181
|
- **GitHub CLI (`gh`)** installed and authenticated โ used by the Pull Request and comment skills to query and reply via `gh api`
|
|
182
|
+
- **A Git repository** โ the `xaa` commands must be run from inside a Git repository
|
|
183
|
+
- **Network access** โ to reach the OpenRouter and GitHub APIs
|
|
240
184
|
- **`GITHUB_TOKEN`** environment variable โ a GitHub personal access token used by Octokit for API access
|
|
241
185
|
- **`OPENROUTER_API_KEY`** environment variable โ an OpenRouter API key that powers the AI agents through RubyLLM
|
|
242
186
|
- **`CLINE_API_KEY`** environment variable (optional) โ only required when driving the Cline agent integration
|
|
243
187
|
|
|
244
|
-
Each of these secrets can alternatively be retrieved by custom code declared in the [
|
|
188
|
+
Each of these secrets can alternatively be retrieved by custom code declared in the [Config DSL file](#config-dsl-file-x_aeon_agentsrb).
|
|
245
189
|
|
|
246
190
|
## Features
|
|
247
191
|
|
|
248
|
-
**x_aeon_agents** provides a *`xaa`* command-line interface and a reusable Ruby library that package a suite of AI agents to automate everyday development workflows.
|
|
192
|
+
**x_aeon_agents** provides a *`xaa`* command-line interface and a reusable Ruby library that package a suite of composable AI agents to automate everyday development workflows.
|
|
249
193
|
|
|
250
194
|
- ๐ฌ **Pull Request review handling** โ auto-detect the PR for the current branch, read agent-addressed comments, fix the code and reply to each thread
|
|
251
195
|
- ๐ **AI commit messages** โ analyze staged changes and generate a meaningful message, with flexible staging strategies (`all`, `if_empty`, `none`)
|
|
252
196
|
- ๐ **Automated Pull Request creation** โ push the branch to GitHub and open a PR against a configurable base ref with an AI-written description
|
|
253
|
-
- ๐ **README generation** โ build a full README from the codebase with toggleable sections (about, quick start, requirements, features, public API, documentation, how-it-works, development, contributing, license)
|
|
254
197
|
- ๐ **GitHub issue implementation** โ turn an issue (and its comments) into working code, committing changes and opening a PR automatically
|
|
255
|
-
- ๐ ๏ธ **Arbitrary requirement implementation** โ pass free-form requirements to a Developer agent that
|
|
256
|
-
-
|
|
198
|
+
- ๐ ๏ธ **Arbitrary requirement implementation** โ pass free-form requirements to a Developer agent that plans, codes and tests the changes, optionally committing and opening a PR
|
|
199
|
+
- ๐ **README generation** โ build a full README from the codebase with 10 toggleable sections (about, quick start, requirements, features, public API, documentation, how-it-works, development, contributing, license)
|
|
200
|
+
- ๐ **Git diff interpretation** โ summarize the working-tree changes and the intent behind them relative to any base ref
|
|
257
201
|
- ๐ฌ **One-shot prompts** โ send a single prompt to the AI agent and print the response
|
|
258
|
-
- ๐ง **Skill templating** โ generate skill files from ERB templates
|
|
202
|
+
- ๐ง **Skill templating** โ generate skill files from ERB templates in `skills.src/`, evaluating templates and copying assets to the output directory
|
|
259
203
|
- ๐ฅ **Skill installation** โ install skills and their recursively-resolved dependencies from a manifest for a chosen agent
|
|
260
|
-
- ๐ฟ **Task bootstrapping** โ create a feature branch, set up a git worktree, push it upstream and open it in the editor
|
|
204
|
+
- ๐ฟ **Task bootstrapping** โ create a feature branch, set up a git worktree, push it upstream and open it in the editor, with `setup_project` and `on_open_worktree` hooks
|
|
205
|
+
- ๐งฉ **Composable agent framework** โ orchestrating agents (planner โ coder โ tester โ committer โ documenter โ PR creator) built on `ai-agents`/`composable_agents`, backed by a Cline/OpenRouter provider via RubyLLM
|
|
206
|
+
- โ๏ธ **Extensible config DSL** โ optional `.x_aeon_agents.rb` file with secrets handling, per-agent model tuning (`configure_agent`) and a project test command
|
|
207
|
+
- ๐พ **Session persistence & debugging** โ global `--session-id` to resume AI conversations and a `--debug` flag for verbose logging
|
|
261
208
|
- ๐ฆ **Reusable Ruby library** โ require the gem and trigger agents programmatically (e.g. `Agents::CommitterAgent.new.run`)
|
|
262
|
-
- ๐งฉ **Agent framework & provider integration** โ composable agents built on `ai-agents`/`composable_agents`, a Cline/OpenRouter provider, central `Config`, helpers and `GenHelpers`
|
|
263
|
-
- ๐พ **Session persistence & debugging** โ global `--session-id` for conversation persistence and a `--debug` flag for verbose logging
|
|
264
209
|
|
|
265
210
|
## Public API
|
|
266
211
|
|
|
267
|
-
x_aeon_agents exposes
|
|
212
|
+
`x_aeon_agents` exposes one command-line executable (`xaa`) and a small Ruby library surface. Only the entry points below are part of the public API (the executable in `bin/` and the Ruby methods tagged with YARD's `Public API` group).
|
|
268
213
|
|
|
269
214
|
### Executable: `xaa`
|
|
270
215
|
|
|
271
|
-
The `bin/xaa` script is the entry point
|
|
216
|
+
The `bin/xaa` script is the CLI entry point: it boots the gem and dispatches the arguments to `XAeonAgents::Cli`. Run it from inside any Git repository.
|
|
272
217
|
|
|
273
|
-
**Usecase** โ commit staged changes with an AI-generated message:
|
|
218
|
+
**Usecase** โ commit your staged changes with an AI-generated message:
|
|
274
219
|
|
|
275
220
|
```bash
|
|
276
221
|
xaa commit
|
|
277
222
|
```
|
|
278
223
|
|
|
279
|
-
|
|
224
|
+
Available commands:
|
|
225
|
+
|
|
226
|
+
| Command | Description |
|
|
227
|
+
| --- | --- |
|
|
228
|
+
| `xaa review-comments [PR_NUMBER]` | Read, address and reply to GitHub Pull Request review comments |
|
|
229
|
+
| `xaa commit` | Commit staged changes with an AI-generated message |
|
|
230
|
+
| `xaa create-pr` | Push the branch and create a GitHub Pull Request |
|
|
231
|
+
| `xaa implement-issue ISSUE_NUMBER` | Implement a GitHub issue with AI |
|
|
232
|
+
| `xaa implement REQUIREMENTS` | Implement free-form requirements with AI |
|
|
233
|
+
| `xaa interpret-diffs [BASE]` | Summarize git diffs relative to a base ref |
|
|
234
|
+
| `xaa generate-readme` | Generate or update the project README from the codebase |
|
|
235
|
+
| `xaa generate-skills` | Generate skill files from ERB templates in `skills.src/` |
|
|
236
|
+
| `xaa install-skills` | Install skills from the `.skills` manifest |
|
|
237
|
+
| `xaa start-task` | Create a feature branch, git worktree, and push it upstream |
|
|
238
|
+
| `xaa prompt PROMPT` | Send a one-shot prompt to the AI agent |
|
|
239
|
+
|
|
240
|
+
More details: [GitHub โ bin/xaa](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/bin/xaa) ยท [RubyDoc โ XAeonAgents::Cli](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Cli)
|
|
241
|
+
|
|
242
|
+
### Config DSL file (`.x_aeon_agents.rb`)
|
|
243
|
+
|
|
244
|
+
The optional `.x_aeon_agents.rb` configuration file exposes a small Ruby DSL used to fine-tune X-Aeon Agents: retrieve secrets from custom sources, define project setup and testing commands, hook into the worktree lifecycle and tune the default settings of any agent class. It is evaluated at the start of every `xaa` command (and can be loaded manually with `XAeonAgents::Config.load`).
|
|
245
|
+
|
|
246
|
+
**Usecase** โ retrieve a secret from a custom source, define the test suite command and tune the coding agent:
|
|
247
|
+
|
|
248
|
+
```ruby
|
|
249
|
+
openrouter_api_key { File.read('/path/to/my/key').strip }
|
|
250
|
+
|
|
251
|
+
test_project_cmd 'bundle exec rspec --format=documentation'
|
|
252
|
+
|
|
253
|
+
configure_agent(:CoderAgent) do
|
|
254
|
+
{ model: 'deepseek/deepseek-v4-flash' }
|
|
255
|
+
end
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
More details: [GitHub โ .x_aeon_agents.example.rb](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/.x_aeon_agents.example.rb)
|
|
259
|
+
|
|
260
|
+
#### Where the file is loaded from
|
|
261
|
+
|
|
262
|
+
Files are looked up in the following locations and evaluated from the lowest priority (first) to the highest one โ so higher-priority settings override lower-priority ones:
|
|
263
|
+
|
|
264
|
+
1. `~/.x_aeon_agents.rb` โ global, per-user settings
|
|
265
|
+
2. `./.x_aeon_agents.rb` โ project-level settings (current directory)
|
|
266
|
+
3. The path given by the `X_AEON_AGENTS_CONFIG` environment variable, if set โ overrides both
|
|
267
|
+
|
|
268
|
+
> [!NOTE]
|
|
269
|
+
> All existing files are evaluated in this order (not just the first one found), and explicit CLI flags (`--debug`) still override everything. The file is evaluated in a cleanroom: only the DSL methods below are exposed at its top level, but regular Ruby code works inside the blocks given to those methods.
|
|
270
|
+
|
|
271
|
+
#### Possible methods
|
|
272
|
+
|
|
273
|
+
| Method | Description |
|
|
274
|
+
| --- | --- |
|
|
275
|
+
| `debug(value)` | Enable debug logging |
|
|
276
|
+
| `cline_api_key { ... }` / `openrouter_api_key { ... }` / `github_token { ... }` | Define the code retrieving a secret |
|
|
277
|
+
| `setup_project { ... }` | Steps to install the project's dependencies in a fresh worktree |
|
|
278
|
+
| `test_project_cmd 'cmd'` | Command line running the project's test suite |
|
|
279
|
+
| `on_open_worktree { \|dir\| ... }` | Callback executed when a worktree is opened |
|
|
280
|
+
| `configure_agent(:AgentClass) { \|cfg\| ... }` | Default kwargs for agents of a given class |
|
|
281
|
+
|
|
282
|
+
- **`debug(value)`** โ set the debug mode:
|
|
283
|
+
|
|
284
|
+
```ruby
|
|
285
|
+
debug true
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
- **Secret retrieval blocks** โ `cline_api_key`, `openrouter_api_key` and `github_token` take a block returning the secret value. Each block is evaluated lazily, only when the secret is needed, and its result is memoized. Secrets are resolved with the precedence *explicit setter โ `ENV` variable โ config DSL block* (see [`XAeonAgents::Config`](#xaeonagentsconfig)):
|
|
289
|
+
|
|
290
|
+
```ruby
|
|
291
|
+
github_token { File.read("#{Dir.home}/.github_token").strip }
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
- **`setup_project { ... }`** โ define the steps to execute in a fresh git worktree to install the project's dependencies (used by `xaa start-task`). The block is evaluated only when a fresh worktree is created, with the current directory set to the worktree:
|
|
295
|
+
|
|
296
|
+
```ruby
|
|
297
|
+
setup_project { system 'bundle install' }
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
- **`test_project_cmd(command_line)`** โ define the command line running the project's test suite, used by `xaa implement` to validate code changes. If not set, no tests are run by the implement command:
|
|
301
|
+
|
|
302
|
+
```ruby
|
|
303
|
+
test_project_cmd 'bundle exec rspec --format=documentation'
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
- **`on_open_worktree { |dir| ... }`** โ define a callback executed every time a worktree is opened by `xaa start-task` (freshly created or already existing), after the branch has been pushed to the remote. It is given the worktree's directory as parameter:
|
|
307
|
+
|
|
308
|
+
```ruby
|
|
309
|
+
on_open_worktree { |dir| system "code \"#{dir}\"" }
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
- **`configure_agent(agent_class_name) { |agent_config| ... }`** โ define the default kwargs to be merged when initializing agents of a given class (e.g. `:CoderAgent`). The block is evaluated every time an agent of this class is instantiated: it is given the currently merged configuration (a Hash of kwargs, that can be modified in place), and returns a Hash of additional kwargs merged on top. It is re-entrant: it can be called several times for the same class, from the same file or from different ones (global, project, env-var designated), each call seeing the configuration accumulated by the previous ones. Typical kwargs keys (as used by the agent frameworks):
|
|
313
|
+
- `skills` โ Array of skill names the agent should follow
|
|
314
|
+
- `model` โ LLM model to use (e.g. `'deepseek/deepseek-v4-flash'`)
|
|
315
|
+
- `cli_options` โ Hash of options merged into the Cline CLI invocation (e.g. `plan: true`)
|
|
316
|
+
- `configure_global` โ Proc given the Cline global settings to tweak
|
|
317
|
+
|
|
318
|
+
```ruby
|
|
319
|
+
configure_agent(:PlanGeneratorAgent) do |agent_config|
|
|
320
|
+
{
|
|
321
|
+
skills: %w[applying-ruby-conventions enforcing-project-rules],
|
|
322
|
+
model: 'deepseek/deepseek-v4-flash',
|
|
323
|
+
cli_options: (agent_config[:cli_options] || {}).merge(plan: true),
|
|
324
|
+
configure_global: proc { |global_settings| global_settings.disabled_tools = %w[editor run_commands] }
|
|
325
|
+
}
|
|
326
|
+
end
|
|
327
|
+
```
|
|
280
328
|
|
|
281
329
|
### `XAeonAgents::Config`
|
|
282
330
|
|
|
283
|
-
Singleton holding all
|
|
331
|
+
Singleton module holding all X-Aeon Agents configuration (secrets, data directory, default Cline CLI arguments, debug flag). All methods listed below are part of the `Public API` YARD group.
|
|
284
332
|
|
|
285
333
|
**Usecase** โ configure credentials and options at once:
|
|
286
334
|
|
|
@@ -298,11 +346,12 @@ More details: [RubyDoc โ XAeonAgents::Config](https://www.rubydoc.info/gems/x-
|
|
|
298
346
|
|
|
299
347
|
Public methods:
|
|
300
348
|
- `configure(**kwargs)` โ set any configuration property. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Config#configure-class_method)
|
|
301
|
-
- `cline_api_key` / `cline_api_key=` โ
|
|
302
|
-
- `data_dir` / `data_dir=` โ
|
|
349
|
+
- `cline_api_key` / `cline_api_key=`, `openrouter_api_key` / `openrouter_api_key=`, `github_token` / `github_token=` โ lazily-resolved secrets (ENV or config DSL). [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Config#cline_api_key-class_method)
|
|
350
|
+
- `data_dir` / `data_dir=` โ data directory (`.x_aeon_agents` by default). [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Config#data_dir-class_method)
|
|
303
351
|
- `default_cline_cli_args` / `default_cline_cli_args=` โ default Cline CLI arguments. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Config#default_cline_cli_args-class_method)
|
|
304
|
-
- `debug` / `debug=` โ debug
|
|
305
|
-
- `config_paths` โ
|
|
352
|
+
- `debug` / `debug=` โ enable debug logging. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Config#debug-class_method)
|
|
353
|
+
- `config_paths` โ candidate paths of the optional `.x_aeon_agents.rb` config file. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Config#config_paths-class_method)
|
|
354
|
+
- `logger` โ the shared logger instance. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Config#logger-class_method)
|
|
306
355
|
|
|
307
356
|
### `XAeonAgents::GenHelpers`
|
|
308
357
|
|
|
@@ -320,80 +369,99 @@ Public methods:
|
|
|
320
369
|
- `skill(description:, dependencies:, plan:, metadata:)` โ define skill metadata / YAML frontmatter. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#skill-instance_method)
|
|
321
370
|
- `goal(goal_desc = nil)` โ define or get the skill goal. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#goal-instance_method)
|
|
322
371
|
- `goal_sentence` โ the skill goal as a sentence. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#goal_sentence-instance_method)
|
|
323
|
-
- `announce` โ prompt announcing the agent is working on the skill. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#announce-instance_method)
|
|
372
|
+
- `announce` โ the prompt announcing the agent is working on the skill. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#announce-instance_method)
|
|
324
373
|
- `tmp_path` โ default temporary folder for agents. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#tmp_path-instance_method)
|
|
325
|
-
- `rule(title,
|
|
374
|
+
- `rule(title, ...)` โ generate a documented rule block. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#rule-instance_method)
|
|
326
375
|
- `ordered_todo_list(&erb_block)` โ generate a numbered todo list section. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#ordered_todo_list-instance_method)
|
|
327
|
-
- `when_to_use(&erb_block)` โ generate the
|
|
376
|
+
- `when_to_use(&erb_block)` โ generate the โWhen to use itโ section. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#when_to_use-instance_method)
|
|
328
377
|
- `name` โ the skill name being generated. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#name-instance_method)
|
|
329
378
|
- `self.config(skill_name)` โ read a skill's `.skill_config.yml`. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/GenHelpers#config-class_method)
|
|
330
379
|
|
|
331
|
-
|
|
380
|
+
### `XAeonAgents::Logger`
|
|
381
|
+
|
|
382
|
+
The shared status-aware logger used by all X-Aeon Agents components (accessible through `XAeonAgents::Config.logger`). It inherits from the standard Ruby `Logger`; the methods below are part of the public API, on top of the standard `::Logger` interface.
|
|
383
|
+
|
|
384
|
+
**Usecase** โ write a log line, then dump a raw message:
|
|
385
|
+
|
|
386
|
+
```ruby
|
|
387
|
+
XAeonAgents::Config.logger.info 'Fetching repository metadata'
|
|
388
|
+
XAeonAgents::Config.logger << 'machine-readable output'
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
More details: [RubyDoc โ XAeonAgents::Logger](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Logger)
|
|
392
|
+
|
|
393
|
+
Public methods:
|
|
394
|
+
- `add(severity, message = nil, progname = nil, &block)` โ log a message with a given severity. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Logger#add-instance_method)
|
|
395
|
+
- `log(severity, message = nil, progname = nil, &block)` โ alias of `add`. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Logger#log-instance_method)
|
|
396
|
+
- `<<(message)` โ output a raw, unformatted message. [doc](https://www.rubydoc.info/gems/x-aeon_agents/XAeonAgents/Logger#%3C%3C-instance_method)
|
|
332
397
|
|
|
333
398
|
## Documentation
|
|
334
399
|
|
|
335
|
-
- **GitHub repository** โ main project page with source code, issues and CI: [github.com/Muriel-Salvan/
|
|
336
|
-
- **Project README** โ overview, CLI usage and skill-authoring guidelines: [github.com/Muriel-Salvan/
|
|
337
|
-
- **RubyDoc.info** โ full API reference generated from the source (YARD): [rubydoc.info/gems/
|
|
338
|
-
- **RubyGems** โ published gem page and release history: [rubygems.org/gems/
|
|
400
|
+
- **GitHub repository** โ main project page with source code, issues and CI: [github.com/Muriel-Salvan/x\_aeon\_agents](https://github.com/Muriel-Salvan/x_aeon_agents)
|
|
401
|
+
- **Project README** โ overview, CLI usage and skill-authoring guidelines: [github.com/Muriel-Salvan/x\_aeon\_agents/blob/main/README.md](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/README.md)
|
|
402
|
+
- **RubyDoc.info** โ full API reference generated from the source (YARD): [rubydoc.info/gems/x\_aeon\_agents](https://www.rubydoc.info/gems/x_aeon_agents)
|
|
403
|
+
- **RubyGems** โ published gem page and release history: [rubygems.org/gems/x\_aeon\_agents](https://rubygems.org/gems/x_aeon_agents)
|
|
339
404
|
|
|
340
405
|
### Library public API
|
|
341
406
|
|
|
342
407
|
The documented public methods (browseable on RubyDoc.info):
|
|
343
408
|
|
|
344
409
|
- `XAeonAgents` module:
|
|
345
|
-
- `agent_name` โ [doc](https://www.rubydoc.info/gems/
|
|
346
|
-
- `agent_signature` โ [doc](https://www.rubydoc.info/gems/
|
|
347
|
-
- `VERSION` โ [doc](https://www.rubydoc.info/gems/
|
|
410
|
+
- `agent_name` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents#agent_name-class_method)
|
|
411
|
+
- `agent_signature` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents#agent_signature-class_method)
|
|
412
|
+
- `VERSION` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents#VERSION-constant)
|
|
348
413
|
- `XAeonAgents::GenHelpers` โ DSL helpers for generating skill content from ERB templates:
|
|
349
|
-
- `skill` โ [doc](https://www.rubydoc.info/gems/
|
|
350
|
-
- `goal` โ [doc](https://www.rubydoc.info/gems/
|
|
351
|
-
- `goal_sentence` โ [doc](https://www.rubydoc.info/gems/
|
|
352
|
-
- `announce` โ [doc](https://www.rubydoc.info/gems/
|
|
353
|
-
- `tmp_path` โ [doc](https://www.rubydoc.info/gems/
|
|
354
|
-
- `rule` โ [doc](https://www.rubydoc.info/gems/
|
|
355
|
-
- `ordered_todo_list` โ [doc](https://www.rubydoc.info/gems/
|
|
356
|
-
- `when_to_use` โ [doc](https://www.rubydoc.info/gems/
|
|
357
|
-
- `name` โ [doc](https://www.rubydoc.info/gems/
|
|
358
|
-
- `config` (class method) โ [doc](https://www.rubydoc.info/gems/
|
|
414
|
+
- `skill` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#skill-instance_method)
|
|
415
|
+
- `goal` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#goal-instance_method)
|
|
416
|
+
- `goal_sentence` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#goal_sentence-instance_method)
|
|
417
|
+
- `announce` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#announce-instance_method)
|
|
418
|
+
- `tmp_path` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#tmp_path-instance_method)
|
|
419
|
+
- `rule` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#rule-instance_method)
|
|
420
|
+
- `ordered_todo_list` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#ordered_todo_list-instance_method)
|
|
421
|
+
- `when_to_use` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#when_to_use-instance_method)
|
|
422
|
+
- `name` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#name-instance_method)
|
|
423
|
+
- `config` (class method) โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers#config-class_method)
|
|
359
424
|
- `XAeonAgents::GenHelpers::ErbEvaluator` โ helper class to evaluate ERB skill templates:
|
|
360
|
-
- `new` โ [doc](https://www.rubydoc.info/gems/
|
|
361
|
-
- `result` โ [doc](https://www.rubydoc.info/gems/
|
|
425
|
+
- `new` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers/ErbEvaluator#new-instance_method)
|
|
426
|
+
- `result` โ [doc](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/GenHelpers/ErbEvaluator#result-instance_method)
|
|
362
427
|
|
|
363
428
|
## How it works
|
|
364
429
|
|
|
365
|
-
`x_aeon_agents` is a ๐ Ruby gem organized
|
|
430
|
+
`x_aeon_agents` is a ๐ **Ruby gem** organized into three layers: a **CLI**, a set of **orchestrating agents**, and a shared **configuration / helper** core that glues them together.
|
|
366
431
|
|
|
367
432
|
### Entry point ๐ช
|
|
368
433
|
|
|
369
|
-
The
|
|
434
|
+
- The [`xaa`](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/bin/xaa) executable boots [Zeitwerk](https://github.com/fxn/zeitwerk) auto-loading and calls `XAeonAgents::Cli.start(ARGV)`.
|
|
435
|
+
- The CLI ([`lib/x_aeon_agents/cli.rb`](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/lib/x_aeon_agents/cli.rb)) is a [Thor](https://github.com/rails/thor) application: every sub-command (`commit`, `create-pr`, `review-comments`, `implement-issue`, `generate-readme`โฆ) maps **1:1** to an agent class.
|
|
436
|
+
- On startup it loads the optional `.x_aeon_agents.rb` config (home directory, then project directory) so project-level settings override global ones, and explicit CLI flags (`--session-id`, `--debug`) override both.
|
|
370
437
|
|
|
371
438
|
### Agents as composable workflows ๐งฉ
|
|
372
439
|
|
|
373
|
-
|
|
440
|
+
Each capability is implemented by an `Agents::*Agent` class built on `composable_agents`:
|
|
374
441
|
|
|
375
|
-
- `ComposableAgents::Agent` โ pure orchestrators that run shell commands and coordinate
|
|
376
|
-
- `ComposableAgents::AiAgents::Agent` / `ComposableAgents::Cline::Agent` โ LLM-driven agents that execute prompts.
|
|
442
|
+
- `ComposableAgents::Agent` โ pure orchestrators that run shell commands and coordinate child agents.
|
|
443
|
+
- `ComposableAgents::AiAgents::Agent` / `ComposableAgents::Cline::Agent` โ LLM-driven agents that execute prompts against an AI backend.
|
|
377
444
|
|
|
378
|
-
|
|
445
|
+
Every agent is enriched by the [`AgentDefaults`](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/lib/x_aeon_agents/agent_defaults.rb) mixin, which:
|
|
379
446
|
|
|
380
|
-
- injects `new_agent
|
|
381
|
-
- auto-configures the
|
|
382
|
-
-
|
|
383
|
-
-
|
|
384
|
-
- prepends `ArtifactContract` + `Resumable` mixins for input/output validation and pause/resume.
|
|
447
|
+
- injects `new_agent`, `task`, `step` and `step_agent` to build multi-step pipelines;
|
|
448
|
+
- auto-configures the frameworks (`setup_composable_agents`, `setup_ai_agents`, `setup_cline`) and injects per-class defaults (overridable with the `configure_agent` config DSL);
|
|
449
|
+
- enforces **input/output artifact contracts** and adds **resume** support (via the `ArtifactContract` + `Resumable` mixins);
|
|
450
|
+
- gives each agent a per-session directory under `Config.data_dir/sessions/<id>`.
|
|
385
451
|
|
|
386
452
|
### Orchestration ๐
|
|
387
453
|
|
|
388
|
-
A top-level agent decomposes its
|
|
454
|
+
A top-level agent decomposes its job into **steps**, delegating each one to child agents. State flows through a shared `@artifacts` hash referenced via `artifact_ref` โ e.g. `DeveloperAgent` chains `PlannerAgent` โ `CoderAgent` โ `TesterAgent` โ `CommitterAgent` / `DocumenterAgent` โ `PullRequestCreatorAgent`:
|
|
389
455
|
|
|
390
456
|
```mermaid
|
|
391
457
|
flowchart TD
|
|
392
458
|
CLI[XAeonAgents::Cli / xaa] -->|instantiates + run| A[Top-level Agent]
|
|
393
|
-
A -->|step_agent| P[PlannerAgent]
|
|
394
|
-
A -->|step_agent| C[CoderAgent]
|
|
395
|
-
A -->|step_agent| T[TesterAgent]
|
|
396
|
-
A -->|step_agent| K[CommitterAgent]
|
|
459
|
+
A -->|task / step_agent| P[PlannerAgent]
|
|
460
|
+
A -->|task / step_agent| C[CoderAgent]
|
|
461
|
+
A -->|task / step_agent| T[TesterAgent]
|
|
462
|
+
A -->|task / step_agent| K[CommitterAgent]
|
|
463
|
+
A -->|task / step_agent| D[DocumenterAgent]
|
|
464
|
+
A -->|task / step_agent| PR[PullRequestCreatorAgent]
|
|
397
465
|
C -.->|artifacts hash| T
|
|
398
466
|
T -.->|artifacts hash| K
|
|
399
467
|
subgraph LLM[AI backends]
|
|
@@ -405,23 +473,30 @@ flowchart TD
|
|
|
405
473
|
|
|
406
474
|
### Configuration & providers ๐
|
|
407
475
|
|
|
408
|
-
[`XAeonAgents::Config`](https://www.rubydoc.info/gems/
|
|
476
|
+
- [`XAeonAgents::Config`](https://www.rubydoc.info/gems/x_aeon_agents/XAeonAgents/Config) is a singleton holding secrets (`cline_api_key`, `openrouter_api_key`, `github_token`), the data directory and the debug flag. Secrets are resolved with the precedence *explicit setter โ `ENV` variable โ lazy Proc from the config DSL*.
|
|
477
|
+
- LLM calls flow through [`Providers::Cline`](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/lib/x_aeon_agents/providers/cline.rb), an OpenAI-compatible [RubyLLM](https://github.com/crmne/ruby_llm) provider targeting the Cline API (`https://api.cline.bot/api/v1`) and parsing responses including thinking blocks, tool calls and token usage.
|
|
409
478
|
|
|
410
479
|
### Skills & ERB templating ๐
|
|
411
480
|
|
|
412
|
-
Reusable agent instructions live as Markdown **skills**
|
|
481
|
+
- Reusable agent instructions live as Markdown **skills** in `skills/`, some generated from ERB templates in `skills.src/`.
|
|
482
|
+
- `xaa generate-skills` evaluates those templates with the [`GenHelpers`](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/lib/x_aeon_agents/gen_helpers.rb) DSL (via `GenHelpers::ErbEvaluator`) to emit YAML front-matter, goals, rules and checklists.
|
|
483
|
+
- `xaa install-skills` reads the `.skills` manifest and installs each skill together with its recursively-resolved dependencies.
|
|
413
484
|
|
|
414
485
|
### Helpers ๐ ๏ธ
|
|
415
486
|
|
|
416
|
-
`XAeonAgents::Helpers`
|
|
487
|
+
[`XAeonAgents::Helpers`](https://github.com/Muriel-Salvan/x_aeon_agents/blob/main/lib/x_aeon_agents/helpers.rb) centralizes the plumbing used by every agent:
|
|
488
|
+
|
|
489
|
+
- real-time command execution (`run_cmd`) with expected exit status;
|
|
490
|
+
- cached Git / GitHub (Octokit) clients and diff extraction (`git_diff_cached`, `artifact_files_diffs`);
|
|
491
|
+
- interactive content review (opens a temp file via Launchy for human approval).
|
|
417
492
|
|
|
418
493
|
## Development
|
|
419
494
|
|
|
420
|
-
This section explains how to set up a local environment to develop **x_aeon_agents**, run its test suite, lint the code and
|
|
495
|
+
This section explains how to set up a local environment to develop **x_aeon_agents**, run its test suite, lint the code, build the gem and regenerate the packaged skills.
|
|
421
496
|
|
|
422
497
|
### Prerequisites
|
|
423
498
|
|
|
424
|
-
- **Ruby** `>= 3.1` (the CI runs on Ruby `3.4`) and a matching **Bundler**.
|
|
499
|
+
- **Ruby** `>= 3.1` (the CI pipeline runs on Ruby `3.4`) and a matching **Bundler**.
|
|
425
500
|
- **Git** command-line client.
|
|
426
501
|
- *(Maintainer only)* **Node.js** and **npm**, required for `skillkit` and `semantic-release` used during packaging and release.
|
|
427
502
|
|
|
@@ -440,12 +515,12 @@ bundle install
|
|
|
440
515
|
|
|
441
516
|
### Project layout
|
|
442
517
|
|
|
443
|
-
```
|
|
518
|
+
```text
|
|
444
519
|
lib/ # Library source, auto-loaded with Zeitwerk (entry: lib/x_aeon_agents.rb)
|
|
445
520
|
x_aeon_agents/
|
|
446
521
|
cli.rb # The `xaa` Thor CLI definition
|
|
447
522
|
config.rb # Global configuration
|
|
448
|
-
agents/ # AI agents (commit, PR, README generation,
|
|
523
|
+
agents/ # AI agents (commit, PR, README generation, ...)
|
|
449
524
|
providers/ # LLM provider integrations
|
|
450
525
|
gen_helpers.rb # ERB skill template helpers
|
|
451
526
|
version.rb # Gem version (bumped automatically on release)
|
|
@@ -462,7 +537,7 @@ spec/ # RSpec test suite
|
|
|
462
537
|
|
|
463
538
|
### Running the test suite
|
|
464
539
|
|
|
465
|
-
Tests use **RSpec 3** with **SimpleCov** coverage (minimum
|
|
540
|
+
Tests use **RSpec 3** with **SimpleCov** coverage (minimum 98%).
|
|
466
541
|
|
|
467
542
|
```bash
|
|
468
543
|
# Run the whole suite, exactly like the CI does
|
|
@@ -475,7 +550,7 @@ bundle exec rspec spec/scenarios/code_quality_spec.rb
|
|
|
475
550
|
TEST_DEBUG=1 bundle exec rspec
|
|
476
551
|
```
|
|
477
552
|
|
|
478
|
-
The coverage report is written to `coverage/` (Cobertura format for Codecov). Each example runs with a cleaned, temporary `.x_aeon_agents_test/` data directory (git-ignored), and the application configuration is populated with dummy API keys by `spec_helper.rb`.
|
|
553
|
+
The coverage report is written to `coverage/` (HTML plus Cobertura format for Codecov). Each example runs with a cleaned, temporary `.x_aeon_agents_test/` data directory (git-ignored), and the application configuration is populated with dummy API keys by `spec_helper.rb`.
|
|
479
554
|
|
|
480
555
|
### Linting
|
|
481
556
|
|
|
@@ -508,6 +583,8 @@ bundle exec ruby bin/xaa --help
|
|
|
508
583
|
bundle exec ruby bin/xaa <command> [options]
|
|
509
584
|
```
|
|
510
585
|
|
|
586
|
+
Common commands while developing: `xaa start-task --branch feature/my-change` opens a git worktree for a feature branch, `xaa generate-readme` regenerates this README, and `xaa commit` / `xaa create-pr` drive the commit and Pull Request workflow.
|
|
587
|
+
|
|
511
588
|
Build the gem package locally:
|
|
512
589
|
|
|
513
590
|
```bash
|
|
@@ -534,34 +611,55 @@ Contributors do not need to run these release steps locally โ just make sure t
|
|
|
534
611
|
|
|
535
612
|
## Contributing
|
|
536
613
|
|
|
537
|
-
Contributions to **x_aeon_agents** are welcome! This ๐ Ruby gem lives on [GitHub](https://github.com/Muriel-Salvan/x_aeon_agents) and is released automatically via `semantic-release`, so a clean, linear history and passing CI keep the project healthy.
|
|
614
|
+
Contributions to **x_aeon_agents** are welcome! ๐ฑ This ๐ Ruby gem lives on [GitHub](https://github.com/Muriel-Salvan/x_aeon_agents) and is released automatically via `semantic-release`, so a clean, linear history and passing CI keep the project healthy.
|
|
538
615
|
|
|
539
616
|
### ๐ Reporting issues
|
|
617
|
+
|
|
540
618
|
- Open a new issue on the [issue tracker](https://github.com/Muriel-Salvan/x_aeon_agents/issues) and describe the *expected* vs *actual* behavior, your Ruby version, and clear steps to reproduce.
|
|
541
619
|
- For a bug in a specific skill, mention the skill name (e.g. `addressing-pull-request-comments`) and the command you ran.
|
|
542
620
|
|
|
543
621
|
### ๐ด Forking & branching
|
|
622
|
+
|
|
544
623
|
- ๐ *Fork* the repo and add upstream as a remote named `github`: `git remote add github https://github.com/Muriel-Salvan/x_aeon_agents.git`.
|
|
545
624
|
- Create a *feature branch* from `main`; the project favors git worktrees, so you can run `xaa start-task --branch feature/my-change`.
|
|
546
625
|
- Keep your branch current by *rebasing* on `github/main` (`git fetch --all && git rebase github/main`) โ never merge.
|
|
547
626
|
|
|
548
627
|
### ๐งช Running the tests
|
|
549
|
-
|
|
628
|
+
|
|
629
|
+
To run the suite locally, first install the test dependencies with `bundle install` (the `Gemfile` pulls in RSpec 3, RuboCop, SimpleCov and its Cobertura formatter), then launch the full suite exactly like CI with `bundle exec rspec --format documentation`, or scope it to a single file such as `bundle exec rspec spec/scenarios/code_quality_spec.rb`; each example runs against a temporary, auto-cleaned `.x_aeon_agents_test/` directory with dummy API keys injected by `spec/spec_helper.rb`, and SimpleCov enforces a *minimum 97% coverage* before the run is considered green.
|
|
630
|
+
|
|
631
|
+
```bash
|
|
632
|
+
# Install test dependencies
|
|
633
|
+
bundle install
|
|
634
|
+
|
|
635
|
+
# Run the whole suite, exactly like the CI does
|
|
636
|
+
bundle exec rspec --format documentation
|
|
637
|
+
|
|
638
|
+
# Run a single file or directory
|
|
639
|
+
bundle exec rspec spec/scenarios/code_quality_spec.rb
|
|
640
|
+
|
|
641
|
+
# Enable verbose test logging
|
|
642
|
+
TEST_DEBUG=1 bundle exec rspec
|
|
643
|
+
```
|
|
550
644
|
|
|
551
645
|
### ๐ Opening a Pull Request
|
|
646
|
+
|
|
552
647
|
- Push your branch to your fork and open a PR *against* `main` on the upstream repo.
|
|
553
648
|
- Describe *what* changed and *why*, and link the related issue when relevant.
|
|
554
649
|
- Rebase on the latest `github/main` and push with `git push github --force-with-lease` if you rebased.
|
|
555
650
|
|
|
556
651
|
### ๐ค CI & coverage
|
|
652
|
+
|
|
557
653
|
- Every push triggers the [continuous integration workflow](https://github.com/Muriel-Salvan/x_aeon_agents/actions/workflows/continuous_integration.yml), which runs on Ruby `3.4`, installs `skillkit`, executes the tests and uploads coverage to Codecov.
|
|
558
654
|
- The `package` job regenerates skills (`bundle exec ruby bin/xaa generate-skills`) and runs `npx semantic-release` โ you don't need to run these locally, but your changes must not break them.
|
|
559
655
|
|
|
560
656
|
### ๐งน Code style
|
|
657
|
+
|
|
561
658
|
- Lint with `bundle exec rubocop` (config in `.rubocop.yml`, using `rubocop`, `rubocop-rspec` and `rubocop-yard`); auto-fix with `bundle exec rubocop -A`.
|
|
562
659
|
- If you edit a skill written as an ERB template under `skills.src/`, *always* regenerate the committed `skills/` files with `bundle exec ruby bin/xaa generate-skills` before committing.
|
|
563
660
|
|
|
564
661
|
### โ
Before you submit
|
|
662
|
+
|
|
565
663
|
- ๐ข All RSpec examples pass and coverage stays โฅ 97%.
|
|
566
664
|
- ๐ช `rubocop` reports no offenses.
|
|
567
665
|
- ๐ Generated skills are in sync (`skills/` matches `skills.src/`).
|
|
@@ -569,7 +667,7 @@ To run the suite locally, install the test dependencies with `bundle install` (t
|
|
|
569
667
|
|
|
570
668
|
## License
|
|
571
669
|
|
|
572
|
-
This project is
|
|
670
|
+
This project is distributed under a modified BSD License (modified July 1999). See the [LICENSE](LICENSE) file for the full license terms and copyright information.
|
|
573
671
|
|
|
574
672
|
## Ways skills are written
|
|
575
673
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: x_aeon_agents
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.32
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Muriel Salvan
|
|
@@ -376,5 +376,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
376
376
|
requirements: []
|
|
377
377
|
rubygems_version: 3.6.9
|
|
378
378
|
specification_version: 4
|
|
379
|
-
summary:
|
|
379
|
+
summary: Executable software-engineering workflows for coding agents. x_aeon_agents
|
|
380
|
+
turns coding agents into participants in explicit, repeatable software-engineering
|
|
381
|
+
processes rather than leaving the agent to invent the process itself.
|
|
380
382
|
test_files: []
|