rein-aharness/agent_harness/persona.py

40 lines
1.3 KiB
Python
Raw Normal View History

"""Persona orientation via kaizen-agentic (ADR-005 prepare step).
The ADR-005 contract for a scheduled run is `kaizen-agentic schedule
prepare <agent>` executed against the target repo: it bundles the agent
prompt, project memory, metrics summary, and repo pointers from local
`.kaizen/` state offline-safe, no hub required. The worker treats the
bundle as orientation text prepended to the task prompt.
Falls back to an empty bundle when the CLI or the repo's schedule state is
absent, so a task can still run persona-less (logged in run metadata).
"""
from __future__ import annotations
import subprocess
from pathlib import Path
def load_persona_bundle(agent: str, target_repo: Path, timeout: int = 60) -> tuple[str, str]:
"""Return (bundle_text, source) where source is 'prepare' or 'none'."""
try:
result = subprocess.run(
[
"kaizen-agentic",
"schedule",
"prepare",
agent,
"--target",
str(target_repo),
],
capture_output=True,
text=True,
timeout=timeout,
)
except (FileNotFoundError, subprocess.TimeoutExpired):
return "", "none"
if result.returncode != 0 or not result.stdout.strip():
return "", "none"
return result.stdout, "prepare"