Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
111 commits
Select commit Hold shift + click to select a range
db09b64
feat: Add version flag and command (#13)
aronchick Jan 20, 2026
5d11b1e
feat: Add semver format and JSON output to version command
aronchick Jan 22, 2026
1bcc816
Merge pull request #221 from aronchick/upstream-contrib/version-command
dlorenc Jan 22, 2026
d2cae33
fix: Improve robustness of state and worktree packages
Jan 22, 2026
7d5ac9a
docs: Improve public pkg documentation and test coverage
Jan 22, 2026
57aafac
refactor: CLI package code quality improvements
Jan 22, 2026
f61e510
refactor: Consolidate agent startup logic and add daemon tests
Jan 22, 2026
130b08c
Merge pull request #226 from dlorenc/multiclaude/kind-penguin
dlorenc Jan 22, 2026
910c451
Merge pull request #227 from dlorenc/multiclaude/witty-lion
dlorenc Jan 22, 2026
0b03fd6
Merge pull request #228 from dlorenc/multiclaude/happy-platypus
dlorenc Jan 22, 2026
59759ec
Merge pull request #229 from dlorenc/multiclaude/jolly-elephant
dlorenc Jan 22, 2026
f27c6c1
refactor: Apply code formatting and extract duplicated directory remo…
aronchick Jan 22, 2026
aedc2c7
ci: Add gofmt check to CI workflow (#232)
dlorenc Jan 22, 2026
52060ce
feat: Add agent-templates directory and copy on init (#236)
dlorenc Jan 23, 2026
7546490
feat: Add agent definition infrastructure for issue #233 (#237)
dlorenc Jan 23, 2026
08c8b17
feat: Add supervisor orchestration for agent definitions (issue #233 …
dlorenc Jan 23, 2026
16193f3
refactor: Address PR #238 review suggestions (#239)
dlorenc Jan 23, 2026
e9c22a4
feat: Complete configurable agents implementation (issue #233 PR 4) (…
dlorenc Jan 23, 2026
0372314
refactor: Extract branch cleanup helper to eliminate duplication (#240)
aronchick Jan 23, 2026
3840947
refactor: Use standard repo resolution in addWorkspace (#242)
aronchick Jan 23, 2026
b237e00
test: Improve test coverage across multiple packages (#241)
aronchick Jan 23, 2026
3e45b6e
fix: Correct LoadCustomPrompt filename for merge-queue and add tests …
dlorenc Jan 23, 2026
9b2a5fd
refactor: Extract atomic write helper to eliminate duplication in sta…
aronchick Jan 23, 2026
0740f37
refactor: Consolidate AgentType definitions and deprecate old prompt …
dlorenc Jan 23, 2026
916bea1
docs: Comprehensive documentation for configurable agents feature (#247)
dlorenc Jan 23, 2026
fc6dc2e
ci: Install Claude CLI before E2E tests (#251)
dlorenc Jan 23, 2026
8805e4f
test: Add comprehensive tests for DeleteRemoteBranch function (#249)
aronchick Jan 23, 2026
365d677
test: Add skip condition to TestRestoreDeadAgentsIncludesWorkspace fo…
dlorenc Jan 23, 2026
f320ea7
fix: Skip claude binary startup in daemon during test mode (#254)
dlorenc Jan 23, 2026
3bcee72
fix: Skip claude binary startup in daemon during test mode (#252)
dlorenc Jan 23, 2026
e249aeb
test: Add skip condition to TestHealthCheckCleansUpMarkedAgents for C…
dlorenc Jan 23, 2026
55f8e20
test: Add skip conditions to all tmux-dependent tests for CI compatib…
aronchick Jan 23, 2026
1fc3753
refactor: Eliminate code duplication and fix staticcheck issues (#250)
aronchick Jan 23, 2026
486d95e
fix: Make restore dead agents tests work without tmux (#248)
dlorenc Jan 23, 2026
ca0fd92
test: Add tests for CLI repo management and helper functions (#258)
aronchick Jan 23, 2026
6523ad4
refactor: Add helper methods to reduce code duplication (#257)
aronchick Jan 23, 2026
80eaaf6
ci: Enable TMUX_TESTS=1 for unit tests in CI (#260)
dlorenc Jan 23, 2026
a0468e7
fix: Skip session-creating tmux tests gracefully in headless CI (#265)
dlorenc Jan 23, 2026
e03c437
test: Add comprehensive tests to improve coverage (#269)
dlorenc Jan 23, 2026
35485af
refactor: Extract helper methods to reduce code duplication (#268)
dlorenc Jan 23, 2026
7b75bfa
test: Add createTestSessionOrSkip helper for resilient CI tests (#270)
dlorenc Jan 23, 2026
7e131fd
docs: Add comprehensive extensibility documentation for downstream pr…
aronchick Jan 23, 2026
cab120c
feat: Implement fork-aware workflow with pr-shepherd agent (#267)
Jan 23, 2026
10fc240
fix: Apply gofmt formatting
Jan 23, 2026
6159499
feat: Complete fork-aware workflow features for PR #274
Jan 23, 2026
e394224
Merge pull request #275 from dlorenc/multiclaude/kind-bear
dlorenc Jan 23, 2026
c4cafae
refactor(fork): simplify API and improve test coverage
Jan 23, 2026
f73609f
Merge pull request #276 from dlorenc/multiclaude/happy-penguin
dlorenc Jan 23, 2026
40aa120
fix: Handle existing local branch in --push-to flag
Jan 23, 2026
2779536
Merge pull request #279 from dlorenc/multiclaude/cool-raccoon
dlorenc Jan 23, 2026
ed68d29
refactor(cli): make 'start' an alias for 'daemon start'
Jan 23, 2026
eef1e91
refactor(cli): move message commands from 'agent' to 'message' noun g…
Jan 23, 2026
ad13dda
fix(test): update E2E test for CLI message command restructure
Jan 23, 2026
d95fe40
refactor(cli): rename 'work' command to 'worker' with create subcomma…
Jan 23, 2026
82200b4
refactor(cli): move init, list, history under 'repo' noun group (#234)
Jan 23, 2026
e71cc11
refactor(cli): move 'attach' under 'agent' noun group (#234)
Jan 23, 2026
c10f135
Merge pull request #277 from dlorenc/multiclaude/witty-penguin
dlorenc Jan 23, 2026
15b130f
Merge pull request #273 from aronchick/upstream/extensibility-docs
dlorenc Jan 23, 2026
0dcd835
docs: comprehensive documentation audit and fixes
Jan 24, 2026
eb4c406
Merge pull request #286 from dlorenc/work/silly-tiger
dlorenc Jan 24, 2026
e0cbd3b
refactor: reduce code duplication in worktree and fix unused variable…
dlorenc Jan 24, 2026
42b3f78
test: improve coverage for state and daemon packages (#288)
dlorenc Jan 24, 2026
8d5eb49
docs: add extensibility hints to CLI, daemon, state
aronchick Jan 24, 2026
09d1f9c
docs: align extension docs with code and add verify gate
aronchick Jan 24, 2026
3758cdd
docs: fix documentation accuracy issues across codebase (#291)
dlorenc Jan 24, 2026
b2921b2
docs: add test architecture review report (#293)
dlorenc Jan 24, 2026
e05be49
docs: regenerate directory structure documentation (#292)
dlorenc Jan 24, 2026
3b85381
docs: overhaul README with punchy intro and move detailed docs (#295)
dlorenc Jan 24, 2026
777ad3f
docs: fix incorrect line number reference in SOCKET_API.md (#296)
dlorenc Jan 24, 2026
6b204ef
refactor: extract ParseTrackMode function to reduce code duplication …
dlorenc Jan 24, 2026
1133b7f
ci: add golangci-lint v2.8.0 to CI pipeline (#298)
dlorenc Jan 24, 2026
b8a7c0c
test: add coverage tests for daemon, fork, and worktree packages (#299)
dlorenc Jan 24, 2026
6af72ef
fix: use unused addCommitToRemote function in test (#300)
dlorenc Jan 24, 2026
26ac32b
refactor: dramatically reduce agent prompt verbosity (72% smaller) (#…
dlorenc Jan 24, 2026
0875103
docs: remove dead docs and simplify extensibility section (#303)
dlorenc Jan 24, 2026
161dd33
Resolve conflicts with upstream/main for PR #289
aronchick Jan 24, 2026
6cadc23
Fix docs verification and CI failure for PR #289
aronchick Jan 24, 2026
9afbf27
Use double quotes for regex to avoid syntax errors
aronchick Jan 24, 2026
762ef6d
Add Makefile with verify-docs pre-commit check
aronchick Jan 24, 2026
abbabec
Fix unused verbose variable in verify-docs
aronchick Jan 24, 2026
bc3f9bb
fix: Standardize worker branch naming to multiclaude/ prefix
aronchick Jan 23, 2026
8861625
Fix reference to non-existent EXTENSION_DOCUMENTATION_SUMMARY.md
aronchick Jan 26, 2026
f26e68d
fix: append custom agent definitions to base templates (#328)
dlorenc Jan 28, 2026
19d4421
chore: remove unused yaml.v3 dependency (#318)
aronchick Jan 28, 2026
64fe398
fix: add validation checks to repo init and support dots in GitHub UR…
aronchick Jan 28, 2026
35a6dea
fix: add auto-repair for state inconsistencies in init and workspace …
aronchick Jan 28, 2026
91891e5
feat: add OpenSpec proposal for repo lifecycle management (#317)
aronchick Jan 28, 2026
b212dbc
feat: add multiclaude refresh command for on-demand worktree sync (#314)
aronchick Jan 28, 2026
9112b94
fix(fork): isolate tests from global git config (#310)
aronchick Jan 28, 2026
ab8e2a2
feat: add repo hibernate command to archive and stop work (#315)
aronchick Jan 28, 2026
de5449a
feat: add multiclaude status command for system overview (#316)
aronchick Jan 28, 2026
ff1ab5c
feat: Add environment hygiene and feature integration guidance to wor…
aronchick Jan 28, 2026
3c6b2d7
feat: Add CI guard rails for local validation (#218)
aronchick Jan 28, 2026
f2820ea
test: add daemon handler tests for improved coverage (#330)
dlorenc Jan 28, 2026
9a91824
refactor: add socket response helpers and argument extractors (#331)
dlorenc Jan 28, 2026
dfad1a5
feat: Add task management support and diagnostics endpoint (#313)
aronchick Jan 28, 2026
e447518
feat: enhance repair command to recreate core agents and default work…
aronchick Jan 27, 2026
45747c3
feat(cli): improve help output with categorized commands
aronchick Jan 29, 2026
c8f09e3
feat: Improve CLI help and status display for token awareness
aronchick Jan 29, 2026
f061129
feat: Improve multiclaude refresh with agent-context awareness
aronchick Jan 29, 2026
e1a8906
feat: Add token efficiency guidance to worker template
aronchick Jan 31, 2026
53d76ee
Merge PR #341: Add token efficiency guidance to worker template
whitmo Mar 1, 2026
c7f6a8f
Merge PR #308: Standardize worker branch naming to multiclaude/ prefix
whitmo Mar 1, 2026
45cc8f9
Merge PR #337: Categorized help output
whitmo Mar 1, 2026
4181de2
Merge PR #333: Enhance repair command to recreate core agents
whitmo Mar 1, 2026
be18f85
Merge PR #338: Token warnings in CLI help and status (resolved confli…
whitmo Mar 1, 2026
5c4e111
Merge PR #339: Context-aware refresh
whitmo Mar 1, 2026
227919f
Merge PR #289: Extensibility docs
whitmo Mar 1, 2026
a06d410
test: Add tests for PRs #337, #338, #339, #333 on pr-triage-b2
whitmo Mar 1, 2026
c5f2e63
chore: Remove stale CLI_RESTRUCTURE_PROPOSAL.md
whitmo Mar 1, 2026
85eb30b
fix: Propagate ensureCoreAgents/ensureDefaultWorkspace errors in loca…
whitmo Mar 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,24 @@ jobs:
- name: Build
run: go build -v ./...

lint:
name: Lint
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.25'
cache: true

- name: Run golangci-lint
uses: golangci/golangci-lint-action@v7
with:
version: v2.8.0

unit-tests:
name: Unit Tests
runs-on: ubuntu-latest
Expand All @@ -40,6 +58,8 @@ jobs:
run: sudo apt-get update && sudo apt-get install -y tmux

- name: Run unit tests with coverage
env:
TMUX_TESTS: "1"
run: |
go test -coverprofile=coverage.out -covermode=atomic ./internal/... ./pkg/...
go tool cover -func=coverage.out
Expand Down Expand Up @@ -69,6 +89,8 @@ jobs:
run: sudo apt-get update && sudo apt-get install -y tmux

- name: Check coverage thresholds
env:
TMUX_TESTS: "1"
run: |
go test -coverprofile=coverage.out -covermode=atomic ./internal/... ./pkg/...

Expand Down Expand Up @@ -113,6 +135,14 @@ jobs:
git config --global user.email "ci@github.com"
git config --global user.name "GitHub CI"

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install Claude CLI
run: npm install -g @anthropic-ai/claude-code

- name: Run e2e tests
run: go test -v ./test/...

Expand Down
23 changes: 23 additions & 0 deletions .github/workflows/verify-docs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Verify Docs

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
verify-docs:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.25'
cache: true

- name: Verify extension docs are in sync with code
run: go run ./cmd/verify-docs
100 changes: 100 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
version: "2"

linters:
default: standard
enable:
- gocritic
- misspell
settings:
errcheck:
# Don't check type assertions (too noisy for map access patterns)
check-type-assertions: false
# Exclude common patterns where ignoring errors is acceptable
exclude-functions:
# File operations that are safe to ignore in defer
- (io.Closer).Close
- (*os.File).Close
- (net.Conn).Close
- (net.Listener).Close
- (*net.UnixConn).Close
- (*net.UnixListener).Close
# Exec commands in cleanup contexts
- (*os/exec.Cmd).Run
# Printf-like functions where errors are typically ignored
- (*github.com/fatih/color.Color).Printf
- (*github.com/fatih/color.Color).Print
- fmt.Printf
- fmt.Println
- fmt.Print
- fmt.Scanln
- fmt.Sscanf
# JSON encoding where error handling is optional
- (*encoding/json.Encoder).Encode
# OS operations that are best-effort cleanup
- os.Remove
- os.RemoveAll
- os.Setenv
- os.Unsetenv
- os.Chdir
- os.Chmod
- os.MkdirAll
- os.WriteFile
# Daemon/server stop operations in cleanup
- (*github.com/dlorenc/multiclaude/internal/daemon.Daemon).Stop
- (*github.com/dlorenc/multiclaude/internal/daemon.Daemon).Start
# Tmux cleanup operations
- (*github.com/dlorenc/multiclaude/pkg/tmux.Client).KillSession
- (*github.com/dlorenc/multiclaude/pkg/tmux.Client).KillWindow
- (*github.com/dlorenc/multiclaude/pkg/tmux.Client).SendKeysLiteral
# State operations that are often best-effort
- (*github.com/dlorenc/multiclaude/internal/state.State).AddRepo
- (*github.com/dlorenc/multiclaude/internal/state.State).AddAgent
- (*github.com/dlorenc/multiclaude/internal/state.State).RemoveAgent
- (*github.com/dlorenc/multiclaude/internal/state.State).UpdateAgent
- (*github.com/dlorenc/multiclaude/internal/state.State).ClearAllAgents
- (*github.com/dlorenc/multiclaude/internal/state.State).Save
- (*github.com/dlorenc/multiclaude/internal/state.State).SetCurrentRepo
# Worktree removal in cleanup
- (*github.com/dlorenc/multiclaude/internal/worktree.Manager).Remove
# CLI operations in tests
- (*github.com/dlorenc/multiclaude/internal/cli.CLI).Execute
- (*github.com/dlorenc/multiclaude/internal/cli.CLI).showVersion
- (*github.com/dlorenc/multiclaude/internal/cli.CLI).showHelp
# Socket server cleanup
- (*github.com/dlorenc/multiclaude/internal/socket.Server).Stop
- (*github.com/dlorenc/multiclaude/internal/socket.Server).Serve
# Logger cleanup
- (*github.com/dlorenc/multiclaude/internal/logging.Logger).Close
gocritic:
disabled-checks:
# Allow if-else chains for simple conditions
- ifElseChain
# Allow deprecation comments in various formats
- deprecatedComment
# Allow else { if } patterns in some cases
- elseif
staticcheck:
checks:
- all
# Disable strict style checks
- -ST1000 # Package comments - not critical for internal packages
- -ST1020 # Method comment form - too strict
- -ST1021 # Type comment form - too strict
- -ST1022 # Const comment form - too strict
- -QF1003 # Don't require tagged switch
- -SA9003 # Empty branches are intentional for error handling
- -QF1012 # Allow WriteString with fmt.Sprintf (more readable)

formatters:
enable:
- gofmt

issues:
# Show all issues from a linter
max-issues-per-linter: 0
# Show all issues with the same text
max-same-issues: 0

run:
timeout: 5m
tests: true
4 changes: 2 additions & 2 deletions .multiclaude/REVIEWER.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ After every 4-5 PRs have been merged, spawn the following maintenance agents:
Spawn a worker to look for opportunities to refactor and simplify the codebase:

```bash
multiclaude work "Review the codebase for refactoring opportunities: look for duplicated code, overly complex functions, unused code, and areas that could be simplified. Create a PR with any improvements found. Focus on small, safe changes that improve readability and maintainability without changing behavior."
multiclaude worker create "Review the codebase for refactoring opportunities: look for duplicated code, overly complex functions, unused code, and areas that could be simplified. Create a PR with any improvements found. Focus on small, safe changes that improve readability and maintainability without changing behavior."
```

**Focus areas:**
Expand All @@ -24,7 +24,7 @@ multiclaude work "Review the codebase for refactoring opportunities: look for du
Spawn a worker to check test coverage and fill gaps:

```bash
multiclaude work "Analyze test coverage across the codebase. Run 'go test -coverprofile=coverage.out ./...' to identify packages with low coverage. Add tests for uncovered or under-tested code paths, prioritizing critical business logic and error handling. Create a PR with the new tests."
multiclaude worker create "Analyze test coverage across the codebase. Run 'go test -coverprofile=coverage.out ./...' to identify packages with low coverage. Add tests for uncovered or under-tested code paths, prioritizing critical business logic and error handling. Create a PR with the new tests."
```

**Focus areas:**
Expand Down
53 changes: 40 additions & 13 deletions ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -281,22 +281,49 @@ The CLI handles user commands and communicates with the daemon.
**Command Tree:**
```
multiclaude
├── start # Start daemon
├── start # Start daemon (alias for daemon start)
├── stop-all [--clean] # Stop everything
├── init <url> # Initialize repo
├── list # List repos
├── work <task> # Create worker
├── repo
│ ├── init <url> # Initialize repo
│ ├── list # List repos
│ ├── rm <name> # Remove repo
│ ├── use <name> # Set default repo
│ ├── current # Show default repo
│ ├── unset # Clear default repo
│ └── history # Show task history
├── worker
│ ├── create <task> # Create worker
│ ├── list # List workers
│ └── rm <name> # Remove worker
├── workspace
│ ├── add <name> # Add workspace
│ ├── list # List workspaces
│ ├── connect <name> # Connect to workspace
│ └── rm <name> # Remove workspace
├── agent
│ ├── send-message <to> <msg>
│ ├── list-messages
│ ├── read-message <id>
│ ├── ack-message <id>
│ └── complete
├── attach <name> # Attach to tmux window
│ ├── attach <name> # Attach to tmux window
│ ├── complete # Signal completion
│ ├── restart <name> # Restart crashed agent
│ ├── send-message # (alias for message send)
│ ├── list-messages # (alias for message list)
│ ├── read-message # (alias for message read)
│ └── ack-message # (alias for message ack)
├── message
│ ├── send <to> <msg> # Send message
│ ├── list # List messages
│ ├── read <id> # Read message
│ └── ack <id> # Acknowledge message
├── agents
│ ├── list # List agent definitions
│ ├── spawn # Spawn from prompt file
│ └── reset # Reset to defaults
├── cleanup [--dry-run] # Clean orphaned resources
├── repair # Fix state
├── review <pr-url> # Spawn review agent
├── config # View/modify repo config
├── logs # View agent logs
├── bug # Generate diagnostic report
├── version # Show version
└── daemon
├── start
├── stop
Expand All @@ -309,7 +336,7 @@ multiclaude
### Repository Initialization

```
User: multiclaude init https://github.com/org/repo
User: multiclaude repo init https://github.com/org/repo

CLI Daemon System
│ │ │
Expand Down Expand Up @@ -339,7 +366,7 @@ CLI Daemon System
### Worker Creation

```
User: multiclaude work "Add unit tests"
User: multiclaude worker create "Add unit tests"

CLI Daemon System
│ │ │
Expand All @@ -360,7 +387,7 @@ CLI Daemon System
### Message Delivery

```
Agent A: multiclaude agent send-message agent-b "Hello"
Agent A: multiclaude message send agent-b "Hello"

CLI Daemon System
│ │ │
Expand Down
Loading