{"id":48894210,"url":"https://github.com/merlinrabens/foundry","last_synced_at":"2026-04-16T10:05:31.368Z","repository":{"id":342691534,"uuid":"1174795479","full_name":"merlinrabens/foundry","owner":"merlinrabens","description":"Multi-agent code factory. GitHub Issues that write their own code. Claude Code + Codex + Gemini with 3 AI reviewers per PR.","archived":false,"fork":false,"pushed_at":"2026-03-14T18:31:44.000Z","size":5863,"stargazers_count":3,"open_issues_count":4,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-14T19:58:54.940Z","etag":null,"topics":["ai-agents","ai-coding","automation","claude-code","code-review","codex","developer-tools","gemini","github-actions","multi-agent"],"latest_commit_sha":null,"homepage":null,"language":"Shell","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/merlinrabens.png","metadata":{"files":{"readme":"README.md","changelog":null,"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-03-06T21:12:32.000Z","updated_at":"2026-03-14T18:31:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/merlinrabens/foundry","commit_stats":null,"previous_names":["merlinrabens/foundry"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/merlinrabens/foundry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merlinrabens%2Ffoundry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merlinrabens%2Ffoundry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merlinrabens%2Ffoundry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merlinrabens%2Ffoundry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/merlinrabens","download_url":"https://codeload.github.com/merlinrabens/foundry/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/merlinrabens%2Ffoundry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31880916,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["ai-agents","ai-coding","automation","claude-code","code-review","codex","developer-tools","gemini","github-actions","multi-agent"],"created_at":"2026-04-16T10:05:31.037Z","updated_at":"2026-04-16T10:05:31.354Z","avatar_url":"https://github.com/merlinrabens.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/hero.png\" alt=\"Foundry — GitHub Issues that write their own code\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eFoundry\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eMulti-agent code factory. GitHub Issues that write their own code.\u003c/strong\u003e\u003cbr\u003e\n  One label. Three AI reviewers. Zero human keystrokes.\u003cbr\u003e\n  Running on a 2019 MacBook Pro for $400/month.\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quick-start\"\u003eQuick Start\u003c/a\u003e •\n  \u003ca href=\"#how-it-works\"\u003eHow It Works\u003c/a\u003e •\n  \u003ca href=\"#the-review-loop\"\u003eReview Loop\u003c/a\u003e •\n  \u003ca href=\"#openclaw-integration\"\u003eOpenClaw + ACP\u003c/a\u003e •\n  \u003ca href=\"#real-numbers\"\u003eReal Numbers\u003c/a\u003e\n\u003c/p\u003e\n\n---\n\n## The Pitch\n\nAdd a `foundry` label to a GitHub Issue. Go to sleep. Wake up to a pull request with three AI code reviews, all fixes applied, CI green.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/gifs/foundry-issue-to-pr.gif\" alt=\"GitHub Issue → PR in one command\" width=\"100%\"\u003e\n\u003c/p\u003e\n\nNo prompts. No terminals. No babysitting. The issue body IS the spec. The agent figures out the rest.\n\n---\n\n## Real Numbers\n\nEarly production use across 6 private repos (numbers from internal testing, updated periodically):\n\n| Metric | Value |\n|---|---|\n| Tasks spawned | 47 |\n| Merged successfully | 42 (89%) |\n| Average time to merge | 4.2 hours |\n| Cost per task | $2-8 |\n| Avg review-fix cycles | 3.7 |\n| Required human help | 5 (11%) |\n\nMost failures trace back to vague specs, not agent limitations. Fix the spec, re-run, it works.\n\n**Hardware:** 2019 MacBook Pro 16\" (Intel i9, 64GB RAM). Two Claude Max subscriptions ($200/mo each), Codex, Gemini. ~$400/month total.\n\n---\n\n## How It Works\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/architecture.png\" alt=\"Foundry Architecture\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n### The Full Chain\n\n```\nGitHub Issue (with `foundry` label)\n    ↓\nFoundry Orchestrator reads the issue body as a spec\n    ↓\nRoutes to best agent (Claude Code / Codex / Gemini)\n    ↓\nCreates git worktree + branch\n    ↓\nSpawns agent with the spec as context\n    ↓\nAgent writes code, opens PR (with `fixes #N` in body)\n    ↓\n3 AI reviewers review independently\n    ↓\nAgent reads ALL reviews, pushes fixes in one cycle\n    ↓\nCI passes + all reviewers approve = ready to merge\n    ↓\nPR merges → Issue auto-closes\n```\n\n### Spawning an Agent\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/gifs/foundry-spawn.gif\" alt=\"foundry orchestrate in action\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n### Agent Routing\n\nNot every agent is good at everything:\n\n- **Claude Code**: Frontend, React, complex refactors, nuanced review feedback\n- **Codex**: Backend, APIs, infrastructure, bulk changes (the workhorse)\n- **Gemini**: Design systems, documentation, config files, creative structure\n\nThe router is a grep. When it picks wrong, you override with a hint in the issue.\n\n```bash\n# Keyword routing (yes, really)\n\"frontend|react|component|css|ui\"  → Claude Code\n\"api|backend|database|migration\"   → Codex\n\"design|theme|token|style\"         → Gemini\n```\n\n---\n\n## The Review Loop\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/review-loop.png\" alt=\"Three AI Reviewers\" width=\"100%\"\u003e\n\u003c/p\u003e\n\nEvery PR gets reviewed by **three independent AI reviewers**:\n\n1. **Claude** (Opus 4.6) — Principal Engineer review. Architecture, security, correctness, maintainability. Blocking.\n2. **Codex** — architecture, API contracts, test coverage. Creates blocking status check.\n3. **Gemini** — design patterns, naming, documentation. Advisory.\n\n**Critical: all three must report before the agent starts fixing.** This prevents wasted cycles where fixing one reviewer's feedback breaks another's.\n\nBudget: 20 fix cycles per attempt. 5 attempts per task. If it can't converge, it notifies you.\n\n---\n\n## The Dashboard\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/gifs/foundry-status.gif\" alt=\"foundry status dashboard\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n`foundry status` shows all active tasks with BACKEND and CRKGS columns:\n\n| Letter | Gate |\n|--------|------|\n| **C** | CI green |\n| **R** | Claude approved |\n| **K** | Codex approved |\n| **G** | Gemini approved |\n| **S** | Branch synced |\n\nA task showing `CRKGS` is ready to merge.\n\n---\n\n## The Respawn Engine\n\nAgents crash. Rate limits. Token expiry. OOM kills. Network timeouts.\n\nFoundry checks every 30 minutes:\n\n1. Agent alive? If not → respawn with same spec, branch, PR\n2. New reviews? → trigger fix cycle\n3. CI failed? → mark for investigation\n4. Budget exhausted? → archive, notify you\n\nMost tasks complete on the first attempt. Persistent failures get escalated to you via Telegram.\n\n---\n\n## Visual Evidence: Agents That Prove Their Work\n\nFor PRs with frontend changes, Foundry expects visual proof. Screenshots, videos, before/after comparisons. If the PR body has no images and the diff touches `.tsx`/`.jsx`/`.vue`/`.css`, Foundry flags it.\n\n## Telegram Topics: One Thread Per Agent\n\nEvery `foundry spawn --topic` creates a dedicated Telegram forum topic for that task. All status updates — CI results, review verdicts, respawns, merges — go to that thread. Your main chat gets a one-liner (\"spawned TASK-123 — tracking in topic\") and stays clean.\n\n```bash\n# Spawn with a new topic (auto-created)\nfoundry spawn my-org/my-repo specs/backlog/add-auth.md claude --topic\n\n# Reuse an existing topic\nfoundry spawn my-org/my-repo specs/backlog/add-auth.md claude --topic-id 4821\n```\n\nUnder the hood, `tg_notify_task` checks the SQLite registry for a `tg_topic_id`. If one exists, the message goes to that thread. If not, it falls back to your main chat. Zero config changes needed for existing tasks.\n\n**Requirements:**\n- Telegram supergroup with Topics enabled (group settings → Topics → On)\n- Your bot must be an admin in the group\n- Set `TG_CHAT_ID` to the supergroup ID and `OPENCLAW_TG_BOT_TOKEN` to your bot token\n\n---\n\n## OpenClaw Integration\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/acp-flow.png\" alt=\"ACP Protocol Flow\" width=\"100%\"\u003e\n\u003c/p\u003e\n\n### What is ACP?\n\nACP (Agent Client Protocol) is like LSP (Language Server Protocol), but for AI coding agents. One standardized protocol that any agent can speak, any orchestrator can dispatch to.\n\n### OpenClaw as Orchestrator\n\n[OpenClaw](https://github.com/openclaw/openclaw) is an AI gateway that speaks ACP natively. It turns Foundry from \"scripts on a laptop\" into \"managed agent fleet you control from your phone\":\n\n```bash\n# Spawn via your orchestrator agent (e.g. from Telegram, Slack, or CLI)\nfoundry spawn my-org/my-repo \"Build the tracking integration per issue #6\" claude --topic\n```\n\n### What OpenClaw Adds\n\n**Push-based notifications:** No more cron polling. When an agent finishes, OpenClaw pushes a notification to Telegram, Slack, Discord, or email. Instantly.\n\n**Remote control from your phone:** Merge PRs, respawn agents, check status, all via Telegram message. You don't need to be at your laptop.\n\n**ACP Adapters:** Each agent (Claude, Codex, Gemini) has an adapter that translates its native CLI into ACP. When a new agent drops, write one adapter. Instantly compatible.\n\n**Horizontal scaling:** Run agents across multiple machines. Your Mac at home, a cloud instance, a colleague's server. OpenClaw distributes work based on capacity.\n\n**The notification chain:**\n```\nAgent finishes work\n    ↓ ACP result event\nOpenClaw receives completion\n    ↓ routes to your channel\n📱 \"PR #47 ready. CI green. 3 reviews pending.\"\n    ↓ you tap \"merge\"\nDone.\n```\n\n### The Full Stack: Paperclip → OpenClaw → Foundry\n\nFoundry is the execution layer in a three-tier autonomous development stack:\n\n```\nPaperclip (CEO/PM layer)\n  Creates issues, assigns priorities, tracks progress\n    ↓ wake event\nOpenClaw (orchestrator layer)\n  Receives wake, loads agent context, routes by label\n    ↓ foundry spawn / foundry orchestrate\nFoundry (execution layer)\n  Spawns coding agents, manages worktrees, runs review loop\n    ↓ PR with fixes\nGitHub (delivery layer)\n  CI, code review, merge, issue auto-close\n    ↓ status update\nPaperclip (closes the loop)\n  Agent reports PR link back to the original issue\n```\n\n[Paperclip](https://github.com/paperclipai/paperclip) acts as the product management layer. Its CEO agent creates prioritized issues with labels. OpenClaw wakes on those events and routes them through Foundry based on label:\n\n- `engineering` / `foundry` → `foundry spawn` (isolated worktree, own branch + PR)\n- `ops` → handled directly by the orchestrator agent (config, crons, research)\n\nThe full loop has been verified end-to-end: CEO creates issue → OpenClaw agent wakes → creates GitHub issue → spawns Foundry agent → agent codes + opens PR → reviews pass → agent reports PR link back to Paperclip. Zero human keystrokes.\n\n### Without OpenClaw\n\nFoundry works perfectly standalone. Cron jobs + local agents + GitHub. OpenClaw is the upgrade path when you want remote control, push notifications, and multi-machine scaling. Add Paperclip on top when you want autonomous project management.\n\n---\n\n---\n\n## Quick Start\n\n```bash\n# Install (or update)\ncurl -fsSL https://raw.githubusercontent.com/merlinrabens/foundry/main/install.sh | bash\n\n# Configure repos, agents, notifications\nfoundry setup\n\n# Go\nfoundry status                     # Dashboard\nfoundry scan ~/projects/my-repo    # Find labeled issues\nfoundry orchestrate                # Full auto: scan → spawn → check\n```\n\nThat's it. The installer handles cloning, PATH, prerequisites, and database setup. The setup wizard walks you through everything else.\n\n## Requirements\n\n- macOS or Linux\n- [GitHub CLI](https://cli.github.com/) (`gh`) — authenticated (`gh auth login`)\n- At least one AI agent (sign in via each CLI for OAuth, or set API key as fallback):\n  - [Claude Code](https://docs.anthropic.com/en/docs/claude-code): `npm i -g @anthropic-ai/claude-code` + `claude /login`\n  - [Codex](https://github.com/openai/codex): `npm i -g @openai/codex` + run `codex` to sign in\n  - [Gemini](https://github.com/google-gemini/gemini-cli): `npm i -g @google/gemini-cli` + run `gemini` to sign in\n- SQLite3, jq (installer checks for these)\n\n## Setup Guide\n\n`foundry setup` handles everything interactively:\n\n1. **Repos** — which repos Foundry should manage\n2. **AGENTS.md** — generates config file in repos that need one\n3. **Agents** — detects installed CLIs, checks OAuth sign-in status\n4. **Telegram** — optional notifications (bot token + chat ID)\n5. **CI workflows** — deploys review workflows to your repos\n6. **Database** — creates the SQLite registry\n\n### GitHub Repository Secrets\n\nEach repo that uses Foundry's CI review workflows needs these secrets (Settings \u003e Secrets \u003e Actions):\n\n| Secret | Required | Used By |\n|---|---|---|\n| `CLAUDE_CODE_OAUTH_TOKEN` | Yes | Claude Code Review (CI) |\n| `OPENAI_API_KEY` | If using Codex review | Codex Review (CI) |\n| `TELEGRAM_BOT_TOKEN` | Optional | Notifications |\n| `TELEGRAM_CHAT_ID` | Optional | Notifications |\n\n### Uninstall\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/merlinrabens/foundry/main/install.sh | bash -s -- --uninstall\n```\n\n## Commands\n\n```\nfoundry setup                         Interactive config wizard\nfoundry status                        Dashboard of all tasks\nfoundry scan \u003crepo-path\u003e              Find `foundry`-labeled issues\nfoundry spawn \u003crepo\u003e \u003cspec\u003e [agent] [--topic]   Spawn agent (optionally with TG topic)\nfoundry check [task-id]               Monitor agents, trigger reviews\nfoundry respawn \u003ctask-id\u003e             Retry a failed task\nfoundry orchestrate [repo]            Full auto: scan + spawn + check\nfoundry cleanup                       Archive completed tasks\nfoundry steer \u003ctask-id\u003e \u003cmsg\u003e         Redirect agent mid-flight via ACP\nfoundry ask \u003ctask-id\u003e \u003cquestion\u003e     Ask agent a question, get reply\nfoundry diagnose \u003ctask-id\u003e            Debug a stuck task\nfoundry peek \u003ctask-id\u003e                Structured JSON status (registry + live)\nfoundry nudge \u003ctask-id\u003e               Unstick a stalled agent\nfoundry design \u003crepo\u003e \u003cspec\u003e [agent]  Gemini-first design pipeline\nfoundry recommend \u003cspec\u003e              Suggest best agent for task\nfoundry update                        Self-update from upstream\n```\n\n## Self-Hosted Runner (Event-Driven, The Real Killer)\n\nBy default, Foundry uses cron to poll for changes. But there's a faster path: a **self-hosted GitHub Actions runner** on your machine.\n\nWhen any CI workflow finishes, any review is submitted, or a PR is closed, GitHub triggers a lightweight `foundry-gate.yml` workflow that runs `foundry check \u003ctask-id\u003e` **locally on your machine**. Not in GitHub's cloud. On the same Mac where your agents live.\n\n**Result:** Foundry reacts in seconds, not in 30 minutes when the cron fires. Event-driven. No polling. $0/month.\n\n```yaml\n# .github/workflows/foundry-gate.yml (included in ci-templates/)\non:\n  workflow_run:\n    workflows: [\"Tests \u0026 Lint\", \"Claude Code Review\", \"Codex Code Review\", \"Gemini Review Check\"]\n    types: [completed]\n  pull_request_review:\n    types: [submitted]\n\nruns-on: [self-hosted, foundry]  # ← your machine, not GitHub cloud\nsteps:\n  - run: foundry check \"$TASK_ID\"\n```\n\n### Setup (5 minutes)\n\n```bash\n# Install self-hosted runner for your org (covers all repos)\nbash scripts/setup-runner.sh your-org\n\n# Or for a single repo\nbash scripts/setup-runner.sh your-org/your-repo\n\n# Deploy the foundry-gate.yml workflow to your repos\nbash ci-templates/deploy-ci.sh your-org/your-repo\n```\n\nThe cron jobs below are the **fallback** for edge cases. The self-hosted runner handles 95% of events in real-time.\n\n---\n\n## Cron Setup (Fallback)\n\n```bash\n# Check loop: monitor agents, trigger reviews (every 30 min)\n2,32 * * * *  cd ~/.foundry \u0026\u0026 bash foundry check\n\n# Orchestrator: scan for new issues, spawn agents (every 3 hours)\n5 */3 * * *   cd ~/.foundry \u0026\u0026 bash foundry orchestrate\n\n# Cleanup: archive completed tasks (3 AM)\n0 3 * * *     cd ~/.foundry \u0026\u0026 bash foundry cleanup\n```\n\n## Configuration\n\nFoundry uses a **two-file config system**:\n\n| File | Tracked? | Purpose |\n|------|----------|---------|\n| `config.env` | Yes (in git) | Safe defaults, no secrets, no personal data |\n| `config.local.env` | No (gitignored) | Your overrides: repos, Telegram IDs, personal paths |\n\nThe dispatcher sources `config.env` first, then `config.local.env` on top. Any variable in `config.local.env` wins.\n\n**Important:** Bash arrays like `KNOWN_PROJECTS=()` are **replaced**, not merged. Your `config.local.env` must contain the full list of projects, not just additions.\n\n```bash\n# config.env — safe defaults (committed)\nDEFAULT_MODEL=codex        # Default backend (codex, claude, gemini)\nENABLED_BACKENDS=codex,claude,gemini  # Available backends\nMAX_RETRIES=5              # Spawn attempts per task\nMAX_REVIEW_FIXES=20        # Review-fix cycles per attempt\nMAX_CONCURRENT=4           # Parallel agents\nAGENT_TIMEOUT=1800         # 30 min per agent run\nAUTO_MERGE_LOW_RISK=false  # Auto-merge docs/tests PRs\nKNOWN_PROJECTS=()          # Empty — set in config.local.env\n\n# config.local.env — your overrides (gitignored, never committed)\nDEFAULT_MODEL=claude                  # Override default backend\nENABLED_BACKENDS=claude,gemini        # Disable codex (e.g., rate limited)\nTG_CHAT_ID=\"-100xxxxxxxxxx\"\nKNOWN_PROJECTS=(\n  \"$HOME/projects/my-org/my-repo\"\n  \"$HOME/projects/my-org/another-repo\"\n)\n```\n\n`foundry setup` creates `config.local.env` for you during initial configuration.\n\n## Architecture\n\n```\nfoundry (CLI entry point)\n├── commands/           # User-facing commands\n│   ├── spawn.bash      # Agent spawning + worktree setup\n│   ├── check.bash      # Health monitoring + review triggers\n│   ├── respawn.bash    # Failure recovery + context injection\n│   ├── orchestrate.bash # Full automation loop\n│   ├── lifecycle.bash  # attach, logs, kill, steer, open\n│   └── status.bash     # Dashboard\n├── core/               # Shared infrastructure\n│   ├── registry_sqlite.bash  # SQLite state management\n│   ├── gh.bash               # GitHub API (with retry)\n│   └── logging.bash          # Structured logging + Telegram\n├── lib/                # Business logic\n│   ├── acp_orchestrator.py   # ACP protocol handler (all backends)\n│   ├── runner_script.bash    # Agent runner generator\n│   ├── session_bridge.bash   # OpenClaw native session bridge\n│   ├── jerry_routing.bash    # Smart agent selection\n│   ├── review_pipeline.bash  # 3-reviewer orchestration\n│   ├── spawn_guards.bash     # Pre-spawn validation\n│   ├── respawn_helpers.bash  # Failure context gathering\n│   └── state_machine.bash    # Task lifecycle\n├── ci-templates/       # GitHub Actions workflows\n│   ├── claude-code-review.yml\n│   ├── codex-review.yml\n│   ├── gemini-check.yml\n│   └── foundry-gate.yml      # Event-driven bridge\n├── openclaw/           # OpenClaw skill (installed during setup)\n│   └── SKILL.md\n└── tests/              # 396 tests (bats)\n```\n\n## License\n\nMIT\n\n## Author\n\n[Merlin Rabens](https://www.linkedin.com/in/merlin-rabens/) — AI Systems Architect\n\nBuilt this because I was spending 6 hours a day being a human webhook between AI agents and GitHub. Now I add a label and go read bedtime stories.\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003cem\u003eThe gap between \"I use AI coding agents\" and \"AI coding agents work for me while I sleep\" is surprisingly small.\u003cbr\u003eIt's a cron job, a label, and the willingness to close your laptop.\u003c/em\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerlinrabens%2Ffoundry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmerlinrabens%2Ffoundry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmerlinrabens%2Ffoundry/lists"}