Run gstack on local and non-Claude models via a pi harness
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 20/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Necesita aclaración
- Estado de actividad
- Activo
- Stack tecnológico
- javascript, typescript
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- TypeScript
- Estrellas
- 0
- Forks
- 0
- Merge medio
- 3 h 33 min
- PR fusionados (30 d)
- 13
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de gregogun/gstack
-
Dificultad 1/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
Los mantenedores suelen responder en 1 día
-
npm test runs 0 tests on WindowsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 77/100
Los mantenedores suelen responder en 1 día
-
Add reviewer config guidance to review-bot triagePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertoready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
Todos los issues de gregogun/gstack
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
grafana/profiles-drilldown#1212 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
grafana/traces-drilldown#980 ·
Los mantenedores suelen responder en 1 día
-
Manager flashes an empty "errorOccurred" dialog while redirecting a logged-out user to loginAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
openremote/openremote#3487 · 1 comentario ·
-
triage:needs-human
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
garrytan/gbrain#7635 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
coollabsio/jean#867 ·
Los mantenedores suelen responder en 1 día