← Projetos

Tutorial

TheBrain: um cérebro digital para os seus dados

O que é, de onde veio, como instalar no computador, no Docker, no Kubernetes ou na nuvem, e como montar, passo a passo, uma base para classificar peças.

O que é?

O TheBrain é um software de mapas mentais e de gestão de conhecimento pessoal da TheBrain Technologies, de Los Angeles. Em vez de guardar informações em pastas, ele guarda pensamentos (thoughts) e as ligações entre eles, e mostra tudo numa interface gráfica dinâmica que mistura hierarquia e rede. [1] [2]

Cada pensamento pode ter notas, arquivos, links da web e eventos de calendário. Quando você clica num pensamento, ele vai para o centro da tela e os vizinhos se reorganizam em volta. Esse arranjo se chama Plex: [2] [14]

O pensamento ativo Parafusos está no centro. Acima, o pai Fixadores. Abaixo, os filhos Parafuso M8x30, Parafuso M6x20 e Parafuso M10x40. À esquerda, ligados por salto, ISO 4017 e Metalúrgica Alfa. À direita, os irmãos Porcas e Arruelas, que têm o mesmo pai.
Cada direção tem um significado: acima estão os pais, abaixo os filhos, ao lado os saltos e à direita os irmãos.

A diferença para um mapa mental comum é que um pensamento pode ter vários pais. “Parafuso M8x30” pode estar, ao mesmo tempo, em “Parafusos” e em “Kit de montagem da bomba”, sem cópia. Na prática, é um grafo de conhecimento que você desenha à mão ou por API. [2] [12]

O vocabulário que vamos usar: [12] [14]

Cérebro (brain)
A base com todos os pensamentos. Todo cérebro tem um pensamento inicial (home).
Pensamento (thought)
O nó do grafo: tem nome e, opcionalmente, rótulo, tipo, tags, nota e anexos.
Ligação (link)
A relação entre dois pensamentos. Pode ter nome, cor e tipo.
Pai e filho
Ligação hierárquica. Um filho pode ter vários pais.
Salto (jump)
Ligação lateral, sem hierarquia: “está relacionado a”.
Irmãos (siblings)
Pensamentos com o mesmo pai. Não são uma ligação própria.
Tipo (type)
A classificação principal: o que o pensamento é. Cada pensamento tem no máximo um tipo.
Tag
Um marcador transversal, como “Crítica”. Um pensamento pode ter várias.
Plex
A visão em que o pensamento ativo fica no centro, cercado pelos vizinhos.

Como surgiu?

A ideia nasceu em 1993, com Harlan Hugh, que sentia a necessidade de focar nas conexões entre as informações, e não nas separações. Em 1996 ele fundou a Natrificial Software Technologies, na Califórnia. A empresa depois passou a se chamar The Brain e, mais tarde, TheBrain Technologies, com sede em Los Angeles e Hugh ainda como CEO. [1] [4]

“A sua tela não deveria parecer um monte de botões bonitos. Deveria ser uma representação dinâmica, uma experiência, de tudo o que é importante para você.”

Harlan Hugh, à revista Feed, em 1999 [1]

Por muitos anos, o produto de uso pessoal se chamou PersonalBrain. A empresa também vendeu versões corporativas, como o TeamBrain e o BrainEKP, premiado em 2008. Com a versão 8, anunciada em 20 de novembro de 2013, o nome passou a ser só TheBrain, e a sincronização entre máquinas entrou num plano de serviço anual. [2] [3] [5]

Em novembro de 2023 chegou a API REST, que permite ler e gravar pensamentos por programa. Em 2026, o TheBrain 15 trouxe a IA Cerebro, novas visões (cartões, mapa mental e árvore) e o mesmo código na web, no Windows, no macOS, no iPhone/iPad e no Android. Trouxe também uma API local, servida pelo próprio aplicativo. O aplicativo completo passou a ser gratuito, e os planos pagos ficaram com a sincronização, a IA e a colaboração. [6] [7] [8] [10] [11]

