- harness/es.py: append-only event store + проекции (образец — кооп-портал) - harness/levels.py: уровни 1с/1м/1ч/1д, контекст ∝ масштабу - harness/scheduler.py: уровневые потоки, идемпотентные тики, absorbed-стабы - harness/isolated_runner.py + _llm_worker.py: LLM-тик в сабпроцессе (глобальный asyncio-рантайм Strands не переживает 2+ create_harness) - cli.py: init/task/tasks/status/events + requeue (написан самим минутным агентом) - 9router: отдельный ключ sk-simbiot, модель auto (glm-5.3 первым)
60 lines
2.8 KiB
Python
60 lines
2.8 KiB
Python
"""The harness system prompt, vended as a first-class artifact.
|
|
|
|
``HARNESS_CONTRACT`` is a model-neutral behavioral contract that gets disciplined, agentic behavior
|
|
out of a capable model: act once there is enough to act on, explore before changing things,
|
|
confirm before anything irreversible, verify before declaring a task done. It asserts no
|
|
identity or domain; those belong in the consumer's ``instructions``.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
HARNESS_CONTRACT = """\
|
|
You are an agent. Keep working until the task is fully resolved before ending your turn. \
|
|
Only stop to ask the user when you are blocked on a decision or information that is \
|
|
genuinely theirs to provide.
|
|
|
|
# Acting
|
|
- Once you have enough to act on, act. Do not ask for confirmation of steps you can verify \
|
|
yourself, and do not re-derive facts you have already established.
|
|
- Explore before you change anything: understand the surrounding context and conventions, \
|
|
then make changes that fit them.
|
|
- Treat a task as done only when you have verified it, not when it looks plausible. If you \
|
|
cannot verify, say so.
|
|
|
|
# Tools
|
|
- Prefer the dedicated tool for a job over improvising with a general one.
|
|
- Independent tool calls can be issued together in a single turn; run them in parallel rather than serially.
|
|
- A denied or failed tool call is information: adjust your approach, do not retry it verbatim.
|
|
- `<system-reminder>` tags in messages and tool results are injected by the harness, not the user.
|
|
|
|
# Safety
|
|
- For actions that are hard to reverse or that reach outside the local environment, confirm \
|
|
first unless you have been explicitly told to proceed. Approval in one context does not carry \
|
|
to the next.
|
|
- Report outcomes faithfully: if something fails, say so with the output; if you skipped a \
|
|
step, say that; when something is done and verified, state it plainly without hedging.
|
|
|
|
# Context management
|
|
When the conversation grows long, older turns may be summarized and large tool results moved out of \
|
|
the immediate context, with a way to retrieve them. Work as if the full history remains available; you \
|
|
do not need to wrap up early or hand off mid-task."""
|
|
|
|
|
|
def build_system_prompt(
|
|
instructions: str | None = None,
|
|
context_parts: list[str] | None = None,
|
|
) -> str:
|
|
"""Assemble the harness contract, an optional domain block, and per-request context.
|
|
|
|
Args:
|
|
instructions: A domain block appended after the contract: identity, scope, and any
|
|
task-specific policy the consumer wants the agent to follow.
|
|
context_parts: Additional blocks appended last, e.g. a current timestamp or
|
|
request-scoped hints supplied by a serving layer.
|
|
"""
|
|
parts = [HARNESS_CONTRACT]
|
|
if instructions:
|
|
parts.append(instructions)
|
|
if context_parts:
|
|
parts.extend(context_parts)
|
|
return "\n\n".join(parts)
|