dotai-cli 0.1.1__tar.gz → 0.3.0__tar.gz
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.
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/.gitignore +1 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/PKG-INFO +160 -19
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/README.md +158 -18
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/pyproject.toml +3 -1
- dotai_cli-0.3.0/rdc.yaml +8 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/__init__.py +1 -1
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/cli/__init__.py +9 -2
- dotai_cli-0.3.0/src/dotai/cli/prefs_cmd.py +364 -0
- dotai_cli-0.3.0/src/dotai/cli/rules_cmd.py +417 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/cli/skills_cmd.py +209 -1
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/cli/sync_cmd.py +26 -5
- dotai_cli-0.3.0/src/dotai/import_agent.py +269 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/models.py +58 -0
- dotai_cli-0.3.0/src/dotai/preferences.py +575 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/rules.py +227 -27
- dotai_cli-0.3.0/src/dotai/seed/skills/learn.md +53 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/sync.py +159 -46
- dotai_cli-0.3.0/src/dotai/vet.py +237 -0
- dotai_cli-0.3.0/tests/test_import_agent.py +188 -0
- dotai_cli-0.3.0/tests/test_preferences.py +184 -0
- dotai_cli-0.3.0/tests/test_vet.py +296 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/uv.lock +172 -144
- dotai_cli-0.1.1/src/dotai/cli/rules_cmd.py +0 -202
- dotai_cli-0.1.1/src/dotai/seed/skills/learn.md +0 -37
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/.github/workflows/ci.yml +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/.github/workflows/publish.yml +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/LICENSE +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/__main__.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/cli/__main__.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/cli/roles_cmd.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/cli/watch_cmd.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/converter.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/indexer.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/roles.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/architect.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/debugger.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/founder.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/mentor.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/product-manager.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/qa.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/reviewer.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/security.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/ship.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/roles/writer.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/careful.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/commit-helper.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/context-dump.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/investigate.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/parallel-work.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/plan.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/review.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/scaffold.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/ship.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/techdebt.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/seed/skills/verify.md +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/skills.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/store.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/tools/__init__.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/tools/base.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/tools/registry.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/src/dotai/utils.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/__init__.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/conftest.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/test_converter.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/test_models.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/test_roles.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/test_rules.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/test_skills.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/test_store.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/test_sync.py +0 -0
- {dotai_cli-0.1.1 → dotai_cli-0.3.0}/tests/test_utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dotai-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Universal AI context for any coding agent. Roles, skills, and rules in ~/.ai/
|
|
5
5
|
Project-URL: Homepage, https://github.com/dawalama/dotai
|
|
6
6
|
Project-URL: Repository, https://github.com/dawalama/dotai
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.13
|
|
19
19
|
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
20
20
|
Requires-Python: >=3.11
|
|
21
|
+
Requires-Dist: ai-skill-audit>=0.5.1
|
|
21
22
|
Requires-Dist: pydantic>=2.0
|
|
22
23
|
Requires-Dist: rich>=13.0
|
|
23
24
|
Requires-Dist: typer>=0.9
|
|
@@ -47,7 +48,8 @@ Your knowledge about how to write code, review it, ship it, and debug it gets sc
|
|
|
47
48
|
|
|
48
49
|
- **Roles** — Cognitive modes that shift how the AI thinks (reviewer, architect, founder, QA, etc.)
|
|
49
50
|
- **Skills** — Reusable workflows with steps, inputs, gotchas, and role references
|
|
50
|
-
- **Rules** — Structured coding standards with per-project toggles and file-pattern scoping
|
|
51
|
+
- **Rules** — Structured coding standards with per-project toggles and file-pattern scoping (hard constraints)
|
|
52
|
+
- **Preference packs** — Soft, borrowable taste (CLI stack, design micro-style); never override hard rules
|
|
51
53
|
- **Agent sync** — Generate `CLAUDE.md`, `.cursorrules`, `GEMINI.md`, or `AGENTS.md` from your `~/.ai/`
|
|
52
54
|
- **Native slash commands** — For Claude Code, skills become real `/run_*` commands automatically
|
|
53
55
|
|
|
@@ -90,7 +92,7 @@ cd ~/my-project
|
|
|
90
92
|
dotai sync
|
|
91
93
|
```
|
|
92
94
|
|
|
93
|
-
This generates agent config files in your project root — `CLAUDE.md`, `.cursorrules`, `GEMINI.md`, and `AGENTS.md
|
|
95
|
+
This generates agent config files in your project root — `CLAUDE.md`, `.cursorrules`, `GEMINI.md`, and `AGENTS.md`. Structured rules and freeform conventions are included in full; roles and skills are included as a compact catalog by default. For Claude Code, sync also generates `.claude/skills/` entries so skills appear as native slash commands. Use `dotai sync --full` when an agent needs every role and skill definition inline.
|
|
94
96
|
|
|
95
97
|
## Usage
|
|
96
98
|
|
|
@@ -142,23 +144,122 @@ dotai skills --category deployment
|
|
|
142
144
|
|
|
143
145
|
### Recording what you learn
|
|
144
146
|
|
|
147
|
+
`dotai learn` creates a **structured rule file** in `~/.ai/rules/` by default (not a freeform journal scrap).
|
|
148
|
+
|
|
145
149
|
```bash
|
|
146
|
-
#
|
|
150
|
+
# Preview the rule without writing
|
|
147
151
|
dotai learn "auth-header" \
|
|
148
152
|
--issue "Forgot Bearer prefix on API token" \
|
|
149
|
-
--correction "Always prepend 'Bearer ' to auth tokens"
|
|
153
|
+
--correction "Always prepend 'Bearer ' to auth tokens" \
|
|
154
|
+
--dry-run
|
|
150
155
|
|
|
151
|
-
#
|
|
152
|
-
|
|
156
|
+
# Save structured rule + resync agent configs
|
|
157
|
+
dotai learn "auth-header" \
|
|
158
|
+
-i "Forgot Bearer prefix on API token" \
|
|
159
|
+
-c "Always prepend 'Bearer ' to auth tokens" \
|
|
160
|
+
--sync
|
|
153
161
|
|
|
154
162
|
# Import a detailed rule from a file
|
|
155
163
|
dotai learn "no-useEffect" --from-file react-rules.md --globs "*.tsx,*.ts"
|
|
156
164
|
|
|
165
|
+
# Freeform journal entry in rules.md (opt-in)
|
|
166
|
+
dotai learn "note" -i "..." -c "..." --append-md
|
|
167
|
+
|
|
168
|
+
# Or let the agent do it — /run_learn reviews the session and proposes a rule
|
|
169
|
+
> /run_learn
|
|
170
|
+
|
|
157
171
|
# Disable a rule for one legacy project
|
|
158
172
|
dotai toggle no-useeffect --off --project legacy-app
|
|
173
|
+
|
|
174
|
+
# Audit rule quality (duplicates, empty bodies)
|
|
175
|
+
dotai rules --check
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
The feedback loop: **vibe-code → agent makes mistake → `/run_learn` → structured rule → `dotai sync` → agent never repeats it.**
|
|
179
|
+
|
|
180
|
+
### Migrating existing agent files
|
|
181
|
+
|
|
182
|
+
Already have a `CLAUDE.md`, `.cursorrules`, or `AGENTS.md`? Import user-authored content into `~/.ai/`:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
# Preview
|
|
186
|
+
dotai import-agent CLAUDE.md --dry-run
|
|
187
|
+
|
|
188
|
+
# Append into project .ai/rules.md (default)
|
|
189
|
+
dotai import-agent CLAUDE.md
|
|
190
|
+
|
|
191
|
+
# One structured rule
|
|
192
|
+
dotai import-agent .cursorrules --mode rule --name project-conventions
|
|
193
|
+
|
|
194
|
+
# One rule per ## section
|
|
195
|
+
dotai import-agent AGENTS.md --mode sections --dry-run
|
|
196
|
+
|
|
197
|
+
# Scan a project directory for known agent files
|
|
198
|
+
dotai import-agent . --mode rules_md
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
dotai strips its own managed marker sections so you don't re-import generated primers. Directory imports combine all discovered agent files into one update, and structured-rule imports choose a new suffixed filename rather than overwrite an existing rule. Preview unfamiliar files with `--dry-run` before importing.
|
|
202
|
+
|
|
203
|
+
### Preference packs (taste) — borrowable soft style
|
|
204
|
+
|
|
205
|
+
Hard rules are law. **Preference packs** are soft taste: CLI stack, design micro-details, export style — things that are too granular or fluid for hard rules. You can author them, pull someone else's, and activate them per project.
|
|
206
|
+
|
|
207
|
+
**Precedence:** hard rules → freeform `rules.md` → active preference packs → model default.
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Create a pack
|
|
211
|
+
dotai prefs new "CLI Conventions" --domain cli
|
|
212
|
+
# Edit ~/.ai/preferences/cli-conventions.md, then activate:
|
|
213
|
+
dotai prefs use cli-conventions
|
|
214
|
+
dotai sync
|
|
215
|
+
|
|
216
|
+
# Borrow / pull someone else's taste (local file or git repo)
|
|
217
|
+
dotai prefs pull ./design-eng-taste.md --name design-eng --domain design
|
|
218
|
+
dotai prefs pull https://github.com/org/taste-packs -n cli
|
|
219
|
+
dotai prefs use design-eng
|
|
220
|
+
|
|
221
|
+
# Session overlay without changing active list
|
|
222
|
+
dotai sync --with-prefs design-eng,cli
|
|
223
|
+
dotai primer --with-prefs design-eng
|
|
224
|
+
|
|
225
|
+
# List / show / deactivate
|
|
226
|
+
dotai prefs
|
|
227
|
+
dotai prefs show cli-conventions
|
|
228
|
+
dotai prefs unuse design-eng
|
|
229
|
+
|
|
230
|
+
# Project operations stay inside that project; global removal is explicit
|
|
231
|
+
dotai prefs use cli-conventions --project my-app
|
|
232
|
+
dotai prefs remove cli-conventions --global
|
|
159
233
|
```
|
|
160
234
|
|
|
161
|
-
|
|
235
|
+
Preference lookup and removal are scope-safe: a project command cannot mutate a pack owned by another registered project. Removing a pack also removes it from the activation list for the pack's owning scope.
|
|
236
|
+
|
|
237
|
+
Example pack (`~/.ai/preferences/cli.md`):
|
|
238
|
+
|
|
239
|
+
```markdown
|
|
240
|
+
---
|
|
241
|
+
name: CLI Conventions
|
|
242
|
+
id: cli
|
|
243
|
+
description: How I build CLIs
|
|
244
|
+
domain: cli
|
|
245
|
+
tags: typescript, commander
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Soft preferences
|
|
249
|
+
|
|
250
|
+
Hard rules always take precedence if they conflict.
|
|
251
|
+
|
|
252
|
+
### Stack
|
|
253
|
+
- TypeScript + tsup
|
|
254
|
+
- Commander.js
|
|
255
|
+
- Vitest
|
|
256
|
+
- pnpm (npm link for local bins)
|
|
257
|
+
|
|
258
|
+
### Style
|
|
259
|
+
- Lowercase `-v` for version
|
|
260
|
+
- Start version at `0.0.1`
|
|
261
|
+
- Commands live under `commands/`
|
|
262
|
+
```
|
|
162
263
|
|
|
163
264
|
### Searching your knowledge
|
|
164
265
|
|
|
@@ -192,8 +293,11 @@ dotai init ~/other-project
|
|
|
192
293
|
```
|
|
193
294
|
~/.ai/ # Global (cross-project)
|
|
194
295
|
├── rules.md # Inline rules, conventions, and lessons learned
|
|
195
|
-
├── rules/ # Structured rules (
|
|
296
|
+
├── rules/ # Structured rules (hard constraints)
|
|
196
297
|
│ └── no-useeffect.md # Example: ban useEffect in React
|
|
298
|
+
├── preferences/ # Soft taste packs (borrowable style priors)
|
|
299
|
+
│ └── cli.md # Example: CLI stack / micro-style
|
|
300
|
+
├── preferences-active.json # Which preference packs are active
|
|
197
301
|
├── roles/ # Cognitive modes
|
|
198
302
|
│ ├── reviewer.md # Paranoid staff engineer
|
|
199
303
|
│ ├── architect.md # Systems thinker
|
|
@@ -403,12 +507,18 @@ All useEffect usage must be replaced with declarative patterns...
|
|
|
403
507
|
# List active rules
|
|
404
508
|
dotai rules
|
|
405
509
|
|
|
510
|
+
# Audit duplicates / empty bodies
|
|
511
|
+
dotai rules --check
|
|
512
|
+
|
|
406
513
|
# Import a rule from an external file
|
|
407
514
|
dotai learn "no-useEffect" --from-file react-rule.md --globs "*.tsx,*.ts"
|
|
408
515
|
|
|
409
|
-
# Record
|
|
516
|
+
# Record a learning as a structured rule (default)
|
|
410
517
|
dotai learn "auth-header" --issue "Forgot Bearer prefix" --correction "Always prepend Bearer to tokens"
|
|
411
518
|
|
|
519
|
+
# Preview first
|
|
520
|
+
dotai learn "auth-header" -i "..." -c "..." --dry-run
|
|
521
|
+
|
|
412
522
|
# Disable a rule globally
|
|
413
523
|
dotai toggle no-useeffect --off
|
|
414
524
|
|
|
@@ -419,11 +529,20 @@ dotai toggle no-useeffect --off --project my-legacy-app
|
|
|
419
529
|
dotai toggle no-useeffect --on
|
|
420
530
|
```
|
|
421
531
|
|
|
422
|
-
|
|
532
|
+
Structured rules are included **inline** in every synced agent file. Freeform `rules.md` is included too. Skills/roles stay as catalogs unless you pass `dotai sync --full`.
|
|
423
533
|
|
|
424
534
|
## Agent Sync
|
|
425
535
|
|
|
426
|
-
`dotai sync` generates tool-specific bootstrap files with
|
|
536
|
+
`dotai sync` generates tool-specific bootstrap files with:
|
|
537
|
+
|
|
538
|
+
- **Full structured rule bodies** (high-value constraints)
|
|
539
|
+
- **Freeform `rules.md` conventions** (previously referenced but not inlined)
|
|
540
|
+
- **Role and skill catalogs** (names, triggers, descriptions — not every skill novel)
|
|
541
|
+
- **Claude Code**: compact pointers + native `.claude/skills/` slash commands
|
|
542
|
+
|
|
543
|
+
Use `--full` only when you need every role persona and skill definition dumped inline (larger context).
|
|
544
|
+
|
|
545
|
+
These files contain machine-specific context and may include absolute paths. Treat them as generated per-user artifacts unless your team intentionally commits shared agent instructions. dotai-managed sections are marker-delimited, so syncing preserves user-authored content outside those markers.
|
|
427
546
|
|
|
428
547
|
```bash
|
|
429
548
|
# Generate all (CLAUDE.md + .cursorrules + GEMINI.md + AGENTS.md)
|
|
@@ -433,8 +552,13 @@ dotai sync
|
|
|
433
552
|
dotai sync --agents claude,cursor
|
|
434
553
|
dotai sync --agents gemini
|
|
435
554
|
|
|
555
|
+
# Legacy-style full dump (roles + skill definitions inline)
|
|
556
|
+
dotai sync --full
|
|
557
|
+
|
|
436
558
|
# Print primer to stdout (for piping)
|
|
437
559
|
dotai primer
|
|
560
|
+
dotai primer --compact
|
|
561
|
+
dotai primer --full
|
|
438
562
|
```
|
|
439
563
|
|
|
440
564
|
### Supported Agents
|
|
@@ -442,17 +566,17 @@ dotai primer
|
|
|
442
566
|
| Agent | Output File | Sync Command | Notes |
|
|
443
567
|
|-------|-------------|--------------|-------|
|
|
444
568
|
| Claude Code | `CLAUDE.md` + `.claude/skills/` | `dotai sync --agents claude` | Marker-based merging + native slash commands |
|
|
445
|
-
| Cursor | `.cursorrules` | `dotai sync --agents cursor` | Full
|
|
569
|
+
| Cursor | `.cursorrules` | `dotai sync --agents cursor` | Full rules and preferences; role/skill catalog by default |
|
|
446
570
|
| Gemini CLI | `GEMINI.md` | `dotai sync --agents gemini` | Auto-discovered in project root and `~/.gemini/GEMINI.md` |
|
|
447
571
|
| Generic | `AGENTS.md` | `dotai sync --agents generic` | Works with Codex, Copilot, and any agent that reads it |
|
|
448
572
|
|
|
449
573
|
For Claude Code, `dotai sync` also generates `.claude/skills/<trigger>/SKILL.md` files. These register as native slash commands — they appear in autocomplete and work as real `/run_*` commands with role composition support built in.
|
|
450
574
|
|
|
451
|
-
> **Tip:** Run `dotai primer | pbcopy` to copy the
|
|
575
|
+
> **Tip:** Run `dotai primer --full | pbcopy` to copy the complete context to your clipboard for pasting into an agent's system prompt.
|
|
452
576
|
|
|
453
577
|
## Installing Skills
|
|
454
578
|
|
|
455
|
-
Install skills from git repos or local directories. Claude-native `SKILL.md` files are auto-detected and converted to dotai format with triggers and categories inferred from the content.
|
|
579
|
+
Install skills from git repos or local directories. Claude-native `SKILL.md` files are auto-detected and converted to dotai format with triggers and categories inferred from the content. New installs are security-vetted before use.
|
|
456
580
|
|
|
457
581
|
```bash
|
|
458
582
|
# Install from a GitHub repo — auto-detects and converts Claude-native skills
|
|
@@ -470,6 +594,15 @@ dotai install https://github.com/team/skills -p my-project
|
|
|
470
594
|
|
|
471
595
|
After install, run `dotai sync` to make them available as slash commands in Claude Code, Gemini, etc.
|
|
472
596
|
|
|
597
|
+
Refresh skills that were installed from a tracked source (team conventions repo):
|
|
598
|
+
|
|
599
|
+
```bash
|
|
600
|
+
dotai install --update
|
|
601
|
+
dotai install --update -s mvp
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
Updates are staged and security-vetted before installation. A blocked or declined update leaves the existing skill unchanged. Multi-skill repositories refresh each recorded skill independently. `--skip-vet` is an explicit trust override and should only be used for a source you have reviewed.
|
|
605
|
+
|
|
473
606
|
### Converting Claude-native skills
|
|
474
607
|
|
|
475
608
|
If you have a Claude-native `SKILL.md` and want to convert it manually:
|
|
@@ -563,13 +696,21 @@ dotai roles # List available roles
|
|
|
563
696
|
dotai role <name> # Output a role's full prompt to stdout
|
|
564
697
|
dotai skills [-c category] # List skills (optionally filter by category)
|
|
565
698
|
dotai prompt <skill> [--role <role>] # Assemble skill + role prompt for any agent
|
|
566
|
-
dotai sync [path] [--agents ...]
|
|
567
|
-
dotai primer [--project <name>]
|
|
568
|
-
dotai rules [-p project] [-a]
|
|
699
|
+
dotai sync [path] [--agents ...] [--full] # Sync ~/.ai/ into agent config files
|
|
700
|
+
dotai primer [--project <name>] [--full|--compact] # Print agent context to stdout
|
|
701
|
+
dotai rules [-p project] [-a] [--check] # List rules (or audit quality)
|
|
569
702
|
dotai toggle <rule-id> --on/--off # Enable/disable rules globally or per-project
|
|
703
|
+
dotai learn "title" -i "..." -c "..." # Create structured rule (default)
|
|
704
|
+
dotai learn "title" -i "..." -c "..." --dry-run|--sync|--force|--append-md
|
|
570
705
|
dotai learn "title" --from-file <f> # Import structured rule from a file
|
|
571
|
-
dotai
|
|
706
|
+
dotai import-agent <path> [-m mode] [--dry-run] # Non-destructive agent-file migration
|
|
707
|
+
dotai prefs [list|show|new|pull|use|unuse|remove] # Preference / taste packs
|
|
708
|
+
dotai prefs new "CLI" --domain cli # Create a soft style pack
|
|
709
|
+
dotai prefs pull <path|url> [-n id] # Borrow / install a pack
|
|
710
|
+
dotai prefs use <id> [-p project|--global] # Activate pack in an explicit scope
|
|
711
|
+
dotai sync --with-prefs a,b # Session overlay of preference packs
|
|
572
712
|
dotai install <source> [-s skill] # Install skills from git repo or local path
|
|
713
|
+
dotai install --update [-s skill] [--skip-vet] # Vetted refresh from recorded sources
|
|
573
714
|
dotai import-plugin <source> # Import from Claude/Cursor/Gemini plugin
|
|
574
715
|
dotai remove <skill> [-p project] # Remove an installed skill
|
|
575
716
|
dotai convert <path> [--dry-run] # Convert Claude-native SKILL.md to dotai format
|
|
@@ -19,7 +19,8 @@ Your knowledge about how to write code, review it, ship it, and debug it gets sc
|
|
|
19
19
|
|
|
20
20
|
- **Roles** — Cognitive modes that shift how the AI thinks (reviewer, architect, founder, QA, etc.)
|
|
21
21
|
- **Skills** — Reusable workflows with steps, inputs, gotchas, and role references
|
|
22
|
-
- **Rules** — Structured coding standards with per-project toggles and file-pattern scoping
|
|
22
|
+
- **Rules** — Structured coding standards with per-project toggles and file-pattern scoping (hard constraints)
|
|
23
|
+
- **Preference packs** — Soft, borrowable taste (CLI stack, design micro-style); never override hard rules
|
|
23
24
|
- **Agent sync** — Generate `CLAUDE.md`, `.cursorrules`, `GEMINI.md`, or `AGENTS.md` from your `~/.ai/`
|
|
24
25
|
- **Native slash commands** — For Claude Code, skills become real `/run_*` commands automatically
|
|
25
26
|
|
|
@@ -62,7 +63,7 @@ cd ~/my-project
|
|
|
62
63
|
dotai sync
|
|
63
64
|
```
|
|
64
65
|
|
|
65
|
-
This generates agent config files in your project root — `CLAUDE.md`, `.cursorrules`, `GEMINI.md`, and `AGENTS.md
|
|
66
|
+
This generates agent config files in your project root — `CLAUDE.md`, `.cursorrules`, `GEMINI.md`, and `AGENTS.md`. Structured rules and freeform conventions are included in full; roles and skills are included as a compact catalog by default. For Claude Code, sync also generates `.claude/skills/` entries so skills appear as native slash commands. Use `dotai sync --full` when an agent needs every role and skill definition inline.
|
|
66
67
|
|
|
67
68
|
## Usage
|
|
68
69
|
|
|
@@ -114,23 +115,122 @@ dotai skills --category deployment
|
|
|
114
115
|
|
|
115
116
|
### Recording what you learn
|
|
116
117
|
|
|
118
|
+
`dotai learn` creates a **structured rule file** in `~/.ai/rules/` by default (not a freeform journal scrap).
|
|
119
|
+
|
|
117
120
|
```bash
|
|
118
|
-
#
|
|
121
|
+
# Preview the rule without writing
|
|
119
122
|
dotai learn "auth-header" \
|
|
120
123
|
--issue "Forgot Bearer prefix on API token" \
|
|
121
|
-
--correction "Always prepend 'Bearer ' to auth tokens"
|
|
124
|
+
--correction "Always prepend 'Bearer ' to auth tokens" \
|
|
125
|
+
--dry-run
|
|
122
126
|
|
|
123
|
-
#
|
|
124
|
-
|
|
127
|
+
# Save structured rule + resync agent configs
|
|
128
|
+
dotai learn "auth-header" \
|
|
129
|
+
-i "Forgot Bearer prefix on API token" \
|
|
130
|
+
-c "Always prepend 'Bearer ' to auth tokens" \
|
|
131
|
+
--sync
|
|
125
132
|
|
|
126
133
|
# Import a detailed rule from a file
|
|
127
134
|
dotai learn "no-useEffect" --from-file react-rules.md --globs "*.tsx,*.ts"
|
|
128
135
|
|
|
136
|
+
# Freeform journal entry in rules.md (opt-in)
|
|
137
|
+
dotai learn "note" -i "..." -c "..." --append-md
|
|
138
|
+
|
|
139
|
+
# Or let the agent do it — /run_learn reviews the session and proposes a rule
|
|
140
|
+
> /run_learn
|
|
141
|
+
|
|
129
142
|
# Disable a rule for one legacy project
|
|
130
143
|
dotai toggle no-useeffect --off --project legacy-app
|
|
144
|
+
|
|
145
|
+
# Audit rule quality (duplicates, empty bodies)
|
|
146
|
+
dotai rules --check
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
The feedback loop: **vibe-code → agent makes mistake → `/run_learn` → structured rule → `dotai sync` → agent never repeats it.**
|
|
150
|
+
|
|
151
|
+
### Migrating existing agent files
|
|
152
|
+
|
|
153
|
+
Already have a `CLAUDE.md`, `.cursorrules`, or `AGENTS.md`? Import user-authored content into `~/.ai/`:
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Preview
|
|
157
|
+
dotai import-agent CLAUDE.md --dry-run
|
|
158
|
+
|
|
159
|
+
# Append into project .ai/rules.md (default)
|
|
160
|
+
dotai import-agent CLAUDE.md
|
|
161
|
+
|
|
162
|
+
# One structured rule
|
|
163
|
+
dotai import-agent .cursorrules --mode rule --name project-conventions
|
|
164
|
+
|
|
165
|
+
# One rule per ## section
|
|
166
|
+
dotai import-agent AGENTS.md --mode sections --dry-run
|
|
167
|
+
|
|
168
|
+
# Scan a project directory for known agent files
|
|
169
|
+
dotai import-agent . --mode rules_md
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
dotai strips its own managed marker sections so you don't re-import generated primers. Directory imports combine all discovered agent files into one update, and structured-rule imports choose a new suffixed filename rather than overwrite an existing rule. Preview unfamiliar files with `--dry-run` before importing.
|
|
173
|
+
|
|
174
|
+
### Preference packs (taste) — borrowable soft style
|
|
175
|
+
|
|
176
|
+
Hard rules are law. **Preference packs** are soft taste: CLI stack, design micro-details, export style — things that are too granular or fluid for hard rules. You can author them, pull someone else's, and activate them per project.
|
|
177
|
+
|
|
178
|
+
**Precedence:** hard rules → freeform `rules.md` → active preference packs → model default.
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Create a pack
|
|
182
|
+
dotai prefs new "CLI Conventions" --domain cli
|
|
183
|
+
# Edit ~/.ai/preferences/cli-conventions.md, then activate:
|
|
184
|
+
dotai prefs use cli-conventions
|
|
185
|
+
dotai sync
|
|
186
|
+
|
|
187
|
+
# Borrow / pull someone else's taste (local file or git repo)
|
|
188
|
+
dotai prefs pull ./design-eng-taste.md --name design-eng --domain design
|
|
189
|
+
dotai prefs pull https://github.com/org/taste-packs -n cli
|
|
190
|
+
dotai prefs use design-eng
|
|
191
|
+
|
|
192
|
+
# Session overlay without changing active list
|
|
193
|
+
dotai sync --with-prefs design-eng,cli
|
|
194
|
+
dotai primer --with-prefs design-eng
|
|
195
|
+
|
|
196
|
+
# List / show / deactivate
|
|
197
|
+
dotai prefs
|
|
198
|
+
dotai prefs show cli-conventions
|
|
199
|
+
dotai prefs unuse design-eng
|
|
200
|
+
|
|
201
|
+
# Project operations stay inside that project; global removal is explicit
|
|
202
|
+
dotai prefs use cli-conventions --project my-app
|
|
203
|
+
dotai prefs remove cli-conventions --global
|
|
131
204
|
```
|
|
132
205
|
|
|
133
|
-
|
|
206
|
+
Preference lookup and removal are scope-safe: a project command cannot mutate a pack owned by another registered project. Removing a pack also removes it from the activation list for the pack's owning scope.
|
|
207
|
+
|
|
208
|
+
Example pack (`~/.ai/preferences/cli.md`):
|
|
209
|
+
|
|
210
|
+
```markdown
|
|
211
|
+
---
|
|
212
|
+
name: CLI Conventions
|
|
213
|
+
id: cli
|
|
214
|
+
description: How I build CLIs
|
|
215
|
+
domain: cli
|
|
216
|
+
tags: typescript, commander
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Soft preferences
|
|
220
|
+
|
|
221
|
+
Hard rules always take precedence if they conflict.
|
|
222
|
+
|
|
223
|
+
### Stack
|
|
224
|
+
- TypeScript + tsup
|
|
225
|
+
- Commander.js
|
|
226
|
+
- Vitest
|
|
227
|
+
- pnpm (npm link for local bins)
|
|
228
|
+
|
|
229
|
+
### Style
|
|
230
|
+
- Lowercase `-v` for version
|
|
231
|
+
- Start version at `0.0.1`
|
|
232
|
+
- Commands live under `commands/`
|
|
233
|
+
```
|
|
134
234
|
|
|
135
235
|
### Searching your knowledge
|
|
136
236
|
|
|
@@ -164,8 +264,11 @@ dotai init ~/other-project
|
|
|
164
264
|
```
|
|
165
265
|
~/.ai/ # Global (cross-project)
|
|
166
266
|
├── rules.md # Inline rules, conventions, and lessons learned
|
|
167
|
-
├── rules/ # Structured rules (
|
|
267
|
+
├── rules/ # Structured rules (hard constraints)
|
|
168
268
|
│ └── no-useeffect.md # Example: ban useEffect in React
|
|
269
|
+
├── preferences/ # Soft taste packs (borrowable style priors)
|
|
270
|
+
│ └── cli.md # Example: CLI stack / micro-style
|
|
271
|
+
├── preferences-active.json # Which preference packs are active
|
|
169
272
|
├── roles/ # Cognitive modes
|
|
170
273
|
│ ├── reviewer.md # Paranoid staff engineer
|
|
171
274
|
│ ├── architect.md # Systems thinker
|
|
@@ -375,12 +478,18 @@ All useEffect usage must be replaced with declarative patterns...
|
|
|
375
478
|
# List active rules
|
|
376
479
|
dotai rules
|
|
377
480
|
|
|
481
|
+
# Audit duplicates / empty bodies
|
|
482
|
+
dotai rules --check
|
|
483
|
+
|
|
378
484
|
# Import a rule from an external file
|
|
379
485
|
dotai learn "no-useEffect" --from-file react-rule.md --globs "*.tsx,*.ts"
|
|
380
486
|
|
|
381
|
-
# Record
|
|
487
|
+
# Record a learning as a structured rule (default)
|
|
382
488
|
dotai learn "auth-header" --issue "Forgot Bearer prefix" --correction "Always prepend Bearer to tokens"
|
|
383
489
|
|
|
490
|
+
# Preview first
|
|
491
|
+
dotai learn "auth-header" -i "..." -c "..." --dry-run
|
|
492
|
+
|
|
384
493
|
# Disable a rule globally
|
|
385
494
|
dotai toggle no-useeffect --off
|
|
386
495
|
|
|
@@ -391,11 +500,20 @@ dotai toggle no-useeffect --off --project my-legacy-app
|
|
|
391
500
|
dotai toggle no-useeffect --on
|
|
392
501
|
```
|
|
393
502
|
|
|
394
|
-
|
|
503
|
+
Structured rules are included **inline** in every synced agent file. Freeform `rules.md` is included too. Skills/roles stay as catalogs unless you pass `dotai sync --full`.
|
|
395
504
|
|
|
396
505
|
## Agent Sync
|
|
397
506
|
|
|
398
|
-
`dotai sync` generates tool-specific bootstrap files with
|
|
507
|
+
`dotai sync` generates tool-specific bootstrap files with:
|
|
508
|
+
|
|
509
|
+
- **Full structured rule bodies** (high-value constraints)
|
|
510
|
+
- **Freeform `rules.md` conventions** (previously referenced but not inlined)
|
|
511
|
+
- **Role and skill catalogs** (names, triggers, descriptions — not every skill novel)
|
|
512
|
+
- **Claude Code**: compact pointers + native `.claude/skills/` slash commands
|
|
513
|
+
|
|
514
|
+
Use `--full` only when you need every role persona and skill definition dumped inline (larger context).
|
|
515
|
+
|
|
516
|
+
These files contain machine-specific context and may include absolute paths. Treat them as generated per-user artifacts unless your team intentionally commits shared agent instructions. dotai-managed sections are marker-delimited, so syncing preserves user-authored content outside those markers.
|
|
399
517
|
|
|
400
518
|
```bash
|
|
401
519
|
# Generate all (CLAUDE.md + .cursorrules + GEMINI.md + AGENTS.md)
|
|
@@ -405,8 +523,13 @@ dotai sync
|
|
|
405
523
|
dotai sync --agents claude,cursor
|
|
406
524
|
dotai sync --agents gemini
|
|
407
525
|
|
|
526
|
+
# Legacy-style full dump (roles + skill definitions inline)
|
|
527
|
+
dotai sync --full
|
|
528
|
+
|
|
408
529
|
# Print primer to stdout (for piping)
|
|
409
530
|
dotai primer
|
|
531
|
+
dotai primer --compact
|
|
532
|
+
dotai primer --full
|
|
410
533
|
```
|
|
411
534
|
|
|
412
535
|
### Supported Agents
|
|
@@ -414,17 +537,17 @@ dotai primer
|
|
|
414
537
|
| Agent | Output File | Sync Command | Notes |
|
|
415
538
|
|-------|-------------|--------------|-------|
|
|
416
539
|
| Claude Code | `CLAUDE.md` + `.claude/skills/` | `dotai sync --agents claude` | Marker-based merging + native slash commands |
|
|
417
|
-
| Cursor | `.cursorrules` | `dotai sync --agents cursor` | Full
|
|
540
|
+
| Cursor | `.cursorrules` | `dotai sync --agents cursor` | Full rules and preferences; role/skill catalog by default |
|
|
418
541
|
| Gemini CLI | `GEMINI.md` | `dotai sync --agents gemini` | Auto-discovered in project root and `~/.gemini/GEMINI.md` |
|
|
419
542
|
| Generic | `AGENTS.md` | `dotai sync --agents generic` | Works with Codex, Copilot, and any agent that reads it |
|
|
420
543
|
|
|
421
544
|
For Claude Code, `dotai sync` also generates `.claude/skills/<trigger>/SKILL.md` files. These register as native slash commands — they appear in autocomplete and work as real `/run_*` commands with role composition support built in.
|
|
422
545
|
|
|
423
|
-
> **Tip:** Run `dotai primer | pbcopy` to copy the
|
|
546
|
+
> **Tip:** Run `dotai primer --full | pbcopy` to copy the complete context to your clipboard for pasting into an agent's system prompt.
|
|
424
547
|
|
|
425
548
|
## Installing Skills
|
|
426
549
|
|
|
427
|
-
Install skills from git repos or local directories. Claude-native `SKILL.md` files are auto-detected and converted to dotai format with triggers and categories inferred from the content.
|
|
550
|
+
Install skills from git repos or local directories. Claude-native `SKILL.md` files are auto-detected and converted to dotai format with triggers and categories inferred from the content. New installs are security-vetted before use.
|
|
428
551
|
|
|
429
552
|
```bash
|
|
430
553
|
# Install from a GitHub repo — auto-detects and converts Claude-native skills
|
|
@@ -442,6 +565,15 @@ dotai install https://github.com/team/skills -p my-project
|
|
|
442
565
|
|
|
443
566
|
After install, run `dotai sync` to make them available as slash commands in Claude Code, Gemini, etc.
|
|
444
567
|
|
|
568
|
+
Refresh skills that were installed from a tracked source (team conventions repo):
|
|
569
|
+
|
|
570
|
+
```bash
|
|
571
|
+
dotai install --update
|
|
572
|
+
dotai install --update -s mvp
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
Updates are staged and security-vetted before installation. A blocked or declined update leaves the existing skill unchanged. Multi-skill repositories refresh each recorded skill independently. `--skip-vet` is an explicit trust override and should only be used for a source you have reviewed.
|
|
576
|
+
|
|
445
577
|
### Converting Claude-native skills
|
|
446
578
|
|
|
447
579
|
If you have a Claude-native `SKILL.md` and want to convert it manually:
|
|
@@ -535,13 +667,21 @@ dotai roles # List available roles
|
|
|
535
667
|
dotai role <name> # Output a role's full prompt to stdout
|
|
536
668
|
dotai skills [-c category] # List skills (optionally filter by category)
|
|
537
669
|
dotai prompt <skill> [--role <role>] # Assemble skill + role prompt for any agent
|
|
538
|
-
dotai sync [path] [--agents ...]
|
|
539
|
-
dotai primer [--project <name>]
|
|
540
|
-
dotai rules [-p project] [-a]
|
|
670
|
+
dotai sync [path] [--agents ...] [--full] # Sync ~/.ai/ into agent config files
|
|
671
|
+
dotai primer [--project <name>] [--full|--compact] # Print agent context to stdout
|
|
672
|
+
dotai rules [-p project] [-a] [--check] # List rules (or audit quality)
|
|
541
673
|
dotai toggle <rule-id> --on/--off # Enable/disable rules globally or per-project
|
|
674
|
+
dotai learn "title" -i "..." -c "..." # Create structured rule (default)
|
|
675
|
+
dotai learn "title" -i "..." -c "..." --dry-run|--sync|--force|--append-md
|
|
542
676
|
dotai learn "title" --from-file <f> # Import structured rule from a file
|
|
543
|
-
dotai
|
|
677
|
+
dotai import-agent <path> [-m mode] [--dry-run] # Non-destructive agent-file migration
|
|
678
|
+
dotai prefs [list|show|new|pull|use|unuse|remove] # Preference / taste packs
|
|
679
|
+
dotai prefs new "CLI" --domain cli # Create a soft style pack
|
|
680
|
+
dotai prefs pull <path|url> [-n id] # Borrow / install a pack
|
|
681
|
+
dotai prefs use <id> [-p project|--global] # Activate pack in an explicit scope
|
|
682
|
+
dotai sync --with-prefs a,b # Session overlay of preference packs
|
|
544
683
|
dotai install <source> [-s skill] # Install skills from git repo or local path
|
|
684
|
+
dotai install --update [-s skill] [--skip-vet] # Vetted refresh from recorded sources
|
|
545
685
|
dotai import-plugin <source> # Import from Claude/Cursor/Gemini plugin
|
|
546
686
|
dotai remove <skill> [-p project] # Remove an installed skill
|
|
547
687
|
dotai convert <path> [--dry-run] # Convert Claude-native SKILL.md to dotai format
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dotai-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.3.0"
|
|
8
8
|
description = "Universal AI context for any coding agent. Roles, skills, and rules in ~/.ai/"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -26,6 +26,7 @@ dependencies = [
|
|
|
26
26
|
"typer>=0.9",
|
|
27
27
|
"rich>=13.0",
|
|
28
28
|
"watchdog>=4.0",
|
|
29
|
+
"ai-skill-audit>=0.5.1",
|
|
29
30
|
]
|
|
30
31
|
|
|
31
32
|
[project.urls]
|
|
@@ -44,3 +45,4 @@ packages = ["src/dotai"]
|
|
|
44
45
|
|
|
45
46
|
[tool.pytest.ini_options]
|
|
46
47
|
testpaths = ["tests"]
|
|
48
|
+
pythonpath = ["src"]
|
dotai_cli-0.3.0/rdc.yaml
ADDED
|
@@ -53,6 +53,7 @@ def init(
|
|
|
53
53
|
(ai_dir / "rules").mkdir(exist_ok=True)
|
|
54
54
|
(ai_dir / "roles").mkdir(exist_ok=True)
|
|
55
55
|
(ai_dir / "skills").mkdir(exist_ok=True)
|
|
56
|
+
(ai_dir / "preferences").mkdir(exist_ok=True)
|
|
56
57
|
(ai_dir / "tools").mkdir(exist_ok=True)
|
|
57
58
|
|
|
58
59
|
# Create starter files
|
|
@@ -69,7 +70,7 @@ def init(
|
|
|
69
70
|
save_config(config)
|
|
70
71
|
|
|
71
72
|
console.print(f"[green]Initialized .ai/ in {project_path}[/green]")
|
|
72
|
-
console.print(f" Created: rules.md, roles/, skills/, tools/")
|
|
73
|
+
console.print(f" Created: rules.md, roles/, skills/, preferences/, tools/")
|
|
73
74
|
|
|
74
75
|
# Auto-sync agent config files into the project
|
|
75
76
|
from ..sync import sync_project
|
|
@@ -121,8 +122,9 @@ def init(
|
|
|
121
122
|
verb = "Updated" if force else "Seeded"
|
|
122
123
|
console.print(f" {verb} {copied} skills")
|
|
123
124
|
|
|
124
|
-
# Create rules and tools dirs
|
|
125
|
+
# Create rules, preferences, and tools dirs
|
|
125
126
|
(ai_dir / "rules").mkdir(exist_ok=True)
|
|
127
|
+
(ai_dir / "preferences").mkdir(exist_ok=True)
|
|
126
128
|
(ai_dir / "tools").mkdir(exist_ok=True)
|
|
127
129
|
|
|
128
130
|
# Create starter files
|
|
@@ -136,13 +138,18 @@ def init(
|
|
|
136
138
|
console.print(f" {ai_dir}/rules.md")
|
|
137
139
|
console.print(f" {ai_dir}/roles/ ({len(list(roles_dir.glob('*.md')))} roles)")
|
|
138
140
|
console.print(f" {ai_dir}/skills/ ({len(list(skills_dir.glob('*.md')))} skills)")
|
|
141
|
+
console.print(f" {ai_dir}/preferences/")
|
|
139
142
|
console.print(f" {ai_dir}/tools/")
|
|
140
143
|
console.print(f"\n[dim]Next: cd into a project and run `dotai sync` to generate agent configs.[/dim]")
|
|
144
|
+
console.print(f"[dim]Have an existing CLAUDE.md / AGENTS.md? `dotai import-agent CLAUDE.md --dry-run`[/dim]")
|
|
145
|
+
console.print(f"[dim]Capture a correction: `dotai learn \"title\" -i \"issue\" -c \"correction\" --dry-run`[/dim]")
|
|
146
|
+
console.print(f"[dim]Borrow style: `dotai prefs new \"CLI\" --domain cli` then `dotai prefs use cli`[/dim]")
|
|
141
147
|
|
|
142
148
|
|
|
143
149
|
# Import submodules to register their commands with the app
|
|
144
150
|
from . import roles_cmd # noqa: E402, F401
|
|
145
151
|
from . import skills_cmd # noqa: E402, F401
|
|
146
152
|
from . import rules_cmd # noqa: E402, F401
|
|
153
|
+
from . import prefs_cmd # noqa: E402, F401
|
|
147
154
|
from . import sync_cmd # noqa: E402, F401
|
|
148
155
|
from . import watch_cmd # noqa: E402, F401
|