Linha do tempo: 1993, Harlan Hugh concebe a ideia de focar nas conexões entre as informações; 1996, fundação da Natrificial, que depois se tornou TheBrain Technologies; 2013, TheBrain 8 adota o nome TheBrain no lugar de PersonalBrain; 2023, lançamento da API REST; 2026, TheBrain 15, com IA Cerebro, cinco plataformas com o mesmo código, aplicativo gratuito e API local.
Três décadas separam a ideia de 1993 da versão 15, lançada em 2026.

Como instalar?

Há dois caminhos. No local, os cérebros ficam na sua máquina ou no seu cluster. No remoto, ficam na nuvem da TheBrain. Os dois se combinam: o desktop pode sincronizar com a nuvem, e a API funciona dos dois lados.

Mapa das opções de instalação. Local: aplicativo nativo para Windows, macOS e Linux; Docker, com o desktop acessível pelo navegador e um importador em contêiner; Kubernetes, com Deployment, volume persistente, Service e CronJob. Remoto: cliente web em app.thebrain.com; sincronização na nuvem, em plano pago; e API REST em api.bra.in.
As opções de instalação. Só o aplicativo nativo e a nuvem são oficiais; Docker e Kubernetes são montagens próprias.

Local: o aplicativo nativo

É o caminho oficial e o mais simples. Em thebrain.com/download há instaladores para Windows (.exe, .msi ou .zip, a partir do Windows 10) e links para Mac, Linux e celular. Não é preciso conta nem cartão de crédito. [11]

  1. Baixe o instalador da sua plataforma.
  2. Instale e abra o TheBrain.
  3. Crie um cérebro. Ele nasce com um pensamento inicial.
  4. Se for usar a API local, abra Configurações › Usuário › API local. Lá ficam o endereço e a documentação. É preciso ter a versão 15.0.534 ou posterior. [10]

Local: Docker

A TheBrain não publica imagem Docker, e o TheBrain é um aplicativo de desktop, não um servidor. Mesmo assim, dá para conteinerizar duas coisas diferentes, e vale separar bem cada uma:

  • O próprio desktop, dentro de uma área de trabalho Linux acessível pelo navegador. Aqui uso a imagem webtop, da LinuxServer.io, que entrega um XFCE pelo KasmVNC na porta 3001, com HTTPS. [17]
  • A automação: um contêiner com um script que lê e grava no cérebro pela API. É a parte mais útil no dia a dia, e é a que usaremos no exemplo de peças.
À esquerda, o navegador do usuário acessa por HTTPS, na porta 3001, um contêiner webtop com KasmVNC e XFCE. Dentro dele rodam o TheBrain desktop e a sua API local. O contêiner guarda o aplicativo e os cérebros num volume /config. Um segundo contêiner, o importador em Python, lê o arquivo pecas.csv e grava pela API local ou pela API na nuvem, api.bra.in. Opcionalmente, o desktop sincroniza com a TheBrain Cloud. Tudo pode ser um Docker Compose ou um Pod do Kubernetes.
O desktop roda no contêiner webtop e guarda tudo em /config; o importador grava pela API local ou pela API na nuvem.

O arquivo compose.yaml

services:
  thebrain:
    image: lscr.io/linuxserver/webtop:ubuntu-xfce
    container_name: thebrain
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=America/Sao_Paulo
      - CUSTOM_USER=giovani
      - PASSWORD=${WEBTOP_PASSWORD}
    volumes:
      - ./thebrain-config:/config
    ports:
      - "127.0.0.1:3001:3001"
    shm_size: "1gb"
    restart: unless-stopped

  importador:
    build: ./importador
    profiles: ["ferramentas"]
    environment:
      - THEBRAIN_API_KEY
      - THEBRAIN_BRAIN_ID
      - THEBRAIN_API_URL=https://api.bra.in
      - PECAS_CSV=/dados/pecas.csv
    volumes:
      - ./dados:/dados:ro
  • PUID e PGID definem o dono dos arquivos em ./thebrain-config; TZ, o fuso horário.
  • CUSTOM_USER e PASSWORD ativam a autenticação básica. A senha vem de uma variável de ambiente, e não do arquivo.
  • A porta é publicada só em 127.0.0.1. A documentação do webtop avisa que o terminal dele dá sudo sem senha e que ele não deve ir para a internet sem um proxy reverso com autenticação forte. [17]
  • shm_size aumenta a memória compartilhada, que o navegador interno usa.
  • O importador fica no perfil ferramentas: não sobe com o up, só quando é chamado. [18]

