Askew
Execute Atalhos do Apple no seu iPhone, iPad ou Mac a partir de qualquer cliente MCP (Claude Code, Claude Desktop, Cursor, Codex) por meio de um relay criptografado de ponta a ponta. O telefone pode permanecer bloqueado.
Documentação
askew-mcp
Deixe qualquer agente de IA usar seu iPhone. askew-mcp é o conector local para Askew: um servidor MCP (stdio) que permite ao Claude Code, Claude Desktop, Cursor, Codex ou qualquer cliente MCP executar Atalhos no seu iPhone, enviar notificações para você e ler o que o telefone envia de volta. O iPhone pode permanecer bloqueado. A série 0.2 adiciona seleção explícita de dispositivo e destinos Mac locais atribuídos. Entradas de trabalhos de dispositivo, resultados e itens da caixa de entrada são selados com sua chave antes de chegar ao relay. Os uploads de receitas têm um limite separado de texto simples descrito abaixo.
Relay de iPhone e destinos macOS locais; validação em segundo plano de iPad físico está pendente. Sem Android. O aplicativo Askew está atualmente em lista de espera em https://askew.my
Guia de configuração completo: Inglês · 한국어 · 中文 · 日本語
1. Obtenha uma chave de conector
No aplicativo Askew no seu iPhone: Configurações → Registrar dispositivo → permitir notificações → Novo conector. Copie a chave (akc_…). Ela é exibida apenas uma vez.
2. Adicione o conector ao seu agente
Claude Code
claude mcp add askew -s user -e ASKEW_CONNECTOR_KEY=akc_XXXX -- npx -y askew-mcp
Claude Desktop / Cursor / qualquer cliente MCP (claude_desktop_config.json, .cursor/mcp.json, …)
{
"mcpServers": {
"askew": {
"command": "npx",
"args": ["-y", "askew-mcp"],
"env": { "ASKEW_CONNECTOR_KEY": "akc_XXXX" }
}
}
}
Codex CLI (~/.codex/config.toml)
[mcp_servers.askew]
command = "npx"
args = ["-y", "askew-mcp"]
env = { ASKEW_CONNECTOR_KEY = "akc_XXXX" }
A primeira chamada de ferramenta autenticada cria ~/.askew/connector.key (chave privada X25519, modo 0600), registra a chave pública no relay e imprime uma impressão digital como seis palavras no stderr, como cider grove desert fever city burger. Abra a tela do conector no aplicativo e verifique se as mesmas seis palavras estão lá, depois toque em 확인함 / Verificado. Essa única verificação descarta um relay trocado. Até que você faça isso, o aplicativo mostra o conector como não verificado, e seu agente é instruído a pedir isso a você.
npx -y askew-mcp fingerprint # print this computer's six fingerprint words
3. Instale o despachante no telefone
Na aba Atalhos (단축어) do aplicativo, instale o despachante Askew (folha de compartilhamento → Atalhos → Adicionar), abra-o e ative o toggle de Automação no topo. Com o telefone desbloqueado, execute um push de teste em Configurações → Checkup e toque em Sempre Permitir. Um toggle, uma permissão, uma vez. Depois adicione receitas (Calendário, Lembretes, Notas, …) da mesma forma e peça ao seu agente:
"Adicione dentista quinta-feira às 15h ao meu calendário do telefone."
Escolha um dispositivo ou este Mac
Chame askew_list_routes e selecione uma entrada targets habilitada. Omitir target usa o dispositivo padrão da rota; não há transmissão. O telefone gerencia as atribuições de destino. Para executar um Atalho já instalado neste Mac, use:
{"routeId":"route-id-from-list","target":{"kind":"connector","id":"this-connector-id"},"input":{"text":"hello"}}
Use o contrato de entrada real dessa rota. O ID do conector deve corresponder ao impresso por askew_list_routes; este processo não pode ser executado em outro Mac. O destino e a rota devem estar ambos habilitados. A execução local requer macOS, uma conexão de relay autenticada para ler atribuições e o snapshot de parada de emergência, e executionMode: "auto". Uma conta parada ou um servidor sem o campo de estado de parada bloqueia a execução local. A parada é verificada antes do despacho; ela não pode desfazer efeitos de um Atalho já em execução.
askew_run local resolve o nome exato do Atalho para um identificador instalado único, executa uma vez e retorna o resultado diretamente ao cliente MCP. Entrada e saída permanecem neste Mac; não cria trabalho de servidor, cobrança de uso, histórico de execução no servidor ou atualização de último sucesso. wait aplica-se apenas a trabalhos de dispositivo: a execução no Mac aguarda até 60 segundos e retorna um ID de trabalho local_…. askew_get_run lê esse ID do diário local deste conector (sem long-polling). Um timeout/falha pode seguir efeitos parciais; nunca tenta novamente automaticamente. O modo de suspensão do Mac pode impedir a execução.
Rotas em modo de confirmação exigem um fluxo humano que este executor local não implementa, então são rejeitadas antes de executar. Para execuções automáticas no Mac, forneça um idempotencyKey estável (1–200 caracteres). O conector salva uma reserva durável antes do despacho. Repetir a mesma solicitação retorna o resultado salvo; entradas alteradas, rota ou nome de Atalho conflitam. Um processo interrompido ou falha incerta permanece unknown e nunca é reexecutado com essa chave. Solicitações sem chave são execuções independentes. Não remova/altere uma chave e tente novamente cegamente uma tentativa incerta; inspecione seus efeitos primeiro.
O histórico local é armazenado em local-runs/ ao lado de ASKEW_KEY_PATH (normalmente ~/.askew/local-runs), separado por identidade do conector e chave pública. Registros, resultados e resumos de solicitações são criptografados com a chave do conector; entrada bruta não é retida. Os arquivos são privados ao usuário do SO local. Os registros são mantidos até serem removidos manualmente: remover o diário perde a proteção de nova tentativa, e perder a chave privada perde o acesso a resultados antigos. Mantenha a mesma chave e diário ao reiniciar. O histórico local está disponível por ID de execução e não é sincronizado com o telefone ou relay.
Uploads de receitas e revisão
Busca/construção local não precisa de chave de conector ou conexão de relay. askew_recipe_build requer macOS para assinatura. Seu verify: true padrão importa e executa o novo Atalho neste Mac, o que pode causar quaisquer efeitos que suas ações executem; escolha isso apenas quando esses efeitos forem autorizados. verify: false assina sem importar ou executar. A Apple recebe o fluxo de trabalho ao assinar (documentação da Apple). Uma execução bem-sucedida não prova correção ou segurança.
sendToPhone: true conecta-se ao relay apenas após uma construção bem-sucedida. Isso envia o arquivo assinado e o fluxo de trabalho em texto simples, que pode conter dados pessoais literais ou segredos. Este caminho está fora do canal criptografado de trabalho/resultado/caixa de entrada. Não incorpore valores sensíveis em uma receita compartilhada. A saída da execução local é retornada ao cliente MCP, mas nunca é enviada como metadados de receita. Clientes mais antigos que enviam texto verifiedRun devem atualizar.
O relay verifica a estrutura básica do arquivo e fornece dicas estáticas do fluxo de trabalho enviado separadamente. Ele não verifica a assinatura do arquivo nem estabelece que as dicas descrevem o arquivo. Cada receita de agente permanece não verificada. Em Askew › Minhas Coisas, reconheça que você inspecionará as ações reais, permissões e destinos nos Atalhos antes de adicioná-la. Baixar um arquivo não é confirmação de que foi instalado.
Ferramentas (11)
| Ferramenta | O que faz |
|---|---|
askew_actions_search | Busca 539 definições de ações e chaves de parâmetros localmente |
askew_recipe_build | Construir/assinar no macOS, opcionalmente instalar/executar localmente, opcionalmente enviar para revisão manual no iPhone |
askew_run | Executa uma rota de dispositivo atribuída através do relay criptografado, ou um destino de modo automático habilitado neste Mac localmente |
askew_get_run | Status e resultado de um trabalho |
askew_list_routes | Rotas, dispositivos, modo de conexão |
askew_notify | Notificação para o telefone + caixa de resultados (agente → pessoa, unidirecional). Com vários telefones/iPads, escolha deviceId ou passe allDevices: true |
askew_inbox_list / askew_inbox_wait / askew_inbox_ack | Lê o que o telefone enviou (aguarda até 30 s), depois confirma |
askew_variables_get / askew_variables_set | Variáveis compartilhadas com o telefone, seladas com a chave da conta |
Itens da caixa de entrada sempre retornam marcados como dados enviados pelo telefone do usuário, não instruções.
Ambiente
| Variável | Padrão | |
|---|---|---|
ASKEW_CONNECTOR_KEY | — | obrigatória para destinos Mac de relay/atribuídos; opcional para busca de ações local e construção de receitas |
ASKEW_SERVER | https://api.askew.my | URL do relay (http://localhost:8787 para desenvolvimento local) |
ASKEW_KEY_PATH | ~/.askew/connector.key | onde a chave privada reside |
Requer Node 22 ou mais recente.
Privacidade
Entradas de trabalhos, resultados, corpos de notificações, itens da caixa de entrada e variáveis são criptografados de ponta a ponta (HPKE, X25519) entre este conector e o telefone. Para esses canais, o relay armazena envelopes criptografados e metadados como nomes de rotas, timestamps e status. Execuções locais no Mac mantêm sua entrada/resultado neste computador. Arquivos de receitas enviados e literais de fluxo de trabalho são texto simples; a saída de teste de receita local é excluída. Detalhes: https://askew.my/#privacy
Desenvolvimento
Fonte: https://github.com/Dominic-DK/askew-mcp (issues e pull requests são bem-vindos). O conector é a única parte do Askew que detém sua chave, então é a parte que você pode ler.
git clone https://github.com/Dominic-DK/askew-mcp.git && cd askew-mcp
pnpm install
pnpm build # tsc → dist/
pnpm test # crypto, stdio/local relay mocks, target authorization; no real Shortcuts run
ASKEW_SERVER=http://localhost:8787 ASKEW_CONNECTOR_KEY=akc_XXXX pnpm dev # run from source
src/crypto.ts é o formato completo do envelope: HPKE (X25519 + HKDF-SHA256 + ChaCha20-Poly1305) com o propósito vinculado como info, e uma caixa ChaCha20-Poly1305 chaveada pela chave da conta para variáveis compartilhadas, com o nome da variável como AAD.
한국어
에이전트(Claude Code · Claude 데스크톱 · Cursor · Codex)가 아이폰을 도구로 쓰게 하는 로컬 커넥터입니다. 아이폰 앱 → 설정 → 새 커넥터 만들기 → 키(akc_…)를 복사한 뒤 위 명령 중 하나로 등록하세요. 첫 릴레이 도구 호출에 단어 6개가 찍힙니다(예: cider grove desert fever city burger). 앱 커넥터 화면에 같은 단어가 보이면 "확인함"을 누르세요. 한 번만 하면 됩니다. 그다음 앱 단축어 탭에서 디스패처를 설치(공유 시트 → 단축어 → 추가 → 자동화 토글 켜기 → 잠금 해제 상태 테스트 푸시 1회 "항상 허용")하면 잠긴 폰에서도 단축어가 돕니다. 0.2 소스에는 대상 기기 선택과 이 맥의 로컬 실행이 추가됐습니다. 아직 발행 전이며 iPad 백그라운드 동작은 실기기 검증이 남았습니다. 맥 대상은 폰에서 지정하고, 확인 후 실행·멱등 키는 로컬 실행에서 지원하지 않아 실행 전에 거절합니다. Android는 계획에 없습니다.