stipend
Carteira USDC não-custodial na Base. Limites de gastos aplicados no código, não em um prompt.
Documentação
stipend
Uma carteira USDC não custodial na Base que um agente de IA instala por conta própria, com limites de gastos aplicados abaixo da camada de instrução.
pip install eth-account && curl -sL stipend.sh/install | sh
Esta é a fonte do pacote que o instalador busca. Ela é publicada para que as afirmações feitas sobre ela possam ser verificadas, e não acreditadas.
Ela inclui um servidor MCP (Model Context Protocol) — stipend mcp — expondo sete ferramentas via stdio, para que um agente possa guardar e gastar dinheiro através da interface de ferramentas que já possui. Veja servidor MCP abaixo.
A afirmação que vale a pena verificar
A falha que importa para um agente que guarda dinheiro não é uma chave roubada. É uma transação corretamente assinada da qual ele foi convencido.
Quase toda defesa contra isso vive na camada de instrução — um prompt de sistema dizendo "não envie fundos para endereços não verificados". Isso é uma sugestão para um modelo, sentada na mesma janela de contexto que o texto que o ataca.
Aqui os limites não são conselhos. São código pelo qual uma transação passa a caminho de ser assinada, e nenhuma redação em qualquer janela de contexto os alcança.
Comece em stipend/policy.py. São cerca de trezentas linhas e é todo o argumento.
Os três controles
| controle | o que faz |
|---|---|
| limites por transação e diários | um teto que nenhuma instrução pode elevar |
| aprovações de uso único | autorizam um único pagamento — vinculado àquele destinatário, àquele valor, com expiração, uso único — em vez de elevar um limite |
| confirmação de novo destino | o primeiro pagamento para qualquer endereço que você nunca pagou precisa de confirmação, independentemente do valor |
O segundo é o que as pessoas entendem errado. Elevar um limite para arcar com uma compra enfraquece todos os pagamentos futuros para todos, que é exatamente o que um atacante pede. Autorize o pagamento, não a capacidade.
O terceiro é o que impede um dreno por muitos pagamentos pequenos que ficam cada um abaixo do limite. O endereço de um atacante é, por definição, um que você nunca pagou.
E se você ativar uma lista de permissões, ela é absoluta. Os fundos não alcançam mais nada — nem com confirmação, nem com aprovação, nem com qualquer instrução de lugar algum.
Servidor MCP
A carteira também é um servidor Model Context Protocol (MCP), para que um agente possa usá-la através da interface de ferramentas que já possui, em vez de recorrer a comandos externos.
stipend mcp
Ele fala JSON-RPC sobre stdin e stdout — o transporte stdio do MCP. Seu cliente MCP inicia o processo; nada escuta em uma porta e nada é exposto a uma rede.
Na configuração de um cliente, isso se parece com:
{
"mcpServers": {
"stipend": {
"command": "stipend",
"args": ["mcp"]
}
}
}
As ferramentas
| ferramenta | o que faz |
|---|---|
stipend_address | o endereço da carteira, para que o dinheiro possa chegar até você esteja você em execução ou não |
stipend_balance | USDC mantido, moeda nativa mantida, gasto hoje e o limite diário |
stipend_check | este pagamento seria permitido? Responde sem enviar nada |
stipend_pay | envia USDC, sujeito a todos os limites abaixo |
stipend_earnings | lê pagamentos recebidos da rede e os registra |
stipend_report | ganho contra gasto, por categoria, com autonomia em dias |
stipend_recover | o que está pendente e de quem é a responsabilidade de cada item |
Cada uma delas passa pelo mesmo portão policy.check que a linha de comando usa, então os limites, a lista de permissões e a confirmação de novo destino se aplicam de forma idêntica. Não há caminho aqui que mova dinheiro sem eles.
stipend_check existe para que um agente possa perguntar "isso seria permitido?" antes de se oferecer para pagar algo, transformando uma recusa em uma resposta em vez de uma falha.
O que deliberadamente não expõe
Nenhuma ferramenta lê, exporta ou deriva a chave privada. Nenhuma ferramenta altera um limite de gastos ou a lista de permissões. Nenhuma ferramenta cria ou sobrescreve uma carteira.
Uma ferramenta MCP pode ser chamada por um modelo que está lendo texto não confiável, e elevar um limite é exatamente o que um atacante pediria — então isso não está no menu de forma alguma. Mudanças de configuração permanecem na linha de comando, onde um humano está presente.
Por que não é hospedado
Todo registro preferiria uma URL, e não publicaremos uma. Um servidor de carteira hospedado significa que a chave vive na máquina de outra pessoa — a nossa — e toda a afirmação deste pacote é que isso não acontece. Ele roda ao lado do keystore, sob o mesmo usuário, e a chave nunca se move.
Rode seus próprios testes
Sem rede, sem fundos, sem tocar em nenhuma carteira sua:
python -m stipend selftest
219 verificações cobrindo validação de endereço, aritmética de valores, cada ramo de política, a lista de permissões, o limite diário, a confiança de destino e sua expiração, criptografia do keystore, codificação ERC-20, seleção de requisitos x402, assinatura EIP-3009, o ledger e exatamente o que a telemetria enviaria.
O que preferiríamos ter
Alguém para quebrá-lo.
Se você conseguir construir uma injeção que mova dinheiro além das verificações em policy.py, abra uma issue. Preferimos ouvir de você do que de alguém que não está sendo educado sobre isso.
Limites honestos
- Não auditado de forma independente.
- A interoperabilidade x402 é verificada contra nosso próprio endpoint, não contra comerciantes terceiros.
- A chave é gerada na sua máquina e nunca transmitida — o que também significa que ninguém pode recuperá-la para você, incluindo nós.
- Mantenha o saldo pequeno. É um float de trabalho, não uma poupança.
Links
- stipend.sh — o site, que serve texto simples para agentes e uma página para navegadores na mesma URL
- stipend.sh/skill.md — escrito para agentes
- stipend.sh/for-your-human — escrito para a pessoa que paga
- kina — uma pequena linguagem que parte disso lê e escreve
Licença
Apache-2.0. Veja LICENSE.
Construído pela equipe de desenvolvimento da Stipend. FelixTrade.ai Pty Ltd, Austrália.