{"id":45919109,"url":"https://github.com/peakflo/20x","last_synced_at":"2026-04-06T19:03:08.566Z","repository":{"id":340546064,"uuid":"1152028865","full_name":"peakflo/20x","owner":"peakflo","description":"Self-improving Agent orchestrator for all knowledge work","archived":false,"fork":false,"pushed_at":"2026-04-05T08:55:01.000Z","size":10082,"stargazers_count":48,"open_issues_count":6,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-05T10:14:12.033Z","etag":null,"topics":["agentic","ai-agents","claude-code","coding","electron","opencode"],"latest_commit_sha":null,"homepage":"https://peakflo.ai","language":"TypeScript","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/peakflo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-07T08:48:56.000Z","updated_at":"2026-04-05T08:55:05.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/peakflo/20x","commit_stats":null,"previous_names":["peakflo/20x"],"tags_count":39,"template":false,"template_full_name":null,"purl":"pkg:github/peakflo/20x","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peakflo%2F20x","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peakflo%2F20x/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peakflo%2F20x/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peakflo%2F20x/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/peakflo","download_url":"https://codeload.github.com/peakflo/20x/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/peakflo%2F20x/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31485516,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"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":["agentic","ai-agents","claude-code","coding","electron","opencode"],"created_at":"2026-02-28T08:17:04.408Z","updated_at":"2026-04-06T19:03:08.545Z","avatar_url":"https://github.com/peakflo.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"resources/icon.png\" alt=\"20x Logo\" width=\"120\" /\u003e\n\u003c/p\u003e\n\n# 20x\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)\n[![Version](https://img.shields.io/github/package-json/v/peakflo/20x)](./package.json)\n[![Platform](https://img.shields.io/badge/platform-macOS-lightgrey.svg)](.)\n[![Discord](https://img.shields.io/badge/Discord-Join%20us-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/fUVsqTWDxX)\n\n**One app. All your tasks. Powered by AI agents.**\n\n20x is a desktop app that turns your task list into an AI-powered workforce. Connect your tools — Linear, HubSpot, Peakflo — assign tasks to AI agents, and watch them work in real time.\n\n**No cloud. No subscriptions. Everything runs on your machine.**\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"resources/product-demo.gif\" alt=\"20x product demo\" /\u003e\n\u003c/p\u003e\n\n## Why 20x?\n\nMost AI tools make you copy-paste context between tabs. 20x flips it: **your tasks come to the agents, not the other way around.**\n\n- Pull a task from Linear → AI agent picks it up, reads the context, writes the code, opens a PR\n- Got a backlog of tickets? → Queue them up, agents work through them while you review\n- Need human approval? → Agents pause and ask before doing anything risky\n\n## How It Works\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"resources/process.png\" alt=\"20x process: Hubspot, Linear, Github issues, Workflo → 20x ↔ Github, MCP → Claude Code, Opencode, OpenAI Codex; Skills automatically improved\" /\u003e\n\u003c/p\u003e\n\n1. **Tasks flow in** — from Task sources (Linear, Hubspot, Github, Workflo) or created manually\n2. **Triage agent** — Assigns Coding agent (Claude Code, OpenCode, or Codex), relevant skills\n3. **Agent works the task** — with live streaming output, Questions and HITL support \n4. **You stay in control** — approve, review, merge\n5. **Feedback loop** — Agent creates updates the skills after task is completed\n\n## Features\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"resources/integrations.png\" alt=\"20x integrations: Hubspot, Linear, Github issues, Workflo → 20x ↔ Github, MCP → Claude Code, Opencode, OpenAI Codex; Skills automatically improved\" /\u003e\n\u003c/p\u003e\n\n### 🤖 Multi-Agent Support\n- **Claude Code** — Anthropic's official agent SDK\n- **OpenCode** — Open-source coding agent\n- **Codex** — Zed Industries' agent framework\n- **Live transcripts** — Watch agents think and work in real time\n- **Human-in-the-loop** — Approve risky actions before execution\n\n### 🔗 Smart Integrations\n- **Linear** — Pull issues, update status, post comments\n- **HubSpot** — Sync tickets and workflows\n- **Peakflo** — Connect your Peakflo tasks\n- **OAuth built-in** — Secure authentication flows\n\n### 🧠 Skills System\n- **Reusable instructions** — Create skill templates for common patterns\n- **Auto-learning** — Agents update skills based on feedback\n- **Confidence tracking** — Skills improve over time\n\n### 🛠 Developer-First\n- **Git worktree management** — Isolated branches per task\n- **Repository context** — Agents know which repos to work on\n- **MCP servers** — Connect Model Context Protocol tools\n- **Local-first** — SQLite database, no cloud required\n\n### 📋 Task Management\n- **Recurring tasks** — Daily, weekly, monthly schedules\n- **Rich metadata** — Types, priorities, due dates, labels\n- **File attachments** — Add context files to tasks\n- **Output fields** — Structured task results\n- **Smart search** — Find anything fast\n\n## Getting Started\n\n### Prerequisites\n\n- **Node.js** \u003e= 22\n- **pnpm** \u003e= 9\n- **Git** (for worktree features)\n- **GitHub CLI** (optional, for repo features)\n\n### Installation\n\n```bash\n# Clone the repository\ngit clone https://github.com/peakflo/20x.git\ncd 20x\n\n# Install dependencies\npnpm install\n```\n\n### macOS: Opening the App (Release Build)\n\nmacOS may block the app since it's not signed with an Apple Developer certificate. To open it, use one of these methods:\n\n**Option A:** Right-click the app in `/Applications` and select **Open**, then confirm in the dialog.\n\n**Option B:** Run in Terminal:\n```bash\nsudo xattr -cr /Applications/20x.app\n```\nThen open the app normally.\n\n\u003e This is not required if you build from source and run with `pnpm dev`.\n\n### Configuration\n\n**API Keys:**\nConfigure in Agent Settings:\n- Anthropic API key for Claude Code\n- OpenAI API key for OpenCode (if needed)\n\n**Database:**\n- Stored at `~/Library/Application Support/pf-desktop/pf-desktop.db` (macOS)\n- Automatic backups before migrations\n\n**Integrations:**\n1. Get OAuth credentials from Linear/HubSpot/Peakflo\n2. Configure in Integrations settings\n3. Complete OAuth flow in-app\n\n### Development\n\n```bash\n# Start dev server\npnpm run dev\n\n# Run tests\npnpm test\n\n# Build for distribution\npnpm run build:mac    # macOS\n```\n\n## Architecture\n\n### Data Flow\n\n```\nReact UI → Zustand Store → IPC Client → Preload Bridge → Main Process → SQLite\n```\n\n- **Renderer** — React 19 + Tailwind CSS 4 + Zustand 5\n- **Main Process** — Electron 34 + SQLite + Agent orchestration\n- **Security** — Full context isolation, no Node.js in renderer\n\n### Agent Architecture\n\n**Session Lifecycle:**\n1. **Start** — Agent assigned, skills applied, session created\n2. **Streaming** — Real-time output sent to UI\n3. **Approval** — Agent pauses for human decisions\n4. **Completion** — Results saved, task updated\n\nSee [AGENTS.md](./AGENTS.md) for detailed architecture.\n\n## Tech Stack\n\n| Layer | Technology |\n|-------|-----------|\n| Shell | Electron 34 |\n| Build | electron-vite |\n| Frontend | React 19 + Tailwind CSS 4 + Zustand 5 |\n| UI Components | Radix UI primitives |\n| Styling | cva + Tailwind CSS tokens |\n| Icons | Lucide React |\n| Font | Geist |\n| Database | SQLite (better-sqlite3, WAL mode) |\n| Agent SDKs | @opencode-ai/sdk, @anthropic-ai/claude-agent-sdk, @zed-industries/codex-acp |\n| Testing | Vitest + happy-dom |\n\n## Contributing\n\nWe welcome contributions! Here's how:\n\n1. **Fork** the repo\n2. **Create a branch**: `git checkout -b feature/my-feature`\n3. **Write code**: Follow TypeScript strict mode, ESLint, Prettier\n4. **Add tests**: Vitest tests for new features\n5. **Commit**: Use conventional commits (`feat:`, `fix:`, etc.)\n6. **Push**: `git push origin feature/my-feature`\n7. **Open PR**: Describe changes, ensure CI passes\n\n### Code Style\n- TypeScript strict mode\n- Minimal Tailwind classes (prefer CSS variables)\n- Use `pnpm` (not npm)\n- Check `MEMORY.md` for project patterns\n\n## Community\n\n- **Issues**: [GitHub Issues](https://github.com/peakflo/20x/issues)\n- **Discord**: https://discord.gg/fUVsqTWDxX\n\n## Security\n\n### Local-First\n- All data stored locally in SQLite\n- No cloud sync, no subscriptions\n- Optional database encryption\n\n### OAuth \u0026 API Keys\n- Tokens encrypted with Electron `safeStorage`\n- Keys never exposed to renderer process\n- Parameterized SQL queries only\n\n### Electron Security\n- `contextIsolation: true`\n- `nodeIntegration: false`\n- External links open in system browser\n\n## Roadmap\n\n### Planned\n- Additional integrations (Jira, Asana, GitHub Issues, Notion)\n- Team collaboration (shared task sources)\n- Cost tracking (token usage per session)\n- Agent templates (pre-configured profiles)\n- Plugin marketplace (community skills)\n- Desktop notifications\n- Light theme\n\n### Recently Shipped\n- ✅ Multi-agent support (OpenCode, Claude Code, Codex)\n- ✅ Skills system with auto-learning\n- ✅ Recurring tasks\n- ✅ Linear, HubSpot, Peakflo integrations\n- ✅ MCP server management\n- ✅ Git worktree management\n\n## License\n\n[MIT](./LICENSE) © 2026 Peakflo\n\n---\n\nBuilt with [Electron](https://electronjs.org), [React](https://react.dev), and [Anthropic Claude](https://anthropic.com).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeakflo%2F20x","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpeakflo%2F20x","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpeakflo%2F20x/lists"}