agentleFS
projectbluefinprojectbluefin/finpilot/.agents/skills/build/SKILL.md

build

Skill131 starsChanged 18 days agoApache-2.0View on GitHub

The Containerfile, Justfile, build phases, image pinning, and the example scripts. Use when changing how the image is assembled or activating an example.

156 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use backprop, finances and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • JuliusBrusseeSkill

    backprop

    Bug → spec protocol. When a bug is found or a test fails, trace the cause, decide whether a new §V invariant would catch recurrence, append to §B. This is the one non-obvious thing SDD does that plan-then-execute doesn't. Triggers on test failure, bug report, post-mortem, or explicit user ask.

    Also in 4 projects that use this

  • GerardoRdz96Skill

    finances

    Use when Gera talks about his money — logging an expense ("I spent X on Y"), checking where he stands this pay-period, closing a period, planning debt payoff, onboarding his financial picture, or asking for budgeting/finance opinions. Servy's financial brain. Triggers — "I spent", "log this expense", "where am I this period", "close the period", "how's my budget", "debt plan", "should I pay off", "finances onboard", "/finances".

    Also in 3 projects that use this

  • cpiprintSkill

    favicon

    Generate favicons from a source image

    Also in 3 projects that use this

  • madeehahassanSkill

    Go-Live

    Pre-launch checklist. Use before making any app public, sharing a link externally, or announcing a product launch. Adapts to Claude Code, claude.ai, and Cowork.

    Also in 3 projects that use this

  • JuliusBrusseeSkill

    deepen

    Optional design-improvement pass for when you have spare usage to drain. Finds the shallowest modules in the code the spec touches, researches a deeper design, and proposes refactors that shrink interfaces and hide decisions — behavior held constant, tests green before and after. Proposes §I/§V/§T edits, never silent rewrites. Triggers when the user says "deepen this", "improve the design", "this module feels shallow", "pull complexity down", "use spare budget on the codebase", or invokes /ck:deepen. Leans on the codebase-design skill's deep-module vocabulary when present.

    Also in 3 projects that use this

  • synaptiaiSkill

    gate

    Create a BDSK review_gate artifact. Defines a checkpoint that controls whether generated output may proceed toward acceptance. Use when defining quality, security, or scope gates for execution plans.

    Also in 5 projects that use this

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 0 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 143 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Every OCI reference is pinned by digest and updated by Renovate: the base image, projectbluefin/common, ublue-os/brew, bootc-image-builder, …

    line 54
  2. Very specific:

    If upstream rotates that key, update the copy.

    line 88

“Common” is measured: kept by at least 6 in 10 of the 143 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Build

The Containerfile

It is the source of truth for image assembly, and it is written to be read. Its structure, in order:

  1. Identity — ARG IMAGE_NAME, IMAGE_VENDOR, UBLUE_IMAGE_TAG, and the # Name: comment. The name actually published is the repository name; these are the local fallback and the image metadata.
  2. Context stage — COPY build /build, COPY custom /custom, then the two OCI images into /oci/common and /oci/brew.
  3. Base — the FROM line. The only place the base is chosen; the Fedora major, the image name, and the digest all follow from it.
  4. Phases — one RUN block per script, in the order they are named. build/README.md lists them.
  5. Metadata — the LABEL block, fed by ARGs declared late so a new version or commit only invalidates the label layer.

Order matters for cache: volatile values go after the expensive layers.

The Justfile

just build            # build the image
just build-qcow2      # build a QCOW2 disk image
just build-iso        # build an installer ISO
just run-vm-qcow2     # boot the image in a VM
just test-unit        # run the suite
just lint             # shellcheck every tracked script
just check            # verify Justfile syntax

just --list has the rest. IMAGE_NAME defaults to the value in the Justfile and is overridable by the IMAGE_NAME environment variable; CI sets that from the repository name.

build-iso gives installed machines a bootc origin built from the image's image-info.json image-ref plus the tag you pass, e.g. just build-iso ghcr.io/projectbluefin/finpilot stable. Never read the channel from the baked image-tag: CI builds only as stable-testing and :stable is a digest copy, so that value is stable-testing even in the stable image.

Pinning

Every OCI reference is pinned by digest and updated by Renovate: the base image, projectbluefin/common, ublue-os/brew, bootc-image-builder, and the GitHub Actions. Do not hand-edit a digest; let Renovate propose it.

Exception: the base image's Fedora major (the final FROM quay.io/fedora-ostree-desktops/silverblue:N in Containerfile) is not updated by Renovate. The packageRules entry in .github/renovate.json that matches matchDepNames: ["quay.io/fedora-ostree-desktops/*"] with matchUpdateTypes: ["major"] sets enabled: false, so no major update is proposed for that namespace — including an already-released one such as 44 -> 45. That is deliberate: the namespace also tags unreleased branches, and every major rebase is a manual step tied to a known-good validation. Bump the tag in Containerfile by hand when the next major is released and validated.

The base image's FROM line is the only place the base is chosen, so the Fedora major cannot desync the way a hand-maintained FEDORA_MAJOR_VERSION ARG could. Two readers derive it from that base: just build parses the tag for the version string, and 00-image-info.sh reads the base's os-release for the image metadata.

BASE_IMAGE_NAME has no default in the Containerfile on purpose: a stale default like silverblue would silently mislabel a CentOS or Hummingbird fork. just build fills it from the FROM line and 00-image-info.sh hard-fails on an empty value, so build through just; a bare podman build . is unsupported.

Examples

build/*.sh.example are inactive until you activate them: rename the file off .example and add a RUN block after the package phase. build/README.md has the block to copy.

50-nvidia.sh.example pulls ghcr.io/ublue-os/akmods-nvidia-open through a skopeo policy that accepts only images signed by build/akmods-cosign.pub, a copy of ublue-os/akmods cosign.pub. If upstream rotates that key, update the copy; do not weaken the policy to insecureAcceptAnything to get a build through.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.