Subindo e instalando o TheBrain

O read -rs pede a senha sem mostrá-la e sem gravá-la no histórico do shell:

read -rs WEBTOP_PASSWORD && export WEBTOP_PASSWORD
docker compose up -d thebrain

Abra https://localhost:3001, aceite o certificado autoassinado e entre com o usuário e a senha. Na área de trabalho que aparece, baixe o pacote Linux em thebrain.com/download e instale-o.

Cuidado com a persistência: só /config sobrevive quando o contêiner é recriado. Se o pacote se extrai numa pasta, guarde a pasta dentro de /config. Se ele se instala no sistema, como um .deb, crie uma imagem derivada (o nome do arquivo abaixo é ilustrativo) e troque image: por build: no Compose:

FROM lscr.io/linuxserver/webtop:ubuntu-xfce
COPY thebrain-linux.deb /tmp/
RUN apt-get update \
 && apt-get install -y /tmp/thebrain-linux.deb \
 && rm -rf /tmp/thebrain-linux.deb /var/lib/apt/lists/*

O importador

O importador é o script da seção de peças, numa imagem Python enxuta:

FROM python:3.12-slim
WORKDIR /app
RUN pip install --no-cache-dir requests
COPY importa_pecas.py .
CMD ["python", "importa_pecas.py"]
read -rs THEBRAIN_API_KEY && export THEBRAIN_API_KEY
export THEBRAIN_BRAIN_ID=00000000-0000-0000-0000-000000000000
docker compose run --rm importador

Ele fala com a API na nuvem (api.bra.in), que funciona com qualquer cérebro sincronizado. Para usar a API local, troque THEBRAIN_API_URL pelo endereço que aparece em Configurações › Usuário › API local. Se ela só aceitar conexões do próprio computador, rode o script dentro da área de trabalho do webtop. [10] [12]

Local: Kubernetes

No Kubernetes, a ideia é a mesma, traduzida em objetos: um Deployment com o webtop, um PersistentVolumeClaim para /config, um Service interno e um CronJob que roda o importador todas as noites. A senha e a chave da API ficam em Secrets. [19] [20] [21] [22]

apiVersion: v1
kind: Namespace
metadata:
  name: thebrain
---
apiVersion: v1
kind: Secret
metadata:
  name: webtop
  namespace: thebrain
type: Opaque
stringData:
  PASSWORD: "CHANGE-ME"
---
apiVersion: v1
kind: Secret
metadata:
  name: thebrain-api
  namespace: thebrain
type: Opaque
stringData:
  THEBRAIN_API_KEY: "CHANGE-ME"
  THEBRAIN_BRAIN_ID: "00000000-0000-0000-0000-000000000000"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: thebrain-config
  namespace: thebrain
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: thebrain
  namespace: thebrain
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels: {app: thebrain}
  template:
    metadata:
      labels: {app: thebrain}
    spec:
      containers:
        - name: webtop
          image: lscr.io/linuxserver/webtop:ubuntu-xfce
          env:
            - {name: PUID, value: "1000"}
            - {name: PGID, value: "1000"}
            - {name: TZ, value: America/Sao_Paulo}
            - {name: CUSTOM_USER, value: giovani}
            - name: PASSWORD
              valueFrom:
                secretKeyRef: {name: webtop, key: PASSWORD}
          ports:
            - containerPort: 3001
          resources:
            requests: {cpu: 500m, memory: 2Gi}
            limits: {memory: 4Gi}
          volumeMounts:
            - {name: config, mountPath: /config}
            - {name: shm, mountPath: /dev/shm}
      volumes:
        - name: config
          persistentVolumeClaim: {claimName: thebrain-config}
        - name: shm
          emptyDir: {medium: Memory, sizeLimit: 1Gi}
---
apiVersion: v1
kind: Service
metadata:
  name: thebrain
  namespace: thebrain
spec:
  selector: {app: thebrain}
  ports:
    - {port: 3001, targetPort: 3001}
---
apiVersion: batch/v1
kind: CronJob
metadata:
  name: importa-pecas
  namespace: thebrain
spec:
  schedule: "0 2 * * *"
  timeZone: America/Sao_Paulo
  concurrencyPolicy: Forbid
  jobTemplate:
    spec:
      backoffLimit: 2
      template:
        spec:
          restartPolicy: OnFailure
          containers:
            - name: importador
              image: registry.exemplo.com/importador-thebrain:1.0
              envFrom:
                - secretRef: {name: thebrain-api}
              env:
                - {name: PECAS_CSV, value: /dados/pecas.csv}
              volumeMounts:
                - {name: dados, mountPath: /dados, readOnly: true}
          volumes:
            - name: dados
              configMap: {name: pecas-csv}

Três escolhas importam:

  • replicas: 1 com strategy: Recreate. O cérebro é um arquivo local do aplicativo, e não um banco com vários escritores. Duas réplicas no mesmo volume corromperiam os dados; o Recreate garante que o pod antigo pare antes de o novo subir. [19]
  • /dev/shm como emptyDir em memória faz o papel do shm_size do Compose.
  • O Service é ClusterIP: nada fica exposto. O acesso é por port-forward ou, se precisar, por um Ingress com autenticação. [23]

Para aplicar, carregar o CSV, abrir a área de trabalho e disparar uma importação sem esperar as 2h da manhã:

kubectl apply -f thebrain.yaml
kubectl -n thebrain create configmap pecas-csv --from-file=pecas.csv
kubectl -n thebrain port-forward svc/thebrain 3001:3001
kubectl -n thebrain create job importa-agora --from=cronjob/importa-pecas

Remoto

Sem instalar nada, entre em app.thebrain.com e use o cliente web. Desde o TheBrain 15, ele tem o mesmo código e os mesmos recursos do desktop. Para ter o mesmo cérebro no computador, na web e no celular, é preciso um plano pago, que inclui a sincronização na nuvem. [9] [11]

Para programar contra a nuvem:

  1. Gere uma chave em app.thebrain.com/api-keys.
  2. Envie-a no cabeçalho Authorization: Bearer <chave>.
  3. Consulte a documentação interativa em api.bra.in: o botão Authorize recebe a chave, e o Try it out executa cada chamada. [12]

O primeiro teste é listar os seus cérebros:

curl -s -H "Authorization: Bearer $THEBRAIN_API_KEY" \
  https://api.bra.in/brains

A resposta traz, para cada cérebro, o id, o name e o homeThoughtId, que é o pensamento inicial. Guarde o id: ele vai em todas as outras chamadas. [12]

LocalRemoto
Onde ficam os dadosNo seu disco, volume ou PVCNa nuvem da TheBrain
CustoAplicativo gratuitoWeb gratuita; sincronização, IA e colaboração em planos pagos
AcessoUma máquina (ou o navegador, com webtop)Qualquer navegador e celular
APIAPI local, com o desktop abertoapi.bra.in, com chave
Melhor paraDados sensíveis e uso individualEquipes e vários dispositivos

Os primeiros passos

1. Crie um cérebro. Todo cérebro nasce com um pensamento inicial, que é a raiz da navegação. Na API, ele aparece como homeThoughtId. [12]

2. Crie pensamentos pelos portões. Cada pensamento tem pequenos círculos nas bordas, os portões. Cada um cria um tipo de ligação: [14]

Um pensamento chamado Parafusos com quatro pequenos círculos, os portões. O de cima cria um pai; o de baixo cria um filho; os das laterais criam saltos. Os irmãos não têm portão: aparecem quando dois pensamentos têm o mesmo pai.
Clicar num portão cria um pensamento novo; arrastá-lo até outro pensamento liga os dois.

3. Navegue. Clique num pensamento para torná-lo ativo: o Plex se refaz em volta dele. Para ir direto a um pensamento distante, use a busca pelo nome. [14] [15]

4. Enriqueça. Escreva notas (a API as lê e grava em Markdown), anexe arquivos, pastas e endereços da web, e use o rótulo para um dado curto, como um código. [12] [14]

5. Classifique. O tipo diz o que o pensamento é (Peça, Material) e pode definir cor e ícone; cada pensamento tem no máximo um. As tags são marcas transversais (Crítica, Obsoleta), e um pensamento pode ter várias. [12] [14]

6. Fixe o que usa sempre. Os pensamentos fixados (pins) ficam sempre à mão, seja qual for o pensamento ativo. [12]

7. Troque de visão. Além do Plex, o TheBrain 15 mostra o mesmo cérebro como cartões, mapa mental ou árvore, sem perder nenhuma ligação. [7]

Para fixar

  • Hierarquia é pai e filho; relação lateral é salto; irmãos surgem sozinhos.
  • Tipo é “o que é” (um só); tag é “como está” (várias).
  • Um pensamento pode ter vários pais: não duplique, ligue.

Montando um exemplo

O problema: uma fábrica tem milhares de peças. Cada uma pertence a uma família (fixadores, rolamentos, vedações), é feita de um material, vem de um ou mais fornecedores e segue uma norma. As perguntas do dia a dia cruzam essas dimensões: “que peças usam aço inox?”, “o que compramos da Metalúrgica Alfa?”, “quais fixadores seguem a ISO 4017?”.

Num banco relacional, isso vira tabelas e chaves estrangeiras. No TheBrain, vira pensamentos e ligações. A correspondência é esta:

Banco relacionalTheBrain
Linha de uma tabelaPensamento
Tabela (entidade)Tipo: Peça, Material, Fornecedor, Norma
Chave estrangeira N:1 (peça → material)Salto entre a peça e o material
Tabela associativa N:N (peça ↔ fornecedor)Vários saltos, sem tabela intermediária
Hierarquia recursiva (categoria_pai_id)Ligações pai → filho, nativas, com vários pais possíveis
Coluna descritiva (estoque, especificação)Nota ou rótulo
Consulta com JOINClicar no pensamento e ver os vizinhos, ou GET …/graph na API

E o que o TheBrain não faz: garantir integridade (nada impede um salto errado), controlar transações ou responder a consultas agregadas, como a soma do estoque por material. Por isso, a regra do exemplo é clara: o ERP continua sendo o dono dos dados, e o TheBrain é a camada de navegação e de conhecimento, recarregada a partir de um arquivo exportado.

Para fixar

  • Relações N:N e hierarquias com vários pais são naturais no TheBrain.
  • Totais, integridade e transações continuam no banco relacional.

Criando um banco de dados para classificação de peças

1. O modelo

No topo, Catálogo de peças. Abaixo, as categorias Fixadores, Transmissão e Vedação. Fixadores tem as subcategorias Parafusos, Porcas e Arruelas; Transmissão tem Rolamentos; Vedação tem Anéis O-ring. Sob Parafusos está a peça Parafuso sextavado M8x30, código PAR-M8X30, ligada por saltos ao material Aço carbono, ao fornecedor Metalúrgica Alfa e à norma ISO 4017.
A árvore classifica a peça; os saltos a ligam a material, fornecedor e norma.

São cinco tipos: Categoria, Peça, Material, Fornecedor e Norma. A árvore Catálogo › categoria › subcategoria › peça classifica, e os saltos ligam cada peça ao material, ao fornecedor e à norma. Materiais, fornecedores e normas também ficam como filhos de três pensamentos-índice (Materiais, Fornecedores e Normas), presos ao pensamento inicial, para que você possa navegar a partir deles.

2. Uma peça feita à mão

Antes de automatizar, monte uma peça no aplicativo para sentir o modelo:

  1. No pensamento inicial, crie o filho “Catálogo de peças”; sob ele, “Fixadores”; e, sob este, “Parafusos”.
  2. Sob “Parafusos”, crie “Parafuso sextavado M8x30” e ponha PAR-M8X30 no rótulo.
  3. Crie o tipo Peça e aplique-o ao pensamento.
  4. Pelo portão lateral, crie os saltos para “Aço carbono”, “Metalúrgica Alfa” e “ISO 4017”.
  5. Escreva a ficha técnica na nota.

3. Os dados de entrada

O resto vem de uma exportação do ERP, aqui simplificada num CSV separado por ponto e vírgula. Os fornecedores são fictícios; as normas são reais: ISO 4017 (parafusos sextavados), ISO 4032 (porcas sextavadas), ISO 7089 (arruelas lisas), ISO 15 (dimensões de rolamentos radiais) e ISO 3601-1 (anéis O-ring).

codigo;descricao;categoria;subcategoria;material;fornecedor;norma;estoque
PAR-M8X30;Parafuso sextavado M8x30;Fixadores;Parafusos;Aço carbono;Metalúrgica Alfa;ISO 4017;1200
PAR-M6X20;Parafuso sextavado M6x20;Fixadores;Parafusos;Aço inox A2-70;Metalúrgica Alfa;ISO 4017;850
POR-M8;Porca sextavada M8;Fixadores;Porcas;Aço carbono;Metalúrgica Alfa;ISO 4032;3000
ARR-8;Arruela lisa 8 mm;Fixadores;Arruelas;Aço carbono;Metalúrgica Alfa;ISO 7089;5000
ROL-6204;Rolamento de esferas 6204-2RS;Transmissão;Rolamentos;Aço cromo;Rolamentos Beta;ISO 15;80
VED-OR20;Anel O-ring 20x2 NBR 70;Vedação;Anéis O-ring;Borracha NBR;Vedações Gama;ISO 3601-1;400

4. O script de importação

O script usa só a biblioteca requests e seis endpoints da API. Ele é idempotente: antes de criar um pensamento, procura-o pelo nome exato; antes de ligar dois, verifica se a ligação já existe. Pode rodar todas as noites sem duplicar nada. [12] [13]

"""Carrega pecas.csv num cérebro do TheBrain usando a API REST."""
import csv
import os

import requests

API = os.environ.get("THEBRAIN_API_URL", "https://api.bra.in").rstrip("/")
BRAIN = os.environ["THEBRAIN_BRAIN_ID"]
CSV = os.environ.get("PECAS_CSV", "pecas.csv")
S = requests.Session()
S.headers["Authorization"] = "Bearer " + os.environ["THEBRAIN_API_KEY"]

NORMAL, TIPO = 1, 2            # kind
FILHO, PAI, SALTO = 1, 2, 3    # relation
PRIVADO = 1                    # acType
ids = {}


def vazio(r):
    return not r.ok or r.text.strip() in ("", "null")


def buscar(nome):
    if nome not in ids:
        r = S.get(f"{API}/thoughts/{BRAIN}", params={"nameExact": nome})
        ids[nome] = None if vazio(r) else r.json()["id"]
    return ids[nome]


def ligar(a, b, relacao):
    if not vazio(S.get(f"{API}/links/{BRAIN}/{a}/{b}")):
        return  # já estão ligados
    corpo = {"thoughtIdA": a, "thoughtIdB": b, "relation": relacao}
    S.post(f"{API}/links/{BRAIN}", json=corpo).raise_for_status()


def garantir(nome, origem=None, relacao=FILHO, tipo=None, rotulo=None, kind=NORMAL):
    tid = buscar(nome)
    if tid:
        if origem:
            ligar(origem, tid, relacao)
        return tid
    corpo = {"name": nome, "kind": kind, "acType": PRIVADO}
    if origem:
        corpo.update(sourceThoughtId=origem, relation=relacao)
    if tipo:
        corpo["typeId"] = tipo
    if rotulo:
        corpo["label"] = rotulo
    r = S.post(f"{API}/thoughts/{BRAIN}", json=corpo)
    r.raise_for_status()
    ids[nome] = r.json()["id"]
    return ids[nome]


home = S.get(f"{API}/brains/{BRAIN}").json()["homeThoughtId"]
tipos = {t: garantir(t, kind=TIPO)
         for t in ("Peça", "Categoria", "Material", "Fornecedor", "Norma")}
catalogo = garantir("Catálogo de peças", home)
hubs = {h: garantir(h, home) for h in ("Materiais", "Fornecedores", "Normas")}
jumps = (("material", "Material", "Materiais"),
         ("fornecedor", "Fornecedor", "Fornecedores"),
         ("norma", "Norma", "Normas"))

with open(CSV, encoding="utf-8") as f:
    for p in csv.DictReader(f, delimiter=";"):
        cat = garantir(p["categoria"], catalogo, tipo=tipos["Categoria"])
        sub = garantir(p["subcategoria"], cat, tipo=tipos["Categoria"])
        peca = garantir(p["descricao"], sub, tipo=tipos["Peça"], rotulo=p["codigo"])
        for coluna, tipo, hub in jumps:
            alvo = garantir(p[coluna], hubs[hub], tipo=tipos[tipo])
            ligar(peca, alvo, SALTO)
        nota = ("| Campo | Valor |\n|---|---|\n"
                f"| Código | {p['codigo']} |\n"
                f"| Estoque | {p['estoque']} un. |\n")
        S.post(f"{API}/notes/{BRAIN}/{peca}/update",
               json={"markdown": nota}).raise_for_status()
        print("ok:", p["codigo"], "-", p["descricao"])

Os números do script vêm da especificação da API: [12]

CampoValores
kind1 normal · 2 tipo · 3 evento · 4 tag · 5 sistema
relation1 filho · 2 pai · 3 salto · 4 irmão
acType0 público · 1 privado

5. Rodando

python -m pip install requests
read -rs THEBRAIN_API_KEY && export THEBRAIN_API_KEY
export THEBRAIN_BRAIN_ID=00000000-0000-0000-0000-000000000000
python importa_pecas.py
ok: PAR-M8X30 - Parafuso sextavado M8x30
ok: PAR-M6X20 - Parafuso sextavado M6x20
ok: POR-M8 - Porca sextavada M8
ok: ARR-8 - Arruela lisa 8 mm
ok: ROL-6204 - Rolamento de esferas 6204-2RS
ok: VED-OR20 - Anel O-ring 20x2 NBR 70

6. Consultando

No aplicativo, clique em “Aço carbono”: os saltos mostram todas as peças feitas dele. Clique em “Metalúrgica Alfa”: aparece tudo o que ela fornece. É o equivalente visual de um JOIN. Pela API, a busca por texto e a vizinhança de um pensamento fazem o mesmo papel:

curl -s -H "Authorization: Bearer $THEBRAIN_API_KEY" \
  "https://api.bra.in/search/$THEBRAIN_BRAIN_ID?queryText=M8&maxResults=30"

curl -s -H "Authorization: Bearer $THEBRAIN_API_KEY" \
  "https://api.bra.in/thoughts/$THEBRAIN_BRAIN_ID/$MATERIAL_ID/graph"

A resposta de /graph separa parents, children, jumps, siblings, tags e links. As peças que usam o material vêm em jumps. [12]

7. Próximos passos

  • Marque peças com as tags “Crítica” ou “Obsoleta”.
  • Crie kits: um pensamento “Kit de montagem da bomba” como pai adicional das peças que o compõem.
  • Anexe desenhos em PDF com POST /attachments/{brainId}/{thoughtId}/file.
  • Atualize nomes, rótulos e cores com PATCH, que segue o formato JSON Patch. [12] [24]

Conclusões

  • O TheBrain é, no fundo, um grafo de conhecimento com uma interface muito boa para navegar. Ele brilha quando as relações importam mais que as colunas.
  • Instalar é simples no desktop e na web. Docker e Kubernetes são possíveis, mas não oficiais: servem para hospedar o desktop num servidor e, principalmente, para automatizar a carga de dados pela API.
  • A API REST, na nuvem ou local, faz do TheBrain um destino de integração. O exemplo carrega uma base de peças a partir de um CSV, sem duplicar nada.
  • Ele não substitui o banco relacional nem o ERP: não tem integridade, transações nem agregações. Use-o como camada de navegação e documentação, alimentada pelo sistema que é dono dos dados.
  • Para tirar dúvidas, as melhores fontes são a documentação interativa da API, o guia do usuário e o fórum oficial. [12] [14] [16]
↑ Voltar ao topo

Referências

  1. TheBrain Technologies, “About TheBrain”, acesso em 28/09/2026, thebrain.com/about.
  2. Wikipedia (em inglês), “TheBrain”, acesso em 28/09/2026, en.wikipedia.org/wiki/TheBrain.
  3. Wikipedia (em inglês), “TheBrain Technologies”, acesso em 28/09/2026, en.wikipedia.org/wiki/TheBrain_Technologies.
  4. Computerworld, “Linking Your Thinking”, 31/01/2000, acesso em 28/09/2026, computerworld.com/article/1368716/linking-your-thinking.html.
  5. PRWeb, “TheBrain 8 Delivers Advanced Information Management with Powerful New Knowledge Visualization Features”, 20/11/2013, acesso em 28/09/2026, prweb.com/releases/thebrain_8_delivers_advanced_information_management_with_powerful_new_knowledge_visualization_features/prweb11352059.htm.
  6. TheBrain Blog, “Introducing TheBrain API”, 01/11/2023, acesso em 28/09/2026, thebrain.com/blog/introducing-thebrain-api.
  7. TheBrain Technologies, “TheBrain 15 — Beyond next-gen, with Cerebro AI”, acesso em 28/09/2026, thebrain.com/products/thebrain/thebrain15.
  8. TheBrain Blog, “TheBrain 15 Achieves True Cross-Platform Parity: One Codebase, Five Platforms, Full Feature Equality”, 24/04/2026, acesso em 28/09/2026, old.thebrain.com/blog/true-cross-platform-parity.
  9. TheBrain Blog, “Unifying TheBrain: Version 15 Now Live on the Web”, acesso em 28/09/2026, thebrain.com/blog/unifying-thebrain.
  10. TheBrain Blog, “TheBrain API: Now Fully Local and Unrestrained”, 28/04/2026, acesso em 28/09/2026, thebrain.com/blog/thebrain-api-local.
  11. TheBrain Technologies, “Download TheBrain — Free, forever”, acesso em 28/09/2026, thebrain.com/download.
  12. TheBrain Technologies, TheBrain API, documentação interativa, versão 1.0.5, acesso em 28/09/2026, api.bra.in.
  13. TheBrainTech, “thebrain-api-quickstart-python”, GitHub, acesso em 28/09/2026, github.com/TheBrainTech/thebrain-api-quickstart-python.
  14. TheBrain Technologies, TheBrain 14 User Guide (PDF), acesso em 28/09/2026, assets.thebrain.com/documents/TheBrain14/TheBrain14-User-Guide-v01.pdf.
  15. TheBrain Technologies, “Tutorials”, acesso em 28/09/2026, thebrain.com/tutorials.
  16. TheBrain Forums, fórum oficial, acesso em 28/09/2026, forums.thebrain.com.
  17. LinuxServer.io, “webtop”, acesso em 28/09/2026, docs.linuxserver.io/images/docker-webtop.
  18. Docker, “Compose file reference”, acesso em 28/09/2026, docs.docker.com/reference/compose-file.
  19. Kubernetes, “Deployments”, acesso em 28/09/2026, kubernetes.io/docs/concepts/workloads/controllers/deployment.
  20. Kubernetes, “Persistent Volumes”, acesso em 28/09/2026, kubernetes.io/docs/concepts/storage/persistent-volumes.
  21. Kubernetes, “CronJob”, acesso em 28/09/2026, kubernetes.io/docs/concepts/workloads/controllers/cron-job.
  22. Kubernetes, “Secrets”, acesso em 28/09/2026, kubernetes.io/docs/concepts/configuration/secret.
  23. Kubernetes, “Use Port Forwarding to Access Applications in a Cluster”, acesso em 28/09/2026, kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster.
  24. IETF, RFC 6902, “JavaScript Object Notation (JSON) Patch”, 2013, acesso em 28/09/2026, rfc-editor.org/rfc/rfc6902.
↑ Voltar ao topo