clawrium 0.1.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.
- clawrium-0.1.0/.github/workflows/test.yml +34 -0
- clawrium-0.1.0/.gitignore +211 -0
- clawrium-0.1.0/.mcp.json +17 -0
- clawrium-0.1.0/.planning/PROJECT.md +93 -0
- clawrium-0.1.0/.planning/REQUIREMENTS.md +118 -0
- clawrium-0.1.0/.planning/ROADMAP.md +114 -0
- clawrium-0.1.0/.planning/STATE.md +119 -0
- clawrium-0.1.0/.planning/config.json +33 -0
- clawrium-0.1.0/.planning/phases/01-foundation-setup/01-01-PLAN.md +578 -0
- clawrium-0.1.0/.planning/phases/01-foundation-setup/01-01-SUMMARY.md +217 -0
- clawrium-0.1.0/.planning/phases/01-foundation-setup/01-02-PLAN.md +661 -0
- clawrium-0.1.0/.planning/phases/01-foundation-setup/01-02-SUMMARY.md +132 -0
- clawrium-0.1.0/.planning/phases/01-foundation-setup/01-RESEARCH.md +439 -0
- clawrium-0.1.0/.planning/phases/01-foundation-setup/01-VALIDATION.md +81 -0
- clawrium-0.1.0/.planning/phases/01-foundation-setup/01-VERIFICATION.md +113 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-01-PLAN.md +410 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-01-SUMMARY.md +212 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-02-PLAN.md +315 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-02-SUMMARY.md +209 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-03-PLAN.md +356 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-03-SUMMARY.md +159 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-04-PLAN.md +614 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-04-SUMMARY.md +275 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-CONTEXT.md +111 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-DISCUSSION-LOG.md +213 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-RESEARCH.md +660 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-VALIDATION.md +85 -0
- clawrium-0.1.0/.planning/phases/02-host-management/02-VERIFICATION.md +130 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-01-PLAN.md +237 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-01-SUMMARY.md +178 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-02-PLAN.md +201 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-02-SUMMARY.md +112 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-03-PLAN.md +268 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-03-SUMMARY.md +173 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-04-PLAN.md +370 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-04-SUMMARY.md +119 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-CONTEXT.md +135 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-DISCUSSION-LOG.md +172 -0
- clawrium-0.1.0/.planning/phases/03-registry-compatibility/03-VERIFICATION.md +273 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-01-PLAN.md +415 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-01-SUMMARY.md +193 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-02-PLAN.md +377 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-02-SUMMARY.md +181 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-03-PLAN.md +567 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-03-SUMMARY.md +185 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-04-PLAN.md +508 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-04-SUMMARY.md +136 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-CONTEXT.md +122 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-DISCUSSION-LOG.md +144 -0
- clawrium-0.1.0/.planning/phases/04-installation-fleet-status/04-VERIFICATION.md +139 -0
- clawrium-0.1.0/.planning/phases/05-secrets-management/05-01-PLAN.md +371 -0
- clawrium-0.1.0/.planning/phases/05-secrets-management/05-01-SUMMARY.md +169 -0
- clawrium-0.1.0/.planning/phases/05-secrets-management/05-02-PLAN.md +477 -0
- clawrium-0.1.0/.planning/phases/05-secrets-management/05-02-SUMMARY.md +163 -0
- clawrium-0.1.0/.planning/phases/05-secrets-management/05-CONTEXT.md +121 -0
- clawrium-0.1.0/.planning/phases/05-secrets-management/05-DISCUSSION-LOG.md +194 -0
- clawrium-0.1.0/.planning/phases/05-secrets-management/05-VERIFICATION.md +233 -0
- clawrium-0.1.0/.planning/quick/260321-fna-implement-per-host-ssh-key-storage-with-/260321-fna-PLAN.md +261 -0
- clawrium-0.1.0/.planning/quick/260321-fna-implement-per-host-ssh-key-storage-with-/260321-fna-SUMMARY.md +108 -0
- clawrium-0.1.0/.planning/quick/260321-iqu-fix-issue-1-key-lookup-mismatch-add-key-/260321-iqu-PLAN.md +312 -0
- clawrium-0.1.0/.planning/quick/260321-iqu-fix-issue-1-key-lookup-mismatch-add-key-/260321-iqu-SUMMARY.md +161 -0
- clawrium-0.1.0/.planning/quick/260321-jld-fix-hardware-detection-ansible-runner-ne/260321-jld-PLAN.md +212 -0
- clawrium-0.1.0/.planning/quick/260321-jld-fix-hardware-detection-ansible-runner-ne/260321-jld-SUMMARY.md +105 -0
- clawrium-0.1.0/.planning/quick/260321-jux-atx-review-fixes-ssh-key-validation-test/260321-jux-SUMMARY.md +99 -0
- clawrium-0.1.0/.planning/research/SUMMARY.md +88 -0
- clawrium-0.1.0/AGENTS.md +67 -0
- clawrium-0.1.0/CLAUDE.md +57 -0
- clawrium-0.1.0/LICENSE +201 -0
- clawrium-0.1.0/Makefile +47 -0
- clawrium-0.1.0/PKG-INFO +94 -0
- clawrium-0.1.0/README.md +80 -0
- clawrium-0.1.0/docs/assets/clawrium-logo.png +0 -0
- clawrium-0.1.0/docs/host-preparation.md +148 -0
- clawrium-0.1.0/docs/index.md +43 -0
- clawrium-0.1.0/pyproject.toml +39 -0
- clawrium-0.1.0/src/clawrium/__init__.py +3 -0
- clawrium-0.1.0/src/clawrium/cli/__init__.py +1 -0
- clawrium-0.1.0/src/clawrium/cli/host.py +608 -0
- clawrium-0.1.0/src/clawrium/cli/init.py +58 -0
- clawrium-0.1.0/src/clawrium/cli/install.py +175 -0
- clawrium-0.1.0/src/clawrium/cli/main.py +67 -0
- clawrium-0.1.0/src/clawrium/cli/registry.py +108 -0
- clawrium-0.1.0/src/clawrium/cli/secret.py +165 -0
- clawrium-0.1.0/src/clawrium/cli/status.py +128 -0
- clawrium-0.1.0/src/clawrium/core/__init__.py +1 -0
- clawrium-0.1.0/src/clawrium/core/config.py +47 -0
- clawrium-0.1.0/src/clawrium/core/deps.py +138 -0
- clawrium-0.1.0/src/clawrium/core/hardware.py +250 -0
- clawrium-0.1.0/src/clawrium/core/health.py +215 -0
- clawrium-0.1.0/src/clawrium/core/hosts.py +275 -0
- clawrium-0.1.0/src/clawrium/core/install.py +303 -0
- clawrium-0.1.0/src/clawrium/core/keys.py +229 -0
- clawrium-0.1.0/src/clawrium/core/names.py +125 -0
- clawrium-0.1.0/src/clawrium/core/registry.py +373 -0
- clawrium-0.1.0/src/clawrium/core/secrets.py +304 -0
- clawrium-0.1.0/src/clawrium/core/ssh_connection.py +246 -0
- clawrium-0.1.0/src/clawrium/platform/__init__.py +1 -0
- clawrium-0.1.0/src/clawrium/platform/playbooks/base.yaml +45 -0
- clawrium-0.1.0/src/clawrium/platform/registry/__init__.py +1 -0
- clawrium-0.1.0/src/clawrium/platform/registry/openclaw/manifest.yaml +32 -0
- clawrium-0.1.0/src/clawrium/platform/registry/openclaw/playbooks/install.yaml +31 -0
- clawrium-0.1.0/src/clawrium/platform/registry/zeroclaw/__init__.py +1 -0
- clawrium-0.1.0/src/clawrium/platform/registry/zeroclaw/manifest.yaml +58 -0
- clawrium-0.1.0/src/clawrium/platform/registry/zeroclaw/playbooks/install.yaml +65 -0
- clawrium-0.1.0/tests/__init__.py +1 -0
- clawrium-0.1.0/tests/conftest.py +135 -0
- clawrium-0.1.0/tests/test_cli_host.py +533 -0
- clawrium-0.1.0/tests/test_cli_init.py +117 -0
- clawrium-0.1.0/tests/test_cli_install.py +270 -0
- clawrium-0.1.0/tests/test_cli_registry.py +38 -0
- clawrium-0.1.0/tests/test_cli_secret.py +279 -0
- clawrium-0.1.0/tests/test_cli_status.py +216 -0
- clawrium-0.1.0/tests/test_config.py +82 -0
- clawrium-0.1.0/tests/test_deps.py +129 -0
- clawrium-0.1.0/tests/test_hardware.py +582 -0
- clawrium-0.1.0/tests/test_health.py +192 -0
- clawrium-0.1.0/tests/test_hosts.py +351 -0
- clawrium-0.1.0/tests/test_install.py +631 -0
- clawrium-0.1.0/tests/test_keys.py +283 -0
- clawrium-0.1.0/tests/test_names.py +64 -0
- clawrium-0.1.0/tests/test_playbooks.py +69 -0
- clawrium-0.1.0/tests/test_registry.py +430 -0
- clawrium-0.1.0/tests/test_secrets.py +376 -0
- clawrium-0.1.0/tests/test_ssh_connection.py +324 -0
- clawrium-0.1.0/uv.lock +815 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Install uv
|
|
17
|
+
uses: astral-sh/setup-uv@v4
|
|
18
|
+
with:
|
|
19
|
+
version: "latest"
|
|
20
|
+
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
run: uv python install 3.11
|
|
23
|
+
|
|
24
|
+
- name: Install dependencies
|
|
25
|
+
run: uv sync
|
|
26
|
+
|
|
27
|
+
- name: Run tests with coverage
|
|
28
|
+
run: make test-cov
|
|
29
|
+
|
|
30
|
+
- name: Upload coverage report
|
|
31
|
+
uses: actions/upload-artifact@v4
|
|
32
|
+
with:
|
|
33
|
+
name: coverage-report
|
|
34
|
+
path: .coverage
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[codz]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
# Usually these files are written by a python script from a template
|
|
31
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
32
|
+
*.manifest
|
|
33
|
+
*.spec
|
|
34
|
+
|
|
35
|
+
# Installer logs
|
|
36
|
+
pip-log.txt
|
|
37
|
+
pip-delete-this-directory.txt
|
|
38
|
+
|
|
39
|
+
# Unit test / coverage reports
|
|
40
|
+
htmlcov/
|
|
41
|
+
.tox/
|
|
42
|
+
.nox/
|
|
43
|
+
.coverage
|
|
44
|
+
.coverage.*
|
|
45
|
+
.cache
|
|
46
|
+
nosetests.xml
|
|
47
|
+
coverage.xml
|
|
48
|
+
*.cover
|
|
49
|
+
*.py.cover
|
|
50
|
+
.hypothesis/
|
|
51
|
+
.pytest_cache/
|
|
52
|
+
cover/
|
|
53
|
+
|
|
54
|
+
# Translations
|
|
55
|
+
*.mo
|
|
56
|
+
*.pot
|
|
57
|
+
|
|
58
|
+
# Django stuff:
|
|
59
|
+
*.log
|
|
60
|
+
local_settings.py
|
|
61
|
+
db.sqlite3
|
|
62
|
+
db.sqlite3-journal
|
|
63
|
+
|
|
64
|
+
# Flask stuff:
|
|
65
|
+
instance/
|
|
66
|
+
.webassets-cache
|
|
67
|
+
|
|
68
|
+
# Scrapy stuff:
|
|
69
|
+
.scrapy
|
|
70
|
+
|
|
71
|
+
# Sphinx documentation
|
|
72
|
+
docs/_build/
|
|
73
|
+
|
|
74
|
+
# PyBuilder
|
|
75
|
+
.pybuilder/
|
|
76
|
+
target/
|
|
77
|
+
|
|
78
|
+
# Jupyter Notebook
|
|
79
|
+
.ipynb_checkpoints
|
|
80
|
+
|
|
81
|
+
# IPython
|
|
82
|
+
profile_default/
|
|
83
|
+
ipython_config.py
|
|
84
|
+
|
|
85
|
+
# pyenv
|
|
86
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
87
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
88
|
+
# .python-version
|
|
89
|
+
|
|
90
|
+
# pipenv
|
|
91
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
92
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
93
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
94
|
+
# install all needed dependencies.
|
|
95
|
+
#Pipfile.lock
|
|
96
|
+
|
|
97
|
+
# UV
|
|
98
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
99
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
100
|
+
# commonly ignored for libraries.
|
|
101
|
+
#uv.lock
|
|
102
|
+
|
|
103
|
+
# poetry
|
|
104
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
105
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
106
|
+
# commonly ignored for libraries.
|
|
107
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
108
|
+
#poetry.lock
|
|
109
|
+
#poetry.toml
|
|
110
|
+
|
|
111
|
+
# pdm
|
|
112
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
113
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
114
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
115
|
+
#pdm.lock
|
|
116
|
+
#pdm.toml
|
|
117
|
+
.pdm-python
|
|
118
|
+
.pdm-build/
|
|
119
|
+
|
|
120
|
+
# pixi
|
|
121
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
122
|
+
#pixi.lock
|
|
123
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
124
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
125
|
+
.pixi
|
|
126
|
+
|
|
127
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
128
|
+
__pypackages__/
|
|
129
|
+
|
|
130
|
+
# Celery stuff
|
|
131
|
+
celerybeat-schedule
|
|
132
|
+
celerybeat.pid
|
|
133
|
+
|
|
134
|
+
# SageMath parsed files
|
|
135
|
+
*.sage.py
|
|
136
|
+
|
|
137
|
+
# Environments
|
|
138
|
+
.env
|
|
139
|
+
.envrc
|
|
140
|
+
.venv
|
|
141
|
+
env/
|
|
142
|
+
venv/
|
|
143
|
+
ENV/
|
|
144
|
+
env.bak/
|
|
145
|
+
venv.bak/
|
|
146
|
+
|
|
147
|
+
# Spyder project settings
|
|
148
|
+
.spyderproject
|
|
149
|
+
.spyproject
|
|
150
|
+
|
|
151
|
+
# Rope project settings
|
|
152
|
+
.ropeproject
|
|
153
|
+
|
|
154
|
+
# mkdocs documentation
|
|
155
|
+
/site
|
|
156
|
+
|
|
157
|
+
# mypy
|
|
158
|
+
.mypy_cache/
|
|
159
|
+
.dmypy.json
|
|
160
|
+
dmypy.json
|
|
161
|
+
|
|
162
|
+
# Pyre type checker
|
|
163
|
+
.pyre/
|
|
164
|
+
|
|
165
|
+
# pytype static type analyzer
|
|
166
|
+
.pytype/
|
|
167
|
+
|
|
168
|
+
# Cython debug symbols
|
|
169
|
+
cython_debug/
|
|
170
|
+
|
|
171
|
+
# PyCharm
|
|
172
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
173
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
174
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
175
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
176
|
+
#.idea/
|
|
177
|
+
|
|
178
|
+
# Abstra
|
|
179
|
+
# Abstra is an AI-powered process automation framework.
|
|
180
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
181
|
+
# Learn more at https://abstra.io/docs
|
|
182
|
+
.abstra/
|
|
183
|
+
|
|
184
|
+
# Visual Studio Code
|
|
185
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
186
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
187
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
188
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
189
|
+
# .vscode/
|
|
190
|
+
|
|
191
|
+
# Ruff stuff:
|
|
192
|
+
.ruff_cache/
|
|
193
|
+
|
|
194
|
+
# PyPI configuration file
|
|
195
|
+
.pypirc
|
|
196
|
+
|
|
197
|
+
# Cursor
|
|
198
|
+
# Cursor is an AI-powered code editor. `.cursorignore` specifies files/directories to
|
|
199
|
+
# exclude from AI features like autocomplete and code analysis. Recommended for sensitive data
|
|
200
|
+
# refer to https://docs.cursor.com/context/ignore-files
|
|
201
|
+
.cursorignore
|
|
202
|
+
.cursorindexingignore
|
|
203
|
+
|
|
204
|
+
# Marimo
|
|
205
|
+
marimo/_static/
|
|
206
|
+
marimo/_lsp/
|
|
207
|
+
__marimo__/
|
|
208
|
+
|
|
209
|
+
## AI Stuff
|
|
210
|
+
|
|
211
|
+
.claude/
|
clawrium-0.1.0/.mcp.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"atx": {
|
|
4
|
+
"command": "/home/devashish/bin/atx",
|
|
5
|
+
"args": [
|
|
6
|
+
"mcp",
|
|
7
|
+
"serve"
|
|
8
|
+
],
|
|
9
|
+
"env": {
|
|
10
|
+
"ATX_DAEMON_PORT": "30000",
|
|
11
|
+
"ATX_DB_PATH": "/home/devashish/.config/atx/data/atx.db",
|
|
12
|
+
"ATX_PROJECT_ID": "2f7d41ac-f5fb-4466-8e2e-9e69bbef6701",
|
|
13
|
+
"ATX_WORKING_DIR": "/home/devashish/workspace/ric03uec/clawrium"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Clawrium
|
|
2
|
+
|
|
3
|
+
## What This Is
|
|
4
|
+
|
|
5
|
+
Clawrium is a CLI/TUI tool for managing AI assistant fleets on local networks. It provides a centralized command center for installing, configuring, and maintaining multiple "claws" (AI assistants like OpenClaw, ZeroClaw, NemoClaw) across hosts, solving the chaos of configuration drift, scattered secrets, and inconsistent management.
|
|
6
|
+
|
|
7
|
+
## Core Value
|
|
8
|
+
|
|
9
|
+
Users can manage all their AI assistants from one place with consistent configuration and security practices, regardless of which claw types they run.
|
|
10
|
+
|
|
11
|
+
## Requirements
|
|
12
|
+
|
|
13
|
+
### Validated
|
|
14
|
+
|
|
15
|
+
- [x] Initialize Clawrium config directory (`clm init`) — *Phase 1*
|
|
16
|
+
- [x] Dependency check with install instructions — *Phase 1*
|
|
17
|
+
|
|
18
|
+
### Active
|
|
19
|
+
|
|
20
|
+
- [ ] Add/remove hosts in the fleet
|
|
21
|
+
- [ ] Install OpenClaw on Ubuntu hosts via Ansible
|
|
22
|
+
- [ ] Manage claw configs (SOUL.md, IDENTITY.md, AGENTS.md, etc.) from central store
|
|
23
|
+
- [ ] Sync configs from central store to hosts
|
|
24
|
+
- [ ] Check claw status on hosts
|
|
25
|
+
- [ ] Rotate API keys across claws
|
|
26
|
+
- [ ] Switch model providers for claws
|
|
27
|
+
- [ ] Add/remove agents within a claw
|
|
28
|
+
|
|
29
|
+
### Out of Scope
|
|
30
|
+
|
|
31
|
+
- Cloud services — fully local, no external dependencies
|
|
32
|
+
- Non-Debian-based distros — Ubuntu and Debian for v1, other distros later
|
|
33
|
+
- Other claw types — OpenClaw only for v1, ZeroClaw/NemoClaw later
|
|
34
|
+
- GUI — CLI/TUI only, no web interface
|
|
35
|
+
- Multi-user/auth — single user for v1
|
|
36
|
+
|
|
37
|
+
## Context
|
|
38
|
+
|
|
39
|
+
**Problem space:**
|
|
40
|
+
- AI assistants (claws) proliferate — users don't know which to install
|
|
41
|
+
- Each claw has different config files, formats, and locations
|
|
42
|
+
- Configuration drift when managing multiple instances
|
|
43
|
+
- Secrets (API keys) scattered across config files
|
|
44
|
+
- Upgrades risk breaking existing config
|
|
45
|
+
- No unified way to manage fleet health
|
|
46
|
+
|
|
47
|
+
**OpenClaw specifics:**
|
|
48
|
+
- Config lives in `~/.openclaw/workspace/`
|
|
49
|
+
- Key files: SOUL.md, IDENTITY.md, AGENTS.md, USER.md, MEMORY.md, HEARTBEAT.md
|
|
50
|
+
- Global config: `~/.openclaw/openclaw.json`
|
|
51
|
+
|
|
52
|
+
**Clawrium approach:**
|
|
53
|
+
- Central store at `~/.config/clawrium/`
|
|
54
|
+
- Registry of claw types with versions, dependencies, templates
|
|
55
|
+
- Ansible playbooks for installation and config sync
|
|
56
|
+
- Never takes sudo — prompts user for privileged operations
|
|
57
|
+
|
|
58
|
+
## Constraints
|
|
59
|
+
|
|
60
|
+
- **Tech stack**: Python + Typer CLI, ansible-runner for execution, uv/uvx for packaging
|
|
61
|
+
- **Security**: No sudo permissions — Clawrium prompts user when privileged commands needed
|
|
62
|
+
- **Platform**: Ubuntu and Debian for v1
|
|
63
|
+
- **Claw support**: OpenClaw only for v1
|
|
64
|
+
- **Deployment**: Fully local, no cloud dependencies
|
|
65
|
+
|
|
66
|
+
## Key Decisions
|
|
67
|
+
|
|
68
|
+
| Decision | Rationale | Outcome |
|
|
69
|
+
|----------|-----------|---------|
|
|
70
|
+
| Ansible for execution | Standard automation tool, no agent needed on hosts, SSH-based | — Pending |
|
|
71
|
+
| No sudo policy | Security-first, user controls privileged operations | — Pending |
|
|
72
|
+
| Central store in ~/.config/clawrium/ | Standard XDG location, single source of truth | — Pending |
|
|
73
|
+
| Start with OpenClaw | Well-documented, clear file structure, good test case | — Pending |
|
|
74
|
+
|
|
75
|
+
## Evolution
|
|
76
|
+
|
|
77
|
+
This document evolves at phase transitions and milestone boundaries.
|
|
78
|
+
|
|
79
|
+
**After each phase transition** (via `/gsd:transition`):
|
|
80
|
+
1. Requirements invalidated? → Move to Out of Scope with reason
|
|
81
|
+
2. Requirements validated? → Move to Validated with phase reference
|
|
82
|
+
3. New requirements emerged? → Add to Active
|
|
83
|
+
4. Decisions to log? → Add to Key Decisions
|
|
84
|
+
5. "What This Is" still accurate? → Update if drifted
|
|
85
|
+
|
|
86
|
+
**After each milestone** (via `/gsd:complete-milestone`):
|
|
87
|
+
1. Full review of all sections
|
|
88
|
+
2. Core Value check — still the right priority?
|
|
89
|
+
3. Audit Out of Scope — reasons still valid?
|
|
90
|
+
4. Update Context with current state
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
*Last updated: 2026-03-21 after Phase 1 completion*
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# Requirements: Clawrium
|
|
2
|
+
|
|
3
|
+
**Defined:** 2026-03-20
|
|
4
|
+
**Core Value:** Users can manage all their AI assistants from one place with consistent configuration and security practices.
|
|
5
|
+
|
|
6
|
+
## v1 Requirements
|
|
7
|
+
|
|
8
|
+
Requirements for initial release: OpenClaw on single Ubuntu host.
|
|
9
|
+
|
|
10
|
+
### Initialization
|
|
11
|
+
|
|
12
|
+
- [x] **INIT-01**: User can initialize Clawrium config directory (`clm init`)
|
|
13
|
+
- [x] **INIT-02**: User sees dependency check (Python, Ansible) with install instructions
|
|
14
|
+
|
|
15
|
+
### Host Management
|
|
16
|
+
|
|
17
|
+
- [x] **HOST-01**: User can add a host with SSH details (`clm host add`)
|
|
18
|
+
- [x] **HOST-02**: User can list all hosts with hardware info (`clm host list`)
|
|
19
|
+
- [x] **HOST-03**: User can remove a host (`clm host remove`)
|
|
20
|
+
- [x] **HOST-04**: User can check host status (`clm host status`)
|
|
21
|
+
- [x] **HOST-05**: System detects hardware capabilities (arch, GPU, memory, disk)
|
|
22
|
+
|
|
23
|
+
### Claw Registry
|
|
24
|
+
|
|
25
|
+
- [x] **REG-01**: System loads claw manifests from registry
|
|
26
|
+
- [x] **REG-02**: User can list available claw types (`clm registry list`)
|
|
27
|
+
- [x] **REG-03**: System validates claw compatibility against host capabilities
|
|
28
|
+
|
|
29
|
+
### Claw Installation
|
|
30
|
+
|
|
31
|
+
- [x] **INST-01**: User can install OpenClaw via interactive flow (`clm install`)
|
|
32
|
+
- [x] **INST-02**: Installation validates compatibility before proceeding
|
|
33
|
+
- [x] **INST-03**: Installation streams progress in real-time
|
|
34
|
+
- [x] **INST-04**: Installation fails fast with clear error messages
|
|
35
|
+
|
|
36
|
+
### Secrets Management
|
|
37
|
+
|
|
38
|
+
- [x] **SEC-01**: User can set secrets (`clm secret set`)
|
|
39
|
+
- [x] **SEC-02**: User can list secret keys (`clm secret list`)
|
|
40
|
+
- [x] **SEC-03**: Secrets stored with mode 600, never displayed
|
|
41
|
+
|
|
42
|
+
### Fleet Status
|
|
43
|
+
|
|
44
|
+
- [x] **STAT-01**: User can view fleet status (`clm status`)
|
|
45
|
+
|
|
46
|
+
## v2 Requirements
|
|
47
|
+
|
|
48
|
+
Deferred to future release. Tracked but not in current roadmap.
|
|
49
|
+
|
|
50
|
+
### Agent Normalization
|
|
51
|
+
|
|
52
|
+
- **AGENT-01**: User can create portable agent definitions (`clm agent create`)
|
|
53
|
+
- **AGENT-02**: User can list agents (`clm agent list`)
|
|
54
|
+
- **AGENT-03**: User can edit agents (`clm agent edit`)
|
|
55
|
+
- **AGENT-04**: System translates agents to claw-specific format
|
|
56
|
+
|
|
57
|
+
### Claw Operations
|
|
58
|
+
|
|
59
|
+
- **CLAW-01**: User can upgrade claw instances (`clm claw upgrade`)
|
|
60
|
+
- **CLAW-02**: User can remove claw instances (`clm claw remove`)
|
|
61
|
+
- **CLAW-03**: User can assign agents to claws (`clm claw agent add`)
|
|
62
|
+
|
|
63
|
+
### Multi-Host Fleet
|
|
64
|
+
|
|
65
|
+
- **FLEET-01**: User can manage multiple hosts
|
|
66
|
+
- **FLEET-02**: User can sync configs across hosts
|
|
67
|
+
|
|
68
|
+
### Additional Claw Types
|
|
69
|
+
|
|
70
|
+
- **TYPE-01**: ZeroClaw support
|
|
71
|
+
- **TYPE-02**: NemoClaw support
|
|
72
|
+
|
|
73
|
+
## Out of Scope
|
|
74
|
+
|
|
75
|
+
Explicitly excluded. Documented to prevent scope creep.
|
|
76
|
+
|
|
77
|
+
| Feature | Reason |
|
|
78
|
+
|---------|--------|
|
|
79
|
+
| TUI interface | CLI first, TUI later |
|
|
80
|
+
| Cloud services | Fully local, no external dependencies |
|
|
81
|
+
| Non-Ubuntu distros | Ubuntu only for v1, other distros later |
|
|
82
|
+
| Security hardening (airgap, sandboxing) | Table stakes first, hardening in v2+ |
|
|
83
|
+
| GUI/web interface | CLI/TUI only |
|
|
84
|
+
| Multi-user auth | Single user for v1 |
|
|
85
|
+
|
|
86
|
+
## Traceability
|
|
87
|
+
|
|
88
|
+
Which phases cover which requirements. Updated during roadmap creation.
|
|
89
|
+
|
|
90
|
+
| Requirement | Phase | Status |
|
|
91
|
+
|-------------|-------|--------|
|
|
92
|
+
| INIT-01 | Phase 1 | Complete |
|
|
93
|
+
| INIT-02 | Phase 1 | Complete |
|
|
94
|
+
| HOST-01 | Phase 2 | Complete |
|
|
95
|
+
| HOST-02 | Phase 2 | Complete |
|
|
96
|
+
| HOST-03 | Phase 2 | Complete |
|
|
97
|
+
| HOST-04 | Phase 2 | Complete |
|
|
98
|
+
| HOST-05 | Phase 2 | Complete |
|
|
99
|
+
| REG-01 | Phase 3 | Complete |
|
|
100
|
+
| REG-02 | Phase 3 | Complete |
|
|
101
|
+
| REG-03 | Phase 3 | Complete |
|
|
102
|
+
| INST-01 | Phase 4 | Complete |
|
|
103
|
+
| INST-02 | Phase 4 | Complete |
|
|
104
|
+
| INST-03 | Phase 4 | Complete |
|
|
105
|
+
| INST-04 | Phase 4 | Complete |
|
|
106
|
+
| STAT-01 | Phase 4 | Complete |
|
|
107
|
+
| SEC-01 | Phase 5 | Complete |
|
|
108
|
+
| SEC-02 | Phase 5 | Complete |
|
|
109
|
+
| SEC-03 | Phase 5 | Complete |
|
|
110
|
+
|
|
111
|
+
**Coverage:**
|
|
112
|
+
- v1 requirements: 17 total
|
|
113
|
+
- Mapped to phases: 17
|
|
114
|
+
- Unmapped: 0 ✓
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
*Requirements defined: 2026-03-20*
|
|
118
|
+
*Last updated: 2026-03-21 after phase 4 planning*
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Roadmap: Clawrium
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Clawrium v1 delivers a CLI tool for managing OpenClaw instances on single Ubuntu hosts. The journey progresses from foundation setup through host management, registry and compatibility checking, secrets handling, and culminates in the full installation flow with fleet status visibility. Each phase delivers complete, verifiable capabilities that build toward the core value: managing AI assistants from one place with consistent configuration and security practices.
|
|
6
|
+
|
|
7
|
+
## Phases
|
|
8
|
+
|
|
9
|
+
**Phase Numbering:**
|
|
10
|
+
- Integer phases (1, 2, 3): Planned milestone work
|
|
11
|
+
- Decimal phases (2.1, 2.2): Urgent insertions (marked with INSERTED)
|
|
12
|
+
|
|
13
|
+
Decimal phases appear between their surrounding integers in numeric order.
|
|
14
|
+
|
|
15
|
+
- [x] **Phase 1: Foundation Setup** - Initialize Clawrium configuration and verify dependencies (completed 2026-03-21)
|
|
16
|
+
- [x] **Phase 2: Host Management** - Add, list, remove hosts with hardware capability detection (completed 2026-03-21)
|
|
17
|
+
- [x] **Phase 3: Registry & Compatibility** - Load claw manifests and validate hardware compatibility (completed 2026-03-21)
|
|
18
|
+
- [x] **Phase 4: Installation & Fleet Status** - Install OpenClaw instances and view fleet status (completed 2026-03-22)
|
|
19
|
+
- [ ] **Phase 5: Secrets Management** - Secure storage and retrieval of API keys and credentials
|
|
20
|
+
|
|
21
|
+
## Phase Details
|
|
22
|
+
|
|
23
|
+
### Phase 1: Foundation Setup
|
|
24
|
+
**Goal**: Users can initialize Clawrium and verify all dependencies are met
|
|
25
|
+
**Depends on**: Nothing (first phase)
|
|
26
|
+
**Requirements**: INIT-01, INIT-02
|
|
27
|
+
**Success Criteria** (what must be TRUE):
|
|
28
|
+
1. User runs `clm init` and configuration directory is created at ~/.config/clawrium/
|
|
29
|
+
2. User sees clear status of all dependencies (Python, Ansible, ansible-runner)
|
|
30
|
+
3. User receives actionable install instructions for any missing dependencies
|
|
31
|
+
**Plans**: 2 plans
|
|
32
|
+
|
|
33
|
+
Plans:
|
|
34
|
+
- [x] 01-01-PLAN.md — Project scaffolding and clm init command (creates config directory)
|
|
35
|
+
- [x] 01-02-PLAN.md — Dependency detection with install instructions
|
|
36
|
+
|
|
37
|
+
### Phase 2: Host Management
|
|
38
|
+
**Goal**: Users can manage hosts with automatic hardware capability detection
|
|
39
|
+
**Depends on**: Phase 1
|
|
40
|
+
**Requirements**: HOST-01, HOST-02, HOST-03, HOST-04, HOST-05
|
|
41
|
+
**Success Criteria** (what must be TRUE):
|
|
42
|
+
1. User can add a host and SSH connection is tested before saving
|
|
43
|
+
2. User sees detected hardware capabilities (architecture, GPU, memory, disk) when adding host
|
|
44
|
+
3. User can list all hosts with hardware information displayed
|
|
45
|
+
4. User can check status of any host (SSH connectivity, service health)
|
|
46
|
+
5. User can remove a host and all associated resources are cleaned up
|
|
47
|
+
**Plans**: 4 plans
|
|
48
|
+
|
|
49
|
+
Plans:
|
|
50
|
+
- [x] 02-01-PLAN.md — Test scaffolding with SSH and Ansible mock fixtures
|
|
51
|
+
- [x] 02-02-PLAN.md — Host storage and SSH connection testing modules
|
|
52
|
+
- [x] 02-03-PLAN.md — Hardware capability detection via ansible-runner
|
|
53
|
+
- [x] 02-04-PLAN.md — CLI host commands (add, list, remove, status)
|
|
54
|
+
|
|
55
|
+
### Phase 3: Registry & Compatibility
|
|
56
|
+
**Goal**: Users can browse available claw types and validate compatibility before installation
|
|
57
|
+
**Depends on**: Phase 2
|
|
58
|
+
**Requirements**: REG-01, REG-02, REG-03
|
|
59
|
+
**Success Criteria** (what must be TRUE):
|
|
60
|
+
1. User runs `clm registry list` and sees OpenClaw with version and requirements
|
|
61
|
+
2. System loads OpenClaw manifest from platform/registry/openclaw/ directory
|
|
62
|
+
3. System validates host capabilities against claw requirements and reports compatibility (supported/unsupported with specific reasons)
|
|
63
|
+
**Plans**: 4 plans
|
|
64
|
+
|
|
65
|
+
Plans:
|
|
66
|
+
- [x] 03-01-PLAN.md — Create OpenClaw manifest and registry loading module (REG-01)
|
|
67
|
+
- [x] 03-02-PLAN.md — Extend HardwareInfo with OS detection (REG-03 foundation)
|
|
68
|
+
- [x] 03-03-PLAN.md — Implement compatibility checking function (REG-03)
|
|
69
|
+
- [x] 03-04-PLAN.md — Registry CLI commands (list, show) (REG-02)
|
|
70
|
+
|
|
71
|
+
### Phase 4: Installation & Fleet Status
|
|
72
|
+
**Goal**: Users can install OpenClaw on Ubuntu hosts and view fleet status
|
|
73
|
+
**Depends on**: Phase 2, Phase 3
|
|
74
|
+
**Requirements**: INST-01, INST-02, INST-03, INST-04, STAT-01
|
|
75
|
+
**Success Criteria** (what must be TRUE):
|
|
76
|
+
1. User runs `clm install` and flows through: pick claw → pick host → validate compatibility → install
|
|
77
|
+
2. Installation validates compatibility before proceeding and fails fast if host is incompatible
|
|
78
|
+
3. User sees real-time progress during installation (base setup, dependencies, claw installation)
|
|
79
|
+
4. Installation fails fast with clear error messages if any step fails
|
|
80
|
+
5. User runs `clm status` and sees all hosts with their claw instances, agents, and status
|
|
81
|
+
**Plans**: 4 plans
|
|
82
|
+
|
|
83
|
+
Plans:
|
|
84
|
+
- [x] 04-01-PLAN.md — Core install module and Ansible playbooks (INST-02, INST-04)
|
|
85
|
+
- [x] 04-02-PLAN.md — Install CLI with interactive flow and progress (INST-01, INST-03)
|
|
86
|
+
- [x] 04-03-PLAN.md — Install state tracking and health check module (INST-04, STAT-01)
|
|
87
|
+
- [x] 04-04-PLAN.md — Fleet status CLI command (STAT-01)
|
|
88
|
+
|
|
89
|
+
### Phase 5: Secrets Management
|
|
90
|
+
**Goal**: Users can securely store and manage secrets for claw instances
|
|
91
|
+
**Depends on**: Phase 1
|
|
92
|
+
**Requirements**: SEC-01, SEC-02, SEC-03
|
|
93
|
+
**Success Criteria** (what must be TRUE):
|
|
94
|
+
1. User can set a secret with `clm secret set` and it's stored with mode 600
|
|
95
|
+
2. User can list secret keys with `clm secret list` and values are never displayed
|
|
96
|
+
3. Secrets file is created with correct permissions (600) on first write
|
|
97
|
+
**Plans**: 2 plans
|
|
98
|
+
|
|
99
|
+
Plans:
|
|
100
|
+
- [x] 05-01-PLAN.md — Core secrets storage module and manifest schema extension (SEC-01, SEC-03)
|
|
101
|
+
- [x] 05-02-PLAN.md — CLI secret commands (set, list, remove) (SEC-01, SEC-02, SEC-03)
|
|
102
|
+
|
|
103
|
+
## Progress
|
|
104
|
+
|
|
105
|
+
**Execution Order:**
|
|
106
|
+
Phases execute in numeric order: 1 → 2 → 3 → 4 → 5
|
|
107
|
+
|
|
108
|
+
| Phase | Plans Complete | Status | Completed |
|
|
109
|
+
|-------|----------------|--------|-----------|
|
|
110
|
+
| 1. Foundation Setup | 2/2 | Complete | 2026-03-21 |
|
|
111
|
+
| 2. Host Management | 4/4 | Complete | 2026-03-21 |
|
|
112
|
+
| 3. Registry & Compatibility | 4/4 | Complete | 2026-03-21 |
|
|
113
|
+
| 4. Installation & Fleet Status | 4/4 | Complete | 2026-03-22 |
|
|
114
|
+
| 5. Secrets Management | 0/2 | Planning complete | - |
|