From 106f801e3c97ed329f28f7dd186b77d12f3d6bd5 Mon Sep 17 00:00:00 2001 From: h Date: Sun, 6 Sep 2026 23:54:37 +0200 Subject: [PATCH] feat(prompts,agents,voice): the voice agent gets the beaver voice, its own environment and overlay --- beaver_agent/agents.py | 4 +--- beaver_agent/prompts.py | 5 +++++ beaver_agent/voice/__init__.py | 3 +-- beaver_agent/voice/texts.py | 23 +---------------------- 4 files changed, 8 insertions(+), 27 deletions(-) diff --git a/beaver_agent/agents.py b/beaver_agent/agents.py index 199c523..35e32fa 100644 --- a/beaver_agent/agents.py +++ b/beaver_agent/agents.py @@ -22,7 +22,6 @@ from beaver_agent.policy import ( ) from beaver_agent.vault import TZ, VAULT from beaver_agent.voice import AGENT as VOICE -from beaver_agent.voice import PROMPT as VOICE_PROMPT if TYPE_CHECKING: from beaver_gateway.agents.base import BaseAgent @@ -114,8 +113,7 @@ def voice(name: str, model: str) -> ClaudeAgent: name=name, model=model, cwd=Path("/tmp"), # noqa: S108 - system_prompt=VOICE_PROMPT, - kinds=("branch",), + prompts=prompts.VOICE_AGENT, options=ClaudeOptions(tools=(), disallowed_tools=TRIAGE_DISALLOWED), ) diff --git a/beaver_agent/prompts.py b/beaver_agent/prompts.py index beb642c..316d9db 100644 --- a/beaver_agent/prompts.py +++ b/beaver_agent/prompts.py @@ -58,3 +58,8 @@ CURATOR = Prompts(job=(*BASE, environment("джоб"), overlay("curator", "ку QUICK = assemble((*VOICE, PROFILE, overlay("quick", "быстрый"))) """Raycast-агенты: голос и профиль одной строкой, без vault.""" + +VOICE_AGENT = Prompts( + branch=(*VOICE, environment("голосовой"), overlay("voice", "голосовой")) +) +"""Колонки: голос целиком, но без профиля, поправок и карты - vault ему не виден.""" diff --git a/beaver_agent/voice/__init__.py b/beaver_agent/voice/__init__.py index aad55ba..dfcfd73 100644 --- a/beaver_agent/voice/__init__.py +++ b/beaver_agent/voice/__init__.py @@ -1,14 +1,13 @@ """Голосовые точки по квартире: своя ветка, свой дешёвый агент, свои ключи.""" from beaver_agent.voice.frontend import VoiceFrontend -from beaver_agent.voice.texts import KEY, PROMPT, TITLE +from beaver_agent.voice.texts import KEY, TITLE from beaver_agent.voice.thread import AGENT, FRONTEND, current, open_thread, rotate __all__ = [ "AGENT", "FRONTEND", "KEY", - "PROMPT", "TITLE", "VoiceFrontend", "current", diff --git a/beaver_agent/voice/texts.py b/beaver_agent/voice/texts.py index 1875ea8..0d3e0d1 100644 --- a/beaver_agent/voice/texts.py +++ b/beaver_agent/voice/texts.py @@ -1,4 +1,4 @@ -"""Что голосовой агент читает как промпт и что видно в его телеграм-ветке.""" +"""Что видно в телеграм-ветке голосовых точек; промпт - гранулы vault.""" from __future__ import annotations @@ -8,27 +8,6 @@ TITLE = "🎤 Голосовой" KEY = "квартира" """Ключ единственного треда: одна ветка на всю квартиру.""" -PROMPT = """\ -Ты - голос из колонки в квартире. Отвечаешь вслух: одна-две фразы, без -markdown, без списков, без ссылок, без эмодзи. Не знаешь - так и говори, -коротко. - -Перед словами в квадратных скобках - комната и устройство, откуда говорят. -С тобой говорят гости и домашние, кто именно - неизвестно. - -Про хозяина дома ты не знаешь ничего и ничего о нём не рассказываешь: ни -имени, ни дел, ни планов, ни календаря, ни переписок, ни файлов, ни его -знакомых - и даже того, что такие записи где-то есть. Спрашивают о нём - -скажи, что этого не знаешь, и предложи спросить у него самого. Придумывать -вместо ответа нельзя. - -Инструментов у тебя нет: ни файлов, ни поиска, ни календаря, ни умного дома. -Всё, что ты умеешь, - разговаривать. - -Иногда в этой же ветке пишет сам хозяин, из телеграма. Ему отвечаешь так же -коротко, и правила про него не отменяются. -""" - ASKED = "🎤 {room} · {device}\n{text}" """Вопрос, как он показывается в телеграм-ветке."""