ai-dev-harness 0.2.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.
- ai_dev_harness-0.2.0/LICENSE +21 -0
- ai_dev_harness-0.2.0/PKG-INFO +200 -0
- ai_dev_harness-0.2.0/README.md +173 -0
- ai_dev_harness-0.2.0/ai_dev_harness.egg-info/PKG-INFO +200 -0
- ai_dev_harness-0.2.0/ai_dev_harness.egg-info/SOURCES.txt +34 -0
- ai_dev_harness-0.2.0/ai_dev_harness.egg-info/dependency_links.txt +1 -0
- ai_dev_harness-0.2.0/ai_dev_harness.egg-info/entry_points.txt +3 -0
- ai_dev_harness-0.2.0/ai_dev_harness.egg-info/requires.txt +3 -0
- ai_dev_harness-0.2.0/ai_dev_harness.egg-info/top_level.txt +1 -0
- ai_dev_harness-0.2.0/liteharness/__init__.py +3 -0
- ai_dev_harness-0.2.0/liteharness/__main__.py +290 -0
- ai_dev_harness-0.2.0/liteharness/clean.py +165 -0
- ai_dev_harness-0.2.0/liteharness/diff.py +189 -0
- ai_dev_harness-0.2.0/liteharness/export.py +96 -0
- ai_dev_harness-0.2.0/liteharness/harnesses/__init__.py +349 -0
- ai_dev_harness-0.2.0/liteharness/harnesses/claude_code.py +500 -0
- ai_dev_harness-0.2.0/liteharness/harnesses/codex.py +164 -0
- ai_dev_harness-0.2.0/liteharness/harnesses/copilot.py +268 -0
- ai_dev_harness-0.2.0/liteharness/harnesses/cursor.py +221 -0
- ai_dev_harness-0.2.0/liteharness/harnesses/windsurf.py +257 -0
- ai_dev_harness-0.2.0/liteharness/health.py +47 -0
- ai_dev_harness-0.2.0/liteharness/parser.py +203 -0
- ai_dev_harness-0.2.0/liteharness/report.py +164 -0
- ai_dev_harness-0.2.0/liteharness/scanner.py +125 -0
- ai_dev_harness-0.2.0/liteharness/server.py +178 -0
- ai_dev_harness-0.2.0/liteharness/style.py +41 -0
- ai_dev_harness-0.2.0/liteharness/web/index.html +1052 -0
- ai_dev_harness-0.2.0/pyproject.toml +44 -0
- ai_dev_harness-0.2.0/setup.cfg +4 -0
- ai_dev_harness-0.2.0/tests/test_claude_code_harness.py +152 -0
- ai_dev_harness-0.2.0/tests/test_copilot_harness.py +257 -0
- ai_dev_harness-0.2.0/tests/test_harness_schema.py +131 -0
- ai_dev_harness-0.2.0/tests/test_harnesses.py +134 -0
- ai_dev_harness-0.2.0/tests/test_parser.py +162 -0
- ai_dev_harness-0.2.0/tests/test_scanner.py +98 -0
- ai_dev_harness-0.2.0/tests/test_windsurf_harness.py +264 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Boris Villazon-Terrazas
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ai-dev-harness
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Multi-harness AI coding tool config inspector — scan, visualize, and audit AI assistant ecosystems.
|
|
5
|
+
Author: Boris Villazon-Terrazas
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/boricles/claude-lens
|
|
8
|
+
Project-URL: Repository, https://github.com/boricles/claude-lens
|
|
9
|
+
Project-URL: Bug Tracker, https://github.com/boricles/claude-lens/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/boricles/claude-lens/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: liteharness,claude-code,cursor,codex,copilot,windsurf,devtools,observability
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Provides-Extra: color
|
|
25
|
+
Requires-Dist: rich; extra == "color"
|
|
26
|
+
Dynamic: license-file
|
|
27
|
+
|
|
28
|
+
# LiteHarness
|
|
29
|
+
|
|
30
|
+
[](https://pypi.org/project/liteharness/)
|
|
31
|
+
[](https://pypi.org/project/liteharness/)
|
|
32
|
+
[](https://opensource.org/licenses/MIT)
|
|
33
|
+
|
|
34
|
+
**Multi-harness AI coding tool config inspector.**
|
|
35
|
+
|
|
36
|
+
Scan, visualize, and audit every AI coding assistant installed on your machine — from one place.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Supported Tools
|
|
41
|
+
|
|
42
|
+
| Tool | Harness | Config Paths | Instruction File |
|
|
43
|
+
|------|---------|-------------|-----------------|
|
|
44
|
+
| **Claude Code** | `claude_code` | `~/.claude/`, `.claude/` | `CLAUDE.md` |
|
|
45
|
+
| **Cursor** | `cursor` | `~/.cursor/`, `.cursor/` | `.cursorrules`, `.cursor/rules/*.md` |
|
|
46
|
+
| **Codex CLI** | `codex` | `~/.codex/` | `AGENTS.md`, `codex.json` |
|
|
47
|
+
| **Windsurf** | `windsurf` | `~/.windsurf/`, `.windsurf/` | `.windsurfrules`, `.windsurf/rules/*.md` |
|
|
48
|
+
| **GitHub Copilot** | `copilot` | `~/.config/github-copilot/`, `.github/` | `.github/copilot-instructions.md` |
|
|
49
|
+
|
|
50
|
+
Each tool has its own **harness** — a self-contained module that knows how to detect the tool, discover its config files, parse them, and run health checks.
|
|
51
|
+
|
|
52
|
+
## Installation
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Install from PyPI
|
|
56
|
+
pip install liteharness
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Or install from source in development mode:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
git clone https://github.com/boricles/claude-lens.git
|
|
63
|
+
cd claude-lens
|
|
64
|
+
pip install -e .
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Usage
|
|
68
|
+
|
|
69
|
+
### CLI Report
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Scan all detected AI tools and print a report
|
|
73
|
+
liteharness report
|
|
74
|
+
|
|
75
|
+
# Scan a specific harness only
|
|
76
|
+
liteharness report --harness claude_code
|
|
77
|
+
|
|
78
|
+
# List all supported harnesses and detection status
|
|
79
|
+
liteharness harnesses
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### JSON Output
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Full JSON scan data
|
|
86
|
+
liteharness scan
|
|
87
|
+
|
|
88
|
+
# Filter to one harness
|
|
89
|
+
liteharness scan --harness cursor
|
|
90
|
+
|
|
91
|
+
# Pretty-printed
|
|
92
|
+
liteharness scan | python3 -m json.tool
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Web Dashboard
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Launch interactive browser UI on localhost:1834
|
|
99
|
+
liteharness web
|
|
100
|
+
|
|
101
|
+
# Custom port
|
|
102
|
+
liteharness web --port 9000
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Other Commands
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Compare two scan snapshots
|
|
109
|
+
liteharness diff snapshot-a.json snapshot-b.json
|
|
110
|
+
|
|
111
|
+
# Export a project's config as a portable bundle
|
|
112
|
+
liteharness export myproject
|
|
113
|
+
|
|
114
|
+
# Clean up stale sessions and orphaned data (interactive)
|
|
115
|
+
liteharness clean
|
|
116
|
+
|
|
117
|
+
# Print version
|
|
118
|
+
liteharness version
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The legacy `claude-lens` command is still available as an alias.
|
|
122
|
+
|
|
123
|
+
## What It Detects
|
|
124
|
+
|
|
125
|
+
For each tool, LiteHarness discovers:
|
|
126
|
+
|
|
127
|
+
- **Global settings** — permissions, preferences, API config
|
|
128
|
+
- **Instruction files** — system prompts and rules (CLAUDE.md, .cursorrules, etc.)
|
|
129
|
+
- **Rules/agents** — custom agent definitions, rule files
|
|
130
|
+
- **Sessions** — session metadata (count, size, age — never reads content)
|
|
131
|
+
- **Plugins/extensions** — installed plugins with capabilities
|
|
132
|
+
- **Memory** — memory files and index integrity
|
|
133
|
+
- **Health issues** — orphaned state, stale sessions, missing instructions, config drift
|
|
134
|
+
|
|
135
|
+
## Health Checks
|
|
136
|
+
|
|
137
|
+
Each harness runs its own health checks:
|
|
138
|
+
|
|
139
|
+
| Check | Harnesses | Severity |
|
|
140
|
+
|-------|-----------|----------|
|
|
141
|
+
| Missing instruction file | All | info |
|
|
142
|
+
| Orphaned project state | Claude Code | warning |
|
|
143
|
+
| Stale sessions (>30 days) | Claude Code | info |
|
|
144
|
+
| Memory index drift | Claude Code | warning |
|
|
145
|
+
| Disk usage >100-200 MB | Claude Code, Cursor, Windsurf | warning |
|
|
146
|
+
| Outdated config (>180 days) | Copilot | info |
|
|
147
|
+
|
|
148
|
+
## Architecture
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
liteharness/
|
|
152
|
+
harnesses/
|
|
153
|
+
__init__.py # BaseHarness ABC, schema dataclasses, registry
|
|
154
|
+
claude_code.py # Claude Code harness
|
|
155
|
+
cursor.py # Cursor harness
|
|
156
|
+
codex.py # Codex CLI harness
|
|
157
|
+
windsurf.py # Windsurf harness
|
|
158
|
+
copilot.py # GitHub Copilot harness
|
|
159
|
+
scanner.py # Orchestrator — runs all harnesses, merges results
|
|
160
|
+
parser.py # Shared parsers (frontmatter, JSON, etc.)
|
|
161
|
+
report.py # CLI text report renderer
|
|
162
|
+
server.py # HTTP server + web dashboard
|
|
163
|
+
web/index.html # Single-file web dashboard (Tailwind + vanilla JS)
|
|
164
|
+
export.py # Project config export
|
|
165
|
+
diff.py # Scan snapshot comparison
|
|
166
|
+
clean.py # Cleanup stale data
|
|
167
|
+
style.py # Shared ANSI color helpers
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Adding a New Harness
|
|
171
|
+
|
|
172
|
+
1. Create `liteharness/harnesses/newtool.py`
|
|
173
|
+
2. Subclass `BaseHarness` and implement `detect()`, `scan()`, `health_checks()`
|
|
174
|
+
3. Decorate with `@register_harness`
|
|
175
|
+
4. Add the module name to `_ensure_harnesses_loaded()` in `harnesses/__init__.py`
|
|
176
|
+
|
|
177
|
+
## Design Principles
|
|
178
|
+
|
|
179
|
+
- **Zero mandatory dependencies** — stdlib only for core scanner and CLI
|
|
180
|
+
- **Local-first** — web server binds to `127.0.0.1` only
|
|
181
|
+
- **Privacy-safe** — never reads conversation content from session files
|
|
182
|
+
- **Non-destructive** — never modifies user files unless in explicit `clean` mode
|
|
183
|
+
- **Self-contained harnesses** — each harness module is independent
|
|
184
|
+
|
|
185
|
+
## Development
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# Run all tests
|
|
189
|
+
python3 -m unittest discover tests/ -v
|
|
190
|
+
|
|
191
|
+
# Run a specific test file
|
|
192
|
+
python3 -m unittest tests.test_windsurf_harness -v
|
|
193
|
+
|
|
194
|
+
# Run as module
|
|
195
|
+
python3 -m liteharness version
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## License
|
|
199
|
+
|
|
200
|
+
MIT
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# LiteHarness
|
|
2
|
+
|
|
3
|
+
[](https://pypi.org/project/liteharness/)
|
|
4
|
+
[](https://pypi.org/project/liteharness/)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
|
|
7
|
+
**Multi-harness AI coding tool config inspector.**
|
|
8
|
+
|
|
9
|
+
Scan, visualize, and audit every AI coding assistant installed on your machine — from one place.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Supported Tools
|
|
14
|
+
|
|
15
|
+
| Tool | Harness | Config Paths | Instruction File |
|
|
16
|
+
|------|---------|-------------|-----------------|
|
|
17
|
+
| **Claude Code** | `claude_code` | `~/.claude/`, `.claude/` | `CLAUDE.md` |
|
|
18
|
+
| **Cursor** | `cursor` | `~/.cursor/`, `.cursor/` | `.cursorrules`, `.cursor/rules/*.md` |
|
|
19
|
+
| **Codex CLI** | `codex` | `~/.codex/` | `AGENTS.md`, `codex.json` |
|
|
20
|
+
| **Windsurf** | `windsurf` | `~/.windsurf/`, `.windsurf/` | `.windsurfrules`, `.windsurf/rules/*.md` |
|
|
21
|
+
| **GitHub Copilot** | `copilot` | `~/.config/github-copilot/`, `.github/` | `.github/copilot-instructions.md` |
|
|
22
|
+
|
|
23
|
+
Each tool has its own **harness** — a self-contained module that knows how to detect the tool, discover its config files, parse them, and run health checks.
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# Install from PyPI
|
|
29
|
+
pip install liteharness
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Or install from source in development mode:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
git clone https://github.com/boricles/claude-lens.git
|
|
36
|
+
cd claude-lens
|
|
37
|
+
pip install -e .
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Usage
|
|
41
|
+
|
|
42
|
+
### CLI Report
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Scan all detected AI tools and print a report
|
|
46
|
+
liteharness report
|
|
47
|
+
|
|
48
|
+
# Scan a specific harness only
|
|
49
|
+
liteharness report --harness claude_code
|
|
50
|
+
|
|
51
|
+
# List all supported harnesses and detection status
|
|
52
|
+
liteharness harnesses
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### JSON Output
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Full JSON scan data
|
|
59
|
+
liteharness scan
|
|
60
|
+
|
|
61
|
+
# Filter to one harness
|
|
62
|
+
liteharness scan --harness cursor
|
|
63
|
+
|
|
64
|
+
# Pretty-printed
|
|
65
|
+
liteharness scan | python3 -m json.tool
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Web Dashboard
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Launch interactive browser UI on localhost:1834
|
|
72
|
+
liteharness web
|
|
73
|
+
|
|
74
|
+
# Custom port
|
|
75
|
+
liteharness web --port 9000
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Other Commands
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Compare two scan snapshots
|
|
82
|
+
liteharness diff snapshot-a.json snapshot-b.json
|
|
83
|
+
|
|
84
|
+
# Export a project's config as a portable bundle
|
|
85
|
+
liteharness export myproject
|
|
86
|
+
|
|
87
|
+
# Clean up stale sessions and orphaned data (interactive)
|
|
88
|
+
liteharness clean
|
|
89
|
+
|
|
90
|
+
# Print version
|
|
91
|
+
liteharness version
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The legacy `claude-lens` command is still available as an alias.
|
|
95
|
+
|
|
96
|
+
## What It Detects
|
|
97
|
+
|
|
98
|
+
For each tool, LiteHarness discovers:
|
|
99
|
+
|
|
100
|
+
- **Global settings** — permissions, preferences, API config
|
|
101
|
+
- **Instruction files** — system prompts and rules (CLAUDE.md, .cursorrules, etc.)
|
|
102
|
+
- **Rules/agents** — custom agent definitions, rule files
|
|
103
|
+
- **Sessions** — session metadata (count, size, age — never reads content)
|
|
104
|
+
- **Plugins/extensions** — installed plugins with capabilities
|
|
105
|
+
- **Memory** — memory files and index integrity
|
|
106
|
+
- **Health issues** — orphaned state, stale sessions, missing instructions, config drift
|
|
107
|
+
|
|
108
|
+
## Health Checks
|
|
109
|
+
|
|
110
|
+
Each harness runs its own health checks:
|
|
111
|
+
|
|
112
|
+
| Check | Harnesses | Severity |
|
|
113
|
+
|-------|-----------|----------|
|
|
114
|
+
| Missing instruction file | All | info |
|
|
115
|
+
| Orphaned project state | Claude Code | warning |
|
|
116
|
+
| Stale sessions (>30 days) | Claude Code | info |
|
|
117
|
+
| Memory index drift | Claude Code | warning |
|
|
118
|
+
| Disk usage >100-200 MB | Claude Code, Cursor, Windsurf | warning |
|
|
119
|
+
| Outdated config (>180 days) | Copilot | info |
|
|
120
|
+
|
|
121
|
+
## Architecture
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
liteharness/
|
|
125
|
+
harnesses/
|
|
126
|
+
__init__.py # BaseHarness ABC, schema dataclasses, registry
|
|
127
|
+
claude_code.py # Claude Code harness
|
|
128
|
+
cursor.py # Cursor harness
|
|
129
|
+
codex.py # Codex CLI harness
|
|
130
|
+
windsurf.py # Windsurf harness
|
|
131
|
+
copilot.py # GitHub Copilot harness
|
|
132
|
+
scanner.py # Orchestrator — runs all harnesses, merges results
|
|
133
|
+
parser.py # Shared parsers (frontmatter, JSON, etc.)
|
|
134
|
+
report.py # CLI text report renderer
|
|
135
|
+
server.py # HTTP server + web dashboard
|
|
136
|
+
web/index.html # Single-file web dashboard (Tailwind + vanilla JS)
|
|
137
|
+
export.py # Project config export
|
|
138
|
+
diff.py # Scan snapshot comparison
|
|
139
|
+
clean.py # Cleanup stale data
|
|
140
|
+
style.py # Shared ANSI color helpers
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Adding a New Harness
|
|
144
|
+
|
|
145
|
+
1. Create `liteharness/harnesses/newtool.py`
|
|
146
|
+
2. Subclass `BaseHarness` and implement `detect()`, `scan()`, `health_checks()`
|
|
147
|
+
3. Decorate with `@register_harness`
|
|
148
|
+
4. Add the module name to `_ensure_harnesses_loaded()` in `harnesses/__init__.py`
|
|
149
|
+
|
|
150
|
+
## Design Principles
|
|
151
|
+
|
|
152
|
+
- **Zero mandatory dependencies** — stdlib only for core scanner and CLI
|
|
153
|
+
- **Local-first** — web server binds to `127.0.0.1` only
|
|
154
|
+
- **Privacy-safe** — never reads conversation content from session files
|
|
155
|
+
- **Non-destructive** — never modifies user files unless in explicit `clean` mode
|
|
156
|
+
- **Self-contained harnesses** — each harness module is independent
|
|
157
|
+
|
|
158
|
+
## Development
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Run all tests
|
|
162
|
+
python3 -m unittest discover tests/ -v
|
|
163
|
+
|
|
164
|
+
# Run a specific test file
|
|
165
|
+
python3 -m unittest tests.test_windsurf_harness -v
|
|
166
|
+
|
|
167
|
+
# Run as module
|
|
168
|
+
python3 -m liteharness version
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## License
|
|
172
|
+
|
|
173
|
+
MIT
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ai-dev-harness
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Multi-harness AI coding tool config inspector — scan, visualize, and audit AI assistant ecosystems.
|
|
5
|
+
Author: Boris Villazon-Terrazas
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/boricles/claude-lens
|
|
8
|
+
Project-URL: Repository, https://github.com/boricles/claude-lens
|
|
9
|
+
Project-URL: Bug Tracker, https://github.com/boricles/claude-lens/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/boricles/claude-lens/blob/main/CHANGELOG.md
|
|
11
|
+
Keywords: liteharness,claude-code,cursor,codex,copilot,windsurf,devtools,observability
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Topic :: Software Development :: Quality Assurance
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Provides-Extra: color
|
|
25
|
+
Requires-Dist: rich; extra == "color"
|
|
26
|
+
Dynamic: license-file
|
|
27
|
+
|
|
28
|
+
# LiteHarness
|
|
29
|
+
|
|
30
|
+
[](https://pypi.org/project/liteharness/)
|
|
31
|
+
[](https://pypi.org/project/liteharness/)
|
|
32
|
+
[](https://opensource.org/licenses/MIT)
|
|
33
|
+
|
|
34
|
+
**Multi-harness AI coding tool config inspector.**
|
|
35
|
+
|
|
36
|
+
Scan, visualize, and audit every AI coding assistant installed on your machine — from one place.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Supported Tools
|
|
41
|
+
|
|
42
|
+
| Tool | Harness | Config Paths | Instruction File |
|
|
43
|
+
|------|---------|-------------|-----------------|
|
|
44
|
+
| **Claude Code** | `claude_code` | `~/.claude/`, `.claude/` | `CLAUDE.md` |
|
|
45
|
+
| **Cursor** | `cursor` | `~/.cursor/`, `.cursor/` | `.cursorrules`, `.cursor/rules/*.md` |
|
|
46
|
+
| **Codex CLI** | `codex` | `~/.codex/` | `AGENTS.md`, `codex.json` |
|
|
47
|
+
| **Windsurf** | `windsurf` | `~/.windsurf/`, `.windsurf/` | `.windsurfrules`, `.windsurf/rules/*.md` |
|
|
48
|
+
| **GitHub Copilot** | `copilot` | `~/.config/github-copilot/`, `.github/` | `.github/copilot-instructions.md` |
|
|
49
|
+
|
|
50
|
+
Each tool has its own **harness** — a self-contained module that knows how to detect the tool, discover its config files, parse them, and run health checks.
|
|
51
|
+
|
|
52
|
+
## Installation
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# Install from PyPI
|
|
56
|
+
pip install liteharness
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Or install from source in development mode:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
git clone https://github.com/boricles/claude-lens.git
|
|
63
|
+
cd claude-lens
|
|
64
|
+
pip install -e .
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Usage
|
|
68
|
+
|
|
69
|
+
### CLI Report
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Scan all detected AI tools and print a report
|
|
73
|
+
liteharness report
|
|
74
|
+
|
|
75
|
+
# Scan a specific harness only
|
|
76
|
+
liteharness report --harness claude_code
|
|
77
|
+
|
|
78
|
+
# List all supported harnesses and detection status
|
|
79
|
+
liteharness harnesses
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### JSON Output
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Full JSON scan data
|
|
86
|
+
liteharness scan
|
|
87
|
+
|
|
88
|
+
# Filter to one harness
|
|
89
|
+
liteharness scan --harness cursor
|
|
90
|
+
|
|
91
|
+
# Pretty-printed
|
|
92
|
+
liteharness scan | python3 -m json.tool
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Web Dashboard
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Launch interactive browser UI on localhost:1834
|
|
99
|
+
liteharness web
|
|
100
|
+
|
|
101
|
+
# Custom port
|
|
102
|
+
liteharness web --port 9000
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Other Commands
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# Compare two scan snapshots
|
|
109
|
+
liteharness diff snapshot-a.json snapshot-b.json
|
|
110
|
+
|
|
111
|
+
# Export a project's config as a portable bundle
|
|
112
|
+
liteharness export myproject
|
|
113
|
+
|
|
114
|
+
# Clean up stale sessions and orphaned data (interactive)
|
|
115
|
+
liteharness clean
|
|
116
|
+
|
|
117
|
+
# Print version
|
|
118
|
+
liteharness version
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
The legacy `claude-lens` command is still available as an alias.
|
|
122
|
+
|
|
123
|
+
## What It Detects
|
|
124
|
+
|
|
125
|
+
For each tool, LiteHarness discovers:
|
|
126
|
+
|
|
127
|
+
- **Global settings** — permissions, preferences, API config
|
|
128
|
+
- **Instruction files** — system prompts and rules (CLAUDE.md, .cursorrules, etc.)
|
|
129
|
+
- **Rules/agents** — custom agent definitions, rule files
|
|
130
|
+
- **Sessions** — session metadata (count, size, age — never reads content)
|
|
131
|
+
- **Plugins/extensions** — installed plugins with capabilities
|
|
132
|
+
- **Memory** — memory files and index integrity
|
|
133
|
+
- **Health issues** — orphaned state, stale sessions, missing instructions, config drift
|
|
134
|
+
|
|
135
|
+
## Health Checks
|
|
136
|
+
|
|
137
|
+
Each harness runs its own health checks:
|
|
138
|
+
|
|
139
|
+
| Check | Harnesses | Severity |
|
|
140
|
+
|-------|-----------|----------|
|
|
141
|
+
| Missing instruction file | All | info |
|
|
142
|
+
| Orphaned project state | Claude Code | warning |
|
|
143
|
+
| Stale sessions (>30 days) | Claude Code | info |
|
|
144
|
+
| Memory index drift | Claude Code | warning |
|
|
145
|
+
| Disk usage >100-200 MB | Claude Code, Cursor, Windsurf | warning |
|
|
146
|
+
| Outdated config (>180 days) | Copilot | info |
|
|
147
|
+
|
|
148
|
+
## Architecture
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
liteharness/
|
|
152
|
+
harnesses/
|
|
153
|
+
__init__.py # BaseHarness ABC, schema dataclasses, registry
|
|
154
|
+
claude_code.py # Claude Code harness
|
|
155
|
+
cursor.py # Cursor harness
|
|
156
|
+
codex.py # Codex CLI harness
|
|
157
|
+
windsurf.py # Windsurf harness
|
|
158
|
+
copilot.py # GitHub Copilot harness
|
|
159
|
+
scanner.py # Orchestrator — runs all harnesses, merges results
|
|
160
|
+
parser.py # Shared parsers (frontmatter, JSON, etc.)
|
|
161
|
+
report.py # CLI text report renderer
|
|
162
|
+
server.py # HTTP server + web dashboard
|
|
163
|
+
web/index.html # Single-file web dashboard (Tailwind + vanilla JS)
|
|
164
|
+
export.py # Project config export
|
|
165
|
+
diff.py # Scan snapshot comparison
|
|
166
|
+
clean.py # Cleanup stale data
|
|
167
|
+
style.py # Shared ANSI color helpers
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Adding a New Harness
|
|
171
|
+
|
|
172
|
+
1. Create `liteharness/harnesses/newtool.py`
|
|
173
|
+
2. Subclass `BaseHarness` and implement `detect()`, `scan()`, `health_checks()`
|
|
174
|
+
3. Decorate with `@register_harness`
|
|
175
|
+
4. Add the module name to `_ensure_harnesses_loaded()` in `harnesses/__init__.py`
|
|
176
|
+
|
|
177
|
+
## Design Principles
|
|
178
|
+
|
|
179
|
+
- **Zero mandatory dependencies** — stdlib only for core scanner and CLI
|
|
180
|
+
- **Local-first** — web server binds to `127.0.0.1` only
|
|
181
|
+
- **Privacy-safe** — never reads conversation content from session files
|
|
182
|
+
- **Non-destructive** — never modifies user files unless in explicit `clean` mode
|
|
183
|
+
- **Self-contained harnesses** — each harness module is independent
|
|
184
|
+
|
|
185
|
+
## Development
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# Run all tests
|
|
189
|
+
python3 -m unittest discover tests/ -v
|
|
190
|
+
|
|
191
|
+
# Run a specific test file
|
|
192
|
+
python3 -m unittest tests.test_windsurf_harness -v
|
|
193
|
+
|
|
194
|
+
# Run as module
|
|
195
|
+
python3 -m liteharness version
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## License
|
|
199
|
+
|
|
200
|
+
MIT
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
LICENSE
|
|
2
|
+
README.md
|
|
3
|
+
pyproject.toml
|
|
4
|
+
ai_dev_harness.egg-info/PKG-INFO
|
|
5
|
+
ai_dev_harness.egg-info/SOURCES.txt
|
|
6
|
+
ai_dev_harness.egg-info/dependency_links.txt
|
|
7
|
+
ai_dev_harness.egg-info/entry_points.txt
|
|
8
|
+
ai_dev_harness.egg-info/requires.txt
|
|
9
|
+
ai_dev_harness.egg-info/top_level.txt
|
|
10
|
+
liteharness/__init__.py
|
|
11
|
+
liteharness/__main__.py
|
|
12
|
+
liteharness/clean.py
|
|
13
|
+
liteharness/diff.py
|
|
14
|
+
liteharness/export.py
|
|
15
|
+
liteharness/health.py
|
|
16
|
+
liteharness/parser.py
|
|
17
|
+
liteharness/report.py
|
|
18
|
+
liteharness/scanner.py
|
|
19
|
+
liteharness/server.py
|
|
20
|
+
liteharness/style.py
|
|
21
|
+
liteharness/harnesses/__init__.py
|
|
22
|
+
liteharness/harnesses/claude_code.py
|
|
23
|
+
liteharness/harnesses/codex.py
|
|
24
|
+
liteharness/harnesses/copilot.py
|
|
25
|
+
liteharness/harnesses/cursor.py
|
|
26
|
+
liteharness/harnesses/windsurf.py
|
|
27
|
+
liteharness/web/index.html
|
|
28
|
+
tests/test_claude_code_harness.py
|
|
29
|
+
tests/test_copilot_harness.py
|
|
30
|
+
tests/test_harness_schema.py
|
|
31
|
+
tests/test_harnesses.py
|
|
32
|
+
tests/test_parser.py
|
|
33
|
+
tests/test_scanner.py
|
|
34
|
+
tests/test_windsurf_harness.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
liteharness
|