{"id":47942667,"url":"https://github.com/datashaman/kiln-action","last_synced_at":"2026-04-04T08:12:47.699Z","repository":{"id":341383931,"uuid":"1169904558","full_name":"datashaman/kiln-action","owner":"datashaman","description":"🔥 Kiln — AI-powered dev pipeline. Issue in, release out.","archived":false,"fork":false,"pushed_at":"2026-03-01T15:57:07.000Z","size":30657,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-01T16:15:15.961Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datashaman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-03-01T12:05:48.000Z","updated_at":"2026-03-01T15:57:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/datashaman/kiln-action","commit_stats":null,"previous_names":["datashaman/kiln-action"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/datashaman/kiln-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datashaman%2Fkiln-action","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datashaman%2Fkiln-action/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datashaman%2Fkiln-action/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datashaman%2Fkiln-action/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datashaman","download_url":"https://codeload.github.com/datashaman/kiln-action/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datashaman%2Fkiln-action/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31392346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T04:26:24.776Z","status":"ssl_error","status_checked_at":"2026-04-04T04:23:34.147Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-04-04T08:12:45.490Z","updated_at":"2026-04-04T08:12:47.691Z","avatar_url":"https://github.com/datashaman.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🔥 Kiln\n\n\u003e Raw ideas in. Finished releases out.\n\nA GitHub Action that turns issues into shipped code using AI agents (Claude Code). Drop it into any repo with a single workflow file.\n\n## How it works\n\n```\n You create an Issue\n       │\n       ▼\n [Triage] → classifies, labels\n       │\n       ▼\n [Spec Agent] → writes spec → opens PR\n       │\n       ▼\n ★ YOU review + approve spec ★\n       │\n       ▼\n [Impl Agent] → writes code + tests → opens PR\n       │\n       ▼\n [Review Agent] → reviews → approves or requests changes\n       │                            │\n       │                    [Fix Agent] → pushes fixes\n       │                            │\n       ◀────────────────────────────┘\n       │\n       ▼\n CI passes + approved → auto-merge\n       │\n       ▼\n 🔥 Shipped.\n```\n\n## Getting Started\n\n### 1. Add your API key\n\nGo to **Settings → Secrets and variables → Actions** and add:\n\n| Secret | Required | Description |\n|---|---|---|\n| `ANTHROPIC_API_KEY` | Yes | Your Anthropic API key for Claude |\n\n### 2. Create the workflow\n\nAdd **one file** to your repo at `.github/workflows/kiln.yml`:\n\n```yaml\n# .github/workflows/kiln.yml\nname: \"🔥 Kiln\"\n\non:\n  # Triage: classify new issues\n  issues:\n    types: [opened, labeled]\n\n  # Re-triage: re-evaluate after author replies\n  issue_comment:\n    types: [created]\n\n  # Review: AI reviews new/updated implementation PRs\n  pull_request:\n    types: [opened, synchronize]\n\n  # Approve-spec, Fix, Ship: respond to PR review events\n  pull_request_review:\n    types: [submitted]\n\n  # Ship: auto-merge when CI passes\n  check_suite:\n    types: [completed]\n\npermissions:\n  issues: write\n  contents: write\n  pull-requests: write\n\njobs:\n  kiln:\n    runs-on: ubuntu-latest\n    # Don't run on events triggered by Kiln itself\n    if: github.actor != 'github-actions[bot]'\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n\n      - uses: datashaman/kiln-action@v1\n        with:\n          anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}\n```\n\nA standalone copy of this workflow is also available at [`templates/workflow.yml`](templates/workflow.yml).\n\n### 3. Create labels\n\nLabels are created automatically on Kiln's first run. To create them in advance, see the [Labels](#labels) section.\n\n### 4. Add a CLAUDE.md (recommended)\n\nCreate a `CLAUDE.md` file in your repo root to guide Kiln's AI agents. This file tells the agents about your project's conventions:\n\n```markdown\n# Project: My App\n\n## Conventions\n- Language: TypeScript\n- Test runner: Jest (`npm test`)\n- Linter: ESLint (`npm run lint`)\n- Commit style: Conventional Commits (feat:, fix:, chore:)\n\n## Rules for Kiln Agents\n- Never modify files in `.github/` or `.env`\n- Never modify this CLAUDE.md file\n- Always read the spec before implementing\n- Always run tests before committing\n- Keep changes scoped to the issue being worked on\n- If blocked or unsure, comment on the issue explaining why\n```\n\nThis is a starting point — customize every section to match your project. The spec and implementation agents will follow these instructions.\n\nA more detailed template with additional guidance is available at [`examples/CLAUDE.md`](examples/CLAUDE.md).\n\n## Stages\n\n| Stage | Trigger | What happens |\n|---|---|---|\n| **Triage** | Issue opened | Classifies type/size, checks clarity, labels for next stage |\n| **Re-triage** | Comment on needs-info issue | Re-evaluates clarity after author responds |\n| **Specify** | Label `kiln:specifying` | Reads codebase + issue, writes spec, opens spec PR |\n| **Spec Review** | Spec PR opened | Waits for human approval |\n| **Implement** | Spec PR approved | Reads spec, writes code + tests, opens impl PR |\n| **Review** | Impl PR opened/updated | AI reviews against spec, approves or requests changes |\n| **Fix** | Changes requested | Addresses review feedback, pushes fixes |\n| **Ship** | Approved + CI green | Auto-merges, closes issue |\n\n## Configuration Reference\n\nKiln is configured via `.kiln/config.yml` in your repo root. All settings are optional — Kiln works out of the box with sensible defaults.\n\n```yaml\n# .kiln/config.yml\nspec_template: .kiln/spec-template.md\nprotected_paths:\n  - .github/\n  - .env\n  - CLAUDE.md\nhuman_review:\n  spec: required        # always require human spec approval\n  implementation: auto  # AI review is sufficient\nauto_merge: true\ntimeout_minutes: 30\nlabels:\n  prefix: \"kiln\"        # kiln:specifying, kiln:implementing, etc.\n```\n\nFor full configuration details, see [docs/configuration.md](docs/configuration.md).\n\n## Labels\n\nKiln auto-creates all required labels on first run. You can also create them manually using the setup script below.\n\n### Pipeline State\n\n| Label | Color | Hex | Description |\n|---|---|---|---|\n| `kiln:intake` | ![#c5def5](https://via.placeholder.com/12/c5def5/c5def5.png) | `#c5def5` | Issue received, awaiting triage |\n| `kiln:needs-info` | ![#fbca04](https://via.placeholder.com/12/fbca04/fbca04.png) | `#fbca04` | Waiting for clarification from author |\n| `kiln:specifying` | ![#c5def5](https://via.placeholder.com/12/c5def5/c5def5.png) | `#c5def5` | Spec agent is writing the spec |\n| `kiln:spec-review` | ![#fbca04](https://via.placeholder.com/12/fbca04/fbca04.png) | `#fbca04` | Waiting for human spec approval |\n| `kiln:implementing` | ![#0e8a16](https://via.placeholder.com/12/0e8a16/0e8a16.png) | `#0e8a16` | Code agent is building |\n| `kiln:in-review` | ![#e4e669](https://via.placeholder.com/12/e4e669/e4e669.png) | `#e4e669` | Under AI code review |\n| `kiln:done` | ![#0e8a16](https://via.placeholder.com/12/0e8a16/0e8a16.png) | `#0e8a16` | Shipped and closed |\n| `kiln:blocked` | ![#d93f0b](https://via.placeholder.com/12/d93f0b/d93f0b.png) | `#d93f0b` | Emergency stop — all automation halts |\n\n### PR Markers\n\n| Label | Color | Hex | Description |\n|---|---|---|---|\n| `kiln:spec` | ![#c5def5](https://via.placeholder.com/12/c5def5/c5def5.png) | `#c5def5` | Spec PR |\n| `kiln:implementation` | ![#0e8a16](https://via.placeholder.com/12/0e8a16/0e8a16.png) | `#0e8a16` | Implementation PR |\n| `needs-human-review` | ![#fbca04](https://via.placeholder.com/12/fbca04/fbca04.png) | `#fbca04` | Requires human review before proceeding |\n| `needs-review` | ![#fbca04](https://via.placeholder.com/12/fbca04/fbca04.png) | `#fbca04` | Awaiting AI code review |\n\n### Type (applied by triage)\n\n| Label | Color | Hex | Description |\n|---|---|---|---|\n| `type:feature` | ![#0075ca](https://via.placeholder.com/12/0075ca/0075ca.png) | `#0075ca` | New feature |\n| `type:bug` | ![#d73a4a](https://via.placeholder.com/12/d73a4a/d73a4a.png) | `#d73a4a` | Bug fix |\n| `type:improvement` | ![#a2eeef](https://via.placeholder.com/12/a2eeef/a2eeef.png) | `#a2eeef` | Improvement to existing feature |\n| `type:chore` | ![#cfd3d7](https://via.placeholder.com/12/cfd3d7/cfd3d7.png) | `#cfd3d7` | Maintenance or chore |\n\n### Size (applied by triage)\n\n| Label | Color | Hex | Description |\n|---|---|---|---|\n| `size:xs` | ![#009800](https://via.placeholder.com/12/009800/009800.png) | `#009800` | Extra small |\n| `size:s` | ![#77bb00](https://via.placeholder.com/12/77bb00/77bb00.png) | `#77bb00` | Small |\n| `size:m` | ![#fbca04](https://via.placeholder.com/12/fbca04/fbca04.png) | `#fbca04` | Medium |\n| `size:l` | ![#eb6420](https://via.placeholder.com/12/eb6420/eb6420.png) | `#eb6420` | Large |\n| `size:xl` | ![#b60205](https://via.placeholder.com/12/b60205/b60205.png) | `#b60205` | Extra large |\n\n### Manual Setup\n\nLabels are created automatically on first run. To create them manually, use the GitHub CLI:\n\n```bash\n# Pipeline state labels\ngh label create \"kiln:intake\" --color \"c5def5\" --description \"Kiln: issue received, awaiting triage\"\ngh label create \"kiln:needs-info\" --color \"fbca04\" --description \"Kiln: waiting for clarification from author\"\ngh label create \"kiln:specifying\" --color \"c5def5\" --description \"Kiln: spec agent is writing the spec\"\ngh label create \"kiln:spec-review\" --color \"fbca04\" --description \"Kiln: waiting for human spec approval\"\ngh label create \"kiln:implementing\" --color \"0e8a16\" --description \"Kiln: code agent is building\"\ngh label create \"kiln:in-review\" --color \"e4e669\" --description \"Kiln: under AI code review\"\ngh label create \"kiln:done\" --color \"0e8a16\" --description \"Kiln: shipped and closed\"\ngh label create \"kiln:blocked\" --color \"d93f0b\" --description \"Kiln: emergency stop — all automation halts\"\n\n# PR marker labels\ngh label create \"kiln:spec\" --color \"c5def5\" --description \"Kiln: spec PR\"\ngh label create \"kiln:implementation\" --color \"0e8a16\" --description \"Kiln: implementation PR\"\ngh label create \"needs-human-review\" --color \"fbca04\" --description \"Kiln: requires human review before proceeding\"\ngh label create \"needs-review\" --color \"fbca04\" --description \"Kiln: awaiting AI code review\"\n\n# Type labels\ngh label create \"type:feature\" --color \"0075ca\" --description \"Type: new feature\"\ngh label create \"type:bug\" --color \"d73a4a\" --description \"Type: bug fix\"\ngh label create \"type:improvement\" --color \"a2eeef\" --description \"Type: improvement to existing feature\"\ngh label create \"type:chore\" --color \"cfd3d7\" --description \"Type: maintenance or chore\"\n\n# Size labels\ngh label create \"size:xs\" --color \"009800\" --description \"Size: extra small\"\ngh label create \"size:s\" --color \"77bb00\" --description \"Size: small\"\ngh label create \"size:m\" --color \"fbca04\" --description \"Size: medium\"\ngh label create \"size:l\" --color \"eb6420\" --description \"Size: large\"\ngh label create \"size:xl\" --color \"b60205\" --description \"Size: extra large\"\n```\n\n## Safety Controls\n\n### Emergency Stop\n\nAdd the `kiln:blocked` label to any issue or PR to immediately halt all Kiln automation on that item. Kiln will post a comment confirming automation is paused. Remove the label to resume.\n\nFor PR events, Kiln checks both the PR labels and the linked issue labels for `kiln:blocked`, so blocking the issue also stops PR automation.\n\n### Human Spec Approval Gate\n\nBy default, Kiln requires a human to approve every spec PR before implementation begins. This ensures you control what gets built. Set `human_review.spec: optional` in config to skip this gate (not recommended).\n\n### Protected Paths\n\nAgents are instructed to never modify files in protected paths. Defaults: `.github/`, `.env`, `CLAUDE.md`, `.kiln/`. Configure via `protected_paths` in `.kiln/config.yml`.\n\n### Branch Protections\n\nFor additional safety, enable GitHub branch protection rules on `main`:\n- Require pull request reviews before merging\n- Require status checks to pass before merging\n- Restrict who can push to matching branches\n\nThese complement Kiln's built-in controls and prevent any direct pushes to main.\n\n### Timeouts\n\nEach AI agent has a configurable timeout (default: 30 minutes). If an agent exceeds the timeout, it is killed and Kiln posts an error comment on the issue/PR with advice to increase `timeout_minutes` in config. Adjust via `timeout_minutes` in `.kiln/config.yml` or the `timeout_minutes` action input.\n\n### Conventional Commits\n\nAll AI commits follow conventional commit format (`feat:`, `fix:`, `chore:`, etc.), keeping your git history clean and parseable.\n\n### Loop Prevention\n\nKiln includes built-in safeguards against infinite loops:\n- Bot/action comments are ignored during re-triage (prevents triage loops)\n- Label events triggered by Kiln itself are debounced via actor checks\n- Duplicate spec/implementation PRs are detected and skipped\n- The fix agent has a configurable max iteration limit (default: 3)\n\n## Troubleshooting\n\n### Kiln isn't responding to new issues\n\n- **Missing secret**: Ensure `ANTHROPIC_API_KEY` is set in **Settings → Secrets and variables → Actions**. Kiln will fail silently if the key is missing.\n- **Workflow not triggered**: Verify `.github/workflows/kiln.yml` exists and listens on `issues: [opened, labeled]`. Check the **Actions** tab to see if the workflow ran.\n- **Actor filter**: The workflow template includes `if: github.actor != 'github-actions[bot]'`. If you're testing with a bot account, this will skip execution.\n\n### Labels aren't being created\n\n- **Permissions**: Ensure the workflow has `issues: write` permission. Label creation requires write access.\n- **First run**: Labels are created on Kiln's first execution. If the first run failed (e.g., missing API key), labels won't exist yet. Fix the error and re-trigger, or create labels manually using the [setup script](#manual-setup).\n\n### Spec/implementation PRs aren't being created\n\n- **Missing permissions**: Ensure `contents: write` and `pull-requests: write` are set in the workflow permissions.\n- **Missing checkout**: The workflow must include `actions/checkout@v4` with `fetch-depth: 0` before the Kiln step.\n- **Branch already exists**: If a previous run partially completed, the branch may already exist. Delete the stale branch and re-trigger by re-applying the label.\n\n### AI review isn't running on PRs\n\n- **Missing trigger**: Ensure the workflow listens on `pull_request: [opened, synchronize]`.\n- **Missing label**: AI review only runs on PRs with the `kiln:implementation` label. Verify the label exists on the PR.\n\n### Auto-merge isn't working\n\n- **Missing check_suite trigger**: Ensure the workflow listens on `check_suite: [completed]`. Without this, Kiln can't detect when CI passes.\n- **CI not passing**: Kiln only merges when all CI checks are green. Check the PR's status checks.\n- **No approval**: Kiln requires at least one approval on the PR before merging.\n- **Disabled in config**: Check that `auto_merge` is not set to `false` in `.kiln/config.yml`.\n\n### \"Automation is blocked\" message\n\n- A `kiln:blocked` label is present on the issue or a linked PR. Remove the label to resume automation.\n\n### Agent timing out\n\n- Increase `timeout_minutes` in `.kiln/config.yml` or pass it as an action input. Large repos or complex specs may need more time.\n- Default timeout is 30 minutes.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatashaman%2Fkiln-action","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatashaman%2Fkiln-action","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatashaman%2Fkiln-action/lists"}