Resolves the contradiction between "Agent is the model" and
"Model is the driver, Harness is the vehicle". All three language
versions now clearly distinguish: agency comes from training,
but a working agent product = model + harness.
Adjust the philosophical framing to resolve the contradiction between
"Agent is the model" and "Model is the driver, Harness is the vehicle".
Now clearly distinguishes: agency comes from training (not coded),
but a working agent product = model + harness.
- agents/s01_agent_loop.py: Add FileNotFoundError/OSError handling in run_bash()
- agents/s04_subagent.py: Same fix + use .get() for block.input['prompt']
(consistent with .get() already used for 'description' on line 157)
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Two issues found during post-merge audit:
1. auto_compact used [:80000] (oldest) instead of [-80000:] (newest), inconsistent with s06
2. nag reminder used insert(0,...) instead of append(), inconsistent with s03
Skip compacting read_file tool outputs since they are reference material.
Compacting them into placeholders forces the agent to re-read the same
files, creating loops. Other tool results are still compacted normally.
Add double-checked validation inside _claim_lock: verify task owner,
status, and blockedBy before claiming. Check claim_task return value
in idle loop to skip failed claims.
Remove unused blocks field and add_blocks parameter. The LLM never
used add_blocks in practice, making it dead code that taught a
misleading bidirectional pattern. Replace with remove_blocked_by
for dependency rewiring. Single-source-of-truth with blockedBy only.
Extends the readability fix from PR #128 (s02) to all remaining sessions.
Tool name and output are now on separate lines, consistent with s01's
existing pattern and improving readability for multi-line tool output.
The reminder was inserted at index 0, placing a text block before
tool_result blocks in the user message content array. Use append
to keep the reminder at the end, consistent with message ordering.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
_parse_frontmatter used manual line splitting which only handled
simple key: value pairs. Multi-line block scalars (|) returned
only '|' as the value, dropping all subsequent indented lines.
Replace with yaml.safe_load() to correctly parse all YAML syntax.
Add pyyaml>=6.0 to requirements.txt.
When running s_full.py directly, the LLM's text responses are not printed to the terminal. Users cannot see the assistant's replies in the REPL, making the interactive loop unusable.
Separate tool name and output for better readability.
Before:
> read_file: anthropic>=0.25.0
python-dotenv>=1.0.0
After:
> read_file:
anthropic>=0.25.0
python-dotenv>=1.0.0
s08/s09/s10/s11/s_full inject background-results and inbox as user
messages before LLM calls. The paired hardcoded assistant "Noted..."
responses were unnecessary — consecutive user messages work fine and
the fake acks added noise with no functional value.
Affected: agents/s08, s09, s10, s11, s_full + docs (zh/en/ja s08, s09)
Comprehensive rewrite establishing the harness engineering narrative
across the entire repository.
README (EN/ZH/JA): added "The Model IS the Agent" manifesto with
historical proof (DQN, OpenAI Five, AlphaStar, Tencent Jueyu),
"What an Agent Is NOT" critique, harness engineer role definition,
"Why Claude Code" as masterclass in harness design, and universe
vision. Consistent framing: model = driver, harness = vehicle.
docs (36 files, 3 languages): injected one-line "Harness layer"
callout after the motto in every session document (s01-s12).
agents (13 Python files): added harness framing comment before
each module docstring.
skills/agent-philosophy.md: full rewrite aligned with harness
narrative.