fix: fix: create .profile repos for all existing bot agents via hire-an-agent (#234) #236
2 changed files with 190 additions and 0 deletions
101
bin/hire-profiles.sh
Executable file
101
bin/hire-profiles.sh
Executable file
|
|
@ -0,0 +1,101 @@
|
|||
#!/usr/bin/env bash
|
||||
# bin/hire-profiles.sh — Create .profile repos for all existing bot agents
|
||||
#
|
||||
# This script runs hire-an-agent for each bot to create their .profile repos.
|
||||
# It should be run from the disinto repository root with a running Forgejo instance.
|
||||
#
|
||||
# Usage:
|
||||
# cd ~/disinto
|
||||
# ./bin/hire-profiles.sh
|
||||
#
|
||||
# Acceptance criteria:
|
||||
# - All bot users have a .profile repo on Forgejo
|
||||
# - Each .profile contains formula.toml, journal/.gitkeep, knowledge/.gitkeep
|
||||
# - architect-bot user exists with a token in .env
|
||||
# - Agents can clone their .profile and write journals on next run
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
DISINTO_ROOT="${SCRIPT_DIR}/.."
|
||||
|
||||
# Ensure we're in the disinto root
|
||||
cd "$DISINTO_ROOT"
|
||||
|
||||
echo "──────────────────────────────────────────────────────────────────────"
|
||||
echo "Creating .profile repos for all bot agents"
|
||||
echo "──────────────────────────────────────────────────────────────────────"
|
||||
echo ""
|
||||
|
||||
# Step 1: architect-bot (full hire — needs user + token + .profile)
|
||||
echo "1. Hiring architect-bot (full hire — needs user + token + .profile)..."
|
||||
echo " Command: ./bin/disinto hire-an-agent architect-bot architect"
|
||||
echo ""
|
||||
./bin/disinto hire-an-agent architect-bot architect
|
||||
echo ""
|
||||
|
||||
# Step 2: dev-bot
|
||||
echo "2. Hiring dev-bot..."
|
||||
echo " Command: ./bin/disinto hire-an-agent dev-bot dev"
|
||||
echo ""
|
||||
./bin/disinto hire-an-agent dev-bot dev
|
||||
echo ""
|
||||
|
||||
# Step 3: review-bot
|
||||
echo "3. Hiring review-bot..."
|
||||
echo " Command: ./bin/disinto hire-an-agent review-bot review --formula formulas/review-pr.toml"
|
||||
echo ""
|
||||
./bin/disinto hire-an-agent review-bot review --formula formulas/review-pr.toml
|
||||
echo ""
|
||||
|
||||
# Step 4: planner-bot
|
||||
echo "4. Hiring planner-bot..."
|
||||
echo " Command: ./bin/disinto hire-an-agent planner-bot planner"
|
||||
echo ""
|
||||
./bin/disinto hire-an-agent planner-bot planner
|
||||
echo ""
|
||||
|
||||
# Step 5: gardener-bot
|
||||
echo "5. Hiring gardener-bot..."
|
||||
echo " Command: ./bin/disinto hire-an-agent gardener-bot gardener"
|
||||
echo ""
|
||||
./bin/disinto hire-an-agent gardener-bot gardener
|
||||
echo ""
|
||||
|
||||
# Step 6: supervisor-bot
|
||||
echo "6. Hiring supervisor-bot..."
|
||||
echo " Command: ./bin/disinto hire-an-agent supervisor-bot supervisor"
|
||||
echo ""
|
||||
./bin/disinto hire-an-agent supervisor-bot supervisor
|
||||
echo ""
|
||||
|
||||
# Step 7: predictor-bot
|
||||
echo "7. Hiring predictor-bot..."
|
||||
echo " Command: ./bin/disinto hire-an-agent predictor-bot predictor"
|
||||
echo ""
|
||||
./bin/disinto hire-an-agent predictor-bot predictor
|
||||
echo ""
|
||||
|
||||
# Step 8: vault-bot (no formula — skip or use a placeholder)
|
||||
echo "8. Hiring vault-bot (no formula — using vault formula)..."
|
||||
echo " Command: ./bin/disinto hire-an-agent vault-bot vault"
|
||||
echo ""
|
||||
./bin/disinto hire-an-agent vault-bot vault
|
||||
echo ""
|
||||
|
||||
# Step 9: dev-qwen
|
||||
echo "9. Hiring dev-qwen..."
|
||||
echo " Command: ./bin/disinto hire-an-agent dev-qwen dev"
|
||||
echo ""
|
||||
./bin/disinto hire-an-agent dev-qwen dev
|
||||
echo ""
|
||||
|
||||
echo "──────────────────────────────────────────────────────────────────────"
|
||||
echo "All .profile repos created!"
|
||||
echo "──────────────────────────────────────────────────────────────────────"
|
||||
echo ""
|
||||
echo "Next steps:"
|
||||
echo " 1. Add FORGE_ARCHITECT_TOKEN=<token> to .env.enc"
|
||||
echo " 2. Run 'disinto secrets encrypt' to encrypt .env"
|
||||
echo " 3. Agents can now clone their .profile repos and write journals"
|
||||
echo ""
|
||||
89
formulas/vault.toml
Normal file
89
formulas/vault.toml
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
# formulas/vault.toml — Vault formula (external action dispatch)
|
||||
#
|
||||
# This formula is used for vault-bot's .profile repo. It defines the vault
|
||||
# action dispatch workflow where vault items are filed and executed by the
|
||||
# vault runner container with injected secrets.
|
||||
#
|
||||
# The vault redesign (#73-#77) implements PR-based approval workflow:
|
||||
# - Agents file vault items via PR to ops repo
|
||||
# - Humans approve via PR review
|
||||
# - Vault runner executes with injected secrets
|
||||
|
||||
name = "vault"
|
||||
description = "Vault action dispatch: file approval requests for external actions"
|
||||
version = 1
|
||||
model = "sonnet"
|
||||
|
||||
[context]
|
||||
files = ["AGENTS.md", "docs/VAULT.md", "vault/vault-env.sh"]
|
||||
|
||||
[[steps]]
|
||||
id = "preflight"
|
||||
title = "Review vault item request"
|
||||
description = """
|
||||
Read the vault item request and validate it follows the vault protocol.
|
||||
|
||||
1. Check the vault item has all required sections:
|
||||
- What — what is needed
|
||||
- Why — what this unblocks and why it matters now
|
||||
- Unblocks — specific issue numbers
|
||||
- Human Action — specific steps the human should take
|
||||
- Factory Will Then — what happens after approval
|
||||
|
||||
2. Verify the human action is specific and actionable (not a decision to be made)
|
||||
|
||||
3. Check for duplicates in vault/pending/, vault/approved/, vault/fired/
|
||||
|
||||
4. Validate the formula referenced exists in $PROJECT_REPO_ROOT/formulas/
|
||||
|
||||
5. Check that external actions go through vault dispatch (not direct)
|
||||
"""
|
||||
needs = []
|
||||
|
||||
[[steps]]
|
||||
id = "create-pr"
|
||||
title = "Create PR to ops repo"
|
||||
description = """
|
||||
Create a PR to the ops repo to file the vault item.
|
||||
|
||||
1. Build vault item TOML:
|
||||
cat > "$OPS_REPO_ROOT/vault/pending/vault-<id>.toml" <<EOF
|
||||
id = "<id>"
|
||||
formula = "<formula-name>"
|
||||
context = "<description>"
|
||||
secrets = []
|
||||
EOF
|
||||
|
||||
2. Create branch and PR:
|
||||
git checkout -b "vault/<id>"
|
||||
git add vault/pending/vault-<id>.toml
|
||||
git commit -m "vault: file <id>"
|
||||
git push -u origin "vault/<id>"
|
||||
# Create PR via API
|
||||
|
||||
3. Add PR description explaining the request and expected outcome
|
||||
"""
|
||||
needs = ["preflight"]
|
||||
|
||||
[[steps]]
|
||||
id = "journal"
|
||||
title = "Write vault journal entry"
|
||||
description = """
|
||||
Append a timestamped entry to the vault journal.
|
||||
|
||||
File path:
|
||||
$OPS_REPO_ROOT/journal/vault/$(date -u +%Y-%m-%d).md
|
||||
|
||||
Format:
|
||||
## Vault run — HH:MM UTC
|
||||
|
||||
### Items filed
|
||||
- <id> — <description>
|
||||
|
||||
### Status
|
||||
- PR #<number> filed, awaiting approval
|
||||
|
||||
After writing the journal, write the phase signal:
|
||||
echo 'PHASE:done' > "$PHASE_FILE"
|
||||
"""
|
||||
needs = ["create-pr"]
|
||||
Loading…
Add table
Add a link
Reference in a new issue