parallel-agents-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.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Alisher (Viltrumlik)
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,171 @@
1
+ Metadata-Version: 2.4
2
+ Name: parallel-agents-cli
3
+ Version: 0.1.0
4
+ Summary: Run Claude Code, Codex, Cursor and Gemini CLI on the same repo without them overwriting each other.
5
+ Author-email: Alisher Muhammadaliyev <viltrumlik@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/Viltrumlik/parallel-agents
8
+ Project-URL: Source, https://github.com/Viltrumlik/parallel-agents
9
+ Project-URL: Issues, https://github.com/Viltrumlik/parallel-agents/issues
10
+ Project-URL: Changelog, https://github.com/Viltrumlik/parallel-agents/blob/main/CHANGELOG.md
11
+ Keywords: claude-code,codex,cursor,gemini-cli,multi-agent,coordination,file-locking,agent-skills
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Operating System :: OS Independent
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Topic :: Software Development :: Version Control :: Git
19
+ Requires-Python: >=3.9
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Dynamic: license-file
23
+
24
+ <p align="center">
25
+ <img src="https://raw.githubusercontent.com/Viltrumlik/parallel-agents/main/.claude-plugin/icon.png" width="112" alt="parallel-agents icon">
26
+ </p>
27
+
28
+ <h1 align="center">parallel-agents</h1>
29
+
30
+ <p align="center">
31
+ <b>Run Claude Code, Codex, Cursor and Gemini CLI on the same repo without them overwriting each other.</b>
32
+ </p>
33
+
34
+ <p align="center">
35
+ <a href="https://github.com/Viltrumlik/parallel-agents/actions/workflows/ci.yml"><img src="https://github.com/Viltrumlik/parallel-agents/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
36
+ <img src="https://img.shields.io/badge/Agent%20Skills-SKILL.md-7c3aed" alt="Agent Skills">
37
+ <img src="https://img.shields.io/badge/dependencies-0-brightgreen" alt="Zero dependencies">
38
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT"></a>
39
+ </p>
40
+
41
+ <p align="center">
42
+ <img src="https://raw.githubusercontent.com/Viltrumlik/parallel-agents/main/demo/demo.gif" alt="Two agents share a repo: the second agent is blocked from a folder the first one claimed, works on tests instead, and takes the file once the first agent releases it" width="900">
43
+ </p>
44
+
45
+ Running several coding agents at once is the new normal. In one checkout, though, they collide: two agents edit the same file, one runs migrations while the other changes models, both start a dev server on port 3000. **parallel-agents** gives them a tiny shared protocol: **claim before you edit, see who holds what, leave a note, release.**
46
+
47
+ It's an [Agent Skill](https://agentskills.io), a `SKILL.md` plus one zero-dependency Python script, so it works in every agent that reads skills. In Claude Code a hook enforces it, so an agent that never read the skill still can't overwrite another one's work.
48
+
49
+ ## How it works
50
+
51
+ ```bash
52
+ pa status # who is doing what
53
+ pa claim src/billing/ --as claude-7f2c --why "add refund endpoint" # before the first edit
54
+ pa claim @migrations --as claude-7f2c --why "add refunds table" # shared operations too
55
+ pa note "refunds done, tests still missing" --as claude-7f2c # handoff for the next agent
56
+ pa release --as claude-7f2c # done
57
+ ```
58
+
59
+ If another agent already holds something, `pa claim` refuses (exit code `3`), says who holds it and why, and the agent works on something else instead.
60
+
61
+ - **Enforced in Claude Code.** A `PreToolUse` hook claims each path before the edit and refuses the edit outright if another agent holds it. Everywhere else the skill carries the protocol.
62
+ - **Atomic.** Checking and claiming happen under one file lock. If 16 agents claim the same file at the same moment, exactly one wins (there's a test for that).
63
+ - **Never stuck.** Claims expire after 30 minutes without activity, so a crashed agent can't block the repo. Agents refresh them by re-claiming before each batch of edits.
64
+ - **Conservative.** Any doubt counts as overlap: paths compare case-insensitively, symlinks are resolved, a folder that doesn't exist yet still covers what will be created in it, and `src/**/*.py` collides with `src/app.py`.
65
+ - **Invisible to git.** State lives in the repo's git directory (`.git/parallel-agents/`). Nothing to commit, nothing to `.gitignore`. Outside git it falls back to a `.parallel-agents/` folder.
66
+ - **Worktree-aware.** All worktrees of a repo share the state. Editing the same file in another worktree isn't blocked, but you get a warning about the merge conflict ahead.
67
+ - **Files, folders, globs and resources.** `src/api/views.py`, `src/api/`, `src/**/*.py`, plus named resources like `@migrations`, `@deps`, `@port:3000` and `@db`.
68
+
69
+ ## Install
70
+
71
+ **Requirements:** Python 3.9+ on macOS, Linux or Windows. Nothing to `pip install`. Git is optional: inside a repo the state goes into the git directory, outside one into `.parallel-agents/`.
72
+
73
+ **Any agent** (Claude Code, Codex, Cursor, Gemini CLI, Copilot…) with the [skills CLI](https://skills.sh):
74
+
75
+ ```bash
76
+ npx skills add Viltrumlik/parallel-agents
77
+ ```
78
+
79
+ **Claude Code** plugin marketplace:
80
+
81
+ ```
82
+ /plugin marketplace add Viltrumlik/parallel-agents
83
+ /plugin install parallel-agents@parallel-agents
84
+ ```
85
+
86
+ Installed as a plugin, the protocol is **enforced**: a `PreToolUse` hook runs before every `Edit`, `Write`, `MultiEdit` and `NotebookEdit`, claims the path for this session, and denies the edit — naming who holds it and why — if another agent got there first. Each Claude Code session is its own agent, named after its session id, so two sessions on one repo coordinate with no setup.
87
+
88
+ | Variable | Default | What it does |
89
+ |---|---|---|
90
+ | `PA_AS` | `claude-<session id>` | this agent's name on the board |
91
+ | `PA_HOOK_TTL` | `15m` | how long an auto-claim lives without a further edit |
92
+ | `PA_HOOK_MODE` | `claim` | `check` blocks without taking the path |
93
+ | `PA_HOOK_DISABLE` | unset | set to anything to turn the hook off |
94
+
95
+ If anything goes wrong — a payload it doesn't understand, a missing `pa.py`, a board that won't answer — the edit goes through. A coordination helper is never the reason a session stops working.
96
+
97
+ **Manually:** copy [`skills/parallel-agents`](skills/parallel-agents) into your agent's skills folder: `~/.claude/skills/`, `~/.codex/skills/`, `~/.gemini/skills/`, or `.agents/skills/` inside a project.
98
+
99
+ **Just the `pa` command**, to drive the board yourself from a terminal:
100
+
101
+ ```bash
102
+ pipx install parallel-agents-cli
103
+ ```
104
+
105
+ ### Make it always-on
106
+
107
+ Skills load when an agent thinks they're relevant. To make sure every agent follows the protocol from its first edit, paste [`snippets/AGENTS.md`](snippets/AGENTS.md) into your repo's `AGENTS.md` (Codex, Cursor, Gemini) or `CLAUDE.md`.
108
+
109
+ ## Commands
110
+
111
+ | Command | What it does |
112
+ |---|---|
113
+ | `pa status [--json]` | Who holds what right now |
114
+ | `pa claim PATH... --as NAME --why TEXT [--ttl 30m]` | Claim before editing. All or nothing; exit `3` if blocked |
115
+ | `pa check PATH... [--as NAME]` | Exit `0` if free (or yours), `3` if taken |
116
+ | `pa release [PATH...] --as NAME` | Release some paths, or all of yours |
117
+ | `pa renew --as NAME [--ttl 1h]` | Keep claims alive; exit `3` if nothing is held anymore |
118
+ | `pa note TEXT --as NAME [--paths ...]` | Leave a handoff note |
119
+ | `pa log [-n 10] [--json]` | Read recent notes |
120
+ | `pa gc` | Delete expired claims |
121
+ | `pa evict AGENT` | Human override: drop an agent's claims |
122
+
123
+ Every command accepts `--json`, so agents can parse the output. You can set `PA_AS` instead of passing `--as`.
124
+
125
+ Exit codes: `0` ok · `1` error (disk, lock) · `2` wrong command, nothing was claimed · `3` blocked by another agent, or nothing held.
126
+
127
+ ## FAQ
128
+
129
+ **Why not just use git worktrees?** Use both. Worktrees isolate files, but the agents still share your database, ports and lockfile, and you meet their overlapping edits later as merge conflicts. parallel-agents coordinates the shared resources and warns about overlaps across worktrees while there's still time to split the work.
130
+
131
+ **Is it enforced?** In Claude Code, yes. Install it as a plugin and a `PreToolUse` hook runs before every edit: it claims the path for this session, and refuses the edit if another agent holds it. An agent that never loaded the skill still cannot overwrite another one's work. Everywhere else it's an advisory protocol that agents follow through the skill — Cursor and Codex hooks are next.
132
+
133
+ **Does it work across machines?** No, it coordinates agents that share one filesystem. That covers the common setup of several agents on your laptop or one dev box.
134
+
135
+ **Will it slow my agents down?** Each command is a single short Python process, and the skill tells agents to claim once per batch of edits, not once per edit. In Claude Code the skill adds about 130 tokens to a session and about 1,200 when it is used (`claude plugin details`).
136
+
137
+ ## Roadmap
138
+
139
+ - [x] Hooks that block edits to files another agent holds — Claude Code done, Cursor and Codex next
140
+ - [ ] `pa watch`: a live terminal view of who holds what
141
+ - [ ] Editor status-bar integrations
142
+ - [ ] Claims that follow git branches
143
+
144
+ Ideas and PRs are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md).
145
+
146
+ ## Development
147
+
148
+ ```bash
149
+ python3 -m unittest discover -s tests -v # the full test suite, including the 16-agent race
150
+ bash demo/two-agents.sh # two agents sharing a throwaway repo, step by step
151
+ ```
152
+
153
+ CI runs the tests on Ubuntu, macOS and Windows with Python 3.9, 3.10 and 3.13.
154
+
155
+ ```
156
+ skills/parallel-agents/
157
+ ├── SKILL.md # the protocol agents read
158
+ └── scripts/
159
+ ├── pa.py # the `pa` CLI: one file, zero dependencies
160
+ └── pa_hook.py # Claude Code PreToolUse hook
161
+ pyproject.toml # the PyPI package: pipx install parallel-agents-cli
162
+ hooks/hooks.json # registers the hook when installed as a plugin
163
+ .claude-plugin/ # plugin and marketplace manifests
164
+ snippets/AGENTS.md # always-on instructions for AGENTS.md / CLAUDE.md
165
+ tests/ # end-to-end tests against real git repos
166
+ demo/ # demo script and GIF generator
167
+ ```
168
+
169
+ ## License
170
+
171
+ [MIT](LICENSE) © Alisher ([@Viltrumlik](https://github.com/Viltrumlik))
@@ -0,0 +1,148 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/Viltrumlik/parallel-agents/main/.claude-plugin/icon.png" width="112" alt="parallel-agents icon">
3
+ </p>
4
+
5
+ <h1 align="center">parallel-agents</h1>
6
+
7
+ <p align="center">
8
+ <b>Run Claude Code, Codex, Cursor and Gemini CLI on the same repo without them overwriting each other.</b>
9
+ </p>
10
+
11
+ <p align="center">
12
+ <a href="https://github.com/Viltrumlik/parallel-agents/actions/workflows/ci.yml"><img src="https://github.com/Viltrumlik/parallel-agents/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
13
+ <img src="https://img.shields.io/badge/Agent%20Skills-SKILL.md-7c3aed" alt="Agent Skills">
14
+ <img src="https://img.shields.io/badge/dependencies-0-brightgreen" alt="Zero dependencies">
15
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT"></a>
16
+ </p>
17
+
18
+ <p align="center">
19
+ <img src="https://raw.githubusercontent.com/Viltrumlik/parallel-agents/main/demo/demo.gif" alt="Two agents share a repo: the second agent is blocked from a folder the first one claimed, works on tests instead, and takes the file once the first agent releases it" width="900">
20
+ </p>
21
+
22
+ Running several coding agents at once is the new normal. In one checkout, though, they collide: two agents edit the same file, one runs migrations while the other changes models, both start a dev server on port 3000. **parallel-agents** gives them a tiny shared protocol: **claim before you edit, see who holds what, leave a note, release.**
23
+
24
+ It's an [Agent Skill](https://agentskills.io), a `SKILL.md` plus one zero-dependency Python script, so it works in every agent that reads skills. In Claude Code a hook enforces it, so an agent that never read the skill still can't overwrite another one's work.
25
+
26
+ ## How it works
27
+
28
+ ```bash
29
+ pa status # who is doing what
30
+ pa claim src/billing/ --as claude-7f2c --why "add refund endpoint" # before the first edit
31
+ pa claim @migrations --as claude-7f2c --why "add refunds table" # shared operations too
32
+ pa note "refunds done, tests still missing" --as claude-7f2c # handoff for the next agent
33
+ pa release --as claude-7f2c # done
34
+ ```
35
+
36
+ If another agent already holds something, `pa claim` refuses (exit code `3`), says who holds it and why, and the agent works on something else instead.
37
+
38
+ - **Enforced in Claude Code.** A `PreToolUse` hook claims each path before the edit and refuses the edit outright if another agent holds it. Everywhere else the skill carries the protocol.
39
+ - **Atomic.** Checking and claiming happen under one file lock. If 16 agents claim the same file at the same moment, exactly one wins (there's a test for that).
40
+ - **Never stuck.** Claims expire after 30 minutes without activity, so a crashed agent can't block the repo. Agents refresh them by re-claiming before each batch of edits.
41
+ - **Conservative.** Any doubt counts as overlap: paths compare case-insensitively, symlinks are resolved, a folder that doesn't exist yet still covers what will be created in it, and `src/**/*.py` collides with `src/app.py`.
42
+ - **Invisible to git.** State lives in the repo's git directory (`.git/parallel-agents/`). Nothing to commit, nothing to `.gitignore`. Outside git it falls back to a `.parallel-agents/` folder.
43
+ - **Worktree-aware.** All worktrees of a repo share the state. Editing the same file in another worktree isn't blocked, but you get a warning about the merge conflict ahead.
44
+ - **Files, folders, globs and resources.** `src/api/views.py`, `src/api/`, `src/**/*.py`, plus named resources like `@migrations`, `@deps`, `@port:3000` and `@db`.
45
+
46
+ ## Install
47
+
48
+ **Requirements:** Python 3.9+ on macOS, Linux or Windows. Nothing to `pip install`. Git is optional: inside a repo the state goes into the git directory, outside one into `.parallel-agents/`.
49
+
50
+ **Any agent** (Claude Code, Codex, Cursor, Gemini CLI, Copilot…) with the [skills CLI](https://skills.sh):
51
+
52
+ ```bash
53
+ npx skills add Viltrumlik/parallel-agents
54
+ ```
55
+
56
+ **Claude Code** plugin marketplace:
57
+
58
+ ```
59
+ /plugin marketplace add Viltrumlik/parallel-agents
60
+ /plugin install parallel-agents@parallel-agents
61
+ ```
62
+
63
+ Installed as a plugin, the protocol is **enforced**: a `PreToolUse` hook runs before every `Edit`, `Write`, `MultiEdit` and `NotebookEdit`, claims the path for this session, and denies the edit — naming who holds it and why — if another agent got there first. Each Claude Code session is its own agent, named after its session id, so two sessions on one repo coordinate with no setup.
64
+
65
+ | Variable | Default | What it does |
66
+ |---|---|---|
67
+ | `PA_AS` | `claude-<session id>` | this agent's name on the board |
68
+ | `PA_HOOK_TTL` | `15m` | how long an auto-claim lives without a further edit |
69
+ | `PA_HOOK_MODE` | `claim` | `check` blocks without taking the path |
70
+ | `PA_HOOK_DISABLE` | unset | set to anything to turn the hook off |
71
+
72
+ If anything goes wrong — a payload it doesn't understand, a missing `pa.py`, a board that won't answer — the edit goes through. A coordination helper is never the reason a session stops working.
73
+
74
+ **Manually:** copy [`skills/parallel-agents`](skills/parallel-agents) into your agent's skills folder: `~/.claude/skills/`, `~/.codex/skills/`, `~/.gemini/skills/`, or `.agents/skills/` inside a project.
75
+
76
+ **Just the `pa` command**, to drive the board yourself from a terminal:
77
+
78
+ ```bash
79
+ pipx install parallel-agents-cli
80
+ ```
81
+
82
+ ### Make it always-on
83
+
84
+ Skills load when an agent thinks they're relevant. To make sure every agent follows the protocol from its first edit, paste [`snippets/AGENTS.md`](snippets/AGENTS.md) into your repo's `AGENTS.md` (Codex, Cursor, Gemini) or `CLAUDE.md`.
85
+
86
+ ## Commands
87
+
88
+ | Command | What it does |
89
+ |---|---|
90
+ | `pa status [--json]` | Who holds what right now |
91
+ | `pa claim PATH... --as NAME --why TEXT [--ttl 30m]` | Claim before editing. All or nothing; exit `3` if blocked |
92
+ | `pa check PATH... [--as NAME]` | Exit `0` if free (or yours), `3` if taken |
93
+ | `pa release [PATH...] --as NAME` | Release some paths, or all of yours |
94
+ | `pa renew --as NAME [--ttl 1h]` | Keep claims alive; exit `3` if nothing is held anymore |
95
+ | `pa note TEXT --as NAME [--paths ...]` | Leave a handoff note |
96
+ | `pa log [-n 10] [--json]` | Read recent notes |
97
+ | `pa gc` | Delete expired claims |
98
+ | `pa evict AGENT` | Human override: drop an agent's claims |
99
+
100
+ Every command accepts `--json`, so agents can parse the output. You can set `PA_AS` instead of passing `--as`.
101
+
102
+ Exit codes: `0` ok · `1` error (disk, lock) · `2` wrong command, nothing was claimed · `3` blocked by another agent, or nothing held.
103
+
104
+ ## FAQ
105
+
106
+ **Why not just use git worktrees?** Use both. Worktrees isolate files, but the agents still share your database, ports and lockfile, and you meet their overlapping edits later as merge conflicts. parallel-agents coordinates the shared resources and warns about overlaps across worktrees while there's still time to split the work.
107
+
108
+ **Is it enforced?** In Claude Code, yes. Install it as a plugin and a `PreToolUse` hook runs before every edit: it claims the path for this session, and refuses the edit if another agent holds it. An agent that never loaded the skill still cannot overwrite another one's work. Everywhere else it's an advisory protocol that agents follow through the skill — Cursor and Codex hooks are next.
109
+
110
+ **Does it work across machines?** No, it coordinates agents that share one filesystem. That covers the common setup of several agents on your laptop or one dev box.
111
+
112
+ **Will it slow my agents down?** Each command is a single short Python process, and the skill tells agents to claim once per batch of edits, not once per edit. In Claude Code the skill adds about 130 tokens to a session and about 1,200 when it is used (`claude plugin details`).
113
+
114
+ ## Roadmap
115
+
116
+ - [x] Hooks that block edits to files another agent holds — Claude Code done, Cursor and Codex next
117
+ - [ ] `pa watch`: a live terminal view of who holds what
118
+ - [ ] Editor status-bar integrations
119
+ - [ ] Claims that follow git branches
120
+
121
+ Ideas and PRs are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md).
122
+
123
+ ## Development
124
+
125
+ ```bash
126
+ python3 -m unittest discover -s tests -v # the full test suite, including the 16-agent race
127
+ bash demo/two-agents.sh # two agents sharing a throwaway repo, step by step
128
+ ```
129
+
130
+ CI runs the tests on Ubuntu, macOS and Windows with Python 3.9, 3.10 and 3.13.
131
+
132
+ ```
133
+ skills/parallel-agents/
134
+ ├── SKILL.md # the protocol agents read
135
+ └── scripts/
136
+ ├── pa.py # the `pa` CLI: one file, zero dependencies
137
+ └── pa_hook.py # Claude Code PreToolUse hook
138
+ pyproject.toml # the PyPI package: pipx install parallel-agents-cli
139
+ hooks/hooks.json # registers the hook when installed as a plugin
140
+ .claude-plugin/ # plugin and marketplace manifests
141
+ snippets/AGENTS.md # always-on instructions for AGENTS.md / CLAUDE.md
142
+ tests/ # end-to-end tests against real git repos
143
+ demo/ # demo script and GIF generator
144
+ ```
145
+
146
+ ## License
147
+
148
+ [MIT](LICENSE) © Alisher ([@Viltrumlik](https://github.com/Viltrumlik))
@@ -0,0 +1,46 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "parallel-agents-cli"
7
+ version = "0.1.0"
8
+ description = "Run Claude Code, Codex, Cursor and Gemini CLI on the same repo without them overwriting each other."
9
+ readme = "README.md"
10
+ requires-python = ">=3.9"
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
13
+ authors = [{ name = "Alisher Muhammadaliyev", email = "viltrumlik@gmail.com" }]
14
+ keywords = [
15
+ "claude-code", "codex", "cursor", "gemini-cli",
16
+ "multi-agent", "coordination", "file-locking", "agent-skills",
17
+ ]
18
+ classifiers = [
19
+ "Development Status :: 4 - Beta",
20
+ "Environment :: Console",
21
+ "Intended Audience :: Developers",
22
+ "Operating System :: OS Independent",
23
+ "Programming Language :: Python :: 3",
24
+ "Programming Language :: Python :: 3 :: Only",
25
+ "Topic :: Software Development :: Version Control :: Git",
26
+ ]
27
+ # Ataylab bo'sh: pa.py hech narsaga bog'liq emas va shunday qolishi kerak.
28
+ dependencies = []
29
+
30
+ [project.urls]
31
+ Homepage = "https://github.com/Viltrumlik/parallel-agents"
32
+ Source = "https://github.com/Viltrumlik/parallel-agents"
33
+ Issues = "https://github.com/Viltrumlik/parallel-agents/issues"
34
+ Changelog = "https://github.com/Viltrumlik/parallel-agents/blob/main/CHANGELOG.md"
35
+
36
+ [project.scripts]
37
+ # main() exit kodini qaytaradi, console_scripts uni to'g'ridan-to'g'ri ishlatadi.
38
+ pa = "pa:main"
39
+
40
+ [tool.setuptools]
41
+ # Skill tuzilishi o'zgarmaydi -- skills CLI unga tayanadi. Paket shunchaki
42
+ # o'sha papkadan ikki modulni oladi.
43
+ py-modules = ["pa", "pa_hook"]
44
+
45
+ [tool.setuptools.package-dir]
46
+ "" = "skills/parallel-agents/scripts"
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+