Dulus
선택한 모델로 데스크톱·터미널에서 동작하는 AI 에이전트, 모델은 Fuel에 호스팅되고 $DULUS로 결제
AI 코딩 에이전트가 되돌리기 어려운 행동 전에 확인하도록 하고, 결정·가드레일·구축·검토·인간 승인·학습 6단계 과정을 포함한다
Make AI coding agents ask before hard-to-undo actions, and cover a 6-step cycle: decide, guardrails, build, review, human gate, learn. Claude Code · OpenCode · Codex
기타GitHub @sebabottero온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Make your AI coding agent ask before git push, rm -rf or reading your SSH keys, and stop burning tokens without noticing.
One folder configures Claude Code, OpenCode and Codex the same way, on every machine.
Without ai-setup: agent runs `git push --force origin main` → done, no questions
With ai-setup: agent runs `git push --force origin main` → 🔴 "needs your explicit OK"
The guard (a small script that checks every shell command the agent wants to run) on real commands:
$ echo '{"tool":"bash","command":"git push origin main"}' | python3 core/guard/guard.py
{"decision": "ask", "reason": "🔴 high risk: 'git push origin main' needs your explicit OK (policy: git push *)"}
$ echo '{"tool":"bash","command":"git status"}' | python3 core/guard/guard.py
{"decision": "allow", "reason": ""}
agent runs a command
│
▼
guard.py (reads policy.json, composed into build/policy.json)
├─► allow ─► runs, no prompt git status, ls, grep
├─► ask ─► you approve, then runs git push, git reset --hard, git clean
└─► deny ─► blocked .env.local, SSH and cloud credentials
│
▼
OS sandbox (Claude only): the wall if the guard misses something
The rules are plain JSON in core/policy.json (shortened here):
{
"ask_commands": ["git push *", "git reset --hard*", "git clean *"],
"allow_commands": ["git status", "git diff *", "ls *"],
"deny_files": [".env.local", "*.env.local"],
"deny_home_dirs": ["~/.ssh", "~/.aws"]
}
A layer can add rules, never weaken core/. More in Reference.
macOS with Homebrew and python3, or Linux with python3.
git clone https://github.com/sebabottero/ai-setup.git ~/Dev/ai-setup # clone into the final path: the links point to it
cd ~/Dev/ai-setup
./bootstrap.py --dry-run # shows what it would install, changes nothing
./bootstrap.py # tools, then ./install.sh (runs the tests, backs up whatever it replaces)
| 🛡 Asks before anything hard to undo | One policy.json and one guard decide allow / ask / deny for every shell command. Secrets are a hard deny. Claude also gets an OS sandbox from the same policy. |
| 💸 Spends fewer tokens | coach picks model and effort before you start, and flags big PDFs/docs to convert first. A hook warns when the context passes 100k. usage_report.py audits your own sessions, locally. |
| 🔀 Same rules in every tool | Write rules, skills and agents once. They install into Claude Code, OpenCode and Codex. Your private bits live in layers (extra folders that add rules on top), not in a fork. |
| 🧱 Repos that keep their rules | repo-guardrails prepares any repo with a short AGENTS.md, a one-line CLAUDE.md, architecture tests that fail the build and a minimal CI. Only the file-scan test is verified; other languages are marked untested. |
| 🔁 A full cycle, not just tools | From ticket to merge, each of 6 steps has a skill or a gate behind it (one writer per ticket, independent review, you decide). See The cycle. |
The guard is one piece. Around it, the whole loop of working with an AI agent, from ticket to merge:
1 Decide ─► 2 Guardrails ─► 3 Build ─► 4 Independent ─► 5 Human ─► 6 Learn
review gate │
▲ │
└──────────────── a repeated mistake becomes a rule ◄──────────────┘
| # | Step | Covered by |
|---|---|---|
| 1 | Decide | grillme interviews you and writes criteria.md: goal, out of scope, done criteria, and ## Slices when it should be several small PRs; ticket-flow Gate 1 shows a single-PR or split verdict |
| 2 | Guardrails | repo-guardrails: AGENTS.md templates (rules marked E: or with an expiry date), risk tiers, CI |
| 3 | Build | ticket-flow orchestrates, sub-builder writes, sub-tester writes one test per criterion |
| 4 | Independent review | sub-review checks the diff against criteria.md; the merge gate requires its report; ticket-flow re-reviews the committed PR against criteria.md and posts it as a PR comment only with your OK |
| 5 | Human gate | ticket-flow Gate 2 plus the guard's ask on commit, push and merge: you decide |
| 6 | Learn | meta-setup turns a repeated mistake into a rule; ai-audit is the periodic check |
Details per step in the cheatsheet.
Example output: the author's own month of use (python3 -I adapters/claude/usage_report.py 30; reads only your local transcripts, sends nothing):
Sessions: 149 | over 150k: 35 (23%) | over 300k: 9 | peak: 772k
Turns by model: claude-sonnet-5-5 60%, claude-opus-5-5 39%
Guard: 1233 allowed, 352 asked, 4 denied. Rules that fire most: outside-sandbox 123, git push * 80
/coach before a task (example): model and effort, plus your request rewritten as goal · done when · out of scope · start from.
Every ~30 days tune-setup (Claude only) re-tunes it from your own /insights data, and edits only after you approve.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