{"id":49772611,"url":"https://github.com/shinpr/galley","last_synced_at":"2026-06-07T07:01:18.718Z","repository":{"id":356719353,"uuid":"1232401934","full_name":"shinpr/galley","owner":"shinpr","description":"Local-first task runner for Claude Code and Codex with supervised execution and PR handoff.","archived":false,"fork":false,"pushed_at":"2026-06-03T08:12:16.000Z","size":1270,"stargazers_count":10,"open_issues_count":2,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-03T10:09:23.921Z","etag":null,"topics":["ai-agents","automation","claude-code","codex","daemon","developer-tools","git-worktree","local-first","openai","orchestration","task-runner","workflow"],"latest_commit_sha":null,"homepage":"","language":"Go","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/shinpr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","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-05-07T22:34:51.000Z","updated_at":"2026-06-03T08:11:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/shinpr/galley","commit_stats":null,"previous_names":["shinpr/galley"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/shinpr/galley","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinpr%2Fgalley","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinpr%2Fgalley/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinpr%2Fgalley/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinpr%2Fgalley/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/shinpr","download_url":"https://codeload.github.com/shinpr/galley/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/shinpr%2Fgalley/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34011812,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"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-agents","automation","claude-code","codex","daemon","developer-tools","git-worktree","local-first","openai","orchestration","task-runner","workflow"],"created_at":"2026-05-11T13:55:59.112Z","updated_at":"2026-06-07T07:01:18.712Z","avatar_url":"https://github.com/shinpr.png","language":"Go","funding_links":[],"categories":["Harnesses \u0026 orchestration"],"sub_categories":["Orchestrators \u0026 autonomous loops"],"readme":"![Galley blueprint](docs/assets/galley-blueprint.jpg)\n\n# Galley\n\n[![Claude Code](https://img.shields.io/badge/Claude%20Code-Plugin-purple)](https://claude.ai/code)\n[![Codex CLI](https://img.shields.io/badge/Codex%20CLI-Supported-10a37f)](https://developers.openai.com/codex/cli)\n[![Agent Skills](https://img.shields.io/badge/Agent%20Skills-Spec%20Compliant-blue)](https://developers.openai.com/codex/skills/)\n[![CI](https://github.com/shinpr/galley/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/shinpr/galley/actions/workflows/ci.yml)\n[![GitHub Release](https://img.shields.io/github/v/release/shinpr/galley)](https://github.com/shinpr/galley/releases)\n[![License: MIT](https://img.shields.io/github/license/shinpr/galley)](LICENSE)\n\nGalley is a local runtime for supervised AI coding tasks.\n\nIt runs Claude Code or Codex in a git worktree, records evidence for each attempt, and asks a supervisor model to accept, retry, or escalate the result before the work is treated as done.\n\nGalley is for tasks where the output should be inspectable later: the request, scope, checks, diffs, and supervisor verdict stay on disk.\n\n## Quick Start\n\nUse the Galley skill to set up each repository. It installs or verifies the CLI, prepares repository profiles, drafts valid task YAML, and queues tasks only after approval.\n\nClaude Code:\n\n```text\n/plugin marketplace add shinpr/galley\n/plugin install galley@galley-tools\n/reload-plugins\n/galley:galley Set up Galley for this repository.\n```\n\nCodex:\n\n```sh\ncodex plugin marketplace add shinpr/galley\n```\n\nThen start or return to Codex, open the plugin picker, install `Galley`, and ask the skill to set up the repository:\n\n```text\n/plugins\n$galley Set up Galley for this repository.\n```\n\n## First Task\n\nAfter setup, start with a small, reviewable task in an existing repository.\n\nClaude Code:\n\n```text\n/galley:galley Create a Galley task for a small bug fix or test improvement in this repository. Use the repository's normal checks, keep the scope narrow, and queue it after I approve.\n```\n\nCodex:\n\n```text\n$galley Create a Galley task for a small bug fix or test improvement in this repository. Use the repository's normal checks, keep the scope narrow, and queue it after I approve.\n```\n\nThe skill will inspect the repository, draft a task file, show the acceptance criteria and execution settings, and ask before queueing it.\n\n## Skill Workflow\n\nThe Galley plugin packages one Agent Skill for Claude Code and Codex. The skill is the recommended path for setup and task authoring because it handles the pieces that are easy to get wrong by hand:\n\n- repository setup, CLI checks, and profile paths\n- task YAML drafting and validation\n- quality and environment profile authoring\n- queueing only after explicit approval\n- failed-run diagnosis and requeue guidance\n\nFor skills-compatible clients that do not use the Claude or Codex plugin manifests, copy or symlink this directory into the client's skill path:\n\n```text\nplugins/galley/skills/galley/\n```\n\nThe standalone skill still expects the `galley` CLI on `PATH`. Some workflows also use `claude`, `codex`, `gh`, and `python3`.\n\n## Why Galley\n\nInteractive AI coding sessions work well for short tasks. They get harder to trust when the work becomes asynchronous, long-running, or review-heavy.\n\n- **Asynchronous execution with review**: run coding work away from the main checkout, then gate completion through a supervisor verdict.\n- **Git-visible changes**: executor work happens in a managed worktree, so normal git review still applies.\n- **Structured evidence**: every run records command plans, executor output, git status, diffs, and supervisor results under the workflow root.\n- **Retry and escalation**: tasks can retry while the loop budget remains, then escalate with recorded context when human judgment is needed.\n- **Repository-specific policy**: profiles describe expected checks, command names, network and secrets policy, PR behavior, and cleanup rules.\n- **Optional PR handoff**: accepted work can be committed, pushed, opened as a PR, and requeued from trusted PR comments.\n\n## How It Works\n\n```text\ntask YAML\n    |\n    | galley task queue\n    v\nqueued task\n    |\n    | daemon claims task\n    v\nisolated git worktree\n    |\n    | Claude Code or Codex implements\n    v\nrun evidence + git diff\n    |\n    | supervisor review\n    +--\u003e accepted ---------\u003e done or PR opened\n    +--\u003e needs revision ---\u003e retry while budget remains\n    +--\u003e needs review -----\u003e failed for human review\n    +--\u003e hard stop --------\u003e failed\n```\n\n## Core Concepts\n\n- **Task YAML**: trusted local input describing the goal, acceptance criteria, scope, executor, verification, worktree, and PR behavior. See [docs/task-yaml.md](docs/task-yaml.md).\n- **Quality profile**: optional repository expectations for required checks, review dimensions, evidence, and pass policy. See [docs/profiles.md](docs/profiles.md).\n- **Environment profile**: optional repository defaults for command names, executor choice, local constraints, PR behavior, and cleanup policy. See [docs/profiles.md](docs/profiles.md).\n- **Executor**: Claude Code or Codex backend that implements the task. New tasks use `environment.yaml` `executor.default_cli` when configured, otherwise Codex.\n- **Supervisor**: Claude or Codex backend that reviews the result against acceptance criteria, required checks, and recorded evidence.\n- **Worktree**: isolated git checkout used for AFK execution so the source repository stays clean.\n- **Evidence**: files under `runs/\u003crun-id\u003e/` that make each attempt auditable after the fact.\n\n## Manual CLI Installation\n\nMost users should start with the skill. Install the binary manually when scripting setup or debugging the CLI outside the skill workflow.\n\nmacOS and Linux:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/shinpr/galley/main/scripts/install.sh | sh\n```\n\nWindows PowerShell:\n\n```powershell\nInvoke-WebRequest https://raw.githubusercontent.com/shinpr/galley/main/scripts/install.ps1 -OutFile install.ps1 -UseBasicParsing\npowershell -NoProfile -ExecutionPolicy Bypass -File .\\install.ps1\n```\n\nOr use Go directly:\n\n```sh\ngo install github.com/shinpr/galley/cmd/galley@latest\n```\n\nInstalling only the binary does not create repository profiles or start a daemon for a project. After manual installation, run the setup skill for the repository you want Galley to manage.\n\nUseful direct checks:\n\n```sh\ngalley --help\ngalley daemon status --output json\ngalley daemon run --once\n```\n\n## Safety and Trust\n\nGalley treats task YAML as trusted local execution input. A user or process that can write task YAML can choose the goal, scope, reference files, branch, worktree, and verification guidance used by the executor and supervisor.\n\nRun Galley only for repositories and task authors you trust. Keep secrets out of task-accessible files, use worktrees and `scope.forbidden_paths`, and keep normal git review in the loop. PR comment requeueing is accepted only from the recorded PR author.\n\nSee [SECURITY.md](SECURITY.md) for reporting and operational trust boundaries.\n\n## Documentation\n\n- [Task YAML](docs/task-yaml.md): task fields, starter template, permissions, input files, worktree paths, and acceptance skeleton preflight.\n- [Profiles](docs/profiles.md): quality and environment profile fields with examples.\n- [Operations](docs/operations.md): daemon commands, queue layout, task commands, operational notes, and development checks.\n- [Supervision](docs/supervision.md): supervisor verdicts, retry behavior, executor selection, and evidence expectations.\n- [PR automation](docs/pr-automation.md): accepted-task commits, PR creation, PR comment requeueing, and worktree cleanup.\n\n## Development\n\nGalley is tested on Linux, macOS, and Windows in CI. Windows support is CI-covered, including daemon start, stop, and status paths; validate full local operation in your own Windows environment before relying on it for unattended work.\n\nThe `examples/` directory is for Galley checkout development and CI validation. Normal users should prefer `~/.galley` tasks created by the plugin skill.\n\n```sh\ngo test ./...\ngo build ./cmd/galley\n./scripts/smoke-local.sh\n```\n\nFor local development and release notes, see [CONTRIBUTING.md](CONTRIBUTING.md) and [CHANGELOG.md](CHANGELOG.md).\n\n## License\n\nGalley is released under the MIT License. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinpr%2Fgalley","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fshinpr%2Fgalley","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fshinpr%2Fgalley/lists"}