aiset-cli 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.
Files changed (47) hide show
  1. aiset_cli-0.1.0/LICENSE +21 -0
  2. aiset_cli-0.1.0/PKG-INFO +301 -0
  3. aiset_cli-0.1.0/README.md +271 -0
  4. aiset_cli-0.1.0/pyproject.toml +59 -0
  5. aiset_cli-0.1.0/setup.cfg +4 -0
  6. aiset_cli-0.1.0/src/aiset/__init__.py +3 -0
  7. aiset_cli-0.1.0/src/aiset/archmap.py +916 -0
  8. aiset_cli-0.1.0/src/aiset/brain.py +490 -0
  9. aiset_cli-0.1.0/src/aiset/brief_index.py +78 -0
  10. aiset_cli-0.1.0/src/aiset/core.py +1003 -0
  11. aiset_cli-0.1.0/src/aiset/init_team.py +439 -0
  12. aiset_cli-0.1.0/src/aiset/registry.py +122 -0
  13. aiset_cli-0.1.0/src/aiset/research.py +1340 -0
  14. aiset_cli-0.1.0/src/aiset/roster.json +95 -0
  15. aiset_cli-0.1.0/src/aiset/server.py +275 -0
  16. aiset_cli-0.1.0/src/aiset/settings.py +154 -0
  17. aiset_cli-0.1.0/src/aiset/static/aiset-icon.png +0 -0
  18. aiset_cli-0.1.0/src/aiset/static/apple-touch-icon.png +0 -0
  19. aiset_cli-0.1.0/src/aiset/static/architecture.html +405 -0
  20. aiset_cli-0.1.0/src/aiset/static/brain.html +787 -0
  21. aiset_cli-0.1.0/src/aiset/static/favicon-16.png +0 -0
  22. aiset_cli-0.1.0/src/aiset/static/favicon-32.png +0 -0
  23. aiset_cli-0.1.0/src/aiset/static/favicon-48.png +0 -0
  24. aiset_cli-0.1.0/src/aiset/static/favicon.ico +0 -0
  25. aiset_cli-0.1.0/src/aiset/static/icon-192.png +0 -0
  26. aiset_cli-0.1.0/src/aiset/static/icon-512.png +0 -0
  27. aiset_cli-0.1.0/src/aiset/static/index.html +1298 -0
  28. aiset_cli-0.1.0/src/aiset/static/settings.html +384 -0
  29. aiset_cli-0.1.0/src/aiset/static/site.webmanifest +12 -0
  30. aiset_cli-0.1.0/src/aiset/sync_names.py +88 -0
  31. aiset_cli-0.1.0/src/aiset/teammap.py +897 -0
  32. aiset_cli-0.1.0/src/aiset/teammap_ts.js +135 -0
  33. aiset_cli-0.1.0/src/aiset/templates/engineer.md +75 -0
  34. aiset_cli-0.1.0/src/aiset/templates/integration-checker.md +31 -0
  35. aiset_cli-0.1.0/src/aiset/templates/pm.md +81 -0
  36. aiset_cli-0.1.0/src/aiset/templates/tester.md +26 -0
  37. aiset_cli-0.1.0/src/aiset/workspace.py +108 -0
  38. aiset_cli-0.1.0/src/aiset_cli.egg-info/PKG-INFO +301 -0
  39. aiset_cli-0.1.0/src/aiset_cli.egg-info/SOURCES.txt +45 -0
  40. aiset_cli-0.1.0/src/aiset_cli.egg-info/dependency_links.txt +1 -0
  41. aiset_cli-0.1.0/src/aiset_cli.egg-info/entry_points.txt +4 -0
  42. aiset_cli-0.1.0/src/aiset_cli.egg-info/top_level.txt +1 -0
  43. aiset_cli-0.1.0/tests/test_file_imports.py +53 -0
  44. aiset_cli-0.1.0/tests/test_registry.py +103 -0
  45. aiset_cli-0.1.0/tests/test_research.py +326 -0
  46. aiset_cli-0.1.0/tests/test_settings.py +134 -0
  47. aiset_cli-0.1.0/tests/test_task_ids.py +42 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jamshid(Timur) Sadik
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,301 @@
1
+ Metadata-Version: 2.4
2
+ Name: aiset-cli
3
+ Version: 0.1.0
4
+ Summary: Turn your repositories into an AI engineering team, and watch it work.
5
+ Author: Jamshid Sadik
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/JamshidS/aiset
8
+ Project-URL: Documentation, https://github.com/JamshidS/aiset/blob/master/docs/USER-GUIDE.md
9
+ Project-URL: Issues, https://github.com/JamshidS/aiset/issues
10
+ Project-URL: Changelog, https://github.com/JamshidS/aiset/blob/master/CHANGELOG.md
11
+ Keywords: claude-code,ai-agents,multi-agent,developer-tools,code-intelligence,dashboard
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Environment :: Web Environment
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Topic :: Software Development
25
+ Classifier: Topic :: Software Development :: Quality Assurance
26
+ Requires-Python: >=3.9
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Dynamic: license-file
30
+
31
+ <div align="center">
32
+
33
+ <img src="src/aiset/static/aiset-icon.png" alt="aiset logo" width="72" height="72">
34
+
35
+ # aiset
36
+
37
+ ### The shared brain for your AI coding team
38
+
39
+ Turn your repositories into a team of Claude Code agents that remember what they learn,<br>
40
+ work in parallel, and show you every step, live.
41
+
42
+ <br>
43
+
44
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-3776AB?style=flat-square&logo=python&logoColor=white)](pyproject.toml)
45
+ [![Zero dependencies](https://img.shields.io/badge/dependencies-zero-22c55e?style=flat-square)](pyproject.toml)
46
+ [![Built for Claude Code](https://img.shields.io/badge/built%20for-Claude%20Code-D97757?style=flat-square)](https://claude.com/claude-code)
47
+ [![Windows · macOS · Linux](https://img.shields.io/badge/platform-Windows%20·%20macOS%20·%20Linux-6b7280?style=flat-square)](docs/USER-GUIDE.md)
48
+ [![MIT License](https://img.shields.io/badge/license-MIT-8b5cf6?style=flat-square)](LICENSE)
49
+
50
+ **[Quick start](#quick-start)** &nbsp;·&nbsp; **[Tour](#a-real-run-start-to-finish)** &nbsp;·&nbsp; **[Commands](#commands)** &nbsp;·&nbsp; **[User guide](docs/USER-GUIDE.md)** &nbsp;·&nbsp; **[Research](docs/RESEARCH-TOOLS.md)**
51
+
52
+ <br>
53
+
54
+ <img src="docs/media/office.gif" alt="The aiset Office: a PM and six engineer agents working on a real project, with live status, assignments, models and token costs" width="100%">
55
+
56
+ <sub>The Office, live: the PM waits on two engineers fixing bugs in parallel. Real recording, sped up 1.5×.</sub>
57
+
58
+ </div>
59
+
60
+ <br>
61
+
62
+ ## Quick start
63
+
64
+ ```sh
65
+ pipx install aiset-cli # or: pip install aiset-cli
66
+ aiset-init ~/work/shop --team shop # scan the repos, generate the team
67
+ shop-pm # talk to your PM, from any folder
68
+ ```
69
+
70
+ Then open the office in a second terminal with `aiset` and visit **http://127.0.0.1:8765**.
71
+
72
+ Give the PM its first task:
73
+
74
+ > *"Build the knowledge briefs. Document the architecture, conventions, test commands and known pitfalls for each repository."*
75
+
76
+ <sub>Needs Python 3.9+, Git and [Claude Code](https://claude.com/claude-code). TypeScript indexing also uses Node.js. Works with a folder of repositories or a monorepo. The PyPI package is `aiset-cli` (`aiset` on PyPI is an unrelated project). To hack on aiset itself, clone it and `pip install -e .`.</sub>
77
+
78
+ <br>
79
+
80
+ ## Why aiset
81
+
82
+ Coding agents start every session from zero. They re-read the same files, rediscover the same conventions and repeat the same investigations, and you can't see what they're doing until they're done.
83
+
84
+ <table>
85
+ <tr>
86
+ <td width="33%" valign="top">
87
+
88
+ #### Remember
89
+
90
+ Conventions, decisions and lessons live in **workspace memory**: knowledge briefs, field notes and task episodes that survive a restart and are plain files you can read and edit.
91
+
92
+ </td>
93
+ <td width="33%" valign="top">
94
+
95
+ #### Coordinate
96
+
97
+ `aiset-init` generates a **PM, one engineer per repo or stack, QA and an integration checker**. The PM plans, assigns, and verifies work before reporting back.
98
+
99
+ </td>
100
+ <td width="33%" valign="top">
101
+
102
+ #### See
103
+
104
+ A local dashboard shows **who is doing what, what they read, what it costs**, and how your services connect, read straight from the code.
105
+
106
+ </td>
107
+ </tr>
108
+ </table>
109
+
110
+ <br>
111
+
112
+ ## A real run, start to finish
113
+
114
+ Every frame below comes from **[Beanboard](https://github.com/JamshidS/beanboard)**, a small demo app: three FastAPI services (catalog on PostgreSQL, reviews on MongoDB, insights calling both) and a React UI on Docker Compose. One `aiset-init` turned it into a team of seven. Nothing is staged, and you can [run the same demo yourself](https://github.com/JamshidS/beanboard#try-aiset-on-it) in about five minutes.
115
+
116
+ ### 1 &nbsp;Ask in plain words
117
+
118
+ You describe a feature. The PM pins down scope before anyone writes code.
119
+
120
+ <img src="docs/media/ask-pm.gif" alt="The PM asks which sort options the review list should have before planning the feature" width="100%">
121
+
122
+ ### 2 &nbsp;The team works in parallel
123
+
124
+ The PM writes a task board and hands each engineer an assignment with the contract to follow. You watch status, model and cost per task, then open a task to see every file each agent read and edited.
125
+
126
+ <img src="docs/media/office-board.gif" alt="The Office task board: two engineers on Sonnet analysing bugs in parallel, then the task detail listing every file read and edited per repository" width="100%">
127
+
128
+ ### 3 &nbsp;Follow every read and edit
129
+
130
+ The **Brain** draws live trails from each agent to the briefs, files and services it touches.
131
+
132
+ <img src="docs/media/brain.gif" alt="The Brain: live trails from each agent to the files and briefs it is reading and writing" width="100%">
133
+
134
+ ### 4 &nbsp;Get a verified report
135
+
136
+ Findings come back ranked, with file and line references, proposed fixes and effort. The full handoffs stay in the workspace.
137
+
138
+ <img src="docs/media/pm-report.png" alt="The PM's ranked findings table with severity, cause, proposed fix and effort" width="100%">
139
+
140
+ ### 5 &nbsp;The knowledge compounds
141
+
142
+ After two tasks the Brain connects 7 agents, 4 repositories, 5 briefs with 56 sections and 2 episodes to the code's 13 endpoints, 8 models and 10 frontend API calls. The next task starts there, not from zero.
143
+
144
+ <img src="docs/media/brain-map.png" alt="The Brain after two tasks: agents, briefs, episodes, endpoints, models and API calls in one graph" width="100%">
145
+
146
+ ### 6 &nbsp;Architecture, read from the code
147
+
148
+ Services, databases and the calls between them, each backed by a file and line. Solid links are exact; dashed links are inferred from names.
149
+
150
+ <img src="docs/media/architecture.png" alt="The Architecture view: a React UI calling three FastAPI services backed by PostgreSQL and MongoDB" width="100%">
151
+
152
+ <br>
153
+
154
+ ## What's inside
155
+
156
+ | | |
157
+ |---|---|
158
+ | **Office** | Live isometric or classic view of the team: assignments, task boards, activity feed, models, tokens and estimated cost per agent. |
159
+ | **Brain** | One graph of agents, briefs, sections, episodes, files, endpoints, models and API calls. Follow an agent, search anything, focus on a node. |
160
+ | **Architecture** | Static map of frontends, APIs, workers and infrastructure (PostgreSQL, MongoDB, Redis, RabbitMQ, Kafka, Keycloak and more), with evidence for every link. Exports Mermaid. |
161
+ | **Settings** | Names, roles, colours, duties and the **model per agent**: put routine work on Sonnet or Haiku, keep Opus where it matters. |
162
+ | **teammap** | Code-aware research for agents and people: endpoint → handler → frontend callers, change impact, relevant context for a task, test-failure triage. |
163
+ | **Launchers** | `aiset-init` writes a `<team>-pm` command, so the PM is one word away from any folder. |
164
+
165
+ <br>
166
+
167
+ ## Commands
168
+
169
+ | Command | What it does |
170
+ |---|---|
171
+ | `aiset-init <folder> [--team NAME]` | Detect stacks, generate the roster, agents and brief stubs in `<folder>/.claude/`. Safe to re-run: keeps your names, adds new repos. |
172
+ | `<team>-pm` | Start the PM in its workspace from anywhere. Extra arguments go to Claude Code, e.g. `shop-pm --model sonnet`. |
173
+ | `aiset [--workspace FOLDER\|TEAM]` | Open the office. Without `--workspace`: the workspace you're in, else the team you set up most recently. |
174
+ | `teammap relevant "<task>"` | Files, symbols, endpoints, brief sections and past episodes to read first. |
175
+ | `teammap impact <path\|symbol\|Model> [METHOD]` | What a change can reach: consumers, models, importers, tests. Exact vs inferred. |
176
+ | `teammap failures <log>` | Failed tests, messages and in-repo frames from a saved test run, grouped. |
177
+ | `teammap endpoint` · `model` · `arch` · `symbol` | Direct lookups. `teammap --help` lists them all. |
178
+
179
+ <details>
180
+ <summary><b>Example: what does changing an endpoint break?</b></summary>
181
+ <br>
182
+
183
+ ```console
184
+ $ teammap impact "/api/catalog/beans/{bean_id}" PATCH
185
+ impact · endpoint PATCH /api/catalog/beans/{bean_id}
186
+ PATCH /api/catalog/beans/{bean_id} is handled by update_bean() in catalog-service/app/routes.py:37
187
+ 4 consumer(s) found (1 exact), 2 model(s), 2 test file(s)
188
+ models (2)
189
+ = catalog-service/app/schemas.py:18 BeanUpdate 6 fields
190
+ request parameter payload: BeanUpdate
191
+ = catalog-service/app/schemas.py:27 Bean 8 fields
192
+ response_model Bean
193
+ consumers (4)
194
+ = ui/src/api.ts:50 updateBean PATCH /api/catalog/beans/{}
195
+ HTTP call to the same URL
196
+ ~ ui/src/pages/BeanDetailPage.tsx:40 BeanDetailPage.savePrice
197
+ calls updateBean() (matched by name)
198
+ …
199
+ ```
200
+
201
+ `=` is exact (from the code's structure), `~` is inferred (by name, URL or text). Add `--json` for structured output.
202
+
203
+ </details>
204
+
205
+ <br>
206
+
207
+ ## How it works
208
+
209
+ ```text
210
+ your-project/
211
+ ├── catalog-service/ · reviews-service/ · ui/ … your code, untouched
212
+ └── .claude/
213
+ ├── agents/ PM, engineers, QA, integration checker (Claude Code loads these)
214
+ └── team/
215
+ ├── roster.json who owns which repo, and on which model
216
+ ├── knowledge/ briefs: architecture, conventions, pitfalls, dated field notes
217
+ ├── tasks/ boards, contracts, handoffs
218
+ ├── episodes/ what each finished task decided and learned
219
+ └── graph/ code index, Brain graph, stored research results
220
+ ```
221
+
222
+ Engineers read their brief's index and only the sections they need. When a task closes, the PM writes an episode and carries the lessons into the owner's brief, which is how the next task starts ahead.
223
+
224
+ Everything is plain Markdown and JSON in your workspace. In a monorepo, `.claude/` is kept out of git by default; pass `--share` to version it with the team.
225
+
226
+ > [!NOTE]
227
+ > **Memory is a workflow, not perfect recall.** Agents are instructed to save and retrieve knowledge, but not every chat message becomes a rule. Review the briefs now and then, as you would any documentation.
228
+
229
+ > [!NOTE]
230
+ > **On token savings:** the research tools return far less text than the greps and reads they replace ([measurements](docs/RESEARCH-TOOLS.md)), but that's output size, not proven end-to-end token savings. Real usage depends on the task.
231
+
232
+ <br>
233
+
234
+ ## Privacy
235
+
236
+ - **Local only.** The dashboard binds to `127.0.0.1` and checks `Host` and `Origin` headers. It's not built for public hosting.
237
+ - **No new data flows.** aiset reads the transcripts Claude Code already writes. Model calls go through your own Claude Code setup, nothing else.
238
+ - **No secrets read.** The architecture scan reads env var *names* only, and never opens `.env` files or `secrets/` folders.
239
+ - **Zero runtime dependencies.** Python standard library only.
240
+
241
+ <br>
242
+
243
+ ## FAQ
244
+
245
+ <details>
246
+ <summary><b><code>aiset-init</code> is "not recognized" after installing</b></summary>
247
+ <br>
248
+
249
+ pip put the commands in a folder that isn't on your PATH. That's common with the Microsoft Store Python, which uses `%LOCALAPPDATA%\Packages\PythonSoftwareFoundation.Python.3.x_…\LocalCache\local-packages\Python3xx\Scripts`. Add the folder pip printed in its warning to PATH, then open a new terminal. In the meantime, `python -m aiset.init_team` and `python -m aiset.server` work too.
250
+
251
+ </details>
252
+
253
+ <details>
254
+ <summary><b>PowerShell says "running scripts is disabled"</b></summary>
255
+ <br>
256
+
257
+ That's PowerShell's execution policy blocking npm's `claude.ps1`. The `<team>-pm` launcher is a `.cmd`, so it isn't affected. For plain `claude`, run `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` once, or call `claude.cmd`.
258
+
259
+ </details>
260
+
261
+ <details>
262
+ <summary><b>Which models does the team use?</b></summary>
263
+ <br>
264
+
265
+ Whatever you choose per agent in **Settings**; it's written into each agent file. Without a choice, agents use your Claude Code default.
266
+
267
+ </details>
268
+
269
+ <details>
270
+ <summary><b>Big workspaces and monorepos?</b></summary>
271
+ <br>
272
+
273
+ A folder of repos gets one engineer per repo. A monorepo gets one per service folder. Above 12 units, or with `--group stack`, you get one engineer per stack (Java, Node.js, Python, frontend) instead.
274
+
275
+ </details>
276
+
277
+ <details>
278
+ <summary><b>The Brain or Office looks empty</b></summary>
279
+ <br>
280
+
281
+ The office shows one workspace at a time and prints which one at startup. Run `aiset --workspace <team>` to pick a team explicitly.
282
+
283
+ </details>
284
+
285
+ <br>
286
+
287
+ ## Contributing
288
+
289
+ Issues and pull requests are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) for setup and guidelines (`make check` runs everything), and report vulnerabilities privately as described in [SECURITY.md](SECURITY.md).
290
+
291
+ More docs: [User guide](docs/USER-GUIDE.md) · [Feature inventory](docs/FEATURES.md) · [Research tools](docs/RESEARCH-TOOLS.md) · [Brand assets](docs/branding/preview.html)
292
+
293
+ <br>
294
+
295
+ <div align="center">
296
+ <img src="src/aiset/static/aiset-icon.png" alt="" width="28" height="28">
297
+ <br>
298
+ <sub>If aiset saves you time, a ⭐ helps other developers find it.</sub>
299
+ <br>
300
+ <sub>MIT licensed · Built for <a href="https://claude.com/claude-code">Claude Code</a></sub>
301
+ </div>
@@ -0,0 +1,271 @@
1
+ <div align="center">
2
+
3
+ <img src="src/aiset/static/aiset-icon.png" alt="aiset logo" width="72" height="72">
4
+
5
+ # aiset
6
+
7
+ ### The shared brain for your AI coding team
8
+
9
+ Turn your repositories into a team of Claude Code agents that remember what they learn,<br>
10
+ work in parallel, and show you every step, live.
11
+
12
+ <br>
13
+
14
+ [![Python 3.9+](https://img.shields.io/badge/python-3.9%2B-3776AB?style=flat-square&logo=python&logoColor=white)](pyproject.toml)
15
+ [![Zero dependencies](https://img.shields.io/badge/dependencies-zero-22c55e?style=flat-square)](pyproject.toml)
16
+ [![Built for Claude Code](https://img.shields.io/badge/built%20for-Claude%20Code-D97757?style=flat-square)](https://claude.com/claude-code)
17
+ [![Windows · macOS · Linux](https://img.shields.io/badge/platform-Windows%20·%20macOS%20·%20Linux-6b7280?style=flat-square)](docs/USER-GUIDE.md)
18
+ [![MIT License](https://img.shields.io/badge/license-MIT-8b5cf6?style=flat-square)](LICENSE)
19
+
20
+ **[Quick start](#quick-start)** &nbsp;·&nbsp; **[Tour](#a-real-run-start-to-finish)** &nbsp;·&nbsp; **[Commands](#commands)** &nbsp;·&nbsp; **[User guide](docs/USER-GUIDE.md)** &nbsp;·&nbsp; **[Research](docs/RESEARCH-TOOLS.md)**
21
+
22
+ <br>
23
+
24
+ <img src="docs/media/office.gif" alt="The aiset Office: a PM and six engineer agents working on a real project, with live status, assignments, models and token costs" width="100%">
25
+
26
+ <sub>The Office, live: the PM waits on two engineers fixing bugs in parallel. Real recording, sped up 1.5×.</sub>
27
+
28
+ </div>
29
+
30
+ <br>
31
+
32
+ ## Quick start
33
+
34
+ ```sh
35
+ pipx install aiset-cli # or: pip install aiset-cli
36
+ aiset-init ~/work/shop --team shop # scan the repos, generate the team
37
+ shop-pm # talk to your PM, from any folder
38
+ ```
39
+
40
+ Then open the office in a second terminal with `aiset` and visit **http://127.0.0.1:8765**.
41
+
42
+ Give the PM its first task:
43
+
44
+ > *"Build the knowledge briefs. Document the architecture, conventions, test commands and known pitfalls for each repository."*
45
+
46
+ <sub>Needs Python 3.9+, Git and [Claude Code](https://claude.com/claude-code). TypeScript indexing also uses Node.js. Works with a folder of repositories or a monorepo. The PyPI package is `aiset-cli` (`aiset` on PyPI is an unrelated project). To hack on aiset itself, clone it and `pip install -e .`.</sub>
47
+
48
+ <br>
49
+
50
+ ## Why aiset
51
+
52
+ Coding agents start every session from zero. They re-read the same files, rediscover the same conventions and repeat the same investigations, and you can't see what they're doing until they're done.
53
+
54
+ <table>
55
+ <tr>
56
+ <td width="33%" valign="top">
57
+
58
+ #### Remember
59
+
60
+ Conventions, decisions and lessons live in **workspace memory**: knowledge briefs, field notes and task episodes that survive a restart and are plain files you can read and edit.
61
+
62
+ </td>
63
+ <td width="33%" valign="top">
64
+
65
+ #### Coordinate
66
+
67
+ `aiset-init` generates a **PM, one engineer per repo or stack, QA and an integration checker**. The PM plans, assigns, and verifies work before reporting back.
68
+
69
+ </td>
70
+ <td width="33%" valign="top">
71
+
72
+ #### See
73
+
74
+ A local dashboard shows **who is doing what, what they read, what it costs**, and how your services connect, read straight from the code.
75
+
76
+ </td>
77
+ </tr>
78
+ </table>
79
+
80
+ <br>
81
+
82
+ ## A real run, start to finish
83
+
84
+ Every frame below comes from **[Beanboard](https://github.com/JamshidS/beanboard)**, a small demo app: three FastAPI services (catalog on PostgreSQL, reviews on MongoDB, insights calling both) and a React UI on Docker Compose. One `aiset-init` turned it into a team of seven. Nothing is staged, and you can [run the same demo yourself](https://github.com/JamshidS/beanboard#try-aiset-on-it) in about five minutes.
85
+
86
+ ### 1 &nbsp;Ask in plain words
87
+
88
+ You describe a feature. The PM pins down scope before anyone writes code.
89
+
90
+ <img src="docs/media/ask-pm.gif" alt="The PM asks which sort options the review list should have before planning the feature" width="100%">
91
+
92
+ ### 2 &nbsp;The team works in parallel
93
+
94
+ The PM writes a task board and hands each engineer an assignment with the contract to follow. You watch status, model and cost per task, then open a task to see every file each agent read and edited.
95
+
96
+ <img src="docs/media/office-board.gif" alt="The Office task board: two engineers on Sonnet analysing bugs in parallel, then the task detail listing every file read and edited per repository" width="100%">
97
+
98
+ ### 3 &nbsp;Follow every read and edit
99
+
100
+ The **Brain** draws live trails from each agent to the briefs, files and services it touches.
101
+
102
+ <img src="docs/media/brain.gif" alt="The Brain: live trails from each agent to the files and briefs it is reading and writing" width="100%">
103
+
104
+ ### 4 &nbsp;Get a verified report
105
+
106
+ Findings come back ranked, with file and line references, proposed fixes and effort. The full handoffs stay in the workspace.
107
+
108
+ <img src="docs/media/pm-report.png" alt="The PM's ranked findings table with severity, cause, proposed fix and effort" width="100%">
109
+
110
+ ### 5 &nbsp;The knowledge compounds
111
+
112
+ After two tasks the Brain connects 7 agents, 4 repositories, 5 briefs with 56 sections and 2 episodes to the code's 13 endpoints, 8 models and 10 frontend API calls. The next task starts there, not from zero.
113
+
114
+ <img src="docs/media/brain-map.png" alt="The Brain after two tasks: agents, briefs, episodes, endpoints, models and API calls in one graph" width="100%">
115
+
116
+ ### 6 &nbsp;Architecture, read from the code
117
+
118
+ Services, databases and the calls between them, each backed by a file and line. Solid links are exact; dashed links are inferred from names.
119
+
120
+ <img src="docs/media/architecture.png" alt="The Architecture view: a React UI calling three FastAPI services backed by PostgreSQL and MongoDB" width="100%">
121
+
122
+ <br>
123
+
124
+ ## What's inside
125
+
126
+ | | |
127
+ |---|---|
128
+ | **Office** | Live isometric or classic view of the team: assignments, task boards, activity feed, models, tokens and estimated cost per agent. |
129
+ | **Brain** | One graph of agents, briefs, sections, episodes, files, endpoints, models and API calls. Follow an agent, search anything, focus on a node. |
130
+ | **Architecture** | Static map of frontends, APIs, workers and infrastructure (PostgreSQL, MongoDB, Redis, RabbitMQ, Kafka, Keycloak and more), with evidence for every link. Exports Mermaid. |
131
+ | **Settings** | Names, roles, colours, duties and the **model per agent**: put routine work on Sonnet or Haiku, keep Opus where it matters. |
132
+ | **teammap** | Code-aware research for agents and people: endpoint → handler → frontend callers, change impact, relevant context for a task, test-failure triage. |
133
+ | **Launchers** | `aiset-init` writes a `<team>-pm` command, so the PM is one word away from any folder. |
134
+
135
+ <br>
136
+
137
+ ## Commands
138
+
139
+ | Command | What it does |
140
+ |---|---|
141
+ | `aiset-init <folder> [--team NAME]` | Detect stacks, generate the roster, agents and brief stubs in `<folder>/.claude/`. Safe to re-run: keeps your names, adds new repos. |
142
+ | `<team>-pm` | Start the PM in its workspace from anywhere. Extra arguments go to Claude Code, e.g. `shop-pm --model sonnet`. |
143
+ | `aiset [--workspace FOLDER\|TEAM]` | Open the office. Without `--workspace`: the workspace you're in, else the team you set up most recently. |
144
+ | `teammap relevant "<task>"` | Files, symbols, endpoints, brief sections and past episodes to read first. |
145
+ | `teammap impact <path\|symbol\|Model> [METHOD]` | What a change can reach: consumers, models, importers, tests. Exact vs inferred. |
146
+ | `teammap failures <log>` | Failed tests, messages and in-repo frames from a saved test run, grouped. |
147
+ | `teammap endpoint` · `model` · `arch` · `symbol` | Direct lookups. `teammap --help` lists them all. |
148
+
149
+ <details>
150
+ <summary><b>Example: what does changing an endpoint break?</b></summary>
151
+ <br>
152
+
153
+ ```console
154
+ $ teammap impact "/api/catalog/beans/{bean_id}" PATCH
155
+ impact · endpoint PATCH /api/catalog/beans/{bean_id}
156
+ PATCH /api/catalog/beans/{bean_id} is handled by update_bean() in catalog-service/app/routes.py:37
157
+ 4 consumer(s) found (1 exact), 2 model(s), 2 test file(s)
158
+ models (2)
159
+ = catalog-service/app/schemas.py:18 BeanUpdate 6 fields
160
+ request parameter payload: BeanUpdate
161
+ = catalog-service/app/schemas.py:27 Bean 8 fields
162
+ response_model Bean
163
+ consumers (4)
164
+ = ui/src/api.ts:50 updateBean PATCH /api/catalog/beans/{}
165
+ HTTP call to the same URL
166
+ ~ ui/src/pages/BeanDetailPage.tsx:40 BeanDetailPage.savePrice
167
+ calls updateBean() (matched by name)
168
+ …
169
+ ```
170
+
171
+ `=` is exact (from the code's structure), `~` is inferred (by name, URL or text). Add `--json` for structured output.
172
+
173
+ </details>
174
+
175
+ <br>
176
+
177
+ ## How it works
178
+
179
+ ```text
180
+ your-project/
181
+ ├── catalog-service/ · reviews-service/ · ui/ … your code, untouched
182
+ └── .claude/
183
+ ├── agents/ PM, engineers, QA, integration checker (Claude Code loads these)
184
+ └── team/
185
+ ├── roster.json who owns which repo, and on which model
186
+ ├── knowledge/ briefs: architecture, conventions, pitfalls, dated field notes
187
+ ├── tasks/ boards, contracts, handoffs
188
+ ├── episodes/ what each finished task decided and learned
189
+ └── graph/ code index, Brain graph, stored research results
190
+ ```
191
+
192
+ Engineers read their brief's index and only the sections they need. When a task closes, the PM writes an episode and carries the lessons into the owner's brief, which is how the next task starts ahead.
193
+
194
+ Everything is plain Markdown and JSON in your workspace. In a monorepo, `.claude/` is kept out of git by default; pass `--share` to version it with the team.
195
+
196
+ > [!NOTE]
197
+ > **Memory is a workflow, not perfect recall.** Agents are instructed to save and retrieve knowledge, but not every chat message becomes a rule. Review the briefs now and then, as you would any documentation.
198
+
199
+ > [!NOTE]
200
+ > **On token savings:** the research tools return far less text than the greps and reads they replace ([measurements](docs/RESEARCH-TOOLS.md)), but that's output size, not proven end-to-end token savings. Real usage depends on the task.
201
+
202
+ <br>
203
+
204
+ ## Privacy
205
+
206
+ - **Local only.** The dashboard binds to `127.0.0.1` and checks `Host` and `Origin` headers. It's not built for public hosting.
207
+ - **No new data flows.** aiset reads the transcripts Claude Code already writes. Model calls go through your own Claude Code setup, nothing else.
208
+ - **No secrets read.** The architecture scan reads env var *names* only, and never opens `.env` files or `secrets/` folders.
209
+ - **Zero runtime dependencies.** Python standard library only.
210
+
211
+ <br>
212
+
213
+ ## FAQ
214
+
215
+ <details>
216
+ <summary><b><code>aiset-init</code> is "not recognized" after installing</b></summary>
217
+ <br>
218
+
219
+ pip put the commands in a folder that isn't on your PATH. That's common with the Microsoft Store Python, which uses `%LOCALAPPDATA%\Packages\PythonSoftwareFoundation.Python.3.x_…\LocalCache\local-packages\Python3xx\Scripts`. Add the folder pip printed in its warning to PATH, then open a new terminal. In the meantime, `python -m aiset.init_team` and `python -m aiset.server` work too.
220
+
221
+ </details>
222
+
223
+ <details>
224
+ <summary><b>PowerShell says "running scripts is disabled"</b></summary>
225
+ <br>
226
+
227
+ That's PowerShell's execution policy blocking npm's `claude.ps1`. The `<team>-pm` launcher is a `.cmd`, so it isn't affected. For plain `claude`, run `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` once, or call `claude.cmd`.
228
+
229
+ </details>
230
+
231
+ <details>
232
+ <summary><b>Which models does the team use?</b></summary>
233
+ <br>
234
+
235
+ Whatever you choose per agent in **Settings**; it's written into each agent file. Without a choice, agents use your Claude Code default.
236
+
237
+ </details>
238
+
239
+ <details>
240
+ <summary><b>Big workspaces and monorepos?</b></summary>
241
+ <br>
242
+
243
+ A folder of repos gets one engineer per repo. A monorepo gets one per service folder. Above 12 units, or with `--group stack`, you get one engineer per stack (Java, Node.js, Python, frontend) instead.
244
+
245
+ </details>
246
+
247
+ <details>
248
+ <summary><b>The Brain or Office looks empty</b></summary>
249
+ <br>
250
+
251
+ The office shows one workspace at a time and prints which one at startup. Run `aiset --workspace <team>` to pick a team explicitly.
252
+
253
+ </details>
254
+
255
+ <br>
256
+
257
+ ## Contributing
258
+
259
+ Issues and pull requests are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) for setup and guidelines (`make check` runs everything), and report vulnerabilities privately as described in [SECURITY.md](SECURITY.md).
260
+
261
+ More docs: [User guide](docs/USER-GUIDE.md) · [Feature inventory](docs/FEATURES.md) · [Research tools](docs/RESEARCH-TOOLS.md) · [Brand assets](docs/branding/preview.html)
262
+
263
+ <br>
264
+
265
+ <div align="center">
266
+ <img src="src/aiset/static/aiset-icon.png" alt="" width="28" height="28">
267
+ <br>
268
+ <sub>If aiset saves you time, a ⭐ helps other developers find it.</sub>
269
+ <br>
270
+ <sub>MIT licensed · Built for <a href="https://claude.com/claude-code">Claude Code</a></sub>
271
+ </div>
@@ -0,0 +1,59 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "aiset-cli"
7
+ version = "0.1.0"
8
+ description = "Turn your repositories into an AI engineering team, and watch it work."
9
+ readme = "README.md"
10
+ license = "MIT"
11
+ license-files = ["LICENSE"]
12
+ authors = [{ name = "Jamshid Sadik" }]
13
+ requires-python = ">=3.9"
14
+ dependencies = []
15
+ keywords = ["claude-code", "ai-agents", "multi-agent", "developer-tools", "code-intelligence", "dashboard"]
16
+ classifiers = [
17
+ "Development Status :: 3 - Alpha",
18
+ "Environment :: Console",
19
+ "Environment :: Web Environment",
20
+ "Intended Audience :: Developers",
21
+ "Operating System :: OS Independent",
22
+ "Programming Language :: Python :: 3",
23
+ "Programming Language :: Python :: 3 :: Only",
24
+ "Programming Language :: Python :: 3.9",
25
+ "Programming Language :: Python :: 3.10",
26
+ "Programming Language :: Python :: 3.11",
27
+ "Programming Language :: Python :: 3.12",
28
+ "Programming Language :: Python :: 3.13",
29
+ "Topic :: Software Development",
30
+ "Topic :: Software Development :: Quality Assurance",
31
+ ]
32
+
33
+ [project.urls]
34
+ Homepage = "https://github.com/JamshidS/aiset"
35
+ Documentation = "https://github.com/JamshidS/aiset/blob/master/docs/USER-GUIDE.md"
36
+ Issues = "https://github.com/JamshidS/aiset/issues"
37
+ Changelog = "https://github.com/JamshidS/aiset/blob/master/CHANGELOG.md"
38
+
39
+ [project.scripts]
40
+ aiset = "aiset.server:main"
41
+ teammap = "aiset.teammap:cli"
42
+ aiset-init = "aiset.init_team:main"
43
+
44
+ [tool.setuptools.packages.find]
45
+ where = ["src"]
46
+
47
+ [tool.setuptools.package-data]
48
+ aiset = ["roster.json", "teammap_ts.js", "static/*", "templates/*"]
49
+
50
+ [tool.ruff]
51
+ target-version = "py39"
52
+
53
+ [tool.ruff.lint]
54
+ # short names (l, i) and named lambdas are part of the house style
55
+ ignore = ["E731", "E741"]
56
+
57
+ [tool.pytest.ini_options]
58
+ testpaths = ["tests"]
59
+ pythonpath = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,3 @@
1
+ """aiset: a live office view of a Claude Code agent team, plus the tools that set the team up."""
2
+
3
+ __version__ = "0.1.0"