> ## Documentation Index
> Fetch the complete documentation index at: https://help.iteam.works/llms.txt
> Use this file to discover all available pages before exploring further.

# Codes — código do projeto

> Codes são scripts Python ou Node que rodam dentro do projeto, em sandbox isolado. Nesta página você entende os três tipos (job, service e artefato), como o Code acessa dados sem senha no código, e como agentes chamam o seu Code.

**Codes** são pedaços de código que vivem dentro do projeto. Você escreve na sua IDE, versiona no Git e o iTeam executa num **sandbox efêmero e isolado** — sem servidor para cuidar, sem credencial no código.

<Frame caption="📸 Screenshot a inserir [/pt/projetos/codes]: a aba Codes de um projeto mostrando o token do projeto, os recursos de dados e a lista de Codes com o botão Rodar agora.">
  <img src="https://mintcdn.com/iteam/E1mg8rFlXblsaNT0/images/placeholder.svg?fit=max&auto=format&n=E1mg8rFlXblsaNT0&q=85&s=36c435f4df28c31a7e114586a931bbd2" alt="A aba Codes de um projeto" width="800" height="420" data-path="images/placeholder.svg" />
</Frame>

## Os três tipos

<CardGroup cols={3}>
  <Card title="Job" icon="play">
    Um código que **roda e termina**. Serve para ETL, relatório diário, importação, limpeza de base. Pode ter agendamento.
  </Card>

  <Card title="Service" icon="server">
    Uma **API HTTP** com um ou vários endpoints. Fica no ar e responde a chamadas — sua ou de outro sistema.
  </Card>

  <Card title="Artefato" icon="layout-dashboard">
    **Telas React** com o design system do iTeam. Consomem a sua API e viram uma interface de verdade dentro da plataforma.
  </Card>
</CardGroup>

## Dados sem senha no código

Esta é a parte que muda como você escreve. O Code **nunca** carrega endereço de banco nem senha: ele pede o recurso e o servidor resolve.

<AccordionGroup>
  <Accordion title="Data Store (ClickHouse)" icon="database">
    Analítico e colunar — feito para agregação e volume. Você usa `datastore.query(sql)`.

    Cada projeto tem a **sua própria base**, isolada das demais. Um Code nunca enxerga o Data Store de outro projeto.
  </Accordion>

  <Accordion title="Banco de dados (Postgres)" icon="table">
    Relacional, leitura e escrita, com `db.query(sql)` e `db.execute(sql)`. Também isolado por projeto.
  </Accordion>

  <Accordion title="Recursos dos agentes (herdados)" icon="share-2">
    Adicione **agentes ao projeto** e o Code passa a usar as ferramentas deles — MCPs, APIs, HTTP tools e fontes de dados — via `agent_tools()`.

    Os segredos ficam no cofre e são resolvidos no servidor. **Tirou o agente do projeto, o Code perde o acesso na hora.**
  </Accordion>
</AccordionGroup>

<Tip>
  Use `resources()` no início do Code para descobrir o que está disponível naquele projeto. A sua IDE detecta tudo sozinha — nome e schema de cada ferramenta.
</Tip>

## O token do projeto

O deploy é feito por API, com um **token de projeto** (`pct_...`). Ele fica na aba Codes, com ações para **copiar**, **rotacionar** e **revogar**.

<Warning>
  O token dá acesso de escrita ao seu projeto. Guarde no `.env` e **nunca** no Git. Se ele vazar, use **Rotacionar** — o antigo deixa de valer na hora.
</Warning>

## Agendamento

Um job pode rodar sozinho, num horário fixo, usando notação cron:

```
0 6 * * *     todo dia às 06:00
*/15 * * * *  a cada 15 minutos
0 8 * * 1     toda segunda às 08:00
```

Também dá para disparar na hora, pelo botão **Rodar agora**, e acompanhar o histórico de execuções com status, duração e saída.

## Agentes chamando o seu Code

Um Code publicado com **contrato** (entrada e saída declaradas) vira uma ferramenta que os agentes do projeto podem chamar sozinhos.

<Steps>
  <Step title="Declare o contrato">
    Defina o que o Code recebe e o que devolve. É isso que o agente enxerga.
  </Step>

  <Step title="Publique">
    O Code publicado aparece como chamável na lista.
  </Step>

  <Step title="O agente usa">
    Numa conversa, o agente decide chamar o seu Code quando a pergunta pedir — e usa o resultado na resposta.
  </Step>
</Steps>

## Continue de onde parou

O código fica versionado no Git da plataforma. Antes de mexer num Code que já existe, faça **pull** — assim você continua de onde parou em vez de recriar.

<Info>
  O `pull` traz o arquivo principal **e** os arquivos extras do Code. É a forma confiável de ter uma cópia local fiel.
</Info>

## Boas práticas

<CardGroup cols={2}>
  <Card title="Deixe o job idempotente" icon="repeat">
    Apague o período antes de gravar. Assim, re-rodar o mesmo dia corrige em vez de duplicar.
  </Card>

  <Card title="Agregue na fonte" icon="filter">
    Faça `GROUP BY` na consulta em vez de trazer milhares de linhas para o Code processar.
  </Card>

  <Card title="Falhe com mensagem clara" icon="triangle-alert">
    Uma saída de erro explicando o que faltou vale mais que um stack trace no histórico.
  </Card>

  <Card title="Aceite parâmetro de data" icon="calendar">
    Um job que só sabe processar "hoje" não consegue repor um dia perdido. Receber a data resolve.
  </Card>
</CardGroup>
