Harness foundation: INTENT, ADR-001, architecture, prototype adoption
- INTENT.md: three-layer model (blueprint/instance/harness), single shared runtime, never-become boundaries - ADR-001 (accepted): DEC-2026-002 resolution — one harness repo for all projects; instances are declarative state in consuming repos - docs/architecture.md: components, contracts (manifest, tool profiles, completion events, credential lanes), deployment shape - agent_harness/: executor-worker prototype adopted and renamed (6/6 tests green); HARNESS-WP-0001 initial workplan (7 tasks) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
87ae78c56a
commit
cfc1b75157
18 changed files with 1204 additions and 1 deletions
39
agent_harness/persona.py
Normal file
39
agent_harness/persona.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
"""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"
|
||||
Loading…
Add table
Add a link
Reference in a new issue