From ac0c8377d961a34661e8b5ed8d345606634d16e0 Mon Sep 17 00:00:00 2001 From: Jacob Stephens Date: Mon, 12 Oct 2026 00:25:26 -0400 Subject: [PATCH 1/2] Refresh homepage for current factory workflows (#663) --- site/index.html | 137 ++++++++++++++++++++++++++++-------------------- site/styles.css | 18 +++---- 2 files changed, 86 insertions(+), 69 deletions(-) diff --git a/site/index.html b/site/index.html index a895356cb..5161efdda 100644 --- a/site/index.html +++ b/site/index.html @@ -4,13 +4,13 @@ thirdshift: your issues go to press overnight - + - + @@ -18,7 +18,7 @@ - + @@ -51,13 +51,14 @@

Your issues go to press overnight.

-

The humans are the day shift: you talk the idea through, write the spec and cut it into tickets. The agents work the third shift: give thirdshift an Issue URL and it implements the issue, reviews its own work and opens a pull request that is ready for review by morning.

+

The humans are the day shift: you talk the idea through, write the spec and cut it into tickets. The agents work the third shift: give thirdshift an Issue URL and it implements the issue, reviews its own work and delivers a pull request ready for review, or merges it when asked. Start a Run whenever you like, or let your operating system start passes on a schedule.

Built on Matt Pocock's skills: aihero.dev/skills · mattpocock/skills. Read every prompt and skill thirdshift sends.

Install

curl -fsSL https://thirdshift.app/install.sh | sh
Show the full commandcurl -LsSf https://github.com/JacobStephens2/thirdshift/releases/latest/download/thirdshift-installer.sh | sh
+

Then run thirdshift setup to choose your defaults. Keep the binary current with thirdshift update.

@@ -74,10 +75,10 @@

Your issues go to press overnight.

Day shift

Humans, with Matt Pocock's skills, used interactively

  1. /grill-with-docs
  2. /to-spec
  3. /to-tickets
-

The human half of the workflow: shaping work into issues the factory can take on, by grilling the idea with /grill-with-docs, writing the spec with /to-spec and cutting it into tickets with /to-tickets, and reviewing the pull requests it delivers.

+

The human half of the workflow: shaping work into issues the factory can take on, by grilling the idea with /grill-with-docs, writing the spec with /to-spec and cutting it into tickets with /to-tickets, and reviewing the pull requests it delivers, except those you ask a Merge run to merge.

Third shift

Agents, with headless copies of the same skills

  1. /thirdshift-implement
  2. /thirdshift-code-review
  3. /thirdshift-pr
-

thirdshift takes one Issue URL per Run. Its Factory skills, adapted to run with no human in the loop, implement the issue with /implement, review the work with /code-review and open a pull request that is ready for review with /pr.

+

thirdshift takes an Issue URL: one issue starts a Run; an issue with sub-issues starts a Spec run. Its Factory skills, adapted to run with no human in the loop, implement the issue with /thirdshift-implement, review the work with /thirdshift-code-review and write the pull request with /thirdshift-pr.

Read every prompt and skill the agents get →

@@ -89,7 +90,7 @@

Your issues go to press overnight.

How a Run works

One issue in, one pull request out.

-

A Run feeds one issue through four units and delivers a pull request that is ready for review. Units 2 and 3 are one agent session. Under each unit are the lines thirdshift printed on stderr during a real Run: issue #24, which produced pull request #25. Click a unit to see what it does. Every prompt and skill it sends is on the Prompts and skills page.

+

A Run feeds one issue through four units and delivers a pull request that is ready for review. Units 2 and 3 are one agent session in the Harness you choose. This replay is a historical example, recorded before the newer workflows below. Under each unit are the lines thirdshift printed on stderr during a real Run: issue #24, which produced pull request #25. Click a unit to see what it does. Every prompt and skill it sends is on the Prompts and skills page.

@@ -188,14 +189,14 @@

One issue in, one pull request out.

1 · C · Prepare

-

Pre-flight checks the Origin match, that the issue is open and that git has a name and email to commit with. thirdshift then picks the Issue branch, fresh or a Continuation, and creates a worktree next to your clone. Pre-flight prints nothing when it passes, so the first line is the worktree.

+

Pre-flight checks the Origin match, the open issue, the Base branch and the selected Harness, plus Git’s commit identity. thirdshift picks the Issue branch, fresh or a Continuation, claims the issue with in-progress, and creates a worktree next to your clone. This older replay predates Claims.

  1. thirdshift: creating worktree /home/jacob/repos/thirdshift-issue-24 on issue-24 from origin/main

2 · M · Implement

-

A headless Claude Code session, with the Factory skills loaded, implements the issue in the worktree, test-first where it can, and commits.

+

A headless session in the selected Harness, with the Factory skills loaded, implements the issue in the worktree, test-first where it can, and commits. The recorded Run used Claude Code.

  1. thirdshift: logging the session to /home/jacob/.thirdshift/logs/JacobStephens2-thirdshift-issue-24-20260925T134143Z-implement.jsonl
  2. @@ -215,7 +216,7 @@

    2 · M · Implement<

3 · Y · Review

-

The same session reviews its work against the Base branch, fixes the Standards findings and Spec findings it agrees with, and lists the rest as Unaddressed findings in the pull request body. Then it opens the pull request, ready for review.

+

The same session reviews its work against the Base branch, fixes the Standards findings and Spec findings it agrees with, and lists the rest as Unaddressed findings in the pull request body. Behavior findings need a test or command that exercises them before the agent decides. It fixes reproduced failures and keeps the test. Then it opens the pull request, ready for review.

  1. thirdshift: implement: skill thirdshift-code-review
  2. @@ -240,7 +241,7 @@

    3 · Y · Review

    4 · K · Finish

    -

    thirdshift pushes, checks the pull request, merges the Base branch in and watches CI. A merge conflict or failing CI starts a Repair, at most 5. A Resume can happen in any session and isn't a Repair. The Run ends once the pull request is open, ready, mergeable and passing CI. This Run needed no Repair.

    +

    thirdshift pushes, checks the pull request, merges the Base branch in and watches CI. A merge conflict or failing CI starts a Repair, at most 5. A Resume can happen in any session and isn't a Repair. The Run ends once the pull request is open, ready, mergeable and passing CI. An optional Security review checks the change before Delivery. With thirdshift merge <Issue URL>, thirdshift also merges the reviewed head once its checks pass. This recorded Run needed no Repair and left its pull request for review.

    1. thirdshift: pushing issue-24
    2. @@ -291,32 +292,43 @@

      Misprint: a Failed run

      Delivery pile

      What comes off the press

      Ready for review

      An open pull request from the Issue branch to the Base branch. It is mergeable, its CI passes, and it has been reviewed against your repository's documented coding standards and against the issue. Otherwise thirdshift doesn't call it ready.

      -

      Unaddressed findings

      Every Standards finding and Spec finding the agent chose not to fix is listed as an Unaddressed finding in the pull request body, so you decide on it.

      +

      Unaddressed findings

      Every Standards finding and Spec finding the agent chose not to fix is listed as an Unaddressed finding in the pull request body, with the code, plan decision, ADR or focused run that refutes it. A decision left to the Day shift links a needs-triage issue.

      Failed runs keep their work

      A Failed run still pushes its work, so nothing is lost (if the push fails, it keeps the worktree instead), and its pull request goes back to draft. Run the same command again to continue it.

- +

Plan view · the press hall

The factory grows

-

One Run is the first primitive the factory is built from: one Issue URL in, one pull request ready for review out. It is the only line on the floor today.

-

The rest of the floor is marked out, not built. Each outlined line is a machine that is not yet installed, linked to the issue that tracks it.

+

One Run is the first primitive: one Issue URL in, one pull request out. The factory now builds with six workflows. Every line on this floor is installed; follow it to the documentation.

+

A Merge run merges its own reviewed, green pull request when you ask. A Spec run works through Tickets in dependency order, up to three at once by default. They merge into a Spec branch, then one Spec PR gets reviewed against the whole Spec.

+

An Architect run looks for architecture improvements and builds its top Strong plan. Without a Strong recommendation, it leaves an Architect idea for the Day shift. Use --plan-only to publish a plan and stop.

+

A Pickup run takes the lowest-numbered Ready issue, after it has settled and while the repository is below its Claim limit. Failed work stays with the Day shift; a later Pickup run does not retry a started issue.

+

A Security run audits the Base branch and records findings privately. It is report-only by default. With security-fix, it can fix a reproduced finding through a Run or Spec run. An optional Security review checks an individual change and holds Self-merge if introduced findings remain unaddressed or the review is incomplete.

+

Start passes with thirdshift architect base main, thirdshift pickup base main or thirdshift secure base main. Your operating system schedules them. Frequent Architect runs are Weeding; scheduled Security runs with fixing allowed are Fencing. Both yield to work the Day shift shaped, and pause when a decision needs you.

- - + + Floor plan of the press hall - One press line is installed: a Run, from the issue through units C, M, Y and K to a pull request. Three more lines are outlined and not yet installed: self-merge, the architecture pass and implementing a whole spec. + Six installed workflows: a Run, a Merge run, an Architect run, a Spec run, a Pickup run and a Security run. Each line links to its documentation. Architecture may leave an idea for triage; Security records findings privately and fixes only when allowed. + + + C + M + Y + K + @@ -327,64 +339,74 @@

The factory grows

INSTALLED An Issue URL in, a pull request out. - + - LINE 2 · SELF-MERGE - NOT YET INSTALLED · #26 - Would merge its own pull request. + LINE 2 · MERGE RUN + INSTALLED + Merges the reviewed head after CI passes. - + - LINE 3 · ARCHITECTURE - NOT YET INSTALLED · #27 - Would run /improve-codebase-architecture. + LINE 3 · ARCHITECT RUN + INSTALLED + Reviews architecture; builds a Strong plan. - + - LINE 4 · WHOLE SPEC - NOT YET INSTALLED · #28 - Would implement every issue in a spec. + LINE 4 · SPEC RUN + INSTALLED + Tickets land together in one Spec PR. + + + + + + + LINE 5 · PICKUP RUN + INSTALLED + Takes the lowest-numbered Ready issue. + + + + + + LINE 6 · SECURITY RUN + INSTALLED + Audits privately; fixes when allowed. + @@ -423,8 +445,9 @@

Pre-flight ch -

Details in the README.

+

Choose the Harness, Model and Effort with thirdshift setup or per command. See Harness configuration and supported platforms.

diff --git a/site/styles.css b/site/styles.css index 10db1a71e..1820e76aa 100644 --- a/site/styles.css +++ b/site/styles.css @@ -260,29 +260,23 @@ body::after { /* scanlines */ .floor .frame { fill: transparent; stroke: none; } .floor .line-label { font-size: 17px; letter-spacing: .06em; } .floor .status { font-size: 14px; letter-spacing: .06em; fill: var(--y); } -.floor .ghost .status { fill: var(--m-text); } .floor .hint { font-size: 15px; font-weight: 400; fill: var(--dim); } .floor .chest { fill: #111; stroke: var(--dim); stroke-width: 2; } .floor .chest-label { font-size: 13px; text-anchor: middle; fill: var(--paper); } -.floor .belt { fill: url(#floor-belt); stroke: #333; stroke-width: 1; } +.floor-press .belt { fill: url(#floor-belt); stroke: #333; stroke-width: 1; } .floor .belt-base { fill: #15130a; } .floor .belt-slat { fill: color-mix(in srgb, var(--y) 35%, transparent); } -.floor .unit { fill: #0e0e0e; stroke: #3a3a3a; stroke-width: 2; } -.floor .hopper.c { fill: var(--c); } .floor .hopper.m { fill: var(--m); } .floor .hopper.y { fill: var(--y); } -.floor .hopper.k { fill: none; stroke: var(--paper); stroke-width: 2; } -.floor .ink-letter { font: var(--f-head-w) 24px/1 var(--f-head); text-anchor: middle; fill: #000; } -.floor .ink-letter.k { fill: var(--paper); } -/* Not yet installed: floor tape where a machine will stand, and no ink. */ -.floor .ghost .chest, .floor .ghost .belt, .floor .footprint { fill: none; stroke: var(--dim); stroke-width: 1.5; stroke-dasharray: 5 4; } -.floor .ghost g { opacity: .55; } -.floor .ghost .chest-label { fill: var(--dim); } +.floor-press .unit { fill: #0e0e0e; stroke: #3a3a3a; stroke-width: 2; } +.floor-press .hopper.c { fill: var(--c); } .floor-press .hopper.m { fill: var(--m); } .floor-press .hopper.y { fill: var(--y); } +.floor-press .hopper.k { fill: none; stroke: var(--paper); stroke-width: 2; } +.floor-press .ink-letter { font: var(--f-head-w) 24px/1 var(--f-head); text-anchor: middle; fill: #000; } +.floor-press .ink-letter.k { fill: var(--paper); } /* The hint is the hover and focus label. Only a mouse hides it until hover, so touch screens always show it. */ .floor a { outline: none; } @media (hover: hover) and (pointer: fine) { .floor .hint { opacity: 0; } .floor a:hover .hint, .floor a:focus-visible .hint { opacity: 1; } } -.floor a.ghost:hover g, .floor a.ghost:focus-visible g { opacity: .85; } .floor a:focus-visible .frame { stroke: var(--y); stroke-width: 2; } /* ---------- Proof sheets ---------- */ From c16e780218ea32f0577e29fcee84e19b46bc29b2 Mon Sep 17 00:00:00 2001 From: Jacob Stephens Date: Mon, 12 Oct 2026 00:27:30 -0400 Subject: [PATCH 2/2] Share floor-plan chest geometry after Standards review --- site/index.html | 25 +++++++++++++------------ site/styles.css | 2 +- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/site/index.html b/site/index.html index 5161efdda..0054ff4e7 100644 --- a/site/index.html +++ b/site/index.html @@ -325,6 +325,7 @@

The factory grows

M Y K + @@ -353,8 +354,8 @@

The factory grows

Merges the reviewed head after CI passes. @@ -366,8 +367,8 @@

The factory grows

Reviews architecture; builds a Strong plan. @@ -379,8 +380,8 @@

The factory grows

Tickets land together in one Spec PR. @@ -392,8 +393,8 @@

The factory grows

Takes the lowest-numbered Ready issue. @@ -405,8 +406,8 @@

The factory grows

Audits privately; fixes when allowed. diff --git a/site/styles.css b/site/styles.css index 1820e76aa..7e192c1c6 100644 --- a/site/styles.css +++ b/site/styles.css @@ -261,7 +261,7 @@ body::after { /* scanlines */ .floor .line-label { font-size: 17px; letter-spacing: .06em; } .floor .status { font-size: 14px; letter-spacing: .06em; fill: var(--y); } .floor .hint { font-size: 15px; font-weight: 400; fill: var(--dim); } -.floor .chest { fill: #111; stroke: var(--dim); stroke-width: 2; } +.floor-press .chest { fill: #111; stroke: var(--dim); stroke-width: 2; } .floor .chest-label { font-size: 13px; text-anchor: middle; fill: var(--paper); } .floor-press .belt { fill: url(#floor-belt); stroke: #333; stroke-width: 1; } .floor .belt-base { fill: #15130a; }