Run gstack on local and non-Claude models via a pi harness
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 20/100
- Issue-Typ
- Feature
- Klarheit
- Muss geklärt werden
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript, typescript
Rechercherichtung
Start by reading harnesses/claude-code/harness.json, the existing harness files, and model-roles.md to understand the current contract. The issue proposes a pi harness, capability requirements for skills, and possibly a ticket runner, but leaves key design choices and pi behavior unresolved. First settle the extension versus generated agent files and missing capability behavior; done means those decisions are tested against a running pi install and the selected scope is implemented.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Problem
Every gstack subagent runs on a Claude model. The Claude Code harness only accepts opus, sonnet, haiku and fable as models (harnesses/claude-code/harness.json), because those are the only values its Agent tool's model takes. That rules out two things:
- Cheap or local workers. Mechanical roles like
swarm workers,how explorerandwhy investigatorscan't run on a hosted budget model or a local model on a desktop GPU. - Real model diversity.
interrogate,arenaandarchitectrely on reviewers from different model families. In Claude Code they're all Claude, asPLAN.mdalready notes.
gstack's skills are written in harness-neutral language, so in principle another harness could fill this gap. In practice, they also assume capabilities that the token layer can't supply.
Idea
Add a pi harness that can run local and non-Claude models, and make the capability contract that gstack's skills already assume explicit.
| Where | What |
|---|---|
harness.json + skill frontmatter |
A capabilities list per harness and a requires list per skill (subagents, parallel, per-spawn-model, transcripts, loop). The build drops or fails a skill whose requirements a harness doesn't meet, instead of shipping a swarm that silently runs serially. |
New pi extension in harnesses/pi/ |
A fork of pi's example subagent extension that takes a model (and a thinking level, if pi supports one per call) on each task. model-roles.md then works unchanged: look up the role, read the override file, pass the model on the spawn. |
harnesses/pi/ |
tokens.md with pi's paths and session format, harness.json with pi model IDs (local llama.cpp models alongside hosted ones), models.md defaults, and agent overlays for go-agent and comment-sicko. |
models.md for pi |
Run the parent and the judgment roles on a strong hosted model. Put swarm workers and the explorer and investigator roles on a local model. Fill the interrogate, arena and architect lists with models from different vendors. |
What each harness provides
| Capability gstack assumes | Claude Code | Pi |
|---|---|---|
| Spawn subagents with their own context | Agent tool | The example subagent extension (each subagent is a separate pi process) |
| Run them in parallel and collect results | Background agents | The extension's parallel mode: up to 8 tasks, 4 at a time |
| Choose a model for each spawn | model and effort args |
Gap. The model is set in each agent file's frontmatter |
| Give each writer its own checkout | isolation: "worktree" |
None, but the runner can run git worktree add itself |
| Ask the user a structured question | AskUserQuestion | None. The skills already fall back to plain text |
Read past session transcripts (recall, reflect, ketchup) |
~/.claude/projects |
Pi's own session files |
Repeat a command ({{loop_command}}) |
/loop |
None |
Interim: an autonomous ticket runner
Until the harness exists, a plain script can run local workers with Claude as the reviewer:
- Take the next
ready-for-agentticket whose blockers are closed (from/to-tickets). - Create a git worktree for it.
- Run
pi -pwith a local model to implement the ticket. - Run typecheck, lint and tests.
- Only if those pass, run
claude -pwith/gstack:interrogate. - On a pass, push and open a draft PR. Otherwise, send the findings back to step 3 (at most 2 rounds), then relabel the ticket
ready-for-human.
Cron or a systemd timer starts it. The script drives the steps, not a Claude session, so frontier tokens are spent only on reviewing work that already passed the cheap checks.
Findings
- Per-spawn model choice is the main gap. Claude Code passes the model on each call. Pi's subagent extension sets it per agent definition. The defined agents load from
~/.pi/agent/agents/*.md, or from.pi/agents/*.mdwhen the project scope is enabled. - Generating one pi agent file per role from
models.mdwould avoid the extension work. The cost is that every change to the override file would need a rebuild. - Running local workers in parallel won't make them faster. On one GPU,
llama-server --parallel Ndivides the throughput and context between N slots, so only a few local workers can usefully run at once. interrogateasks the user when it's unsure of the intent. A headless run needs the ticket reference in the worker's commit messages and in the prompt.- Pi runs commands without asking for permission by default. Workers need a container or a separate user with no push credentials. The runner script does the pushing.
Nothing has been checked against a running pi install yet.
Open questions
- Extension or generated agent files? Is a pi extension that gstack has to maintain worth it, compared with generated agent files that need a rebuild after each override change?
- Effort mapping. Does pi let a spawn set the thinking level? If not, what does
effortmean on pi? - Pi skill loading. Does pi respect
disable-model-invocation? What's its syntax for invoking a skill by slash command, and what shouldskillPrefixbe set to? - Transcripts. What's the format of pi's session files, and is it good enough for
recall,reflectandketchup? - Loop. Should
{{loop_command}}be stubbed on pi, or replaced with an external timer? - Missing capabilities. When a harness lacks a capability, does the build drop the skill, fail, or ship it with a stub that says what's missing?
- Local model choice. Which local model and quantization actually complete gstack worker tasks reliably? This should be measured on real tickets with
benchmark-checklist, not taken from leaderboards. - Parent model on pi. Which strong hosted model runs
go-modeand the judgment roles, and under which billing (API key vs. subscription)? - Order. Should the ticket runner come first to collect data on how well local models do, or the capability contract?
Next step
Hold a grilling session on the open questions, starting with extension vs. generated agent files and what the build does when a capability is missing. Then write the capability contract, since it pays off even without pi.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 0
- Forks
- 0
- Ø Merge
- 3 Std. 33 Min.
- Gemergte PRs (30 T.)
- 13
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus gregogun/gstack
-
ready-for-agent
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
Maintainer antworten meist innerhalb von 1 Tag
-
ready-for-agent
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
ready-for-human
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 43/100
Maintainer antworten meist innerhalb von 1 Tag
-
ready-for-agent
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 56/100
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in gregogun/gstack
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
braintrustdata/braintrust-sdk-javascript#2659 ·
Maintainer antworten meist innerhalb von 1 Tag
-
body-parser 2.3.0 in the published ai-dial-chat-bff image is vulnerable (CVE-2026-111181, HIGH)Evtl. vergeben @illya-havsiyevych hat das heute übernommen. Offenbug
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 87/100
epam/ai-dial-chat#9566 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 83/100
Maintainer antworten meist innerhalb von 1 Tag
-
はさみアイコンを修正するOffenbug
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 68/100
-
resource.reload() while params is in error switches the resource to 'idle' instead of retryingOffenarea: core
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag