Skip to content

feat: versioned system agent template (system-agent, OCEAN P05) - #2

Merged
lukisch merged 2 commits into
mainfrom
feat/system-agent-descriptor
Oct 11, 2026
Merged

lukisch merged 2 commits into
mainfrom
feat/system-agent-descriptor

Conversation

@lukisch

@lukisch lukisch commented Oct 11, 2026 •

Copy link
Copy Markdown
Contributor

What

githubbot-core --json system-agent prints a neutral, versioned system agent template shipped as package data (schema githubbot-core.system-agent/v1):

  • version = package version, sha256 = SHA-256 of the canonical template JSON (stable across line endings and hosts)
  • capability = {package, version, spi_version}; the template exists only where the package is installed
  • permissions = the effective, narrowed configuration (--config layers apply)
  • blueprint = persona, role, contractus, governance, skills using the field names of the ellmos agent-studio blueprint payload

Why

OCEAN plan P05: the public core delivers the system agent template; BACH/Ocean show it only when the capability is installed. Binding the template to the installed package is that capability check. Consumers pin version + sha256 and must not overwrite an existing agent when a newer template appears.

Not included on purpose: policy refs, inherits_from and the ordered model fallback chain. They depend on the consumer contract that does not exist yet (agent-studio has no route to register package-provided system templates, no policy_refs, no model chain). They are planned as additive fields once that contract lands.

Checks

  • pytest -q: 143 passed, 1 skipped (consumer install test, runs in CI); consumer install test locally with GITHUBBOT_CORE_CONSUMER_TEST=1: passed (template ships as package data)
  • ruff check .: clean
  • Mutation controls on the new tests: kind, modus, hash canonicalisation, version and permissions mutations each turn a test red
  • Consumer probe (outside this repo): the blueprint was saved through the agent-studio save path of ellmos-ai/bach 99e1fbb5 in a temporary SQLite database: saved as version 1, CAS update to 2, stale write rejected, is_template rejected; materialize mapping gives read_file, list_directory, search_text, safe mode, 15 tool rounds, one-shot worker

Draft until reviewed by a different model. Do not merge without that review.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LYHP4Js5ggpzQ78JXWRe5E

Lukas Geiger and others added 2 commits October 11, 2026 10:19
Ship a neutral system agent template as package data and expose it with
`githubbot-core --json system-agent` (schema githubbot-core.system-agent/v1):
version (= package version), sha256 of the canonical template, capability,
effective permissions and a blueprint using the field names of the ellmos
agent-studio blueprint payload. The template exists only where the package
is installed, which is the capability binding the consumer needs.

Policy refs and the model fallback chain are deliberately not part of the
template yet; they depend on the consumer contract (BACH/ellmos-system-gui).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYHP4Js5ggpzQ78JXWRe5E
Review fixes by independent reviewer: version 0.1.0 -> 0.2.0 so tag and template
version match; remove product name from template/docs; fix spacing typo in test.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LYHP4Js5ggpzQ78JXWRe5E
@lukisch
lukisch marked this pull request as ready for review October 11, 2026 08:31
@lukisch
lukisch merged commit 2574808 into main Oct 11, 2026
2 checks passed
@lukisch

lukisch commented Oct 11, 2026

Copy link
Copy Markdown
Contributor Author

Review R6 (unabhängiges Zweitmodell, Sonnet 5.5), Kopf geprüft: 418695f, danach Fix eb12c2a.

Bereinigte Neufassung des Reviews vom 2026-10-11 08:31 UTC (lokale Pfadangabe entfernt, Prüfsubstanz unverändert).

  1. pytest 143 passed / 1 skipped, ruff sauber; Install-Test mit GITHUBBOT_CORE_CONSUMER_TEST=1 grün (eigener Worktree, eigenes venv). Nach dem Fix erneut identisch grün, CI auf eb12c2a success.
  2. Version: stand auf 0.1.0, daher Fix-Commit auf 0.2.0 (__init__, README-Status, CHANGELOG-Abschnitt [0.2.0] - 2026-10-11), damit Tag v0.2.0 und version der Vorlage übereinstimmen.
  3. system_agent.json: keine privaten Namen, Accounts, Pfade oder E-Mails. Die einzige Nennung eines Fremdprodukts (JSON-Beschreibung, README, README_de, Testkommentar) wurde neutralisiert; sha256 ist hashbasiert auf geparstem, kanonischem JSON (sort_keys, kompakte Separatoren), also zeilenendenunabhängig und deterministisch. Rechte: Profil read_only_research, Whitelist read_files/search_content; permissions kommt aus der effektiven Konfiguration (Test deckt Verengung ab).
  4. cli.py: hashlib wird in cmd_system_agent genutzt, die Pyright-Meldung trifft nicht zu. Die Optional-PullRequest-Meldungen (~158-171) liegen außerhalb des PR-Diffs (vorbestehend). Zusatz: Tippfehler origin =_run im Install-Test korrigiert.
  5. Offener Hinweis (kein Blocker): Der Hash der Vorlage ändert sich mit jeder Inhaltsänderung; Konsumenten sollten auf version+sha256 pinnen.

Befund: bestanden, Merge folgt.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant