clawforge-cli 1.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- clawforge_cli-1.2.0/.github/workflows/ci.yml +26 -0
- clawforge_cli-1.2.0/.github/workflows/publish-npm.yml +24 -0
- clawforge_cli-1.2.0/.github/workflows/publish-pypi.yml +29 -0
- clawforge_cli-1.2.0/.github/workflows/update-homebrew.yml +79 -0
- clawforge_cli-1.2.0/.github/workflows/version-sync.yml +64 -0
- clawforge_cli-1.2.0/.gitignore +19 -0
- clawforge_cli-1.2.0/CHANGELOG.md +92 -0
- clawforge_cli-1.2.0/Formula/clawforge.rb +37 -0
- clawforge_cli-1.2.0/LICENSE +21 -0
- clawforge_cli-1.2.0/PKG-INFO +325 -0
- clawforge_cli-1.2.0/PRD-v05.md +136 -0
- clawforge_cli-1.2.0/PRD-v06.md +146 -0
- clawforge_cli-1.2.0/PRD-v07.md +106 -0
- clawforge_cli-1.2.0/README.md +312 -0
- clawforge_cli-1.2.0/SKILL.md +276 -0
- clawforge_cli-1.2.0/VERSION +1 -0
- clawforge_cli-1.2.0/bin/attach.sh +98 -0
- clawforge_cli-1.2.0/bin/check-agents.sh +343 -0
- clawforge_cli-1.2.0/bin/clawforge +257 -0
- clawforge_cli-1.2.0/bin/clean.sh +257 -0
- clawforge_cli-1.2.0/bin/config.sh +111 -0
- clawforge_cli-1.2.0/bin/conflicts.sh +224 -0
- clawforge_cli-1.2.0/bin/cost.sh +273 -0
- clawforge_cli-1.2.0/bin/dashboard.sh +557 -0
- clawforge_cli-1.2.0/bin/diff.sh +109 -0
- clawforge_cli-1.2.0/bin/doctor.sh +196 -0
- clawforge_cli-1.2.0/bin/eval.sh +217 -0
- clawforge_cli-1.2.0/bin/history.sh +91 -0
- clawforge_cli-1.2.0/bin/init.sh +182 -0
- clawforge_cli-1.2.0/bin/learn.sh +230 -0
- clawforge_cli-1.2.0/bin/logs.sh +126 -0
- clawforge_cli-1.2.0/bin/memory.sh +207 -0
- clawforge_cli-1.2.0/bin/merge-helper.sh +174 -0
- clawforge_cli-1.2.0/bin/multi-review.sh +215 -0
- clawforge_cli-1.2.0/bin/notify.sh +93 -0
- clawforge_cli-1.2.0/bin/on-complete.sh +149 -0
- clawforge_cli-1.2.0/bin/parse-cost.sh +205 -0
- clawforge_cli-1.2.0/bin/pr.sh +167 -0
- clawforge_cli-1.2.0/bin/resume.sh +183 -0
- clawforge_cli-1.2.0/bin/review-mode.sh +163 -0
- clawforge_cli-1.2.0/bin/review-pr.sh +145 -0
- clawforge_cli-1.2.0/bin/routing.sh +88 -0
- clawforge_cli-1.2.0/bin/scope-task.sh +169 -0
- clawforge_cli-1.2.0/bin/spawn-agent.sh +190 -0
- clawforge_cli-1.2.0/bin/sprint.sh +320 -0
- clawforge_cli-1.2.0/bin/steer.sh +107 -0
- clawforge_cli-1.2.0/bin/stop.sh +136 -0
- clawforge_cli-1.2.0/bin/summary.sh +182 -0
- clawforge_cli-1.2.0/bin/swarm.sh +525 -0
- clawforge_cli-1.2.0/bin/templates.sh +244 -0
- clawforge_cli-1.2.0/clawforge/__init__.py +0 -0
- clawforge_cli-1.2.0/clawforge/cli.py +24 -0
- clawforge_cli-1.2.0/config/defaults.json +20 -0
- clawforge_cli-1.2.0/config/prompt-templates/default.md +17 -0
- clawforge_cli-1.2.0/config/routing-defaults.json +6 -0
- clawforge_cli-1.2.0/docs/IMPLEMENTATION-v04.md +213 -0
- clawforge_cli-1.2.0/docs/PRD-v04.md +256 -0
- clawforge_cli-1.2.0/docs/PUBLISHING-CHECKLIST.md +107 -0
- clawforge_cli-1.2.0/docs/README.md +26 -0
- clawforge_cli-1.2.0/docs/RELEASE.md +149 -0
- clawforge_cli-1.2.0/docs/architecture.md +52 -0
- clawforge_cli-1.2.0/docs/command-reference.md +193 -0
- clawforge_cli-1.2.0/docs/configuration.md +40 -0
- clawforge_cli-1.2.0/docs/dashboard.md +46 -0
- clawforge_cli-1.2.0/docs/evaluation.md +31 -0
- clawforge_cli-1.2.0/docs/faq.md +24 -0
- clawforge_cli-1.2.0/docs/fleet-ops.md +34 -0
- clawforge_cli-1.2.0/docs/getting-started.md +92 -0
- clawforge_cli-1.2.0/docs/scenarios.md +63 -0
- clawforge_cli-1.2.0/docs/troubleshooting.md +53 -0
- clawforge_cli-1.2.0/docs/workflow-modes.md +68 -0
- clawforge_cli-1.2.0/evals/run-log.example.jsonl +2 -0
- clawforge_cli-1.2.0/evals/run-log.schema.json +44 -0
- clawforge_cli-1.2.0/evals/scorecard.md +49 -0
- clawforge_cli-1.2.0/install.sh +83 -0
- clawforge_cli-1.2.0/lib/common.sh +302 -0
- clawforge_cli-1.2.0/lib/templates/bugfix.json +6 -0
- clawforge_cli-1.2.0/lib/templates/migration.json +7 -0
- clawforge_cli-1.2.0/lib/templates/refactor.json +6 -0
- clawforge_cli-1.2.0/lib/templates/security-audit.json +5 -0
- clawforge_cli-1.2.0/lib/templates/test-coverage.json +6 -0
- clawforge_cli-1.2.0/package.json +41 -0
- clawforge_cli-1.2.0/pyproject.toml +25 -0
- clawforge_cli-1.2.0/registry/conflicts.jsonl +0 -0
- clawforge_cli-1.2.0/registry/costs.jsonl +0 -0
- clawforge_cli-1.2.0/tests/run-all-tests.sh +34 -0
- clawforge_cli-1.2.0/tests/test-ci-loop.sh +126 -0
- clawforge_cli-1.2.0/tests/test-clean.sh +109 -0
- clawforge_cli-1.2.0/tests/test-cli.sh +90 -0
- clawforge_cli-1.2.0/tests/test-conflicts.sh +139 -0
- clawforge_cli-1.2.0/tests/test-cost.sh +161 -0
- clawforge_cli-1.2.0/tests/test-dashboard.sh +94 -0
- clawforge_cli-1.2.0/tests/test-eval.sh +85 -0
- clawforge_cli-1.2.0/tests/test-foundation.sh +182 -0
- clawforge_cli-1.2.0/tests/test-history.sh +116 -0
- clawforge_cli-1.2.0/tests/test-init.sh +120 -0
- clawforge_cli-1.2.0/tests/test-learn.sh +121 -0
- clawforge_cli-1.2.0/tests/test-management.sh +182 -0
- clawforge_cli-1.2.0/tests/test-memory.sh +116 -0
- clawforge_cli-1.2.0/tests/test-merge.sh +93 -0
- clawforge_cli-1.2.0/tests/test-modes.sh +173 -0
- clawforge_cli-1.2.0/tests/test-multi-repo.sh +186 -0
- clawforge_cli-1.2.0/tests/test-notify.sh +95 -0
- clawforge_cli-1.2.0/tests/test-observability.sh +84 -0
- clawforge_cli-1.2.0/tests/test-openclaw.sh +105 -0
- clawforge_cli-1.2.0/tests/test-power.sh +128 -0
- clawforge_cli-1.2.0/tests/test-practical.sh +103 -0
- clawforge_cli-1.2.0/tests/test-registry.sh +97 -0
- clawforge_cli-1.2.0/tests/test-reliability.sh +108 -0
- clawforge_cli-1.2.0/tests/test-review.sh +73 -0
- clawforge_cli-1.2.0/tests/test-routing.sh +202 -0
- clawforge_cli-1.2.0/tests/test-scope.sh +105 -0
- clawforge_cli-1.2.0/tests/test-spawn.sh +117 -0
- clawforge_cli-1.2.0/tests/test-templates.sh +167 -0
- clawforge_cli-1.2.0/tests/test-tui.sh +120 -0
- clawforge_cli-1.2.0/tests/test-watch.sh +96 -0
- clawforge_cli-1.2.0/tui/PRD.md +106 -0
- clawforge_cli-1.2.0/tui/agent.go +266 -0
- clawforge_cli-1.2.0/tui/animation.go +192 -0
- clawforge_cli-1.2.0/tui/dashboard.go +219 -0
- clawforge_cli-1.2.0/tui/filter.go +68 -0
- clawforge_cli-1.2.0/tui/go.mod +25 -0
- clawforge_cli-1.2.0/tui/go.sum +46 -0
- clawforge_cli-1.2.0/tui/keybindings.go +229 -0
- clawforge_cli-1.2.0/tui/main.go +61 -0
- clawforge_cli-1.2.0/tui/model.go +166 -0
- clawforge_cli-1.2.0/tui/steer.go +69 -0
- clawforge_cli-1.2.0/tui/styles.go +69 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: [main]
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: macos-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- name: Install dependencies
|
|
16
|
+
run: |
|
|
17
|
+
brew install jq tmux
|
|
18
|
+
|
|
19
|
+
- name: Run tests
|
|
20
|
+
run: bash tests/run-all-tests.sh
|
|
21
|
+
|
|
22
|
+
- name: Verify install script
|
|
23
|
+
run: |
|
|
24
|
+
./install.sh --prefix /tmp/clawforge-test
|
|
25
|
+
/tmp/clawforge-test/bin/clawforge version
|
|
26
|
+
/tmp/clawforge-test/bin/clawforge help
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
name: Publish npm
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
publish:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
id-token: write
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- uses: actions/setup-node@v4
|
|
17
|
+
with:
|
|
18
|
+
node-version: 20
|
|
19
|
+
registry-url: https://registry.npmjs.org
|
|
20
|
+
|
|
21
|
+
- name: Publish to npm
|
|
22
|
+
run: npm publish --access public
|
|
23
|
+
env:
|
|
24
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Publish PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
publish:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
id-token: write
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- uses: actions/setup-python@v5
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.12"
|
|
19
|
+
|
|
20
|
+
- name: Install build tools
|
|
21
|
+
run: pip install build
|
|
22
|
+
|
|
23
|
+
- name: Build package
|
|
24
|
+
run: python -m build
|
|
25
|
+
|
|
26
|
+
- name: Publish to PyPI
|
|
27
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
28
|
+
with:
|
|
29
|
+
password: ${{ secrets.PYPI_TOKEN }}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
name: Update Homebrew Tap
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
update-tap:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
|
|
13
|
+
- name: Extract version
|
|
14
|
+
id: version
|
|
15
|
+
run: |
|
|
16
|
+
VERSION="${GITHUB_REF_NAME#v}"
|
|
17
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
18
|
+
echo "tag=$GITHUB_REF_NAME" >> $GITHUB_OUTPUT
|
|
19
|
+
|
|
20
|
+
- name: Get tarball SHA256
|
|
21
|
+
id: sha
|
|
22
|
+
run: |
|
|
23
|
+
TAG="${{ steps.version.outputs.tag }}"
|
|
24
|
+
URL="https://github.com/cyperx84/clawforge/archive/refs/tags/${TAG}.tar.gz"
|
|
25
|
+
SHA=$(curl -sL "$URL" | sha256sum | cut -d" " -f1)
|
|
26
|
+
echo "sha256=$SHA" >> $GITHUB_OUTPUT
|
|
27
|
+
|
|
28
|
+
- name: Update Homebrew tap
|
|
29
|
+
uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
repository: cyperx84/homebrew-tap
|
|
32
|
+
token: ${{ secrets.TAP_TOKEN }}
|
|
33
|
+
path: homebrew-tap
|
|
34
|
+
|
|
35
|
+
- name: Write updated formula
|
|
36
|
+
run: |
|
|
37
|
+
TAG="${{ steps.version.outputs.tag }}"
|
|
38
|
+
SHA="${{ steps.sha.outputs.sha256 }}"
|
|
39
|
+
cat > homebrew-tap/Formula/clawforge.rb << EOF
|
|
40
|
+
class Clawforge < Formula
|
|
41
|
+
desc "Multi-mode coding workflow CLI for orchestrating AI coding agents"
|
|
42
|
+
homepage "https://github.com/cyperx84/clawforge"
|
|
43
|
+
url "https://github.com/cyperx84/clawforge/archive/refs/tags/${TAG}.tar.gz"
|
|
44
|
+
sha256 "${SHA}"
|
|
45
|
+
license "MIT"
|
|
46
|
+
head "https://github.com/cyperx84/clawforge.git", branch: "main"
|
|
47
|
+
|
|
48
|
+
depends_on "bash"
|
|
49
|
+
depends_on "git"
|
|
50
|
+
depends_on "gh"
|
|
51
|
+
depends_on "jq"
|
|
52
|
+
depends_on "tmux"
|
|
53
|
+
|
|
54
|
+
def install
|
|
55
|
+
libexec.install Dir["*"]
|
|
56
|
+
bin.install_symlink libexec/"bin/clawforge" => "clawforge"
|
|
57
|
+
if File.exist?("bin/clawforge-dashboard")
|
|
58
|
+
bin.install "bin/clawforge-dashboard"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
test do
|
|
63
|
+
assert_match "clawforge v", shell_output("#{bin}/clawforge version")
|
|
64
|
+
assert_match "Usage:", shell_output("#{bin}/clawforge help")
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
EOF
|
|
68
|
+
# Fix indentation (heredoc adds leading spaces)
|
|
69
|
+
cd homebrew-tap
|
|
70
|
+
sed -i 's/^ //' Formula/clawforge.rb
|
|
71
|
+
|
|
72
|
+
- name: Commit and push
|
|
73
|
+
run: |
|
|
74
|
+
cd homebrew-tap
|
|
75
|
+
git config user.name "github-actions[bot]"
|
|
76
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
77
|
+
git add Formula/clawforge.rb
|
|
78
|
+
git diff --cached --quiet || git commit -m "Update clawforge to ${{ steps.version.outputs.tag }}"
|
|
79
|
+
git push
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
name: Version Sync
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*'
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
sync-versions:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
with:
|
|
17
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
18
|
+
|
|
19
|
+
- name: Extract version from tag
|
|
20
|
+
id: version
|
|
21
|
+
run: |
|
|
22
|
+
VERSION="${GITHUB_REF_NAME#v}"
|
|
23
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
24
|
+
echo "tag=$GITHUB_REF_NAME" >> $GITHUB_OUTPUT
|
|
25
|
+
|
|
26
|
+
- name: Update VERSION file
|
|
27
|
+
run: echo "${{ steps.version.outputs.version }}" > VERSION
|
|
28
|
+
|
|
29
|
+
- name: Update package.json
|
|
30
|
+
run: |
|
|
31
|
+
jq --arg v "${{ steps.version.outputs.version }}" '.version = $v' package.json > tmp.json && mv tmp.json package.json
|
|
32
|
+
|
|
33
|
+
- name: Update pyproject.toml
|
|
34
|
+
run: |
|
|
35
|
+
sed -i "s/^version = \".*\"/version = \"${{ steps.version.outputs.version }}\"/" pyproject.toml
|
|
36
|
+
|
|
37
|
+
- name: Update Homebrew formula URL
|
|
38
|
+
run: |
|
|
39
|
+
TAG="${{ steps.version.outputs.tag }}"
|
|
40
|
+
sed -i "s|archive/refs/tags/v.*\.tar\.gz|archive/refs/tags/${TAG}.tar.gz|" Formula/clawforge.rb
|
|
41
|
+
|
|
42
|
+
- name: Update Homebrew formula SHA256
|
|
43
|
+
run: |
|
|
44
|
+
TAG="${{ steps.version.outputs.tag }}"
|
|
45
|
+
URL="https://github.com/cyperx84/clawforge/archive/refs/tags/${TAG}.tar.gz"
|
|
46
|
+
SHA=$(curl -sL "$URL" | sha256sum | cut -d' ' -f1)
|
|
47
|
+
if [ -n "$SHA" ] && [ "$SHA" != "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ]; then
|
|
48
|
+
sed -i "/^ url/a\ sha256 \"${SHA}\"" Formula/clawforge.rb
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
- name: Update CHANGELOG header
|
|
52
|
+
run: |
|
|
53
|
+
VERSION="${{ steps.version.outputs.version }}"
|
|
54
|
+
if ! grep -q "## v${VERSION}" CHANGELOG.md; then
|
|
55
|
+
sed -i "s/^# Changelog/# Changelog\n\n## v${VERSION}\n\n_Release notes pending._/" CHANGELOG.md
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
- name: Commit version sync
|
|
59
|
+
run: |
|
|
60
|
+
git config user.name "github-actions[bot]"
|
|
61
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
62
|
+
git add VERSION package.json pyproject.toml Formula/clawforge.rb CHANGELOG.md
|
|
63
|
+
git diff --cached --quiet || git commit -m "chore: sync versions to ${{ steps.version.outputs.tag }}"
|
|
64
|
+
git push origin HEAD:main
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
registry/active-tasks.json
|
|
2
|
+
registry/learnings.jsonl
|
|
3
|
+
registry/cleanup-log.jsonl
|
|
4
|
+
|
|
5
|
+
# Python
|
|
6
|
+
.venv/
|
|
7
|
+
__pycache__/
|
|
8
|
+
*.pyc
|
|
9
|
+
*.pyo
|
|
10
|
+
.pytest_cache/
|
|
11
|
+
|
|
12
|
+
# Build artifacts
|
|
13
|
+
*.egg-info/
|
|
14
|
+
dist/
|
|
15
|
+
build/
|
|
16
|
+
tui/tui
|
|
17
|
+
bin/clawforge-dashboard
|
|
18
|
+
registry/completed-tasks.jsonl
|
|
19
|
+
registry/.lock*
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v1.2.0 — Power Features
|
|
4
|
+
|
|
5
|
+
### User Config (`clawforge config`)
|
|
6
|
+
- Persistent user config at `~/.clawforge/config.json`
|
|
7
|
+
- `config show|get|set|unset|init|path`
|
|
8
|
+
- User config overrides project defaults
|
|
9
|
+
- Configurable defaults for agent, model, timeout, auto-clean, routing, review models
|
|
10
|
+
|
|
11
|
+
### Multi-Model Review (`clawforge multi-review`)
|
|
12
|
+
- Run PRs through multiple AI models in parallel
|
|
13
|
+
- Auto-generates comparison report with severity counts
|
|
14
|
+
- Configurable model list via `review_models` config
|
|
15
|
+
- Supports `--diff-only`, `--output`, `--json`
|
|
16
|
+
|
|
17
|
+
### AI Summary (`clawforge summary`)
|
|
18
|
+
- LLM-generated summary of what an agent accomplished
|
|
19
|
+
- Gathers git diff + tmux output as context
|
|
20
|
+
- Multiple output formats: markdown, text, JSON
|
|
21
|
+
- Save to file with `--save`
|
|
22
|
+
|
|
23
|
+
### Real Cost Parsing (`clawforge parse-cost`)
|
|
24
|
+
- Scrapes Claude Code and Codex output for actual token/cost data
|
|
25
|
+
- Supports patterns from both agent CLIs
|
|
26
|
+
- `--update` writes to costs.jsonl registry
|
|
27
|
+
- `parse-cost all` processes all running agents at once
|
|
28
|
+
|
|
29
|
+
## v1.1.0 — Practical Commands
|
|
30
|
+
|
|
31
|
+
- `resume` — restart failed tasks from existing worktree
|
|
32
|
+
- `diff` — show changes without attaching
|
|
33
|
+
- `pr` — create PR from task branch
|
|
34
|
+
- Watch daemon fires on-complete hooks automatically
|
|
35
|
+
|
|
36
|
+
## v1.0.0 — Milestone Release
|
|
37
|
+
|
|
38
|
+
ClawForge is feature-complete for single-user agent orchestration.
|
|
39
|
+
|
|
40
|
+
### Workflow Modes (v0.4)
|
|
41
|
+
- `sprint` — single agent, full dev cycle (quick/standard modes)
|
|
42
|
+
- `review` — quality gate on existing PRs (+ `--fix`)
|
|
43
|
+
- `swarm` — parallel multi-agent orchestration with task decomposition
|
|
44
|
+
- Management: `steer`, `attach`, `stop`, `watch --daemon`, `status`
|
|
45
|
+
|
|
46
|
+
### Observability (v0.5)
|
|
47
|
+
- Go TUI dashboard with vim keybindings + ASCII forge animation
|
|
48
|
+
- Cost tracking (`cost --summary`)
|
|
49
|
+
- Conflict detection (`conflicts --check`)
|
|
50
|
+
- Workflow templates (`templates list`)
|
|
51
|
+
- CI feedback loop (`--ci-loop`, `--max-ci-retries`)
|
|
52
|
+
- Budget caps (`--budget`)
|
|
53
|
+
- JSON output + webhook notifications
|
|
54
|
+
|
|
55
|
+
### Fleet Ops (v0.6)
|
|
56
|
+
- Multi-repo swarm (`--repos`, `--repos-file`)
|
|
57
|
+
- Model routing strategies (`--routing auto|cheap|quality`)
|
|
58
|
+
- Per-repo agent memory (`memory add|show|search|forget`)
|
|
59
|
+
- Repo initialization (`init --claude-md`)
|
|
60
|
+
- Task history (`history --mode sprint --limit 10`)
|
|
61
|
+
|
|
62
|
+
### Evaluation (v0.6.2)
|
|
63
|
+
- `eval weekly` summaries
|
|
64
|
+
- `eval log` for recording outcomes
|
|
65
|
+
- `eval compare` for week-over-week analysis
|
|
66
|
+
|
|
67
|
+
### Reliability (v0.7)
|
|
68
|
+
- `doctor` — diagnose orphans, stale tasks, disk, branches (+ `--fix`)
|
|
69
|
+
- Signal trap cleanup (SIGINT/SIGTERM)
|
|
70
|
+
- Agent watchdog timeout (`--timeout <minutes>`)
|
|
71
|
+
- Registry file locking for concurrent writes
|
|
72
|
+
- Auto-clean on completion (`--auto-clean`)
|
|
73
|
+
- Registry pruning (`clean --prune-days`)
|
|
74
|
+
- Merged branch cleanup
|
|
75
|
+
- Disk space checks before spawning
|
|
76
|
+
|
|
77
|
+
### TUI Views (v0.8)
|
|
78
|
+
- View modes: all / running / finished (`1`/`2`/`3` + `Tab`)
|
|
79
|
+
- Agent nudge (`n`)
|
|
80
|
+
- Swarm decomposition timeout guard
|
|
81
|
+
- Spawn failure accounting
|
|
82
|
+
|
|
83
|
+
### Observability v2 (v0.9)
|
|
84
|
+
- `logs <id>` — capture agent output from tmux (--follow, --save, --raw)
|
|
85
|
+
- `on-complete` — fire webhooks, notifications, auto-clean on task finish
|
|
86
|
+
- TUI preview pane (`p` key) — live tmux output for selected agent
|
|
87
|
+
|
|
88
|
+
## Architecture
|
|
89
|
+
- Shell modules in `bin/` with shared `lib/common.sh`
|
|
90
|
+
- JSON/JSONL registry state in `registry/`
|
|
91
|
+
- Go TUI (Bubble Tea v2 + Lipgloss v2) in `tui/`
|
|
92
|
+
- 28 test suites covering all commands
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
class Clawforge < Formula
|
|
2
|
+
desc "Multi-mode coding workflow CLI for orchestrating AI coding agents"
|
|
3
|
+
homepage "https://github.com/cyperx84/clawforge"
|
|
4
|
+
url "https://github.com/cyperx84/clawforge/archive/refs/tags/v1.2.0.tar.gz"
|
|
5
|
+
sha256 "6da402969628cc5a0dbafdcfca2596bced80692a714672ccb9e39c45f121465c"
|
|
6
|
+
# sha256 will be filled by CI
|
|
7
|
+
license "MIT"
|
|
8
|
+
head "https://github.com/cyperx84/clawforge.git", branch: "main"
|
|
9
|
+
|
|
10
|
+
depends_on "jq"
|
|
11
|
+
depends_on "tmux"
|
|
12
|
+
depends_on "gh"
|
|
13
|
+
|
|
14
|
+
def install
|
|
15
|
+
# Install shell scripts
|
|
16
|
+
libexec.install Dir["bin/*"]
|
|
17
|
+
libexec.install Dir["lib"]
|
|
18
|
+
libexec.install Dir["tui"]
|
|
19
|
+
libexec.install "VERSION"
|
|
20
|
+
libexec.install "registry"
|
|
21
|
+
|
|
22
|
+
# Create wrapper that sets CLAWFORGE_DIR
|
|
23
|
+
(bin/"clawforge").write <<~EOS
|
|
24
|
+
#!/bin/bash
|
|
25
|
+
export CLAWFORGE_DIR="#{libexec}"
|
|
26
|
+
exec "#{libexec}/clawforge" "$@"
|
|
27
|
+
EOS
|
|
28
|
+
|
|
29
|
+
# Dashboard binary
|
|
30
|
+
bin.install libexec/"clawforge-dashboard"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
test do
|
|
34
|
+
assert_match "clawforge v", shell_output("#{bin}/clawforge version")
|
|
35
|
+
assert_match "Usage:", shell_output("#{bin}/clawforge help")
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 cyperx84
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|