#17 exists because the program maintained two full agent harnesses: gsm.agent (upstream, owns the ecosystem conventions) and safety.agent (predates the July 2026 consolidation, restating much of the same ground). Direction from @jwildfire (2026-07-04): leverage gsm.agent as much as possible; the project repo serves only as additional instructions.
This design extends the original scope with the obot.agent conversion (approved
2026-07-11): the repo renamed from safety.agent to obot.agent and widens
from a safety-graphics overlay to the obot program's agent layer — absorbing the session
skills that currently live in the hub and the agent-identity infrastructure it already carries.
Success criteria (unchanged from #17, plus the conversion):
CLAUDE.md repo list updated.
The audit read every artifact (all AGENTS.md sections, all 9 skills, all docs including the
9 requirement matrices, all templates, config, scripts, interview logs) against gsm.agent.
Headline: bucket (a) — pure duplication — is nearly empty. obot.agent's
71-line AGENTS.md is already overlay-shaped; it does not restate the draft/attribution/approval/
worktree conventions. The real work is upstreaming two generic patterns (§6), fixing stale
references (PR #11), and settling four decisions (§7). gsm.agent is an R/RBQM harness
(testthat, devtools::check()); obot.agent is a JS renderer overlay
(Vitest/Playwright/Chart.js) — most content is domain-specific by construction.
| Artifact | Rationale |
|---|---|
skills/stakeholder-interview + docs/interview-framework.md +
templates/interview-log.md + templates/interview-question.md |
Generic stakeholder Q→decision→durable-artifact workflow; only the Telegram flavor is obot-specific |
Split-phase test-driver pattern (underlying p004-test-driver /
p004-test-setup / p004-write-tests) |
Setup→write split, bounded sub-agent, test-driver: evidence commits — stack-neutral; obot keeps the P004/Vitest instantiation |
Upstreaming answers gsm.agent's open "shared scaffolding location" roadmap question in practice: obot becomes the first external consumer of gsm.agent as base-harness-plus-overlay.
| Category | Artifacts |
|---|---|
| Contract & policy | AGENTS.md (mission, GxP non-negotiables, per-renderer artifacts, JS testing expectations, safety.viz branching model, migration sequence) — rewritten around an explicit overlay contract (§4) |
| Skills | chartjs-migration, renderer-modernization, requirements-harvesting, gxp-test-framework, obot-identity, P004 test-driver trio (as thin instances over the upstreamed pattern) |
| Docs | gsm-viz-reference, gxp-framework, test-framework, requirements-harvesting, the 9 requirement matrices + review doc (the highest-value asset), p004-test-driver-trial, skills-library-spike |
| Templates & infra | requirements-matrix, p004-test-driver-prompt, scripts/ (obot-app-token, harvest), interviews/ logs |
| Artifact | Finding |
|---|---|
docs/test-agent-github-app.md + config/github-app/* |
Proposes creating an obot-test-agent app — superseded by the live obotclaw app
(#3 design). Candidate for deletion, not link-fixing → D4 |
interviews/p004-open-questions.md dead obot-claw links |
Historical record — leave as-is (see §8) |
docs/test-framework.md "OpenClaw" browser-QA reference |
obot-claw-era tooling name; replace with current browser-QA tooling during the overlay rewrite |
obot.agent converges to: mission + GxP stance + gsm.viz/JS reference + renderer requirement matrices + renderer/test skills + obot identity/token infra + session skills. Everything cross-cutting (drafts, attribution, approval gates, worktrees, generic TDD, interview workflow, generic test-driver) is sourced from gsm.agent.
The new AGENTS.md opens with the overlay contract — "gsm.agent conventions apply; this repo adds
the obot layer" — mirroring how the workspace CLAUDE.md already imports the gsm.agent
clone's AGENTS.md. The safety.viz branching model stays but is explicitly scoped to safety.viz
(not stated as an ecosystem default, which would contradict gsm.agent's "don't assume dev/main").
A new short terminology doc defines session / spawned agent /
subagent — groundwork consumed by
#18 (autonomous operations).
The shared keynote stylesheet lands here once extracted — it is being produced by
the safety.viz v1.0-push website-cleanup workstream, not rebuilt in this requirement.
Where each skill family lives after the move (@jwildfire's calls, 2026-07-11):
| Skill family | Today | Target |
|---|---|---|
| Session lifecycle (session-init/-note/-todo/-update/-wrapup) | obot.roadmap/.github/skills/ |
obot.agent — agent capabilities live in the harness overlay |
| Requirement lifecycle (requirement-drafting/-design/-tasks) | obot-claw.github.io clone (archived repo — symlinks into a dead home) |
obot.roadmap — they operate on hub files, so they live beside the lifecycle they manage |
| Ecosystem conventions (tdd, issue-review, sub-issue-linking) | gsm.agent clone (.github/) |
unchanged — upstream |
| Renderer/identity (chartjs-migration, obot-identity, P004 trio, …) | obot.agent | unchanged — overlay |
The workspace .claude/skills/ symlinks are repointed in the same change; net effect is
that no symlink resolves into an archived clone. Hub = content and its lifecycle; obot.agent = how
the agent works; gsm.agent = ecosystem conventions.
Two PRs to Gilead-BioStats/gsm.agent: (1) the stakeholder-interview workflow
(skill + framework doc + two templates, de-Telegrammed); (2) a generic test-driver
skill capturing the split-phase pattern. Mechanics: the Gilead gh API is SAML-blocked,
so branches go up over SSH and @jwildfire opens the PRs from compare URLs. Fallback if upstream
declines: obot.agent carries the generic pieces unchanged until accepted — no blocking dependency.
tdd skill hard-codes the Green
gate as devtools::check() clean with R test naming; obot's P004 skills define a parallel
JS discipline (Vitest/Playwright, requirement-ID test names). Both currently claim to be the
test-first workflow. Recommendation: the overlay declares the JS instantiation as the
project-level specialization of the upstream tdd skill (pointer + divergence table), and
we propose upstream that tdd grow a stack-neutral core. No fork of the convention.
Resolved 2026-07-11: Deferred — leave both disciplines as-is until gsm.agent's Q3 skills-library work lands; revisit then.
Co-Authored-By trailer with @jwildfire as reviewer/merger; obot-identity makes
obotclaw[bot] the git author. Recommendation: obot-identity supersedes the trailer
for authorship (bot is the author), and commits keep the agent Co-Authored-By trailer so both the
identity and the drafting model remain visible. Document this as an explicit overlay divergence.
Resolved 2026-07-11: Approved as recommended — bot author + Co-Authored-By trailer.
name/description) that harnesses key on to auto-load; six obot skills are
plain markdown without it. Recommendation: normalize all obot.agent (and moved hub) skills
to the upstream SKILL.md frontmatter contract during the restructure.
Resolved 2026-07-11: Approved — normalize all.
docs/test-agent-github-app.md + config/github-app/* propose an app the
live obotclaw app replaced. Recommendation: delete both (git history preserves them) rather
than carry-and-fix. Deletion requires explicit @jwildfire approval per the operating contract —
hence a decision, not a task.
Resolved 2026-07-11: Deletion approved by @jwildfire.
interviews/ logs keep their dead obot-claw
links as period artifacts.To be decomposed via requirement-tasks into cross-repo sub-issues after design sign-off.
| # | Task | Repo | Depends on |
|---|---|---|---|
| T1 | Move session skills into obot.agent; move requirement skills into obot.roadmap; repoint workspace symlinks | obot.agent, obot.roadmap, workspace | design sign-off |
| T2 | Rewrite AGENTS.md as the overlay contract; add terminology doc; fix "OpenClaw" reference | obot.agent | D2 resolved; D1 deferred — document the JS discipline as-is |
| T3 | Normalize skill frontmatter across obot.agent + moved skills | obot.agent, obot.roadmap | D3 approved; T1 |
| T4 | Upstream PRs: interview workflow, generic test-driver | gsm.agent | design sign-off |
| T5 | Land the shared keynote stylesheet | obot.agent | safety.viz v1.0-push website PR |
| T6 | Delete superseded test-agent app doc + config | obot.agent | D4 approved 2026-07-11 |