agentleFS
christofferbergjchristofferbergj/agent-skills/skills/planning/software-factory/SKILL.md

software-factory

Skill1 starsChanged 24 days agoMITView on GitHub

Shared language for designing a software factory: the tasks it runs and the services it plugs into.

8 other projects use a version of this, 2 of them edited.

Adopted by

Most recently taken up by

Used with

Projects with it also use claude-handoff, writing-beats and 5 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.
  • ryotaroh180105Skill

    claude-handoff

    Hand the current conversation off to a fresh background agent that picks up the work immediately.

    Also in 3 projects that use this

  • LesaniSkill

    writing-beats

    Shape an article as a journey of beats, choose-your-own-adventure style. The user picks a starting beat from the raw material, you write only that beat, then offer options for where to pivot next, beat by beat, until the article reaches a natural end. Use when the user has raw material and wants to assemble it as a narrative rather than an argument.

    Also in 3 projects that use this

  • LesaniSkill

    writing-fragments

    Grilling session that mines the user for fragments — heterogeneous nuggets of writing (claims, vignettes, sharp sentences, half-thoughts) — and appends them to a single document as raw material for a future article. Use when the user wants to develop ideas before imposing structure, or mentions "fragments", "ideate", or "raw material" for writing.

    Also in 3 projects that use this

  • simo97Skill

    migrate-to-shoehorn

    Migrate test files from `as` type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace `as` in tests, or needs partial test data.

    Also in 3 projects that use this

  • AnasX7Skill

    scaffold-exercises

    Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. Use when user wants to scaffold exercises, create exercise stubs, or set up a new course section.

    Also in 3 projects that use this

  • AWSSkill

    wait-what

    Stop. That last message did not land: re-pitch it.

    Also in 4 projects that use this

  • +1 more from Lesani

The file

We split this skill into the rules it gives an agent

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

  • 0

    Common

    Most of the 6 edited versions we read keep these.

  • 2

    Distinctive

    This author's own choices. Worth a look.

  • 0

    Very specific

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

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Every trigger is an accelerator.

    line 56
  2. Distinctive:

    When the user is choosing a product for a slot, read that slot's survey to get oriented, then research the current options yourself.

    line 77

“Common” is measured: kept by at least 6 in 10 of the 6 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

A software factory is a system of agents that turns tickets, PRs and schedules into merged code, deployed on remote infrastructure the user chooses. This skill is the language for designing one. Use these terms, and only these, when discussing or whiteboarding a factory; when the user reaches for a word under Avoid, name the canonical term.

Tasks and runs

Task: A kind of work the factory performs, defined once and run many times: review, explore, implement, ratchet. A task may work on a ticket, a PR, or the codebase as a whole. Avoid: job, workflow, action

Trigger: The event that starts a run: a change in the ticket tracker or git host, a clock in the orchestrator, or another run.

Run: One execution of a task on one runner, from its trigger to its finish, treated as a black box. A run triggers further runs either directly, through logic in the orchestrator, or by changing the ticket tracker or git host. A run never waits for a human: it ends, and the human's later change to the ticket tracker or git host triggers a new run. Avoid: session

Runner: The disposable machine a run executes on. Nothing on it survives the run, even when the machine itself is long-lived: a run's only memory of earlier runs is the ticket tracker, the git host and the orchestrator. Avoid: server, host, box, compute, sandbox

Services

Ticket tracker: Where tickets live, and the factory's human interface: humans schedule work by filing tickets, talk to agents in their comments, and their changes to tickets trigger runs. Avoid: issue tracker, ticket manager, project board

Ticket source: Anything outside the factory that creates tickets in the ticket tracker: a feedback button, a monitor, an error tracker, an inbox. Avoid: data source, trigger source, intake

Git host: Where branches, PRs and reviews live. Avoid: code host, forge, repo

Orchestrator: The component that receives triggers, starts runs on runners, and records which runs are queued, in flight or finished. Avoid: dispatcher, scheduler, control plane

Observability platform: Where runners send logs, traces and status, so a human can see what happened inside each run. Optional: the product filling the runner or orchestrator slot often shows enough on its own. A run never decides on it until something writes it into the ticket tracker or git host. Avoid: observability, logs, monitoring, dashboard

Designing a factory

A design has two halves: the services, each a slot filled with a product, and the tasks whose runs move work through them.

Start from the user's problem, not the factory: untriaged tickets, PRs waiting for automated review, a stricter automated check to migrate to, bugs nobody reads. When the user names a problem or doesn't know what to build, read EXAMPLE-TASKS.md for the tasks that solve common ones.

Start slow

Every trigger is an accelerator. Accelerators without brakes make a slop cannon. There are three brakes:

  • Automated checks: deterministic gates (types, lint, tests) that every run must pass.
  • Automated review: a separate run that reads the diff cold against the codebase's standards and the ticket, when there is one.
  • Human review: a human reads the PR before it merges; what it catches becomes new automated checks and sharper automated review.

Add one automated trigger at a time, throttled at first (one bug report in ten, a clock once a day), with human review on every PR. Open the throttle as the brakes earn trust, and cap every loop of runs at a few tries before a human.

Fill every slot

Each service is a slot. One product can fill several slots, and one server can host several services. Three designs, side by side:

ServiceAll on GitHubLinear ticketsOwn tracker
Ticket trackerGitHub IssuesLinearown app
Ticket sourcefeedback buttonfeedback button, monitorfeedback button, monitor
Git hostGitHubGitHubGitHub
OrchestratorGitHub Actionsown server + databaseown app
RunnerActions runnerActions, E2B, Daytona or a VPSown app, or sandboxes
Observability platformnone: Actions run pages sufficean LLM tracing platformown app

When the user is choosing a product for a slot, read that slot's survey to get oriented, then research the current options yourself; each survey groups the options by type and lists the questions that decide the slot:

  • TICKET-TRACKERS.md
  • GIT-HOSTS.md
  • RUNNERS.md
  • OBSERVABILITY-PLATFORMS.md

Buy the services and build the tasks: the tasks carry the user's design, the services are generic. Favour an off-the-shelf ticket tracker: it is robust, people already know it, and outside users are easy to let in.

Question every task

For each task, answer:

  1. What triggers it?
  2. What does it do, and which services does it read and write?
  3. What does it trigger next?
  4. Where does a human re-enter?
  5. What stops two runs doing the same work?

For each ticket source, answer: what stops it filing the same ticket twice?

A design is finished when every slot names a product (or, for the observability platform, a deliberate none) and every task and ticket source has an answer to every question.

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.