{"id":30615631,"url":"https://github.com/alexfalkowski/bin","last_synced_at":"2026-07-10T14:01:19.830Z","repository":{"id":37033844,"uuid":"493833140","full_name":"alexfalkowski/bin","owner":"alexfalkowski","description":"A place for common executables.","archived":false,"fork":false,"pushed_at":"2026-07-03T08:10:27.000Z","size":1434,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-07-03T09:28:28.164Z","etag":null,"topics":["bash","docker","ruby"],"latest_commit_sha":null,"homepage":"https://alexfalkowski.github.io/bin","language":"Ruby","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/alexfalkowski.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2022-05-18T21:39:31.000Z","updated_at":"2026-07-03T08:09:13.000Z","dependencies_parsed_at":"2025-12-19T02:02:27.033Z","dependency_job_id":null,"html_url":"https://github.com/alexfalkowski/bin","commit_stats":null,"previous_names":[],"tags_count":407,"template":false,"template_full_name":null,"purl":"pkg:github/alexfalkowski/bin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alexfalkowski","download_url":"https://codeload.github.com/alexfalkowski/bin/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alexfalkowski%2Fbin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35333326,"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-07-10T02:00:06.465Z","response_time":60,"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":["bash","docker","ruby"],"created_at":"2025-08-30T08:06:08.848Z","updated_at":"2026-07-10T14:01:19.824Z","avatar_url":"https://github.com/alexfalkowski.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CircleCI](https://circleci.com/gh/alexfalkowski/bin.svg?style=shield)](https://circleci.com/gh/alexfalkowski/bin)\n[![Stability: Active](https://masterminds.github.io/stability/active.svg)](https://masterminds.github.io/stability/active.html)\n\n# 🧰 bin\n\nShared executables, Makefile includes, and agent skills for projects that use\nthis repository as a Git submodule at `./bin`.\n\n## 🎯 Why This Exists\n\nThe projects that use this repository share the same build, lint, test,\nsecurity, Docker, release, and agent-workflow glue. Keeping that glue here makes\nthe consuming repositories smaller while giving them one supported integration\npath.\n\n## 🚀 Install Or Bootstrap\n\nAdd this repository as the downstream project's `bin` submodule:\n\n```bash\ngit submodule add git@github.com:alexfalkowski/bin.git bin\ngit submodule update --init\n```\n\n\u003e [!IMPORTANT]\n\u003e In a fresh checkout of a project that already has the submodule, initialize it\n\u003e before using targets supplied by `bin`.\n\n```bash\ngit submodule update --init\n```\n\n## 💻 Usage\n\nInclude only the Make fragments your project needs. The fragments derive helper\npaths from their own location, so downstream includes work when this repository\nis mounted at `./bin`. Inside this repository, the root `Makefile` includes the\nsame fragments from `build/make/`.\n\nFor command discovery, include `help.mak` and run `make` or `make help` in the\nconsuming repository.\n\n```make\ninclude bin/build/make/help.mak\ninclude bin/build/make/go.mak\n```\n\nRuby projects typically include the Ruby fragment instead:\n\n```make\ninclude bin/build/make/help.mak\ninclude bin/build/make/ruby.mak\n```\n\nProjects that use the shared git workflow can include it separately:\n\n```make\ninclude bin/build/make/git.mak\n```\n\nConsuming repositories choose which fragments to include and remain responsible\nfor project-specific configuration such as service code, image names, release\nversion files, and environment-specific settings.\n\n## 🤖 Agent Skills\n\nThis repository also ships shared agent guidance in `skills/`. Each skill is a\n`skills/\u003cname\u003e/SKILL.md` file that works with both OpenAI Codex and Claude Code;\n`skills/\u003cname\u003e/agents/openai.yaml` carries the Codex-specific interface.\n\n### Codex\n\nCodex discovers repository skills from `.agents/skills`, so wire a downstream\nrepository once with the shared bootstrap, then commit the result:\n\n```make\ninclude bin/build/make/codex.mak\n```\n\n```bash\nmake codex-init\n```\n\nThis creates a `.agents/skills` symlink to `bin/skills`, a `.codex/config.toml`\nsymlink to the shared permission profile in `bin/build/codex/config.toml`, and a\n`.codex/rules/bin.rules` symlink to the shared execution guardrails. A\nrepository-owned real config or rule file is left untouched. Every later clone\ncan invoke shared skills with `$`, for example `$code-review`, and receives the\nshared permissions after the one-time project trust prompt. Repositories with\nan existing real config can merge the shared settings explicitly.\n\nThe permission profile requires Codex 0.138.0 or later. It selects the built-in\n`:danger-full-access` profile, so commands run without filesystem or network\nsandbox restrictions. Approval remains `on-request`; the shared rules require\napproval for recognized remote writes and destructive operations and forbid\ncatastrophic commands. Explicit workflow permission gates in `AGENTS.md` also\nremain in force.\n\n\u003e [!WARNING]\n\u003e The shared profile is only for trusted repositories. Every command, Make\n\u003e target, hook, and dependency script inherits the user's host access: it can\n\u003e read or modify files outside the workspace, access credentials, and send data\n\u003e over the internet. The shared rules cover named risky command shapes; they are\n\u003e not a filesystem or network sandbox. Review executable repository content\n\u003e before running it with this profile.\n\nLegacy `sandbox_mode` settings and the `--sandbox` CLI flag take precedence over\npermission profiles. Remove those overrides when the shared profile should be\nactive.\n\nCodex loads project config and rules only for trusted repositories. Put\nper-machine additions in `~/.codex/config.toml` and\n`~/.codex/rules/default.rules`; Codex also records accepted persistent command\nprefixes in that user rules file. Re-run `make codex-init` only when the shared\npaths move. Updates to the shared profile or rules propagate with the next\n`bin` submodule update; start a new Codex session afterward so it uses the\nupdated permissions.\n\nCodex reads `AGENTS.md` separately for repository instructions. Downstream\nrepositories should still point agents at the shared instructions instead of\ncopying the skill list:\n\n```markdown\n## Shared guidance\n\nUse `bin/AGENTS.md` for shared skills and cross-repository defaults.\n```\n\n### Claude Code\n\nClaude Code does not scan submodules; it only loads skills from `.claude/skills/`\nand instructions from `CLAUDE.md`. Wire a repository once with the shared\nbootstrap, then commit the results:\n\n```make\ninclude bin/build/make/claude.mak\n```\n\n```bash\nmake claude-init\n```\n\nThis creates a `.claude/skills` symlink to `bin/skills`, a `.claude/settings.json`\nsymlink to the shared permissions baseline in `bin/build/claude/settings.json`\n(unless the repository owns a real, non-symlink `settings.json`), and a managed\nblock in `CLAUDE.md` that imports the local and shared `AGENTS.md`. All are\ncommitted, so every later clone works with no per-machine setup beyond the\none-time workspace trust prompt. Invoke a skill as a slash command, for example\n`/code-review`. Re-run `make claude-init` only when the shared skills directory\nmoves; adding a new skill or updating the permissions baseline needs no\ndownstream change because the symlinks target shared paths that follow `bin`.\n\nThe baseline sets `sandbox.enabled: false` to match the Codex\n`:danger-full-access` posture, so commands run without Claude Code's bash\nsandbox. The `permissions` allow, ask, and deny arrays are the guardrails:\n`allow` keeps routine dev commands prompt-free, `ask` gates recognized remote\nwrites and destructive operations, and `deny` forbids catastrophic commands.\nExplicit workflow permission gates in `AGENTS.md` also remain in force.\n\n\u003e [!WARNING]\n\u003e The shared baseline is only for trusted repositories. Every command, Make\n\u003e target, hook, and dependency script inherits the user's host access: it can\n\u003e read or modify files outside the workspace, access credentials, and send data\n\u003e over the internet. The permissions arrays cover named risky command shapes;\n\u003e they are not a filesystem or network sandbox. Review executable repository\n\u003e content before running it with this baseline.\n\nPut per-repository or per-machine permission tweaks in the gitignored\n`.claude/settings.local.json`, which Claude Code merges over the baseline.\nWiring the `*-template` repositories once pre-wires every repository generated\nfrom them.\n\nUpdate `AGENTS.md` when the shared skill set, composition rules, or repository\nworkflow guidance changes.\n\n## 🛠️ Operations\n\nThis repository is shared tooling. Changes can affect every downstream project\nthat vendors it, so prefer small compatible changes and validate through the\nrepository Make targets.\n\nSome helpers intentionally depend on tools or services outside this repository:\nDocker helpers assume the consuming project supplies image names and release\nversion files; the shared Go Dockerfile uses `Dockerfile.dockerignore` next to\nthe Dockerfile, which takes precedence over a consuming repository's root\n`.dockerignore`; security helpers assume Trivy is available; shell and\nDockerfile lint targets depend on `shellcheck` and `hadolint`;\n`build/docker/env` pulls, rebases, and updates submodules in an existing sibling\n`../docker` checkout, or uses SSH to clone\n`git@github.com:alexfalkowski/docker.git` there when missing.\n\n## 🔗 References\n\n- `make` or `make help`: current command catalog for this repository.\n- `build/make/*.mak`: reusable Makefile fragments for downstream projects.\n- `build/codex/init`: one-time Codex wiring for a consuming repository (run via\n  `make codex-init`).\n- `build/codex/config.toml` and `build/codex/rules/default.rules`: shared Codex\n  permission profile and execution guardrails.\n- `build/claude/init`: one-time Claude Code wiring for a consuming repository\n  (run via `make claude-init`).\n- `build/docker/go/Dockerfile`: shared Go service Dockerfile template.\n- `build/docker/go/Dockerfile.dockerignore`: shared Docker build-context\n  exclusions for the Go service Dockerfile.\n- `quality/`: shared lint, feature, benchmark, and coverage helpers.\n- `AGENTS.md`: repository instructions, shared skills, and agent operating\n  rules.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexfalkowski%2Fbin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falexfalkowski%2Fbin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falexfalkowski%2Fbin/lists"}