@myinst/cli
v0.1.0-beta.16
Published
CLI para gerenciar seu vault MyInst
Readme
@myinst/cli
CLI oficial do MyInst para login, listagem, status, pull, push, Project State e histórico de chats do vault.
Versão atual: 0.1.0-beta.13.
Instalacao
npm install -g @myinst/cliUso
myinst --help
myinst login
myinst login --server https://api-myinst.lotoscore.com.br
myinst login --server http://localhost:3000 --api-key myinst_xxx
myinst status
myinst pull
myinst push
myinst st
myinst ls
myinst status myinst --workspace meus-projetos --client codex kimi
myinst push myinst --workspace meus-projetos --scope all --client codex
myinst state capture memory "Contexto do deploy" --body "Deploy ocorre por push e pull na VPS."
myinst state push .myinst/state/drafts/memory-contexto-do-deploy.json --reviewed
myinst state pull myinst --workspace meus-projetos
myinst state search "deploy" --workspace meus-projetos --project myinst
myinst chat push --workspace meus-projetos --project myinst --client codex --session sessao-1 --file chat.json
myinst chat import --workspace meus-projetos --project myinst --client codex --include history --path ~/.codex/sessions --dry-run
myinst chat import --workspace meus-projetos --project myinst --client codex --include history --path ~/.codex/sessions --reviewed
myinst chat list --workspace meus-projetos --project myinst --client codex --tag release
myinst chat show sessao-1 --workspace meus-projetos --project myinst
myinst chat export sessao-1 --workspace meus-projetos --project myinst --format markdown
myinst chat summarize sessao-1 --workspace meus-projetos --project myinst
myinst env push --workspace meus-projetos --project myinst --file .env.local --name local
myinst env push --workspace meus-projetos --project myinst --file .env.local --name local --create-recovery-key
myinst env pull --workspace meus-projetos --project myinst --name local --output .env.localAviso de atualização
A CLI consulta o npm no início de cada execução e avisa em stderr quando existir uma versão latest mais nova de @myinst/cli.
O aviso não bloqueia o comando, falhas de rede são ignoradas e a checagem pode ser desativada em automações:
MYINST_DISABLE_UPDATE_CHECK=1 myinst status myinst --workspace meus-projetosSync tipo repositorio remoto
myinst status [projeto] compara arquivos locais, vault remoto e .myinst/sync-state.json, mostrando pendências de pull, push e conflitos.
Por padrão, a CLI lê estruturas de clientes detectadas no projeto atual. Quando mais de um client for detectado, informe --client explicitamente para evitar aplicar conteúdo no layout errado. Isso inclui, por exemplo, .claude, .codex, .cursor, .kimi-code, GEMINI.md, .qwen, .aider e .antigravity quando existirem no repositório. Configurações globais da home do usuário só entram quando você usa --scope global ou --scope all.
Opções de sync:
--workspace <slug>seleciona o workspace remoto.--client <id...>limita a operação a clientes específicos, comocodex,claudeoukimi.--scope <project|global|all>seleciona o escopo. O padrão éproject.
O manifesto é atualizado automaticamente após myinst pull e após myinst push bem-sucedido. Se houver conflito, myinst push é bloqueado até revisão manual.
O sync bloqueia envio de segredos prováveis. Em mcp_config e settings, substitua valores reais por placeholders como {{MYINST_API_KEY}} e {{DATABASE_URL}}.
No pull nativo, configurações de client são protegidas por padrão. Se o arquivo local já existir, o MyInst preserva o conteúdo da máquina e ignora o item remoto correspondente; se o arquivo não existir, ele pode criar a versão redigida do vault. Isso evita sobrescrever API keys, caminhos locais, providers, modelos e ajustes específicos do notebook.
Fluxo recomendado:
myinst pull
myinst status
# editar arquivos locais
myinst status
myinst pushAtalhos equivalentes:
myinst st # myinst status
myinst ls # myinst listNo monorepo, sem instalar o pacote global, use o script da raiz:
pnpm myinst status
pnpm myinst stEstados exibidos:
Pendente de pull: o vault remoto mudou ou possui item ausente no disco.Pendente de push: o disco local mudou ou possui item ausente no vault.Conflitos: local e remoto mudaram desde o último manifesto.Sincronizado: local, remoto e manifesto estão equivalentes.
O v1 não faz merge automático nem deleção automática.
Exemplo:
Workspace: default
Projeto: default
Pendente de pull:
claude skill deploy-local remoto mais novo
Pendente de push:
codex instruction agents existe só local
Conflitos:
kimi skill deploy local e remoto mudaramCada linha usa a identidade estável { clientId, scope, workspace, project, type, slug }. Assim, codex/instruction/agents e claude/instruction/agents são tratados como itens diferentes, mesmo tendo o mesmo type e slug.
Project State
myinst state capture cria um draft local em .myinst/state/drafts/ e não envia nada ao servidor. Revise o JSON, confirme que não há segredos e envie com myinst state push.
Comandos disponíveis:
myinst state capture <memory|decision|session> <titulo>cria draft revisável.myinst state push <draft> --reviewedsalva o estado revisado no vault.myinst state pull [projeto]materializa memórias, decisões e sessões em.myinst/state/.myinst state search <query>busca Project State comscope=state.
O push exige metadata.reviewed=true e bloqueia padrões prováveis de segredos como tokens, senhas, .env e connection strings.
Histórico de chats
myinst chat importa histórico apenas por fonte explícita. A CLI não varre transcripts locais, caches ou diretórios internos de clientes automaticamente.
Chats não entram no myinst pull/push de arquivos nativos. Eles usam um fluxo próprio por { workspace, project, client, session }, permitindo filtrar e exportar conversas por cliente de origem.
Comandos disponíveis:
myinst chat push --project <slug> --client <client> --session <id> --file <json|md>importa uma sessão.myinst chat import --project <slug> --client codex --include history --path <arquivo|diretorio> --reviewedimporta histórico Codex JSONL com adapter dedicado.myinst chat list --project <slug> [--client <client>] [--q <texto>] [--tag <tag>] [--from <iso>] [--to <iso>]lista sessões importadas.myinst chat show <session-id> [--message-limit <n>] [--message-offset <n>]mostra mensagens paginadas.myinst chat export <session-id> --format markdowngrava.myinst/chats/<session-id>.md.myinst chat summarize <session-id>atualiza o resumo no servidor.
Arquivos JSON devem conter messages; Markdown entra como uma mensagem única revisada. O import dedicado de Codex aceita .jsonl do histórico, incluindo o formato payload do Codex desktop, e exige --dry-run ou --reviewed. Mensagens com segredo provável que não puderem ser redigidas granularmente viram {{SECRET}}. A categoria cache existe no contrato, mas fica bloqueada até existir persistência segura por client. O backend bloqueia padrões prováveis de segredo antes de persistir.
Conversas longas continuam sendo uma única sessão. Use --message-limit e --message-offset para navegar pelas mensagens; não divida uma conversa em sessões --part-*.
JSON recomendado:
{
"title": "Correção do sync Codex",
"summary": "Resumo opcional revisado.",
"metadata": {
"tags": ["codex", "sync"],
"source": "codex-export"
},
"messages": [
{ "role": "user", "content": "Corrija o pull do Codex." },
{ "role": "assistant", "content": "Pull ajustado e validado." }
]
}Use --client codex, --client claude, --client cursor, --client kimi ou outro ID controlado para preservar a origem da sessão. Suporte a history e cache é implementado client por client, porque cada ferramenta guarda dados em estrutura própria. O export grava Markdown em .myinst/chats/; ele não reescreve o histórico interno do client.
O import grava todas as sessões encontradas no --path dentro do projeto informado por --workspace e --project. Ele ainda não separa automaticamente sessões por cwd; se ~/.codex/sessions tiver conversas de vários repositórios, use --dry-run e importe apenas arquivos ou subdiretórios que pertencem ao projeto correto.
Env Vault
myinst env é o fluxo dedicado para arquivos .env de projeto. Ele não faz parte do myinst pull/push normal, porque .env continua bloqueado nos fluxos de conteúdo, chats e Project State.
Comandos disponíveis:
myinst env push --project <slug> --file .env.local --name localcriptografa localmente e envia somente o envelope cifrado.myinst env push --project <slug> --file .env.local --create-recovery-keygera uma recovery key local e envia um envelope cifrado do segredo de vault.myinst env pull --project <slug> --name local --environment local --output .env.localbaixa o envelope, descriptografa localmente e cria backup se o destino já existir.myinst env list --project <slug>lista metadados seguros.myinst env show --project <slug> --name localmostra metadados seguros sem revelar valores.myinst env delete --project <slug> --name localremove o env cifrado do projeto.
--project é obrigatório para evitar gravar .env em um projeto genérico. O segredo do Env Vault deve ser informado por MYINST_ENV_VAULT_SECRET ou pelo prompt local oculto. Evite exportar o segredo na mesma linha do comando para não vazar em histórico, logs ou listagem de processos. O segredo não é salvo em ~/.myinst/config.json e não deve ser enviado ao backend. O backend recebe apenas encryptedPayload, envelopes de recuperação cifrados e metadados operacionais do ciphertext.
Se houver mais de um env com o mesmo --name, informe --environment em pull, show e delete para evitar operar no ambiente errado.
Recovery por e-mail ou 2FA só valida identidade e autoriza step-up; ela não descriptografa .env sozinha. Para recuperação real, guarde a recovery key gerada por --create-recovery-key ou informe uma recovery key existente por MYINST_ENV_VAULT_RECOVERY_KEY. No futuro, outros materiais criptográficos locais podem ser suportados, como dispositivo confiável, passphrase forte ou passkey. Se todos os fatores criptográficos forem perdidos, o MyInst não deve conseguir restaurar o plaintext.
env pull exige --output para não confiar em caminhos retornados pelo servidor. Se o arquivo de destino existir, a CLI cria <arquivo>.bak antes de gravar. Use --overwrite apenas quando quiser substituir sem backup.
Requisitos
- Node.js 22+
- acesso a um servidor MyInst
