{"id":49298156,"url":"https://github.com/keting/half","last_synced_at":"2026-04-26T05:00:50.151Z","repository":{"id":353335097,"uuid":"1196783873","full_name":"keting/half","owner":"keting","description":"Human-in-the-loop multi-agent task orchestration platform for Git-based software workflows.","archived":false,"fork":false,"pushed_at":"2026-04-23T13:24:43.000Z","size":471,"stargazers_count":3,"open_issues_count":3,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-23T14:05:46.453Z","etag":null,"topics":["agent-orchestration","ai-agents","ai-coding","coding-agents","human-in-the-loop","multi-agent","task-management","vibe-coding"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/keting.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","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-03-31T03:18:15.000Z","updated_at":"2026-04-23T08:19:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/keting/half","commit_stats":null,"previous_names":["keting/half"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/keting/half","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keting%2Fhalf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keting%2Fhalf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keting%2Fhalf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keting%2Fhalf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/keting","download_url":"https://codeload.github.com/keting/half/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/keting%2Fhalf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32286271,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"online","status_checked_at":"2026-04-26T02:00:05.962Z","response_time":129,"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":["agent-orchestration","ai-agents","ai-coding","coding-agents","human-in-the-loop","multi-agent","task-management","vibe-coding"],"created_at":"2026-04-26T05:00:49.416Z","updated_at":"2026-04-26T05:00:50.145Z","avatar_url":"https://github.com/keting.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[English](./README.md) | [简体中文](./README.zh-CN.md)\n\n[![CI](https://github.com/keting/half/actions/workflows/ci.yml/badge.svg)](https://github.com/keting/half/actions/workflows/ci.yml)\n\n# HALF - Human-AI Loop Framework\n\nA task management console for teams orchestrating multiple AI coding agents\n(Claude Code, Codex, Copilot, GLM, Kimi, etc.) across Git-based workflows.\n\n\u003e [!WARNING]\n\u003e **v0.x / early open source.** Interfaces and the data model may change\n\u003e between minor versions. Not recommended for production multi-tenant use.\n\n## What HALF does\n\n- **Project-scoped agent coordination.** Bind a set of agents to a project,\n  generate DAG-shaped work plans, dispatch task prompts, and track status by\n  polling the project's Git repository.\n- **Human-in-the-loop by design.** HALF does not execute agent commands. It\n  produces prompts for a human operator to paste into the agent's UI, and\n  watches the repository for the resulting outputs.\n- **Agent availability model.** Track per-agent subscription expiry,\n  short-term reset windows, and long-term reset windows so planners do not\n  dispatch work to an unavailable agent.\n\n## What HALF is not\n\n- A replacement for Jira, Linear, or a general-purpose project management\n  tool.\n- An agent runner. It coordinates prompts and outputs; it does not invoke\n  LLMs directly.\n\n## FAQ\n\n**Q: Why use multiple AI coding agents?**\n\nA: Common reasons include:\n\n- **Complementary strengths.** Different agents perform differently in\n  architecture design, implementation, testing, and documentation tasks.\n- **Different perspectives.** Different models and tools often make different\n  judgments about the same requirement, codebase, or solution, which helps\n  surface problems earlier.\n- **Tooling flexibility.** Agents and underlying models evolve quickly. Using\n  multiple agents is often more resilient than depending on a single tool over\n  time.\n\n**Q: Why is HALF human-in-the-loop instead of fully automated?**\n\nA: The main reason is compliance.\n\nHALF is designed to support multi-agent collaboration within a compliant\noperating model. Many common coding agent products, especially subscription\nbased ones, are designed for direct use by individuals or teams through their\nown interfaces, not as externally hosted services that a third-party system\ncan automatically invoke. For programmatic integration and automation, teams\nusually need separate API products, API keys, billing models, and terms.\n\nBecause of that, HALF deliberately sets the system boundary at:\n\n- generating prompts that a human can use directly\n- letting a responsible operator manually dispatch them to agents\n- tracking results through Git writes and repository polling\n\nIn other words, HALF addresses compliant human-and-agent orchestration. It is\nnot trying to turn subscription agents into a platform-managed runner.\n\n**Q: What problems appear when coordinating multiple subscription-based agents?**\n\nA: When several agents participate in one task and they cannot call each other\ndirectly, a human operator usually has to repeat the same coordination steps.\nFor many subscription-based coding agents, the practical workflow is still\nmanual interaction through a UI instead of automatic invocation by another\nsystem or agent.\n\nThat usually means the operator must repeatedly:\n\n- copy prompts and send them to different agents manually\n- track whether each task has finished\n- decide who should receive the next prompt based on the previous result\n- watch each agent's availability and reset schedule\n\nAs the number of steps and participants grows, this manual coordination easily\ncauses omissions, ordering mistakes, and context-switching overhead.\n\n**Q: What problem does HALF solve?**\n\nA: HALF focuses on workflow organization, state tracking, and execution\nhandoff in multi-agent collaboration:\n\n- **Task flow organization.** Break a project into tasks with dependencies so\n  work can proceed in stages.\n- **Task board and handoff guidance.** Show plans, tasks, and execution state\n  in one interface, and clearly indicate what should happen next and which\n  agent should receive the next prompt.\n- **Reusable workflow templates.** Capture common collaboration patterns to\n  reduce repeated coordination overhead.\n- **Agent availability management.** View agent availability and reset times in\n  one place to avoid unexpected blocking during execution.\n- **Archival and traceability.** Persist task outputs in a Git collaboration\n  repository so the process and results remain reviewable.\n\n## Architecture\n\n| Layer | Tech |\n|---|---|\n| Backend | Python 3.12 + FastAPI + SQLAlchemy + SQLite |\n| Frontend | React 18 + TypeScript + Vite + React Flow |\n| Deployment | Docker Compose |\n| Auth | JWT, bcrypt-hashed passwords |\n\nApplication code lives under [`src/`](./src). Documentation lives under\n[`docs/`](./docs):\n\n- [`docs/architecture.md`](./docs/architecture.md) - system architecture, data\n  model overview, API surface overview\n- [`docs/task-lifecycle.md`](./docs/task-lifecycle.md) - runtime mechanism:\n  state transitions, `result.json` contract, polling\n- [`docs/project-structure.md`](./docs/project-structure.md) - code\n  organization for contributors\n- [`docs/ui-style.md`](./docs/ui-style.md) - UI and interaction principles\n\nThe **API reference** is auto-generated by FastAPI and available at\n`http://localhost:8000/docs` (Swagger UI) or `http://localhost:8000/redoc`\nonce the backend is running.\n\n## Quick Start\n\nHALF refuses to start with weak defaults. Copy the example environment file\nand fill it in before the first `docker compose up`.\n\n```bash\ncd src\ncp .env.example .env\n# Edit .env and set:\n# HALF_SECRET_KEY=\u003cgenerated-secret\u003e\n# HALF_ADMIN_PASSWORD=\u003cyour-strong-password\u003e\ndocker compose up -d\n```\n\nOpen `http://localhost:3000` and log in as `admin` with the password you set.\n\n## Local Development\n\nBackend:\n\n```bash\ncd src/backend\npython3.12 -m venv .venv \u0026\u0026 source .venv/bin/activate\npip install -r requirements-dev.txt\nexport HALF_SECRET_KEY=$(python3 -c 'import secrets; print(secrets.token_urlsafe(48))')\nexport HALF_ADMIN_PASSWORD='\u003cyour-strong-password\u003e'\nuvicorn main:app --reload --host 0.0.0.0 --port 8000\n```\n\nFrontend:\n\n```bash\ncd src/frontend\nnpm install\nnpm run dev\n```\n\nThe frontend uses relative `/api` requests. In local development, Vite proxies\n`/api` to the backend. In the production Docker image, nginx proxies `/api`.\n\n## Testing\n\n```bash\ncd src/backend \u0026\u0026 python -m pytest tests/ -v\ncd src/frontend \u0026\u0026 npm test \u0026\u0026 npm run build\n```\n\n## Git Access From The Container\n\nOut of the box, the backend container cannot reach private Git repositories.\nHALF does not mount host SSH keys by default. If you need private repository\naccess, copy `src/docker-compose.override.yml.example` to\n`src/docker-compose.override.yml` and mount a dedicated deploy key.\n\n## Production Deployment Notes\n\nHALF is typically self-hosted. For production deployments, keep\n`HALF_STRICT_SECURITY=true` and review [`SECURITY.md`](./SECURITY.md) before\nexposing the service.\n\n## Configuration\n\nSee [`src/.env.example`](./src/.env.example) for the full set of environment\nvariables and defaults.\n\n## Language\n\nThe current UI is primarily in Simplified Chinese. English i18n contributions\nare welcome.\n\n## Security\n\nSee [`SECURITY.md`](./SECURITY.md) for the trust model, threat model, and how\nto report vulnerabilities.\n\n## Contributing\n\nSee [`CONTRIBUTING.md`](./CONTRIBUTING.md).\n\n## Screenshots\n\nScreenshots will be added in v0.2.\n\n## License\n\nApache License 2.0. See [`LICENSE`](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fketing%2Fhalf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fketing%2Fhalf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fketing%2Fhalf/lists"}