feat(config,compose): prompt tags in config, voice granule folder, runner config dir and .claude.json in entrypoint
This commit is contained in:
@@ -59,9 +59,10 @@ container, no dialogs. The token draws from your subscription limits like
|
|||||||
regular Claude Code; rotate it by running `claude setup-token` again.
|
regular Claude Code; rotate it by running `claude setup-token` again.
|
||||||
|
|
||||||
Claude agents run on the Claude Agent SDK. Prompts are granules under
|
Claude agents run on the Claude Agent SDK. Prompts are granules under
|
||||||
`мета/бобер/промпты/` in the vault, skills are the folders under
|
`мета/бобер/промпты/` in the vault - plain markdown, the `<tag>` wrappers
|
||||||
`мета/бобер/скиллы/` (each becomes a plugin), so the vault must be synced
|
and the order live in `config.py`; skills are the folders under
|
||||||
before the gateway can start. The model process runs as `beaver-runner`
|
`мета/бобер/скиллы/` (each becomes a plugin, keep `name:` in SKILL.md
|
||||||
|
latin). The vault must be synced before the gateway can start. The model process runs as `beaver-runner`
|
||||||
with a whitelisted environment; the vault is read-only for it except
|
with a whitelisted environment; the vault is read-only for it except
|
||||||
`мета/бобер` and `💬 чаты`.
|
`мета/бобер` and `💬 чаты`.
|
||||||
|
|
||||||
|
|||||||
@@ -22,22 +22,43 @@ PROMPTS = BEAVER / "промпты"
|
|||||||
GRANULES = PROMPTS / "гранулы"
|
GRANULES = PROMPTS / "гранулы"
|
||||||
SKILLS = BEAVER / "скиллы"
|
SKILLS = BEAVER / "скиллы"
|
||||||
|
|
||||||
VOICE = GRANULES / "голос.md"
|
# Гранулы - чистый markdown; xml-теги, в которые они заворачиваются,
|
||||||
PROFILE = PROMPTS / "профиль.md"
|
# живут здесь. Голос - папка, файл на тег, в этом порядке.
|
||||||
CORRECTIONS = PROMPTS / "поправки.md"
|
VOICE = tuple(
|
||||||
VAULT_MAP = GRANULES / "карта-vault.md"
|
(tag, GRANULES / "голос" / f"{tag}.md")
|
||||||
|
for tag in (
|
||||||
|
"role",
|
||||||
|
"philosophy",
|
||||||
|
"user_profile",
|
||||||
|
"operating_modes",
|
||||||
|
"how_you_operate",
|
||||||
|
"interaction_guidelines",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
PROFILE = ("profile", PROMPTS / "профиль.md")
|
||||||
|
CORRECTIONS = ("corrections", PROMPTS / "поправки.md")
|
||||||
|
VAULT_MAP = ("vault_map", GRANULES / "карта-vault.md")
|
||||||
|
|
||||||
|
|
||||||
|
def environment(kind: str) -> tuple[str, Path]:
|
||||||
|
return ("environment", GRANULES / "окружения" / f"{kind}.md")
|
||||||
|
|
||||||
|
|
||||||
|
def overlay(tag: str, name: str) -> tuple[str, Path]:
|
||||||
|
return (tag, GRANULES / f"{name}.md")
|
||||||
|
|
||||||
|
|
||||||
# §4.2: сборки промптов. Окружение kind'а - константная гранула, экземплярное
|
# §4.2: сборки промптов. Окружение kind'а - константная гранула, экземплярное
|
||||||
# (файл, топик) едет первым сообщением. Диспетчер/дистиллятор/триаж - M1b+.
|
# (файл, топик) едет первым сообщением. Диспетчер/дистиллятор/триаж - M1b+.
|
||||||
DEEP_PROMPT = (
|
DEEP_PROMPT = (
|
||||||
VOICE,
|
*VOICE,
|
||||||
PROFILE,
|
PROFILE,
|
||||||
CORRECTIONS,
|
CORRECTIONS,
|
||||||
VAULT_MAP,
|
VAULT_MAP,
|
||||||
GRANULES / "окружения" / "глубокий.md",
|
environment("глубокий"),
|
||||||
GRANULES / "глубокий.md",
|
overlay("deep", "глубокий"),
|
||||||
)
|
)
|
||||||
QUICK_PROMPT = (VOICE, PROFILE, GRANULES / "быстрый.md")
|
QUICK_PROMPT = assemble((*VOICE, PROFILE, overlay("quick", "быстрый")))
|
||||||
|
|
||||||
# §4.3: наборы скиллов = папки = плагины. Глубокие грузят общие + vault.
|
# §4.3: наборы скиллов = папки = плагины. Глубокие грузят общие + vault.
|
||||||
DEEP_SKILLS = (SKILLS / "общие", SKILLS / "vault")
|
DEEP_SKILLS = (SKILLS / "общие", SKILLS / "vault")
|
||||||
@@ -139,7 +160,7 @@ def raycast(name: str, model: str, reasoning_effort: str | None = None) -> Rayca
|
|||||||
return RaycastAgent(
|
return RaycastAgent(
|
||||||
name=name,
|
name=name,
|
||||||
model=model,
|
model=model,
|
||||||
system_prompt=assemble(QUICK_PROMPT),
|
system_prompt=QUICK_PROMPT,
|
||||||
reasoning_effort=reasoning_effort,
|
reasoning_effort=reasoning_effort,
|
||||||
available_native_tools=(RemoteTool.WEB_SEARCH, RemoteTool.READ_PAGE),
|
available_native_tools=(RemoteTool.WEB_SEARCH, RemoteTool.READ_PAGE),
|
||||||
user_preferences=UserPrefsRu,
|
user_preferences=UserPrefsRu,
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ services:
|
|||||||
set -e
|
set -e
|
||||||
runner=beaver-runner
|
runner=beaver-runner
|
||||||
mkdir -p /home/$$runner/.claude
|
mkdir -p /home/$$runner/.claude
|
||||||
|
[ -e /home/$$runner/.claude/.claude.json ] || echo '{}' > /home/$$runner/.claude/.claude.json
|
||||||
chown -R $$runner /home/$$runner
|
chown -R $$runner /home/$$runner
|
||||||
for d in "/vault/мета/бобер" "/vault/💬 чаты"; do
|
for d in "/vault/мета/бобер" "/vault/💬 чаты"; do
|
||||||
setfacl -R -m "u:$$runner:rwX" -m "d:u:$$runner:rwX" "$$d" \
|
setfacl -R -m "u:$$runner:rwX" -m "d:u:$$runner:rwX" "$$d" \
|
||||||
|
|||||||
Reference in New Issue
Block a user