Make agentop and the installer depend only on documented contracts
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
- 40/100
- Tipo de issue
- Refactorización
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- go, yaml
- Área
- backend, devtools, documentation
Línea de trabajo
Start with cmd/agentop/local_endpoint.go and the listed agentop callers, then read docs/session-api.md, docs/README.md, the proxy handlers and scripts/install.sh. Add contract fixtures shared by agentop decoders and proxy handlers, and centralize the proxy process identity as the issue describes. Done means agentop no longer decodes config.Config, the endpoints and summary view are documented and checked for drift, and the process name is defined in one constant.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Part of #1437 (assessment: laptop data plane on Praxis) · prep work, useful to Cortex on its own
Status: there is no Cortex–Praxis integration today, and the interim path is not decided (LLM traffic to praxis-ai as an inference server, or all traffic through Praxis via #1491). Nothing here depends on that choice: each item is useful to Cortex now, and makes an eventual move to Praxis easier whichever path is taken.
Problem
If the data plane ever changes, to Praxis or anything else, agentop and the installer should not notice. Today they depend on Go proxy internals beyond the documented session API:
- the full Go config struct;
- the reload and stats endpoints' exact JSON;
- the proxy's binary name.
Any change to those internals, or a different proxy build, breaks agentop exec, server, pricing, doctor and service without warning.
What Cortex does today
agentop exec decodes /config into the whole Go config.Config (local_endpoint.go:289). It uses three fields: listener.forward_proxy_addr, tls_bridge.mode and tls_bridge.ca_dir (its own comment at :294).
13 agentop source files import core/config.
Stats endpoints agentop relies on have no documented contract:
/reload/status:edit/status.go, whose comment says "keys must matchcore/reloader/status.goexactly"; alsolocal_endpoint.go:123/pricing/table:cmd_pricing.go:59/tls-bridge/unread:doctor_unread.go:21
view=summary is undocumented. agentop sends it on every timeline fetch (apiclient/snapshot.go:24), and docs/session-api.md doesn't mention it.
The proxy is recognised by binary name in two places:
isProxyComm(filepath.Base(comm) == "cortex")scripts/install.sh:710
The proxy's command-line contract (--version, --local --write-config, --local --supervise) is specified only by the test stub cortexStub.
Proposal
agentop execdecodes only what it uses: a local three-field struct instead ofconfig.Config.- Document the stats contract. In
docs/session-api.mdor a newdocs/stats-api.md: the JSON of/reload/status,/config(the fields agentop reads),/pricing/tableand/tls-bridge/unread, plusview=summary. Add JSON fixtures that agentop's decoders and the proxy's handlers are both tested against. - One constant for the proxy's process identity, used by
isProxyComm,install.shanduninstall. Write down the command-line contract the stub already encodes. - Label each config section data plane or control plane in
docs/README.md's config table, with its reload rule. That tells any future data-plane build which sections it must honour. - Hot-reload as a stated contract. agentop edits
~/.cortex/config.yamland waits on/reload/status(edit/local.go). Document that as the contract, rather than an implementation detail ofcore/reloader.
Design questions
- Should
/configstay the source forexec, or should the session API expose the three values directly? - Is the process-name check still needed once the service's own pid file or launchd label is authoritative?
Done when
agentop execbuilds without decodingconfig.Config.- The four stats endpoints and
view=summaryare documented, with fixtures that fail on drift in either the proxy or agentop. - The proxy's process name appears in exactly one constant, plus
install.sh, which references it in a comment.
Evidence read at main @ e455a04 (2026-10-25); not built or run.
- Lenguaje dominante
- Go
- Estrellas
- 18
- Forks
- 42
- Merge medio
- 12 h 20 min
- PR fusionados (30 d)
- 229
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
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 rossoctl/cortex
-
UI shows costs for all sessions even when drilled into a sessionPosiblemente ocupada @esnible la tomó hace 11 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
rossoctl/cortex#1116 · 2 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Decouple plugins from Go pipeline internals: parser test data, session facts, serializable recordsAbiertoenhancement laptop
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Los mantenedores suelen responder en 1 día
-
enhancement laptop
Dificultad 5/5 Más de una semana Aptitud para principiantes 38/100
Los mantenedores suelen responder en 1 día
-
Feed recording, sessions and cost through one input that does not depend on the Go listenersAbiertoenhancement laptop
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Los mantenedores suelen responder en 1 día
-
enhancement laptop
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Los mantenedores suelen responder en 1 día
Todos los issues de rossoctl/cortex
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
eugenioenko/ttt#1206 ·
Los mantenedores suelen responder en 1 día
-
t:urlDecodeUni does not map U+3002 and U+FF61 to a dot, unlike ModSecurityPosiblemente ocupada @fzipi la tomó hoy. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
peasant-labs/peasant#738 ·
Los mantenedores suelen responder en 1 día
-
Duplicate review still bridges two books through a bundle whose first part has a colon subtitlePosiblemente ocupada @vavallee la tomó hoy. Abiertoarea:library-scan bug priority:low
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día