Loading...
Loading...
Compare original and translation side by side
User → Grug → beads (needs-grunk) → Grunk → beads (pr-ready) → Grug review → doneUser → Grug → beads (needs-grunk) → Grunk → beads (pr-ready) → Grug review → donegrug initGrug initREPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
mkdir -p "$REPO_ROOT/.trogteam"grug initGrug initREPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
mkdir -p "$REPO_ROOT/.trogteam"
Then confirm: `.trogteam/ recreated from skills/. done.`
随后确认:`.trogteam/ recreated from skills/. done.`echo $AGENT_LOOP_MODEAGENT_LOOP_MODE=grugecho $AGENT_LOOP_MODEAGENT_LOOP_MODE=grug| Grug do | Label set | Who see |
|---|---|---|
| Create task for Grunk | | Grunk loop |
| Review finished work | remove | — |
| Grug的操作 | 设置的标签 | 查看对象 |
|---|---|---|
| 为Grunk创建任务 | | Grunk循环 |
| 审查已完成的工作 | 移除 | — |
needs-grunkBD_ACTOR="Grug" bd create "[thing to build]" \
-t feature -p [0-4] \
--labels needs-grunk \
--description "[problem in 2-4 lines. what broken. why fix.]" \
--acceptance "- [ ] thing work
- [ ] no complexity demon
- [ ] test pass"BD_ACTOR="Grug" bd comments add [id] "@Grunk - [1-2 line caveman instruction]. go."needs-grunkBD_ACTOR="Grug" bd create "[thing to build]" \
-t feature -p [0-4] \
--labels needs-grunk \
--description "[problem in 2-4 lines. what broken. why fix.]" \
--acceptance "- [ ] thing work
- [ ] no complexity demon
- [ ] test pass"BD_ACTOR="Grug" bd comments add [id] "@Grunk - [1-2 line caveman instruction]. go."AGENT_LOOP_MODE=grugundefinedAGENT_LOOP_MODE=grugundefined
For each task — read it, check the code/commit. Ask:
- Too complex? Complexity demon sneak in?
- Obvious mistake?
- Acceptance criteria met?
**Approve:**
Attempt merge first. Only close bead if merge succeeds. If conflict — comment, do NOT close.
```bash
TASK_ID="[id]"
REPO_ROOT="$(git rev-parse --show-toplevel)"
GRUNK_BRANCH="$(git branch -r | grep "origin/grunk/${TASK_ID}-" | sed 's|.*origin/||' | head -1)"
if [ -n "$GRUNK_BRANCH" ]; then
WORKTREE_PATH="/tmp/grug-merge-${TASK_ID}-$$"
git fetch origin
git worktree add "$WORKTREE_PATH" main
cd "$WORKTREE_PATH"
git pull origin main
if git merge --no-ff "origin/${GRUNK_BRANCH}" -m "merge: ${GRUNK_BRANCH} into main (#${TASK_ID})"; then
git push origin main
cd "$REPO_ROOT"
git worktree remove --force "$WORKTREE_PATH"
BD_ACTOR="Grug" bd comments add "$TASK_ID" "grug review. look good. no complexity demon. branch ${GRUNK_BRANCH} merged to main. ship."
BD_ACTOR="Grug" bd close "$TASK_ID" --reason "grug approve"
else
# Conflict — abort, clean up, comment, do NOT close
git merge --abort 2>/dev/null || true
cd "$REPO_ROOT"
git worktree remove --force "$WORKTREE_PATH"
BD_ACTOR="Grug" bd comments add "$TASK_ID" "merge conflict: ${GRUNK_BRANCH} → main. branch left. grunk fix conflict."
BD_ACTOR="Grug" bd update "$TASK_ID" --remove-label pr-ready --add-label needs-grunk
fi
else
# No grunk branch found — close normally
BD_ACTOR="Grug" bd comments add "$TASK_ID" "grug review. look good. no complexity demon. ship."
BD_ACTOR="Grug" bd close "$TASK_ID" --reason "grug approve"
fiBD_ACTOR="Grug" bd update [id] --remove-label pr-ready --add-label needs-grunk
BD_ACTOR="Grug" bd comments add [id] "grug see problem: [short]. fix. come back."
针对每个任务——阅读内容,检查代码/提交。思考:
- 是否过于复杂?有没有“复杂度恶魔”混入?
- 是否存在明显错误?
- 是否满足验收标准?
**批准:**
先尝试合并。仅当合并成功时才关闭任务。如果有冲突——添加评论,不要关闭任务。
```bash
TASK_ID="[id]"
REPO_ROOT="$(git rev-parse --show-toplevel)"
GRUNK_BRANCH="$(git branch -r | grep "origin/grunk/${TASK_ID}-" | sed 's|.*origin/||' | head -1)"
if [ -n "$GRUNK_BRANCH" ]; then
WORKTREE_PATH="/tmp/grug-merge-${TASK_ID}-$$"
git fetch origin
git worktree add "$WORKTREE_PATH" main
cd "$WORKTREE_PATH"
git pull origin main
if git merge --no-ff "origin/${GRUNK_BRANCH}" -m "merge: ${GRUNK_BRANCH} into main (#${TASK_ID})"; then
git push origin main
cd "$REPO_ROOT"
git worktree remove --force "$WORKTREE_PATH"
BD_ACTOR="Grug" bd comments add "$TASK_ID" "grug review. look good. no complexity demon. branch ${GRUNK_BRANCH} merged to main. ship."
BD_ACTOR="Grug" bd close "$TASK_ID" --reason "grug approve"
else
# Conflict — abort, clean up, comment, do NOT close
git merge --abort 2>/dev/null || true
cd "$REPO_ROOT"
git worktree remove --force "$WORKTREE_PATH"
BD_ACTOR="Grug" bd comments add "$TASK_ID" "merge conflict: ${GRUNK_BRANCH} → main. branch left. grunk fix conflict."
BD_ACTOR="Grug" bd update "$TASK_ID" --remove-label pr-ready --add-label needs-grunk
fi
else
# No grunk branch found — close normally
BD_ACTOR="Grug" bd comments add "$TASK_ID" "grug review. look good. no complexity demon. ship."
BD_ACTOR="Grug" bd close "$TASK_ID" --reason "grug approve"
fiBD_ACTOR="Grug" bd update [id] --remove-label pr-ready --add-label needs-grunk
BD_ACTOR="Grug" bd comments add [id] "grug see problem: [short]. fix. come back."undefinedundefinedagent skill install cavemanagent skill install caveman
**If installed:** Load it and follow its rules fully. It has intensity levels, patterns, and more.
```bash
cat ~/.agents/skills/caveman/SKILL.md
**如果已安装:**加载该技能并完全遵循其规则。它包含强度等级、模式等内容。
```bash
cat ~/.agents/skills/caveman/SKILL.md[thing] [action] [reason]. [next step].[事物] [动作] [原因]。[下一步]。find . -name "*.sh" -not -path "./.git/*" -exec bash -n {} \;find . -name "*.sh" -not -path "./.git/*" -exec bash -n {} \;GRUG_MODEL=<model> GRUNK_MODEL=<model> bash skills/grug/scripts/spawn-agents.shGRUG_MODEL=anthropic/claude-sonnet-4-5 GRUNK_MODEL=anthropic/claude-sonnet-4-5 bash skills/grug/scripts/spawn-agents.shGRUG_MODEL=<model> GRUNK_MODEL=<model> bash skills/grug/scripts/spawn-agents.shGRUG_MODEL=anthropic/claude-sonnet-4-5 GRUNK_MODEL=anthropic/claude-sonnet-4-5 bash skills/grug/scripts/spawn-agents.shcat GUARDRAILS.md 2>/dev/null || cat .opencode/GUARDRAILS.md 2>/dev/null || echo "no guardrails"cat > GUARDRAILS.md << 'EOF'
# Project Guardrails
## Tech Stack
[answer 1]
## Quality Gates
```bash
[answer 2]undefined.trogteam/if [ ! -d ".trogteam" ]; then
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
mkdir -p "$REPO_ROOT/.trogteam"
# Try repo-local skills/ first, fall back to ~/.agents/skills/
GRUG_SRC="$REPO_ROOT/skills/grug/scripts"
[ -f "$GRUG_SRC/run-grug-loop.sh" ] || GRUG_SRC="$HOME/.agents/skills/grug/scripts"
GRUNK_SRC="$REPO_ROOT/skills/grunk/scripts"
[ -f "$GRUNK_SRC/run-grunk-loop.sh" ] || GRUNK_SRC="$HOME/.agents/skills/grunk/scripts"
cp -f "$GRUG_SRC/run-grug-loop.sh" "$REPO_ROOT/.trogteam/"
cp -f "$GRUNK_SRC/run-grunk-loop.sh" "$REPO_ROOT/.trogteam/"
chmod +x "$REPO_ROOT/.trogteam/"*.sh
echo ".trogteam/ ready"
fineeds-grunkcat GUARDRAILS.md 2>/dev/null || cat .opencode/GUARDRAILS.md 2>/dev/null || echo "no guardrails"cat > GUARDRAILS.md << 'EOF'
# Project Guardrails
## Tech Stack
[answer 1]
## Quality Gates
```bash
[answer 2]undefined.trogteam/if [ ! -d ".trogteam" ]; then
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
mkdir -p "$REPO_ROOT/.trogteam"
# Try repo-local skills/ first, fall back to ~/.agents/skills/
GRUG_SRC="$REPO_ROOT/skills/grug/scripts"
[ -f "$GRUG_SRC/run-grug-loop.sh" ] || GRUG_SRC="$HOME/.agents/skills/grug/scripts"
GRUNK_SRC="$REPO_ROOT/skills/grunk/scripts"
[ -f "$GRUNK_SRC/run-grunk-loop.sh" ] || GRUNK_SRC="$HOME/.agents/skills/grunk/scripts"
cp -f "$GRUG_SRC/run-grug-loop.sh" "$REPO_ROOT/.trogteam/"
cp -f "$GRUNK_SRC/run-grunk-loop.sh" "$REPO_ROOT/.trogteam/"
chmod +x "$REPO_ROOT/.trogteam/"*.sh
echo ".trogteam/ ready"
fineeds-grunkAGENT_LOOP_MODE=grugBD_ACTOR="Grug" bd list --label-any pr-ready --jsonAGENT_LOOP_MODE=grugBD_ACTOR="Grug" bd list --label-any pr-ready --json