agent-parley 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 (50) hide show
  1. agent_parley-0.1.0/.agents/plugins/marketplace.json +20 -0
  2. agent_parley-0.1.0/.claude-plugin/marketplace.json +16 -0
  3. agent_parley-0.1.0/.gitignore +8 -0
  4. agent_parley-0.1.0/CHANGELOG.md +28 -0
  5. agent_parley-0.1.0/CODE_OF_CONDUCT.md +18 -0
  6. agent_parley-0.1.0/CONTRIBUTING.md +128 -0
  7. agent_parley-0.1.0/LICENSE +21 -0
  8. agent_parley-0.1.0/Makefile +37 -0
  9. agent_parley-0.1.0/PKG-INFO +267 -0
  10. agent_parley-0.1.0/README.md +248 -0
  11. agent_parley-0.1.0/SECURITY.md +26 -0
  12. agent_parley-0.1.0/agent_parley/__init__.py +1 -0
  13. agent_parley-0.1.0/agent_parley/__main__.py +6 -0
  14. agent_parley-0.1.0/agent_parley/checkpoints.py +858 -0
  15. agent_parley-0.1.0/agent_parley/cli.py +1455 -0
  16. agent_parley-0.1.0/agent_parley/dashboard.py +375 -0
  17. agent_parley-0.1.0/agent_parley/issues.py +223 -0
  18. agent_parley-0.1.0/agent_parley/process.py +77 -0
  19. agent_parley-0.1.0/agent_parley/roster.py +448 -0
  20. agent_parley-0.1.0/agent_parley/server.py +360 -0
  21. agent_parley-0.1.0/agent_parley/state.py +69 -0
  22. agent_parley-0.1.0/agent_parley/store.py +644 -0
  23. agent_parley-0.1.0/docs/architecture.md +245 -0
  24. agent_parley-0.1.0/docs/assets/agent-parley.png +0 -0
  25. agent_parley-0.1.0/docs/assets/agent-parley.svg +23 -0
  26. agent_parley-0.1.0/docs/assets/screenshot-coordination.svg +26 -0
  27. agent_parley-0.1.0/docs/assets/screenshot-hooks.svg +45 -0
  28. agent_parley-0.1.0/docs/assets/screenshot-issues.svg +11 -0
  29. agent_parley-0.1.0/docs/assets/screenshot-status.svg +39 -0
  30. agent_parley-0.1.0/docs/assets/screenshot-top.svg +21 -0
  31. agent_parley-0.1.0/docs/catalog-submission.md +225 -0
  32. agent_parley-0.1.0/docs/operations.md +301 -0
  33. agent_parley-0.1.0/docs/release-overview.md +28 -0
  34. agent_parley-0.1.0/plugins/README.md +47 -0
  35. agent_parley-0.1.0/plugins/agent-parley/.claude-plugin/plugin.json +11 -0
  36. agent_parley-0.1.0/plugins/agent-parley/.codex-plugin/plugin.json +19 -0
  37. agent_parley-0.1.0/plugins/agent-parley/skills/coordinate/SKILL.md +70 -0
  38. agent_parley-0.1.0/pyproject.toml +70 -0
  39. agent_parley-0.1.0/scripts/__init__.py +1 -0
  40. agent_parley-0.1.0/scripts/benchmark.py +62 -0
  41. agent_parley-0.1.0/scripts/check_policy.py +147 -0
  42. agent_parley-0.1.0/scripts/check_pr_hygiene.py +136 -0
  43. agent_parley-0.1.0/scripts/release_artifacts.py +127 -0
  44. agent_parley-0.1.0/tests/conftest.py +50 -0
  45. agent_parley-0.1.0/tests/test_bridge.py +1564 -0
  46. agent_parley-0.1.0/tests/test_contribution_policy.py +31 -0
  47. agent_parley-0.1.0/tests/test_engine.py +491 -0
  48. agent_parley-0.1.0/tests/test_pr_hygiene.py +52 -0
  49. agent_parley-0.1.0/tests/test_release_artifacts.py +41 -0
  50. agent_parley-0.1.0/uv.lock +1169 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "agent-parley-local",
