agent-lifecycle 0.2.1__tar.gz → 0.2.2__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.
- agent_lifecycle-0.2.2/.devague/frames/agent-lifecycle-v0-3-ships-the-two-pluggable-seam.json +181 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.gitignore +6 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/CHANGELOG.md +18 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/PKG-INFO +1 -1
- agent_lifecycle-0.2.2/docs/specs/2026-06-09-agent-lifecycle-v0-3-ships-the-two-pluggable-seam.md +50 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/pyproject.toml +1 -1
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/uv.lock +1 -1
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/agent-config/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/agent-config/data/backend-fingerprints.yaml +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/agent-config/scripts/show.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/ask-colleague/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/ask-colleague/prompts/explore.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/ask-colleague/prompts/review.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/ask-colleague/prompts/write.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/ask-colleague/scripts/ask-colleague.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/assign-to-workforce/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/assign-to-workforce/scripts/assign-to-workforce.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/cicd/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/cicd/scripts/_resolve-nick.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/cicd/scripts/portability-lint.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/cicd/scripts/pr-reply.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/cicd/scripts/pr-status.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/cicd/scripts/workflow.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/fetch-issues.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/mesh-message.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/post-comment.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/post-issue.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/templates/skill-new-brief.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/templates/skill-update-brief.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/doc-test-alignment/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/doc-test-alignment/scripts/check.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/pypi-maintainer/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/pypi-maintainer/scripts/switch-source.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/run-tests/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/run-tests/scripts/test.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/sonarclaude/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/sonarclaude/scripts/sonar.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/spec-to-plan/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/think/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/think/scripts/think.sh +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/version-bump/SKILL.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/version-bump/scripts/bump.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills.local.yaml.example +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.flake8 +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.github/workflows/publish.yml +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.github/workflows/tests.yml +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.markdownlint-cli2.yaml +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/CLAUDE.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/LICENSE +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/README.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/__init__.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/__main__.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/__init__.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/_commands/__init__.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/_commands/cli.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/_commands/doctor.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/_commands/explain.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/_commands/learn.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/_commands/overview.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/_commands/whoami.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/_errors.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/cli/_output.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/explain/__init__.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/agent_lifecycle/explain/catalog.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/culture.yaml +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/docs/skill-sources.md +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/sonar-project.properties +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/tests/__init__.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/tests/test_cli.py +0 -0
- {agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/tests/test_cli_introspection.py +0 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "agent-lifecycle-v0-3-ships-the-two-pluggable-seam",
|
|
3
|
+
"title": "agent-lifecycle v0.3 ships the two pluggable seam interfaces \u2014 Transport (message-first, presence optional) and Harness \u2014 plus a minimal in-process supervisor core and a reference echo transport+harness that prove the seam end-to-end, depending on nothing culture/agentirc/Slack-specific.",
|
|
4
|
+
"schema_version": 1,
|
|
5
|
+
"status": "exported",
|
|
6
|
+
"created": "2026-06-09T23:02:18Z",
|
|
7
|
+
"updated": "2026-06-09T23:08:43Z",
|
|
8
|
+
"claims": [
|
|
9
|
+
{
|
|
10
|
+
"id": "c1",
|
|
11
|
+
"kind": "announcement",
|
|
12
|
+
"text": "agent-lifecycle v0.3 ships the two pluggable seam interfaces \u2014 Transport (message-first, presence optional) and Harness \u2014 plus a minimal in-process supervisor core and a reference echo transport+harness that prove the seam end-to-end, depending on nothing culture/agentirc/Slack-specific.",
|
|
13
|
+
"origin": "user",
|
|
14
|
+
"status": "confirmed",
|
|
15
|
+
"honesty_conditions": [
|
|
16
|
+
{
|
|
17
|
+
"id": "h1",
|
|
18
|
+
"text": "The reference harness+transport demo runs in CI with no network and no optional culture/agentirc/Slack packages installed.",
|
|
19
|
+
"status": "confirmed"
|
|
20
|
+
}
|
|
21
|
+
],
|
|
22
|
+
"hard_questions": [],
|
|
23
|
+
"links": []
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"id": "c2",
|
|
27
|
+
"kind": "audience",
|
|
28
|
+
"text": "The cultureagent and colleague maintainers (the two proving harnesses) plus the charter reviewers (guildmaster#61) who need concrete code \u2014 not prose \u2014 to ratify the Transport/Harness seam.",
|
|
29
|
+
"origin": "llm",
|
|
30
|
+
"status": "confirmed",
|
|
31
|
+
"honesty_conditions": [
|
|
32
|
+
{
|
|
33
|
+
"id": "h7",
|
|
34
|
+
"text": "The exported spec is directly consumable by the cultureagent + colleague maintainers as the ratification target: it names both proving harnesses and links guildmaster#61.",
|
|
35
|
+
"status": "confirmed"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"hard_questions": [],
|
|
39
|
+
"links": []
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "c3",
|
|
43
|
+
"kind": "after_state",
|
|
44
|
+
"text": "The Transport and Harness contracts are importable from agent_lifecycle and demonstrated end-to-end: a reference harness wired to a reference transport through the supervisor round-trips a message in-process, with zero culture/agentirc/Slack imports.",
|
|
45
|
+
"origin": "llm",
|
|
46
|
+
"status": "confirmed",
|
|
47
|
+
"honesty_conditions": [
|
|
48
|
+
{
|
|
49
|
+
"id": "h2",
|
|
50
|
+
"text": "round-trip is observable: an inbound message handed to the Harness produces an outbound message delivered back through the Transport, asserted by a test \u2014 not just an interface that type-checks.",
|
|
51
|
+
"status": "confirmed"
|
|
52
|
+
}
|
|
53
|
+
],
|
|
54
|
+
"hard_questions": [],
|
|
55
|
+
"links": []
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "c4",
|
|
59
|
+
"kind": "before_state",
|
|
60
|
+
"text": "The agent runtime is entangled inside cultureagent: the four backend daemons and the supervisor mechanics live together, and IRC is hardcoded as the transport (IRCTransport / agentirc VirtualClient lineage). No transport-free, harness-free core exists.",
|
|
61
|
+
"origin": "llm",
|
|
62
|
+
"status": "confirmed",
|
|
63
|
+
"honesty_conditions": [
|
|
64
|
+
{
|
|
65
|
+
"id": "h8",
|
|
66
|
+
"text": "The entanglement is citable in cultureagent today: the backend daemons and the supervisor mechanics live in the same package, and IRCTransport is the only transport.",
|
|
67
|
+
"status": "confirmed"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"hard_questions": [],
|
|
71
|
+
"links": []
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"id": "c5",
|
|
75
|
+
"kind": "why_it_matters",
|
|
76
|
+
"text": "A transport-free, harness-free core lets cultureagent slim to a harness pack and lets colleague/Slack build on the same runtime without inheriting IRC or the Claude-family backends \u2014 the coupling that blocks both cases today.",
|
|
77
|
+
"origin": "llm",
|
|
78
|
+
"status": "confirmed",
|
|
79
|
+
"honesty_conditions": [
|
|
80
|
+
{
|
|
81
|
+
"id": "h9",
|
|
82
|
+
"text": "With the core extracted, a colleague-on-Slack deployment can be composed with no agentirc/IRC/culture package anywhere in its dependency tree.",
|
|
83
|
+
"status": "confirmed"
|
|
84
|
+
}
|
|
85
|
+
],
|
|
86
|
+
"hard_questions": [],
|
|
87
|
+
"links": []
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"id": "c6",
|
|
91
|
+
"kind": "boundary",
|
|
92
|
+
"text": "First increment only: NOT extracting cultureagent's four backends, NOT shipping the IRC/Slack/agtag transport plugs, and NOT refitting cultureagent to consume the package yet. Those follow once the seam is ratified.",
|
|
93
|
+
"origin": "llm",
|
|
94
|
+
"status": "confirmed",
|
|
95
|
+
"honesty_conditions": [
|
|
96
|
+
{
|
|
97
|
+
"id": "h10",
|
|
98
|
+
"text": "This increment is shippable and reviewable with NO cultureagent source present in this repo \u2014 it adds only new in-repo modules + tests.",
|
|
99
|
+
"status": "confirmed"
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"hard_questions": [],
|
|
103
|
+
"links": []
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "c7",
|
|
107
|
+
"kind": "success_signal",
|
|
108
|
+
"text": "A pytest test composes the reference Harness + reference Transport through the supervisor and round-trips a message in-process; an import-guard test asserts agent_lifecycle has no culture/agentirc/Slack import in its dependency tree.",
|
|
109
|
+
"origin": "llm",
|
|
110
|
+
"status": "confirmed",
|
|
111
|
+
"honesty_conditions": [
|
|
112
|
+
{
|
|
113
|
+
"id": "h3",
|
|
114
|
+
"text": "the import-guard test fails loudly if a future commit adds a culture/agentirc/Slack import to the core (e.g. it walks the import graph, not just a grep).",
|
|
115
|
+
"status": "confirmed"
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"hard_questions": [],
|
|
119
|
+
"links": []
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"id": "c8",
|
|
123
|
+
"kind": "decision",
|
|
124
|
+
"text": "Transport is message-first: a small message core (send, receive/subscribe, identity) with presence (join/part/who) as an OPTIONAL capability that async transports omit. Adopted from day one regardless of the colleague question, per the charter's stated safe bet.",
|
|
125
|
+
"origin": "llm",
|
|
126
|
+
"status": "confirmed",
|
|
127
|
+
"honesty_conditions": [
|
|
128
|
+
{
|
|
129
|
+
"id": "h4",
|
|
130
|
+
"text": "the message-first core supports an async/no-presence transport without changing the Transport signature \u2014 verifiable by sketching the agtag shape against it.",
|
|
131
|
+
"status": "confirmed"
|
|
132
|
+
}
|
|
133
|
+
],
|
|
134
|
+
"hard_questions": [],
|
|
135
|
+
"links": []
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"id": "c9",
|
|
139
|
+
"kind": "requirement",
|
|
140
|
+
"text": "agent_lifecycle's runtime dependency tree imports nothing culture-, agentirc-, or Slack-specific; the seam is defined as abstract interfaces (Protocol/ABC) so concrete transports/harnesses live in downstream packs/plugs.",
|
|
141
|
+
"origin": "llm",
|
|
142
|
+
"status": "confirmed",
|
|
143
|
+
"honesty_conditions": [
|
|
144
|
+
{
|
|
145
|
+
"id": "h5",
|
|
146
|
+
"text": "a downstream pack can implement Transport/Harness against only agent_lifecycle's public exports, with no import from a sibling pack.",
|
|
147
|
+
"status": "confirmed"
|
|
148
|
+
}
|
|
149
|
+
],
|
|
150
|
+
"hard_questions": [],
|
|
151
|
+
"links": []
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "c10",
|
|
155
|
+
"kind": "non_goal",
|
|
156
|
+
"text": "Presence-first transport design, and any real network transport (IRC/Slack/agtag) \u2014 the only concrete implementations in this increment are in-process reference doubles used to prove the seam.",
|
|
157
|
+
"origin": "llm",
|
|
158
|
+
"status": "confirmed",
|
|
159
|
+
"honesty_conditions": [],
|
|
160
|
+
"hard_questions": [],
|
|
161
|
+
"links": []
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"id": "c11",
|
|
165
|
+
"kind": "decision",
|
|
166
|
+
"text": "Resolved (was the charter open question): colleague's agents are live, process-backed, streaming harnesses like Claude Code and Codex \u2014 the same family as cultureagent's backends. So every proving harness is real-time/request-reply; async-durable-no-presence is purely a TRANSPORT capability (only agtag), never a Harness one. The Harness interface must therefore support a long-lived, streaming-capable brain; presence stays a transport-only optional mixin.",
|
|
167
|
+
"origin": "llm",
|
|
168
|
+
"status": "confirmed",
|
|
169
|
+
"honesty_conditions": [
|
|
170
|
+
{
|
|
171
|
+
"id": "h6",
|
|
172
|
+
"text": "The Harness interface can express a process-backed streaming brain (start/feed-message/stream-reply/stop) without assuming any transport, and no Harness method takes presence as a parameter.",
|
|
173
|
+
"status": "confirmed"
|
|
174
|
+
}
|
|
175
|
+
],
|
|
176
|
+
"hard_questions": [],
|
|
177
|
+
"links": []
|
|
178
|
+
}
|
|
179
|
+
],
|
|
180
|
+
"open_vagueness": []
|
|
181
|
+
}
|
|
@@ -228,3 +228,9 @@ __marimo__/
|
|
|
228
228
|
|
|
229
229
|
# Per-machine skills config (copy from skills.local.yaml.example)
|
|
230
230
|
skills.local.yaml
|
|
231
|
+
|
|
232
|
+
# devague working state (not committed by default)
|
|
233
|
+
.devague/reviews/
|
|
234
|
+
# Mutable "current frame" pointer — local working state, churns per branch.
|
|
235
|
+
# The durable artifacts are .devague/frames/<slug>.json + docs/specs/<slug>.md.
|
|
236
|
+
.devague/current
|
|
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
Format follows [Keep a Changelog](https://keepachangelog.com/). This project
|
|
6
6
|
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.2.2] - 2026-06-10
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **Converged devague spec for the first build increment of issue #1 /
|
|
13
|
+
guildmaster#61** (`docs/specs/2026-06-09-agent-lifecycle-v0-3-ships-the-two-pluggable-seam.md`,
|
|
14
|
+
with the frame state under `.devague/frames/`). Scopes the extraction's *start*
|
|
15
|
+
to: define the `Transport` (message-first, presence optional) and `Harness`
|
|
16
|
+
interfaces, a minimal in-process supervisor, and reference echo doubles that
|
|
17
|
+
prove the seam end-to-end — with **no** cultureagent backend extraction and
|
|
18
|
+
**no** real IRC/Slack/agtag transport in this increment. Resolves the charter's
|
|
19
|
+
open question: colleague's agents are live, process-backed streaming harnesses
|
|
20
|
+
(like Claude Code / Codex), so async-no-presence is a transport-only concern.
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
8
26
|
## [0.2.1] - 2026-06-10
|
|
9
27
|
|
|
10
28
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-lifecycle
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
4
4
|
Summary: Harness- and transport-agnostic agent runtime: supervises an agent's process lifecycle independent of its harness (brain) and transport (IRC/Slack/agtag).
|
|
5
5
|
Project-URL: Homepage, https://github.com/agentculture/agent-lifecycle
|
|
6
6
|
Project-URL: Issues, https://github.com/agentculture/agent-lifecycle/issues
|
agent_lifecycle-0.2.2/docs/specs/2026-06-09-agent-lifecycle-v0-3-ships-the-two-pluggable-seam.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# agent-lifecycle v0.3 — the two pluggable seam interfaces (Transport + Harness)
|
|
2
|
+
|
|
3
|
+
> agent-lifecycle v0.3 ships the two pluggable seam interfaces — Transport (message-first, presence optional) and Harness — plus a minimal in-process supervisor core and a reference echo transport+harness that prove the seam end-to-end, depending on nothing culture/agentirc/Slack-specific.
|
|
4
|
+
|
|
5
|
+
## Audience
|
|
6
|
+
|
|
7
|
+
- The cultureagent and colleague maintainers (the two proving harnesses) plus the charter reviewers (guildmaster#61) who need concrete code — not prose — to ratify the Transport/Harness seam.
|
|
8
|
+
|
|
9
|
+
## Before → After
|
|
10
|
+
|
|
11
|
+
- Before: The agent runtime is entangled inside cultureagent: the four backend daemons and the supervisor mechanics live together, and IRC is hardcoded as the transport (IRCTransport / agentirc VirtualClient lineage). No transport-free, harness-free core exists.
|
|
12
|
+
- After: The Transport and Harness contracts are importable from agent_lifecycle and demonstrated end-to-end: a reference harness wired to a reference transport through the supervisor round-trips a message in-process, with zero culture/agentirc/Slack imports.
|
|
13
|
+
|
|
14
|
+
## Why it matters
|
|
15
|
+
|
|
16
|
+
- A transport-free, harness-free core lets cultureagent slim to a harness pack and lets colleague/Slack build on the same runtime without inheriting IRC or the Claude-family backends — the coupling that blocks both cases today.
|
|
17
|
+
|
|
18
|
+
## Requirements
|
|
19
|
+
|
|
20
|
+
- agent_lifecycle's runtime dependency tree imports nothing culture-, agentirc-, or Slack-specific; the seam is defined as abstract interfaces (Protocol/ABC) so concrete transports/harnesses live in downstream packs/plugs.
|
|
21
|
+
- honesty: a downstream pack can implement Transport/Harness against only agent_lifecycle's public exports, with no import from a sibling pack.
|
|
22
|
+
|
|
23
|
+
## Honesty conditions
|
|
24
|
+
|
|
25
|
+
- The reference harness+transport demo runs in CI with no network and no optional culture/agentirc/Slack packages installed.
|
|
26
|
+
- The exported spec is directly consumable by the cultureagent + colleague maintainers as the ratification target: it names both proving harnesses and links guildmaster#61.
|
|
27
|
+
- round-trip is observable: an inbound message handed to the Harness produces an outbound message delivered back through the Transport, asserted by a test — not just an interface that type-checks.
|
|
28
|
+
- The entanglement is citable in cultureagent today: the backend daemons and the supervisor mechanics live in the same package, and IRCTransport is the only transport.
|
|
29
|
+
- With the core extracted, a colleague-on-Slack deployment can be composed with no agentirc/IRC/culture package anywhere in its dependency tree.
|
|
30
|
+
- This increment is shippable and reviewable with NO cultureagent source present in this repo — it adds only new in-repo modules + tests.
|
|
31
|
+
- the import-guard test fails loudly if a future commit adds a culture/agentirc/Slack import to the core (e.g. it walks the import graph, not just a grep).
|
|
32
|
+
- the message-first core supports an async/no-presence transport without changing the Transport signature — verifiable by sketching the agtag shape against it.
|
|
33
|
+
- The Harness interface can express a process-backed streaming brain (start/feed-message/stream-reply/stop) without assuming any transport, and no Harness method takes presence as a parameter.
|
|
34
|
+
|
|
35
|
+
## Success signals
|
|
36
|
+
|
|
37
|
+
- A pytest test composes the reference Harness + reference Transport through the supervisor and round-trips a message in-process; an import-guard test asserts agent_lifecycle has no culture/agentirc/Slack import in its dependency tree.
|
|
38
|
+
|
|
39
|
+
## Scope / boundaries
|
|
40
|
+
|
|
41
|
+
- First increment only: NOT extracting cultureagent's four backends, NOT shipping the IRC/Slack/agtag transport plugs, and NOT refitting cultureagent to consume the package yet. Those follow once the seam is ratified.
|
|
42
|
+
|
|
43
|
+
## Non-goals
|
|
44
|
+
|
|
45
|
+
- Presence-first transport design, and any real network transport (IRC/Slack/agtag) — the only concrete implementations in this increment are in-process reference doubles used to prove the seam.
|
|
46
|
+
|
|
47
|
+
## Decisions
|
|
48
|
+
|
|
49
|
+
- Transport is message-first: a small message core (send, receive/subscribe, identity) with presence (join/part/who) as an OPTIONAL capability that async transports omit. Adopted from day one regardless of the colleague question, per the charter's stated safe bet.
|
|
50
|
+
- Resolved (was the charter open question): colleague's agents are live, process-backed, streaming harnesses like Claude Code and Codex — the same family as cultureagent's backends. So every proving harness is real-time/request-reply; async-durable-no-presence is purely a TRANSPORT capability (only agtag), never a Harness one. The Harness interface must therefore support a long-lived, streaming-capable brain; presence stays a transport-only optional mixin.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "agent-lifecycle"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.2"
|
|
4
4
|
description = "Harness- and transport-agnostic agent runtime: supervises an agent's process lifecycle independent of its harness (brain) and transport (IRC/Slack/agtag)."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/ask-colleague/prompts/explore.md
RENAMED
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/ask-colleague/prompts/review.md
RENAMED
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/ask-colleague/prompts/write.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/cicd/scripts/_resolve-nick.sh
RENAMED
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/cicd/scripts/portability-lint.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/fetch-issues.sh
RENAMED
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/mesh-message.sh
RENAMED
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/post-comment.sh
RENAMED
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/communicate/scripts/post-issue.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/doc-test-alignment/scripts/check.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{agent_lifecycle-0.2.1 → agent_lifecycle-0.2.2}/.claude/skills/spec-to-plan/scripts/spec-to-plan.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|