{"id":45897107,"url":"https://github.com/greynewell/claude-software-factory","last_synced_at":"2026-03-06T04:01:05.100Z","repository":{"id":341046309,"uuid":"1168672456","full_name":"greynewell/claude-software-factory","owner":"greynewell","description":"Open an issue. Get a pull request. 6 GitHub Actions workflows that turn any repo into a self-running software factory powered by Claude Code.","archived":false,"fork":false,"pushed_at":"2026-03-02T18:56:07.000Z","size":158,"stargazers_count":3,"open_issues_count":59,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-03T01:49:47.288Z","etag":null,"topics":["ai","ai-coding","automation","claude","claude-code","devops","github-actions","github-template","software-factory","template"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/greynewell.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-27T17:01:23.000Z","updated_at":"2026-03-02T18:56:11.000Z","dependencies_parsed_at":"2026-03-03T01:03:33.320Z","dependency_job_id":null,"html_url":"https://github.com/greynewell/claude-software-factory","commit_stats":null,"previous_names":["greynewell/claude-software-factory"],"tags_count":97,"template":true,"template_full_name":null,"purl":"pkg:github/greynewell/claude-software-factory","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greynewell%2Fclaude-software-factory","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greynewell%2Fclaude-software-factory/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greynewell%2Fclaude-software-factory/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greynewell%2Fclaude-software-factory/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/greynewell","download_url":"https://codeload.github.com/greynewell/claude-software-factory/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/greynewell%2Fclaude-software-factory/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30069218,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T01:03:42.280Z","status":"online","status_checked_at":"2026-03-04T02:00:07.464Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-coding","automation","claude","claude-code","devops","github-actions","github-template","software-factory","template"],"created_at":"2026-02-27T21:14:04.942Z","updated_at":"2026-03-04T02:00:48.026Z","avatar_url":"https://github.com/greynewell.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Claude Software Factory\n\n**Open an issue. Get a pull request.**\n\nSix workflow files that turn any GitHub repo into a self-running software factory. You write issues. [Claude Code](https://docs.anthropic.com/en/docs/claude-code) writes the code, reviews PRs, fixes comments, merges when CI is green, tags releases, and scans for bugs — in a loop.\n\nNo application code. No runtime. No server. Just GitHub Actions.\n\n## What happens when you create an issue\n\n1. You open a GitHub issue ending with `@claude`\n2. Claude reads the issue, creates a branch, writes the code, opens a PR\n3. A second Claude instance reviews the PR and posts comments\n4. If there are review comments, Claude fixes them automatically\n5. When CI is green and reviews pass, the PR gets merged\n6. A semver tag is created from the commit message\n7. An hourly scan finds new bugs and TODOs — files more issues — and the loop continues\n\n## The Lifecycle\n\n```\n ┌─────────────────────────────────────────────────────────────┐\n │                                                             │\n │   ┌──────────┐    ┌──────────────┐    ┌──────────────┐     │\n │   │  ISSUE   │───▶│ AUTO-ASSIGN  │───▶│  CLAUDE CODE │     │\n │   │ created  │    │ @claude      │    │  implements   │     │\n │   └──────────┘    └──────────────┘    └──────┬───────┘     │\n │        ▲                                      │             │\n │        │                                      ▼             │\n │   ┌────┴─────┐                         ┌──────────────┐    │\n │   │ PROACTIVE│                         │  PULL REQUEST │    │\n │   │ SCANNER  │                         │  opened       │    │\n │   │ (hourly) │                         └──────┬───────┘    │\n │   └──────────┘                                │             │\n │        ▲                                      ▼             │\n │        │                              ┌───────────────┐    │\n │        │                              │  CODE REVIEW   │    │\n │        │                              │  (automated)   │    │\n │        │                              └───────┬───────┘    │\n │        │                                      │             │\n │        │                                      ▼             │\n │        │                              ┌───────────────┐    │\n │        │                              │  PR SHEPHERD   │    │\n │        │                              │  fix comments  │    │\n │        │                              │  check CI      │    │\n │        │                              │  merge when    │    │\n │        │                              │  ready         │    │\n │        │                              └───────┬───────┘    │\n │        │                                      │             │\n │        │         ┌──────────────┐             │             │\n │        │         │  AUTO-TAG    │◀────────────┘             │\n │        └─────────│  semantic    │     (merged to main)      │\n │                  │  versioning  │                            │\n │                  └──────────────┘                            │\n │                                                             │\n └─────────────────────────────────────────────────────────────┘\n```\n\n### Phase 1: Issue Creation\n\nAn issue is created — either by a human or by the proactive scanner. The issue body ends with `@claude` to signal that Claude should pick it up.\n\n**Workflow:** `claude-auto-assign.yml`\n**Trigger:** `issues.opened`\n**Behavior:** Checks if the author is an org member (or Claude itself). If so, posts `@claude please implement this issue` as a comment, which triggers the next phase.\n\n### Phase 2: Implementation\n\nClaude Code receives the `@claude` mention and goes to work. It reads the issue, creates a branch, writes the code, verifies the build, and opens a pull request.\n\n**Workflow:** `claude.yml`\n**Trigger:** `@claude` mention in issue comment, PR comment, or review\n**Behavior:** Full implementation cycle — branch, code, build, commit, PR. Claude has access to git, gh, and your project's build/lint tools.\n\n### Phase 3: Code Review\n\nThe moment a PR is opened (or updated), automated code review kicks in. Claude Code reviews the diff and posts comments on potential issues.\n\n**Workflow:** `claude-code-review.yml`\n**Trigger:** `pull_request` opened, synchronized, ready_for_review, reopened\n**Behavior:** Runs the `code-review` plugin from Claude Code Actions, posting review comments directly on the PR.\n\n### Phase 4: PR Shepherd\n\nEvery 15 minutes, the shepherd checks all open PRs. It reads review comments, applies fixes, verifies CI, and merges when everything is green.\n\n**Workflow:** `claude-pr-shepherd.yml`\n**Trigger:** Cron (`*/15 * * * *`) + manual dispatch\n**Behavior:**\n1. Fetches unresolved review comments (including from CodeRabbit or other bots)\n2. Applies fixes and commits them\n3. Checks CI status\n4. Merges via rebase when: CI green, no unresolved comments, not draft, no conflicts\n\n### Phase 5: Semantic Versioning\n\nWhen a PR merges to `main`, the auto-tagger examines the commit message and bumps the version accordingly.\n\n**Workflow:** `auto-tag.yml`\n**Trigger:** Push to `main`\n**Behavior:**\n| Commit pattern | Version bump |\n|---|---|\n| `BREAKING CHANGE` or `type!:` | MAJOR (resets minor + patch) |\n| `feat:` or `feat(scope):` | MINOR (resets patch) |\n| Everything else | PATCH |\n\n### Phase 6: Proactive Scanning\n\nOnce per hour, Claude scans the codebase looking for problems and opportunities. It creates up to 3 issues per run, each ending with `@claude please implement this`, feeding the loop.\n\n**Workflow:** `claude-proactive.yml`\n**Trigger:** Cron (`0 * * * *`) + manual dispatch\n**Detects:**\n- Logic errors, unhandled errors, race conditions\n- Missing tests\n- Performance issues\n- Security concerns\n- TODO/FIXME comments\n- Feature gaps\n\n## Setup (3 steps)\n\n1. **Click \"Use this template\"** to create a new repository (or copy `.github/workflows/` into an existing one)\n\n2. **Add your API key as a secret:**\n   ```\n   Settings → Secrets and variables → Actions → New repository secret\n   Name: ANTHROPIC_API_KEY\n   Value: \u003cyour key from console.anthropic.com\u003e\n   ```\n\n3. **Install the Claude GitHub App** at [github.com/apps/claude](https://github.com/apps/claude) and grant it access to your new repo\n\nThat's it. Create an issue ending with `@claude please implement this` and watch it go.\n\n### Optional: Customize for your stack\n\nEdit `CLAUDE.md` with your language, build, lint, and test commands. Search for `# CUSTOMIZE:` in the workflow files to lock down tool access. The template ships language-agnostic — it works with Go, Node, Python, Rust, or anything with a CLI build tool.\n\n## File Structure\n\n```\n.github/\n├── ISSUE_TEMPLATE/\n│   ├── feature.yml              # Feature request (auto-includes @claude)\n│   └── bug.yml                  # Bug report (auto-includes @claude)\n├── PULL_REQUEST_TEMPLATE.md     # PR template\n└── workflows/\n    ├── claude.yml               # Core: responds to @claude mentions\n    ├── claude-auto-assign.yml   # Gates and triggers Claude on new issues\n    ├── claude-code-review.yml   # AI code review on every PR\n    ├── claude-pr-shepherd.yml   # Merges when ready, asks Claude to fix comments\n    ├── claude-proactive.yml     # Hourly codebase scan, files issues\n    └── auto-tag.yml             # Semantic versioning from conventional commits\n.claude/\n└── settings.json                # Sandbox config for Claude Code\nCLAUDE.md                        # Project instructions for Claude\n```\n\n## Customization\n\n### Language Support\n\nThe template ships language-agnostic. Anywhere you see `# CUSTOMIZE:` in the workflow files, replace the placeholder commands with your own:\n\n| Placeholder | Example (Go) | Example (Node) | Example (Python) |\n|---|---|---|---|\n| `your-build-command` | `go build ./...` | `npm run build` | `python -m py_compile *.py` |\n| `your-lint-command` | `go vet ./...` | `npm run lint` | `ruff check .` |\n| `your-test-command` | `go test ./...` | `npm test` | `pytest` |\n\n### Org Membership Check\n\n`claude-auto-assign.yml` verifies the issue author is an org member before triggering Claude. To change this:\n\n- **Open to everyone:** Remove the org membership check entirely\n- **Specific users:** Replace with a username allowlist\n- **Label-based:** Trigger only on issues with a specific label\n\n### PR Merge Strategy\n\nThe shepherd uses `--rebase` by default. Change to `--squash` or `--merge` in `claude-pr-shepherd.yml` to match your preference.\n\n### Proactive Scanner Frequency\n\nDefault: hourly. Adjust the cron in `claude-proactive.yml`:\n- `0 */4 * * *` — every 4 hours\n- `0 9 * * 1-5` — weekdays at 9am\n- Remove entirely if you only want human-created issues\n\n## Secrets Reference\n\n| Secret | Required | Used By |\n|---|---|---|\n| `ANTHROPIC_API_KEY` | Yes | All Claude workflows |\n| `GITHUB_TOKEN` | Auto-provided | All workflows (GitHub Actions default) |\n\n## Design Principles\n\n**Closed loop.** Every output feeds back into the system. Merged PRs trigger tags. Proactive scans create issues. Issues trigger implementations.\n\n**Human steering.** Humans create issues and set priorities. They can review PRs before the shepherd merges, or let it run fully autonomous. The level of oversight is a dial, not a switch.\n\n**Fail safe.** Every workflow is designed to do nothing rather than do harm. If CI is red, the shepherd waits. If the build breaks, Claude won't merge. If the proactive scanner finds nothing, it creates no issues.\n\n**One PR at a time.** The shepherd processes PRs sequentially to avoid merge conflicts and maintain a clean history.\n\n**Conventional commits.** The auto-tagger relies on [Conventional Commits](https://www.conventionalcommits.org/) (`feat:`, `fix:`, `BREAKING CHANGE`) to determine version bumps. Claude is instructed to follow this convention in `CLAUDE.md`.\n\n## What this is NOT\n\nThis is not a hosted service, a SaaS product, or a managed platform. It's 6 YAML files. You own the workflows, you control the prompts, you pay Anthropic directly for API usage. There's no middleman and no vendor lock-in beyond the Claude API itself.\n\n## Credits\n\nExtracted from [Uncompact](https://github.com/supermodeltools/Uncompact) by [Grey Newell](https://github.com/greynewell).\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreynewell%2Fclaude-software-factory","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgreynewell%2Fclaude-software-factory","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgreynewell%2Fclaude-software-factory/lists"}