3
+ "interface": {
4
+ "displayName": "Agent Parley Local"
5
+ },
6
+ "plugins": [
7
+ {
8
+ "name": "agent-parley",
9
+ "source": {
10
+ "source": "local",
11
+ "path": "./plugins/agent-parley"
12
+ },
13
+ "policy": {
14
+ "installation": "AVAILABLE",
15
+ "authentication": "ON_INSTALL"
16
+ },
17
+ "category": "Productivity"
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "agent-parley-local",
3
+ "description": "Coordination plugins for running several coding agents side by side in separate Git worktrees.",
4
+ "owner": {
5
+ "name": "Suneel Kaushik S",
6
+ "email": "suneel944@gmail.com"
7
+ },
8
+ "plugins": [
9
+ {
10
+ "name": "agent-parley",
11
+ "source": "./plugins/agent-parley",
12
+ "description": "Shared issue ownership and handoffs across coding agents.",
13
+ "version": "0.1.0"
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,8 @@
1
+ .venv/
2
+ __pycache__/
3
+ .pytest_cache/
4
+ .ruff_cache/
5
+ *.egg-info/
6
+ dist/
7
+ graphify-out/
8
+ .mypy_cache/
@@ -0,0 +1,28 @@
1
+ # Changelog
2
+
3
+ ## [0.1.0](https://github.com/suneel944/agent-parley/compare/v0.0.1...v0.1.0) (2026-09-09)
4
+
5
+
6
+ ### ⚠ BREAKING CHANGES
7
+
8
+ * rename the project to agent-parley and restart at 0.0.1 ([#20](https://github.com/suneel944/agent-parley/issues/20))
9
+
10
+ ### Features
11
+
12
+ * complete the first release with issue dependencies and automated publishing ([#26](https://github.com/suneel944/agent-parley/issues/26)) ([9158d61](https://github.com/suneel944/agent-parley/commit/9158d61f1b8a269461744cb10b92b6b788233cfd))
13
+ * rename the project to agent-parley and restart at 0.0.1 ([#20](https://github.com/suneel944/agent-parley/issues/20)) ([8a7dcc0](https://github.com/suneel944/agent-parley/commit/8a7dcc08d387560bc23a5ebdb101275f99887c28))
14
+ * support any participant roster and record enforcement history ([#18](https://github.com/suneel944/agent-parley/issues/18)) ([fba4428](https://github.com/suneel944/agent-parley/commit/fba4428a7310f9c0d67bcfe8b90f54e5d8a66d11))
15
+
16
+
17
+ ### Bug fixes
18
+
19
+ * grant the release caller the identity permission it delegates ([#22](https://github.com/suneel944/agent-parley/issues/22)) ([8ea3e03](https://github.com/suneel944/agent-parley/commit/8ea3e030368bc777c1aac9ab78defea8b180d63f))
20
+
21
+ ## [0.0.1] - 2026-09-10
22
+
23
+ ### Added
24
+
25
+ - First release of Agent Parley: a coordination launcher that runs several
26
+ native coding-agent CLIs in separate Git worktrees under one Linux user, with
27
+ shared issue ownership, explicit handoffs, advisory file reservations, bounded
28
+ peer messaging, native lifecycle hooks and a live dashboard.
@@ -0,0 +1,18 @@
1
+ # Code of conduct
2
+
3
+ Treat contributors and users with respect. Critique code and ideas with concrete
4
+ evidence. Welcome questions and corrections, and give people room to learn.
5
+
6
+ Harassment, threats, discriminatory abuse, sexualized conduct, and publishing
7
+ someone's private information without consent are not acceptable. These rules
8
+ apply to this project's issues, pull requests, discussions, and other community
9
+ spaces, including conduct while representing the project elsewhere.
10
+
11
+ Report concerns privately to suneel944@gmail.com. Include links or relevant
12
+ context without republishing private information. The maintainer will review
13
+ reports discreetly, consider the impact and context, and may issue a warning,
14
+ remove content, restrict participation, or ban an account. Retaliation against
15
+ someone who reports a concern is not acceptable.
16
+
17
+ If you disagree with a moderation decision, request reconsideration privately
18
+ with any missing context. Maintainers are expected to follow these rules too.
@@ -0,0 +1,128 @@
1
+ # Contributing
2
+
3
+ ## Coding standard
4
+
5
+ Use the [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html)
6
+ as the Python review baseline. Automated checks cover a subset of that guide;
7
+ passing lint is not a claim of complete style or correctness compliance.
8
+
9
+ - Use four-space indentation, an 80-character target, descriptive snake_case
10
+ functions and variables, and CapWords classes. Let Ruff handle formatting.
11
+ - Document public modules, classes, and functions. Use Google-style `Args`,
12
+ `Returns`, `Yields`, and `Raises` sections where callers need the contract.
13
+ - Annotate production function parameters and return values. Prefer explicit
14
+ keyword parameters over unstructured option dictionaries.
15
+ - Group standard-library, third-party, and local imports. Use absolute package
16
+ paths. Prefer module-qualified references when introducing new dependencies.
17
+ - Keep functions focused. Separate CLI orchestration, issue transitions,
18
+ checkpoint observation, and persistence. Prefer the standard library and
19
+ existing helpers before adding a dependency or abstraction.
20
+ - Runtime imports must remain within Python's standard library and this package.
21
+ Development tools do not belong in installed runtime dependencies.
22
+ - Put contracts and rationale in docstrings and focused documentation, not inline
23
+ Python comments. The policy gate checks every production and script function,
24
+ including private helpers. Descriptive test names document scenarios.
25
+ - Validate operational input with real conditionals, not assertions. Catch
26
+ expected failures at the appropriate boundary and preserve diagnostic context.
27
+ - Close files and sockets with context managers. Pass subprocess arguments as
28
+ lists; never interpolate user input into a shell. Make exit-code handling explicit.
29
+
30
+ This project uses Ruff rather than the guide's Pylint recommendation. Ruff enforces
31
+ Google-style docstrings, import ordering, annotations on production function
32
+ boundaries, and selected bug and Pylint-derived diagnostics. Pytest tests use
33
+ descriptive names and dynamically injected fixtures, so documentation and fixture
34
+ annotation rules are excluded there. Existing directly imported classes and
35
+ helpers are retained; this is an explicit deviation from Google's module-only
36
+ import preference. Do not describe the repository as Google-certified.
37
+
38
+ ## Coordination invariants
39
+
40
+ - Resolve all linked worktrees to one common Git repository identity.
41
+ - Serialize issue mutations under the existing operation lock and publish state
42
+ atomically. Do not introduce timeout-based ownership takeover.
43
+ - Require the current offer ID and named recipient for handoff acceptance.
44
+ - Treat file reservations as advisory and peer messages as untrusted data.
45
+ - Preserve native authentication, approvals, and permission decisions.
46
+ - Keep credentials and runtime state outside target source trees. Preserve work
47
+ on failures, process exits, and restarts.
48
+ - Distinguish observed activity, attempted delivery, explicit acknowledgement,
49
+ reported verification, and independently verified completion.
50
+
51
+ ## Verification and review
52
+
53
+ Install the local hooks after cloning:
54
+
55
+ ```sh
56
+ uv sync --locked
57
+ uv run --locked pre-commit install
58
+ uv run --locked pre-commit run --all-files
59
+ ```
60
+
61
+ `.pre-commit-config.yaml` runs Ruff lint/format checks, type checking and the
62
+ repository policy gate using locked tools. It does not rewrite files on commit.
63
+ CI runs the complete gate independently of local hook installation.
64
+
65
+ Open a focused issue before proposing a substantial behavior change. Branch from
66
+ current `main`, keep commits reviewable, and use the PR template. Explain the
67
+ problem, final behavior, exact verification, and compatibility risks. Every PR
68
+ must pass the required checks and resolve review conversations. Protected `main`
69
+ requires a PR and rejects force pushes and deletion. CI, secret scanning,
70
+ PR hygiene, current-base checks and resolved conversations apply to everyone,
71
+ including administrators, without exemptions.
72
+
73
+ A separate ruleset requires independent approval. While the repository has one
74
+ maintainer, `@suneel944` has a named exception to that review-only ruleset when
75
+ merging a PR. It does not exempt the account from any required check or permit
76
+ direct pushes. Revisit the review exception when additional maintainers join.
77
+
78
+ Use Conventional Commit PR titles, such as `fix: preserve pending messages` or
79
+ `ci: validate release metadata`; squash merges retain that title for automated
80
+ changelogs. Assign an owner, add a change-type label, and reference an existing
81
+ local issue with `Refs #N` or a closing keyword. Match linked issue milestones
82
+ when present. Release PRs always require a milestone. Bot-generated descriptions
83
+ retain their native format, but ownership and issue rules still apply.
84
+
85
+ Contribution text must omit generator credits, assistant attribution, robot
86
+ signatures, and assistant coauthor trailers. This applies to tracked files,
87
+ commit messages, PRs, issues, and comments, including closed items. Keep required
88
+ license notices and factual product documentation intact. Repository policy and
89
+ PR hygiene checks enforce the textual attribution boundary.
90
+
91
+ Release Please prepares a version and changelog PR after merges to `main`.
92
+ Package, plugin, marketplace and lockfile versions move together. The generated
93
+ PR gets an owner, release issue and milestone, and explicitly dispatched checks
94
+ because GitHub's workflow token does not trigger workflows on its own PR writes.
95
+ Review and merge it through the normal protected-branch gate. Publication creates
96
+ a draft, runs `make check` and the history secret scan, attaches release bundles,
97
+ downloads and verifies their checksums, then publishes. Failed publication keeps
98
+ the release draft; rerun Release with its existing tag to retry. Published assets
99
+ are never overwritten. The release workflow can also publish a manually pushed
100
+ version tag, provided its commit belongs to `main` history.
101
+
102
+ Contributions are accepted under the repository's MIT license. Submit only work
103
+ you have the right to contribute. Follow CODE_OF_CONDUCT.md and report security
104
+ issues using SECURITY.md rather than public issue templates.
105
+
106
+ Run focused checks while editing. Before submitting implementation changes, run:
107
+
108
+ ```sh
109
+ make check
110
+ ```
111
+
112
+ CI runs the same locked dependency, lint, formatting, typing, policy, build, and
113
+ test gate. A separate secret scan examines Git history. Actions are pinned to
114
+ commit IDs and receive read-only permissions unless release publication needs
115
+ write access. Dependency updates are proposed through Dependabot PRs.
116
+ Do not weaken
117
+ checks to make a change pass. Explain any narrowly justified rule exception.
118
+ Tests should exercise behavior, especially concurrency, persistence, cancellation,
119
+ and permission boundaries. Distinguish real MCP transport tests from native model
120
+ behavior; the latter requires an explicit two-terminal trial.
121
+
122
+ Update the README and architecture diagrams when responsibilities or flows change.
123
+ Keep runtime code in the top-level `agent_parley/` package. `make build` must
124
+ produce an installable wheel and a source archive containing both native plugin
125
+ manifests and the shared skill. The installed-package test uses a temporary tool
126
+ environment outside the checkout to catch accidental source-tree imports.
127
+ Keep changes scoped and review the final diff for accidental credentials, runtime
128
+ artifacts, and unrelated edits. Publish the commands actually run and their results.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Suneel Kaushik S
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
13
+ all 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
21
+ THE SOFTWARE.
@@ -0,0 +1,37 @@
1
+ .PHONY: install install-dev install-system build check release-artifacts benchmark
2
+ install:
3
+ @set -eu; \
4
+ bridge_requirements=$$(mktemp); \
5
+ trap 'rm -f "$$bridge_requirements"' EXIT; \
6
+ uv export --locked --no-dev --no-emit-project --no-hashes > "$$bridge_requirements"; \
7
+ uv tool install --python 3.12 . --with-requirements "$$bridge_requirements"
8
+
9
+ install-dev:
10
+ @set -eu; \
11
+ bridge_requirements=$$(mktemp); \
12
+ trap 'rm -f "$$bridge_requirements"' EXIT; \
13
+ uv export --locked --no-dev --no-emit-project --no-hashes > "$$bridge_requirements"; \
14
+ uv tool install --python 3.12 --editable . --with-requirements "$$bridge_requirements"
15
+
16
+ install-system:
17
+ @test "$$(id -u)" -eq 0 || { echo 'Run sudo env "PATH=$$PATH" make install-system'; exit 1; }
18
+ UV_TOOL_DIR=/opt/agent-parley/tools UV_TOOL_BIN_DIR=/usr/local/bin \
19
+ UV_PYTHON_INSTALL_DIR=/opt/agent-parley/python $(MAKE) install
20
+
21
+ build:
22
+ uv build --no-sources
23
+
24
+ release-artifacts: build
25
+ uv run --locked python scripts/release_artifacts.py
26
+
27
+ benchmark:
28
+ uv run --locked python scripts/benchmark.py
29
+
30
+ check:
31
+ uv sync --locked
32
+ uv run --locked ruff check .
33
+ uv run --locked ruff format --check .
34
+ uv run --locked mypy
35
+ uv run --locked python scripts/check_policy.py
36
+ $(MAKE) build
37
+ uv run --locked pytest -q
@@ -0,0 +1,267 @@
1
+ Metadata-Version: 2.5
2
+ Name: agent-parley
3
+ Version: 0.1.0
4
+ Summary: Run several coding agents in isolated worktrees with shared coordination.
5
+ Project-URL: Repository, https://github.com/suneel944/agent-parley
6
+ Project-URL: Issues, https://github.com/suneel944/agent-parley/issues
7
+ Author-email: Suneel Kaushik S <suneel944@gmail.com>
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Keywords: agents,claude-code,codex,coordination,git-worktree,mcp
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Operating System :: POSIX :: Linux
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Topic :: Software Development :: Version Control :: Git
17
+ Requires-Python: >=3.12
18
+ Description-Content-Type: text/markdown
19
+
20
+ <p align="center">
21
+ <img src="https://cdn.jsdelivr.net/gh/suneel944/agent-parley@main/docs/assets/agent-parley.png" width="560" alt="Agent Parley — separate work, shared context">
22
+ </p>
23
+
24
+ <p align="center">
25
+ <strong>Separate worktrees. Shared context. One screen.</strong>
26
+ </p>
27
+
28
+ <p align="center">
29
+ Run several coding agents at once and know who owns what.<br>
30
+ Every claim, handoff and refusal is recorded, attributed and visible.
31
+ </p>
32
+
33
+ <p align="center">
34
+ <a href="https://github.com/suneel944/agent-parley/releases"><img src="https://img.shields.io/github/v/release/suneel944/agent-parley?style=flat&color=blue" alt="Release"></a>
35
+ <a href="#install"><img src="https://img.shields.io/badge/runtime_dependencies-0-brightgreen?style=flat" alt="Zero runtime dependencies"></a>
36
+ <a href="#install"><img src="https://img.shields.io/badge/python-3.12%2B-blue?style=flat" alt="Python 3.12+"></a>
37
+ <a href="#providers-and-accounts"><img src="https://img.shields.io/badge/native_CLIs-claude_%2B_codex-orange?style=flat" alt="claude and codex"></a>
38
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green?style=flat" alt="MIT license"></a>
39
+ </p>
40
+
41
+ <p align="center">
42
+ <a href="#see-it">See it</a> ·
43
+ <a href="#install">Install</a> ·
44
+ <a href="#run-it">Run</a> ·
45
+ <a href="#what-it-enforces">Enforce</a> ·
46
+ <a href="#watch-one-provider">Filter</a> ·
47
+ <a href="#providers-and-accounts">Providers</a> ·
48
+ <a href="docs/architecture.md">Docs</a> ·
49
+ <a href="#what-it-does-not-do">Limits</a>
50
+ </p>
51
+
52
+ ---
53
+
54
+ ## See it
55
+
56
+ Launch a lane, see who owns what, watch every lane at once, narrow to one
57
+ provider, and watch a hook refuse a branch switch inside an assigned lane.
58
+
59
+ <p align="center">
60
+ <img src="https://cdn.jsdelivr.net/gh/suneel944/agent-parley@main/docs/assets/screenshot-top.svg" width="900" alt="agent-parley top showing three lanes with issues, mail, leases, denials and served calls">
61
+ </p>
62
+
63
+ One screen for every lane: session state, branch drift, issues owned, handoffs
64
+ pending, unread mail, held reservations, delivered context, and what enforcement
65
+ denied. Read-only, no model call, `q` quits.
66
+
67
+ Every frame on this page is real command output from a demo project. Only the
68
+ state and project paths are shortened.
69
+
70
+ ## Install
71
+
72
+ Linux with pidfd support, Git, and [uv](https://docs.astral.sh/uv/). No clone.
73
+ The wheel needs no third-party runtime packages.
74
+
75
+ ```sh
76
+ uv tool install agent-parley
77
+ # to track the default branch instead:
78
+ # uv tool install git+https://github.com/suneel944/agent-parley
79
+ ```
80
+
81
+ Then add the plugin to whichever CLI you drive. One marketplace serves both.
82
+
83
+ ```sh
84
+ claude plugin marketplace add suneel944/agent-parley
85
+ claude plugin install agent-parley@agent-parley-local
86
+ ```
87
+
88
+ ```sh
89
+ codex plugin marketplace add suneel944/agent-parley
90
+ codex plugin add agent-parley@agent-parley-local
91
+ ```
92
+
93
+ The plugin carries the shared `coordinate` skill, so an agent can read
94
+ coordination state, claim an issue and hand work off in its own words. It is deliberately
95
+ skill-only: the launcher supplies MCP configuration and lifecycle hooks per
96
+ session, and it is also what creates the worktrees and runs the coordination
97
+ service. The plugin alone gives an agent the skill and nothing to coordinate
98
+ through.
99
+
100
+ For a pinned, checksummed install, take a wheel from
101
+ [Releases](https://github.com/suneel944/agent-parley/releases) instead.
102
+
103
+ ## Run it
104
+
105
+ From a committed, clean checkout, one terminal per agent:
106
+
107
+ ```sh
108
+ # Terminal 1
109
+ agent-parley run claude
110
+
111
+ # Terminal 2
112
+ agent-parley run codex
113
+ ```
114
+
115
+ That is the whole setup. The first run registers the repository, creates that
116
+ participant's worktree and branch, starts the coordination service, and hands
117
+ you the native CLI. Prompt it exactly as you always do.
118
+
119
+ A new name creates its own lane, so a second account of the same provider, or
120
+ another provider, is one more terminal:
121
+
122
+ ```sh
123
+ agent-parley credentials add account-2 --config-home ~/.claude-account-2
124
+ agent-parley run claude-2 --provider claude --credentials account-2
125
+ ```
126
+
127
+ Then watch the work:
128
+
129
+ ```sh
130
+ agent-parley status # ownership, activity and reported results
131
+ agent-parley top # every lane live, including what enforcement denied
132
+ ```
133
+
134
+ When a lane's work is ready, integrate it from the base checkout:
135
+
136
+ ```sh
137
+ agent-parley participant merge claude-2
138
+ ```
139
+
140
+ It always records a merge commit, refuses on a running session, a dirty tree or
141
+ a drifted lane, and leaves a conflict in place for you to resolve. It never
142
+ resets, cleans, stashes or force-switches.
143
+
144
+ ## What it enforces
145
+
146
+ **Ownership changes only through explicit claims and accepted handoffs.** No
147
+ timeout and no process exit moves an issue. `agent-parley status` reports who
148
+ owns what, which handoff is waiting on an offer ID, and any lane that left its
149
+ assigned branch. An owner can record that one issue waits on another with
150
+ `agent-parley issue block 42 --on 17`; the listing then names who holds the
151
+ blocking issue, and every lane sees the change at its next checkpoint. A
152
+ recorded dependency informs, it does not gate.
153
+
154
+ <p align="center">
155
+ <img src="https://cdn.jsdelivr.net/gh/suneel944/agent-parley@main/docs/assets/screenshot-status.svg" width="880" alt="agent-parley status listing issue owners, a pending handoff, and a lane on the wrong branch">
156
+ </p>
157
+
158
+ <p align="center">
159
+ <img src="https://cdn.jsdelivr.net/gh/suneel944/agent-parley@main/docs/assets/screenshot-issues.svg" width="880" alt="agent-parley issue list showing an issue that waits on another, the participant holding it, and a pending handoff with its offer ID">
160
+ </p>
161
+
162
+ **Native hooks decide before the tool runs.** They block branch changes inside
163
+ an assigned lane, catch drift after any bypass, and deliver short updates only
164
+ when coordination state actually changes. Each notice is capped at 1,536 UTF-8
165
+ bytes; an unchanged checkpoint adds no context at all.
166
+
167
+ <p align="center">
168
+ <img src="https://cdn.jsdelivr.net/gh/suneel944/agent-parley@main/docs/assets/screenshot-hooks.svg" width="820" alt="Two hook denials with their reasons, and the bounded briefing a session start receives">
169
+ </p>
170
+
171
+ **Seven scoped MCP tools carry the coordination.** Conflicting reservations
172
+ grant nothing and name the blocking owner with that owner's declared reason.
173
+ Sends need an idempotency key, so a retry returns the original message instead
174
+ of a duplicate. Fetching an inbox never marks a message read.
175
+
176
+ <p align="center">
177
+ <img src="https://cdn.jsdelivr.net/gh/suneel944/agent-parley@main/docs/assets/screenshot-coordination.svg" width="880" alt="A granted reservation, a denied one naming the blocking owner, a deduplicated send, and an inbox page">
178
+ </p>
179
+
180
+ Enforcement is recorded, not discarded. Every hook decision carries an
181
+ enumerated reason and lands in that participant's event log; every served call
182
+ is recorded inside the transaction that carried its effect. That is why `top`
183
+ can show what was denied, to whom, and how often.
184
+
185
+ That history is bounded, and it can leave the state directory. A lane keeps two
186
+ event files and discards records older than fourteen days, so `top` reports
187
+ recent enforcement rather than the whole project. `--since` narrows any count
188
+ to a window, and `events export` writes the retained records as JSON Lines you
189
+ can keep for as long as you need:
190
+
191
+ ```sh
192
+ agent-parley top --since 6h
193
+ agent-parley events export --since 7d --output enforcement.jsonl
194
+ ```
195
+
196
+ ## Watch one provider
197
+
198
+ With a dozen lanes open, the whole table is rarely what you want. `--provider`
199
+ narrows the view to the participants driven by one provider, and the header
200
+ counts only the rows it shows:
201
+
202
+ ```sh
203
+ agent-parley top --provider codex
204
+ agent-parley top --provider claude --provider codex
205
+ ```
206
+
207
+ ## Providers and accounts
208
+
209
+ A provider states which native CLI drives a participant and how that CLI reaches
210
+ a model. Every provider drives one of two adapters, which is why two plugin
211
+ installations cover all of them:
212
+
213
+ | Provider | Native CLI it drives | Plugin that carries `coordinate` |
214
+ | --- | --- | --- |
215
+ | `claude` | `claude` | Claude Code |
216
+ | `codex` | `codex` | Codex |
217
+ | `deepseek`, `kimi`, `grok` | `claude` or `codex`, vendor endpoint | that adapter's plugin |
218
+ | your own, via `agent-parley provider add` | the adapter you name | that adapter's plugin |
219
+
220
+ `claude` and `codex` work out of the box. The `deepseek`, `kimi` and `grok`
221
+ presets carry no endpoint, so their base URL and key must be exported in the
222
+ launching shell; the launcher refuses to start when a required variable is unset
223
+ rather than falling back to another account. Coordination state records variable
224
+ names and config directories, never credential values.
225
+
226
+ Credential profiles point a provider's config-home variable at a separate
227
+ directory, so one provider can run under several logins. Up to 32 participants
228
+ per project.
229
+
230
+ ## How it fits together
231
+
232
+ ```mermaid
233
+ flowchart TD
234
+ Repo[Your repository] --> Launcher[Agent Parley launcher]
235
+ Launcher --> Claude[Participant · own worktree]
236
+ Launcher --> Codex[Participant · own worktree]
237
+ Claude <-->|Seven scoped MCP tools| Server[Local coordination service]
238
+ Codex <-->|Seven scoped MCP tools| Server
239
+ Server --> DB[(SQLite WAL · mail and reservations)]
240
+ Claude --> Claims[Atomic issue claims and handoffs]
241
+ Codex --> Claims
242
+ DB --> Hooks[Native checkpoints · bounded updates]
243
+ Claims --> Hooks
244
+ Hooks -.-> Claude
245
+ Hooks -.-> Codex
246
+ ```
247
+
248
+ The coordination engine is built in-house with Python's standard library. It has
249
+ no runtime dependencies and makes no model calls. Your existing logins and
250
+ permission settings still apply.
251
+
252
+ ## What it does not do
253
+
254
+ Worktrees and reservations are coordination boundaries, not OS sandboxes. Agent
255
+ Bridge does not merge branches, approve commands, or wake idle agents. Reported
256
+ `ready` is ready for review, not verified completion. Token usage still depends
257
+ on the native agents; the bridge reports injected bytes rather than claiming a
258
+ token-saving percentage.
259
+
260
+ ## Contributing
261
+
262
+ Run `make check` before opening a PR. It checks formatting, lint, typing,
263
+ documentation rules, package builds, and behavior tests.
264
+
265
+ [Contributing](CONTRIBUTING.md) · [Architecture](docs/architecture.md) ·
266
+ [Operations](docs/operations.md) · [Security](SECURITY.md) ·
267
+ [Code of Conduct](CODE_OF_CONDUCT.md) · [MIT license](LICENSE)