codex-team 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,5 @@
1
+ include README.md
2
+ include config.example.json
3
+ include team.py
4
+ include test_team.py
5
+ include test_package.py
@@ -0,0 +1,216 @@
1
+ Metadata-Version: 2.4
2
+ Name: codex-team
3
+ Version: 0.1.0
4
+ Summary: Orchestrate local Codex agents with tmux, Git submodules, and persistent task queues.
5
+ Author: PixPool
6
+ Keywords: codex,tmux,agents,orchestration,git,submodules
7
+ Classifier: Development Status :: 3 - Alpha
8
+ Classifier: Environment :: Console
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: Operating System :: POSIX :: Linux
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3 :: Only
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Topic :: Software Development
16
+ Classifier: Topic :: Utilities
17
+ Requires-Python: >=3.10
18
+ Description-Content-Type: text/markdown
19
+
20
+ # Codex Team
21
+
22
+ Linux, Python 3.10+, Git, tmux e Codex CLI autenticado. Compatibilidade conferida
23
+ com Codex CLI 0.163.0 e tmux 3.3a. Usa a autenticação e o modelo configurados no
24
+ Codex local; não instala SDK nem exige uma chave de API separada.
25
+
26
+ ## Instalar pelo pip
27
+
28
+ ```bash
29
+ python3 -m pip install codex-team
30
+ ```
31
+
32
+ Em um Python gerenciado pelo sistema operacional, use um ambiente virtual ou
33
+ `pipx install codex-team`. Git, tmux e Codex CLI são dependências externas
34
+ que precisam estar no PATH. Nenhuma biblioteca Python adicional é necessária.
35
+
36
+ ```bash
37
+ codex-team --version
38
+ codex-team example-config > config.json
39
+ # Edite config.json para informar os repositórios reais.
40
+ start-git-codex-team --root /caminho/novo-time --agents config.json
41
+ ```
42
+
43
+ O comando completo equivalente é:
44
+
45
+ ```bash
46
+ codex-team start --root /caminho/novo-time --agents config.json
47
+ ```
48
+
49
+ Também funciona como módulo: `python3 -m codex_team --help`.
50
+ Depois da criação, use `./team` dentro da pasta do time para adicionar agentes,
51
+ enviar tarefas e consultar resultados. Fora dela, use por exemplo
52
+ `codex-team --root /caminho/novo-time status`.
53
+
54
+ ## Iniciar a partir deste checkout
55
+
56
+ Copie `config.example.json` para um `config.json` e substitua as URLs pelos
57
+ repositórios reais. Repositórios privados precisam de acesso Git/SSH na máquina.
58
+ Não inclua tokens ou senhas nas URLs.
59
+
60
+ ```bash
61
+ ./ops/start-git-codex-team.sh --root /caminho/novo-time --agents /caminho/config.json
62
+ ```
63
+
64
+ O diretório passado em `--root` precisa estar vazio ou já
65
+ pertencer a este gerenciador. Por padrão a raiz é `./codex-team`; sem `--agents`,
66
+ carrega `./config.json` se existir. Sem JSON, inicia apenas o controlador.
67
+ Também aceita uma lista JSON diretamente, além do objeto com a chave `agents`.
68
+ Cada agente exige `name` e `repo`; `branch` é opcional (branch existente no remoto).
69
+
70
+ Use `--no-attach` para iniciar sem anexar o terminal. O layout padrão usa painéis
71
+ lado a lado; `--layout windows` cria uma janela por agente. Quando não há espaço
72
+ para mais divisões, um novo agente ganha uma janela própria. Escolha o layout na
73
+ primeira inicialização. A sessão tem nome derivado da pasta; `--session equipe-x`
74
+ permite escolher o nome na primeira inicialização. Não reutilize o mesmo nome
75
+ para times diferentes.
76
+
77
+ A raiz passa a ter:
78
+
79
+ ```text
80
+ novo-time/
81
+ ├── .git/ # Repositório Git raiz, sem commit automático
82
+ ├── .gitmodules # Projetos registrados como submódulos
83
+ ├── AGENTS.md # Instruções do controlador
84
+ ├── README.md
85
+ ├── team # Gerenciador local, executável
86
+ ├── repos/
87
+ │ ├── publicapi/ # Submódulo Git
88
+ │ └── parceiros/ # Submódulo Git
89
+ └── .codex-team/ # Banco, filas, sessões e resultados locais
90
+ ```
91
+
92
+ `git submodule add` deixa `.gitmodules` e os gitlinks no índice. O gerenciador não
93
+ faz commit nem push na raiz ou nos projetos. A raiz ainda não possui remoto;
94
+ configure um se quiser compartilhar a composição do time. O runtime é local e
95
+ ignorado pelo Git; os arquivos versionados sozinhos não reinstalam o gerenciador
96
+ em outra máquina. Preserve essa pasta para retomar este time.
97
+
98
+ ## Conversar com o controlador
99
+
100
+ O painel Controlador é uma sessão interativa do Codex. Você pode pedir:
101
+
102
+ > Adicione um responsável chamado pagamentos para o repositório
103
+ > git@github.com:empresa/pagamentos.git e aguarde as tarefas.
104
+
105
+ O AGENTS.md instrui o chefe a executar:
106
+
107
+ ```bash
108
+ ./team add --name pagamentos --repo git@github.com:empresa/pagamentos.git
109
+ ```
110
+
111
+ O novo projeto é cadastrado como submódulo e seu painel é aberto. Um responsável
112
+ inicialmente fica ocioso; não há chamada ao modelo para apenas aguardar. Ao
113
+ receber uma tarefa, o executor chama `codex exec --json`, registra seu thread ID e
114
+ reutiliza a conversa usando `codex exec resume` nas tarefas seguintes.
115
+
116
+ Os painéis dos responsáveis mostram mensagens, comandos e resultados da
117
+ execução. São consoles do executor, não TUIs interativas do Codex. Envie tarefas
118
+ pelo controlador ou pelo comando abaixo, sem digitar no painel do responsável.
119
+
120
+ ```bash
121
+ cd /caminho/novo-time
122
+ ./team task publicapi --message 'Implemente o endpoint X e valide os testes.'
123
+ ./team task parceiros --file /caminho/tarefa.txt
124
+ ./team status
125
+ ./team wait ID_DA_TAREFA --timeout 50
126
+ ./team result ID_DA_TAREFA
127
+ ```
128
+
129
+ `wait` retorna 0 se todas terminaram com sucesso de execução, 1 se alguma falhou
130
+ ou foi interrompida, e 2 se ainda há pendentes. Leia o relatório para conferir
131
+ se os critérios de aceitação e os testes passaram; `done` indica que a chamada
132
+ Codex terminou normalmente, não substitui revisão. Não há dependências implícitas
133
+ na fila: o chefe deve esperar a API antes de enviar uma integração dependente.
134
+ Cada responsável executa uma tarefa por vez; repositórios diferentes trabalham
135
+ em paralelo. Uma tarefa interrompida é marcada e não é reenviada automaticamente.
136
+
137
+ A fila usa SQLite e a espera ociosa dos responsáveis usa FIFO. Resultados ficam
138
+ em `.codex-team/results/ID.md`, logs em `.codex-team/logs/ID.jsonl`. Esses arquivos
139
+ podem conter conteúdo do projeto; não os publique inadvertidamente.
140
+
141
+ O chefe deve chamar `wait`/`result` enquanto acompanha um pedido. O gerenciador
142
+ não reativa espontaneamente um controlador que já encerrou sua resposta.
143
+ Ele pode distribuir várias tarefas e aguardar resultados na mesma conversa.
144
+
145
+ ## Permissões e escopo
146
+
147
+ O controlador usa `workspace-write` com aprovação `on-request`. Git remoto, tmux
148
+ ou ações fora do sandbox podem exigir aprovação conforme sua instalação. Os
149
+ responsáveis usam `workspace-write` e aprovação `never`: se uma ação não for
150
+ permitida, devem relatar o impedimento ao chefe. O gerenciador não usa bypass de
151
+ sandbox nem executa comandos recebidos por interpolação de shell.
152
+
153
+ A tarefa instrui cada responsável a alterar apenas seu submódulo. Isso é uma
154
+ regra de coordenação, não um isolamento de leitura ou segurança entre processos
155
+ que compartilham o mesmo usuário Linux. Instruções locais do repositório e
156
+ configurações do Codex continuam aplicáveis.
157
+
158
+ ## Sair, parar e retomar
159
+
160
+ - Desconectar mantendo o trabalho: `Ctrl+B`, depois `D`.
161
+ - Voltar: `./team attach` na raiz do time.
162
+ - Parar os responsáveis com segurança, em outro terminal:
163
+
164
+ ```bash
165
+ cd /caminho/novo-time
166
+ ./team stop --timeout 50
167
+ ```
168
+
169
+ `stop` fecha a entrada de tarefas. A tarefa atual de cada responsável pode
170
+ terminar, mas as pendentes ficam preservadas. Se o prazo expirar, retorna 2 e
171
+ não força a interrupção. Execute `stop` novamente depois. O controlador e a
172
+ sessão tmux permanecem abertos. Quando ele estiver ocioso e os responsáveis
173
+ parados, encerre a sessão usando o nome mostrado em `./team status`:
174
+
175
+ ```bash
176
+ tmux kill-session -t NOME_DA_SESSAO
177
+ ```
178
+
179
+ Para reabrir o time, reaproveite a mesma raiz:
180
+
181
+ ```bash
182
+ ./ops/start-git-codex-team.sh --root /caminho/novo-time
183
+ ```
184
+
185
+ Isso restaura os painéis ausentes, as filas e os IDs das conversas dos
186
+ responsáveis. Tarefas pendentes voltam a ser executadas. Se um controlador foi
187
+ fechado, abre uma conversa nova que consulta o estado persistido; a conversa
188
+ interativa anterior pode ser retomada manualmente pelo Codex. Nenhum arquivo
189
+ modificado ou commit dos submódulos é descartado.
190
+
191
+ ## Validação
192
+
193
+ ```bash
194
+ python3 -m unittest discover -s ops/codex-team -p 'test_*.py' -v
195
+ ```
196
+
197
+ Os testes usam repositórios Git locais, servidor tmux isolado e um executável
198
+ Codex simulado. Não fazem chamadas ao modelo, não clonam projetos reais e não
199
+ alteram o servidor tmux do usuário.
200
+
201
+ Referência: [execução não interativa do Codex](https://developers.openai.com/codex/noninteractive).
202
+
203
+ ## Desenvolvimento e build
204
+
205
+ ```bash
206
+ cd ops/codex-team
207
+ python3 -m pip install -e .
208
+ python3 -m pip install build twine
209
+ python3 -m build
210
+ python3 -m twine check dist/*
211
+ ```
212
+
213
+ A distribuição inclui somente o gerenciador, a documentação e os exemplos;
214
+ nenhum repositório de trabalho, fila, credencial ou configuração de usuário é
215
+ incluído nos artefatos. A versão inicial é 0.1.0 (alpha). A implementação usa
216
+ tmux; GNU screen não é um backend suportado por este pacote.
@@ -0,0 +1,197 @@
1
+ # Codex Team
2
+
3
+ Linux, Python 3.10+, Git, tmux e Codex CLI autenticado. Compatibilidade conferida
4
+ com Codex CLI 0.163.0 e tmux 3.3a. Usa a autenticação e o modelo configurados no
5
+ Codex local; não instala SDK nem exige uma chave de API separada.
6
+
7
+ ## Instalar pelo pip
8
+
9
+ ```bash
10
+ python3 -m pip install codex-team
11
+ ```
12
+
13
+ Em um Python gerenciado pelo sistema operacional, use um ambiente virtual ou
14
+ `pipx install codex-team`. Git, tmux e Codex CLI são dependências externas
15
+ que precisam estar no PATH. Nenhuma biblioteca Python adicional é necessária.
16
+
17
+ ```bash
18
+ codex-team --version
19
+ codex-team example-config > config.json
20
+ # Edite config.json para informar os repositórios reais.
21
+ start-git-codex-team --root /caminho/novo-time --agents config.json
22
+ ```
23
+
24
+ O comando completo equivalente é:
25
+
26
+ ```bash
27
+ codex-team start --root /caminho/novo-time --agents config.json
28
+ ```
29
+
30
+ Também funciona como módulo: `python3 -m codex_team --help`.
31
+ Depois da criação, use `./team` dentro da pasta do time para adicionar agentes,
32
+ enviar tarefas e consultar resultados. Fora dela, use por exemplo
33
+ `codex-team --root /caminho/novo-time status`.
34
+
35
+ ## Iniciar a partir deste checkout
36
+
37
+ Copie `config.example.json` para um `config.json` e substitua as URLs pelos
38
+ repositórios reais. Repositórios privados precisam de acesso Git/SSH na máquina.
39
+ Não inclua tokens ou senhas nas URLs.
40
+
41
+ ```bash
42
+ ./ops/start-git-codex-team.sh --root /caminho/novo-time --agents /caminho/config.json
43
+ ```
44
+
45
+ O diretório passado em `--root` precisa estar vazio ou já
46
+ pertencer a este gerenciador. Por padrão a raiz é `./codex-team`; sem `--agents`,
47
+ carrega `./config.json` se existir. Sem JSON, inicia apenas o controlador.
48
+ Também aceita uma lista JSON diretamente, além do objeto com a chave `agents`.
49
+ Cada agente exige `name` e `repo`; `branch` é opcional (branch existente no remoto).
50
+
51
+ Use `--no-attach` para iniciar sem anexar o terminal. O layout padrão usa painéis
52
+ lado a lado; `--layout windows` cria uma janela por agente. Quando não há espaço
53
+ para mais divisões, um novo agente ganha uma janela própria. Escolha o layout na
54
+ primeira inicialização. A sessão tem nome derivado da pasta; `--session equipe-x`
55
+ permite escolher o nome na primeira inicialização. Não reutilize o mesmo nome
56
+ para times diferentes.
57
+
58
+ A raiz passa a ter:
59
+
60
+ ```text
61
+ novo-time/
62
+ ├── .git/ # Repositório Git raiz, sem commit automático
63
+ ├── .gitmodules # Projetos registrados como submódulos
64
+ ├── AGENTS.md # Instruções do controlador
65
+ ├── README.md
66
+ ├── team # Gerenciador local, executável
67
+ ├── repos/
68
+ │ ├── publicapi/ # Submódulo Git
69
+ │ └── parceiros/ # Submódulo Git
70
+ └── .codex-team/ # Banco, filas, sessões e resultados locais
71
+ ```
72
+
73
+ `git submodule add` deixa `.gitmodules` e os gitlinks no índice. O gerenciador não
74
+ faz commit nem push na raiz ou nos projetos. A raiz ainda não possui remoto;
75
+ configure um se quiser compartilhar a composição do time. O runtime é local e
76
+ ignorado pelo Git; os arquivos versionados sozinhos não reinstalam o gerenciador
77
+ em outra máquina. Preserve essa pasta para retomar este time.
78
+
79
+ ## Conversar com o controlador
80
+
81
+ O painel Controlador é uma sessão interativa do Codex. Você pode pedir:
82
+
83
+ > Adicione um responsável chamado pagamentos para o repositório
84
+ > git@github.com:empresa/pagamentos.git e aguarde as tarefas.
85
+
86
+ O AGENTS.md instrui o chefe a executar:
87
+
88
+ ```bash
89
+ ./team add --name pagamentos --repo git@github.com:empresa/pagamentos.git
90
+ ```
91
+
92
+ O novo projeto é cadastrado como submódulo e seu painel é aberto. Um responsável
93
+ inicialmente fica ocioso; não há chamada ao modelo para apenas aguardar. Ao
94
+ receber uma tarefa, o executor chama `codex exec --json`, registra seu thread ID e
95
+ reutiliza a conversa usando `codex exec resume` nas tarefas seguintes.
96
+
97
+ Os painéis dos responsáveis mostram mensagens, comandos e resultados da
98
+ execução. São consoles do executor, não TUIs interativas do Codex. Envie tarefas
99
+ pelo controlador ou pelo comando abaixo, sem digitar no painel do responsável.
100
+
101
+ ```bash
102
+ cd /caminho/novo-time
103
+ ./team task publicapi --message 'Implemente o endpoint X e valide os testes.'
104
+ ./team task parceiros --file /caminho/tarefa.txt
105
+ ./team status
106
+ ./team wait ID_DA_TAREFA --timeout 50
107
+ ./team result ID_DA_TAREFA
108
+ ```
109
+
110
+ `wait` retorna 0 se todas terminaram com sucesso de execução, 1 se alguma falhou
111
+ ou foi interrompida, e 2 se ainda há pendentes. Leia o relatório para conferir
112
+ se os critérios de aceitação e os testes passaram; `done` indica que a chamada
113
+ Codex terminou normalmente, não substitui revisão. Não há dependências implícitas
114
+ na fila: o chefe deve esperar a API antes de enviar uma integração dependente.
115
+ Cada responsável executa uma tarefa por vez; repositórios diferentes trabalham
116
+ em paralelo. Uma tarefa interrompida é marcada e não é reenviada automaticamente.
117
+
118
+ A fila usa SQLite e a espera ociosa dos responsáveis usa FIFO. Resultados ficam
119
+ em `.codex-team/results/ID.md`, logs em `.codex-team/logs/ID.jsonl`. Esses arquivos
120
+ podem conter conteúdo do projeto; não os publique inadvertidamente.
121
+
122
+ O chefe deve chamar `wait`/`result` enquanto acompanha um pedido. O gerenciador
123
+ não reativa espontaneamente um controlador que já encerrou sua resposta.
124
+ Ele pode distribuir várias tarefas e aguardar resultados na mesma conversa.
125
+
126
+ ## Permissões e escopo
127
+
128
+ O controlador usa `workspace-write` com aprovação `on-request`. Git remoto, tmux
129
+ ou ações fora do sandbox podem exigir aprovação conforme sua instalação. Os
130
+ responsáveis usam `workspace-write` e aprovação `never`: se uma ação não for
131
+ permitida, devem relatar o impedimento ao chefe. O gerenciador não usa bypass de
132
+ sandbox nem executa comandos recebidos por interpolação de shell.
133
+
134
+ A tarefa instrui cada responsável a alterar apenas seu submódulo. Isso é uma
135
+ regra de coordenação, não um isolamento de leitura ou segurança entre processos
136
+ que compartilham o mesmo usuário Linux. Instruções locais do repositório e
137
+ configurações do Codex continuam aplicáveis.
138
+
139
+ ## Sair, parar e retomar
140
+
141
+ - Desconectar mantendo o trabalho: `Ctrl+B`, depois `D`.
142
+ - Voltar: `./team attach` na raiz do time.
143
+ - Parar os responsáveis com segurança, em outro terminal:
144
+
145
+ ```bash
146
+ cd /caminho/novo-time
147
+ ./team stop --timeout 50
148
+ ```
149
+
150
+ `stop` fecha a entrada de tarefas. A tarefa atual de cada responsável pode
151
+ terminar, mas as pendentes ficam preservadas. Se o prazo expirar, retorna 2 e
152
+ não força a interrupção. Execute `stop` novamente depois. O controlador e a
153
+ sessão tmux permanecem abertos. Quando ele estiver ocioso e os responsáveis
154
+ parados, encerre a sessão usando o nome mostrado em `./team status`:
155
+
156
+ ```bash
157
+ tmux kill-session -t NOME_DA_SESSAO
158
+ ```
159
+
160
+ Para reabrir o time, reaproveite a mesma raiz:
161
+
162
+ ```bash
163
+ ./ops/start-git-codex-team.sh --root /caminho/novo-time
164
+ ```
165
+
166
+ Isso restaura os painéis ausentes, as filas e os IDs das conversas dos
167
+ responsáveis. Tarefas pendentes voltam a ser executadas. Se um controlador foi
168
+ fechado, abre uma conversa nova que consulta o estado persistido; a conversa
169
+ interativa anterior pode ser retomada manualmente pelo Codex. Nenhum arquivo
170
+ modificado ou commit dos submódulos é descartado.
171
+
172
+ ## Validação
173
+
174
+ ```bash
175
+ python3 -m unittest discover -s ops/codex-team -p 'test_*.py' -v
176
+ ```
177
+
178
+ Os testes usam repositórios Git locais, servidor tmux isolado e um executável
179
+ Codex simulado. Não fazem chamadas ao modelo, não clonam projetos reais e não
180
+ alteram o servidor tmux do usuário.
181
+
182
+ Referência: [execução não interativa do Codex](https://developers.openai.com/codex/noninteractive).
183
+
184
+ ## Desenvolvimento e build
185
+
186
+ ```bash
187
+ cd ops/codex-team
188
+ python3 -m pip install -e .
189
+ python3 -m pip install build twine
190
+ python3 -m build
191
+ python3 -m twine check dist/*
192
+ ```
193
+
194
+ A distribuição inclui somente o gerenciador, a documentação e os exemplos;
195
+ nenhum repositório de trabalho, fila, credencial ou configuração de usuário é
196
+ incluído nos artefatos. A versão inicial é 0.1.0 (alpha). A implementação usa
197
+ tmux; GNU screen não é um backend suportado por este pacote.
@@ -0,0 +1,7 @@
1
+ {
2
+ "agents": [
3
+ {"name": "publicapi", "repo": "git@github.com:SUA_ORGANIZACAO/publicapi.git"},
4
+ {"name": "anunciantes", "repo": "git@github.com:SUA_ORGANIZACAO/flutter_anunciantes.git"},
5
+ {"name": "parceiros", "repo": "git@github.com:SUA_ORGANIZACAO/flutter_parceiros.git"}
6
+ ]
7
+ }
@@ -0,0 +1,35 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77.0.3"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "codex-team"
7
+ dynamic = ["version"]
8
+ description = "Orchestrate local Codex agents with tmux, Git submodules, and persistent task queues."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ authors = [{name = "PixPool"}]
12
+ keywords = ["codex", "tmux", "agents", "orchestration", "git", "submodules"]
13
+ classifiers = [
14
+ "Development Status :: 3 - Alpha",
15
+ "Environment :: Console",
16
+ "Intended Audience :: Developers",
17
+ "Operating System :: POSIX :: Linux",
18
+ "Programming Language :: Python :: 3",
19
+ "Programming Language :: Python :: 3 :: Only",
20
+ "Programming Language :: Python :: 3.10",
21
+ "Programming Language :: Python :: 3.11",
22
+ "Topic :: Software Development",
23
+ "Topic :: Utilities",
24
+ ]
25
+ dependencies = []
26
+
27
+ [project.scripts]
28
+ codex-team = "codex_team.cli:entrypoint"
29
+ start-git-codex-team = "codex_team.cli:start_entrypoint"
30
+
31
+ [tool.setuptools.packages.find]
32
+ where = ["src"]
33
+
34
+ [tool.setuptools.dynamic]
35
+ version = {attr = "codex_team.cli.VERSION"}
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,4 @@
1
+ """Codex teams backed by tmux, Git submodules and durable task queues."""
2
+ from .cli import VERSION as __version__
3
+
4
+ __all__ = ['__version__']
@@ -0,0 +1,3 @@
1
+ from .cli import entrypoint
2
+
3
+ raise SystemExit(entrypoint())