the universal sandbox runtime for agents and humans. pocketenv.io
sandbox openclaw agent claude-code vercel-sandbox deno-sandbox cloudflare-sandbox atproto sprites daytona
7
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add ssh-keyscan entries for tangled and GitHub

Ensure ~/.ssh/known_hosts contains RSA keys for tangled.org and
github.com
and remove existing known_hosts in container contexts before appending
to avoid duplicates

+25 -3
+8 -3
apps/api/src/tty/index.tsx
··· 149 149 await writeFile("/home/sprite/.ssh/id_ed25519.pub", publicKey); 150 150 await sprite.execFile("chmod", ["600", "/home/sprite/.ssh/id_ed25519"]); 151 151 await sprite.execFile("chmod", ["644", "/home/sprite/.ssh/id_ed25519.pub"]); 152 - await sprite.execFile("chmod", [ 153 - "644", 154 - "/home/sprite/.ssh/authorized_keys", 152 + await sprite.execFile("rm -f /home/sprite/.ssh/known_hosts"); 153 + await sprite.execFile("bash", [ 154 + "-c", 155 + "ssh-keyscan -t rsa tangled.org >> /home/sprite/.ssh/known_hosts", 156 + ]); 157 + await sprite.execFile("bash", [ 158 + "-c", 159 + "ssh-keyscan -t rsa github.com >> /home/sprite/.ssh/known_hosts", 155 160 ]); 156 161 }; 157 162
+2
apps/cf-sandbox/src/providers/cloudflare/index.ts
··· 76 76 await this.writeFile(`${HOME}/.ssh/id_ed25519`, privateKey); 77 77 await this.writeFile(`${HOME}/.ssh/id_ed25519.pub`, publicKey); 78 78 await this.sh`chmod 600 $HOME/.ssh/id_ed25519`; 79 + await this.sh`ssh-keyscan -t rsa tangled.org >> $HOME/.ssh/known_hosts`; 80 + await this.sh`ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts`; 79 81 } 80 82 81 83 async setupTailscale(authKey: string): Promise<void> {
+2
apps/sandbox/src/providers/daytona/mod.ts
··· 64 64 await this.writeFile("~/.ssh/id_ed25519.pub", publicKey); 65 65 await this.sh`chmod 600 ~/.ssh/id_ed25519`; 66 66 await this.sh`chmod 644 ~/.ssh/id_ed25519.pub`; 67 + await this.sh`ssh-keyscan -t rsa tangled.org >> $HOME/.ssh/known_hosts`; 68 + await this.sh`ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts`; 67 69 } 68 70 69 71 async setupTailscale(authKey: string): Promise<void> {
+2
apps/sandbox/src/providers/deno/mod.ts
··· 74 74 await this.writeFile("~/.ssh/id_ed25519.pub", publicKey); 75 75 await this.sh`chmod 600 ~/.ssh/id_ed25519`; 76 76 await this.sh`chmod 644 ~/.ssh/id_ed25519.pub`; 77 + await this.sh`ssh-keyscan -t rsa tangled.org >> $HOME/.ssh/known_hosts`; 78 + await this.sh`ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts`; 77 79 } 78 80 79 81 async setupTailscale(authKey: string): Promise<void> {
+9
apps/sandbox/src/providers/sprites/mod.ts
··· 64 64 "600", 65 65 "/home/sprite/.ssh/id_ed25519", 66 66 ]); 67 + await this.sprite.execFile("rm -f /home/sprite/.ssh/known_hosts"); 67 68 await this.sprite.execFile("chmod", [ 68 69 "644", 69 70 "/home/sprite/.ssh/id_ed25519.pub", 71 + ]); 72 + await this.sprite.execFile("bash", [ 73 + "-c", 74 + "ssh-keyscan -t rsa tangled.org >> /home/sprite/.ssh/known_hosts", 75 + ]); 76 + await this.sprite.execFile("bash", [ 77 + "-c", 78 + "ssh-keyscan -t rsa github.com >> /home/sprite/.ssh/known_hosts", 70 79 ]); 71 80 } 72 81
+2
apps/sandbox/src/providers/vercel/mod.ts
··· 61 61 await this.writeFile("~/.ssh/id_ed25519.pub", publicKey); 62 62 await this.sh`chmod 600 ~/.ssh/id_ed25519`; 63 63 await this.sh`chmod 644 ~/.ssh/id_ed25519.pub`; 64 + await this.sh`ssh-keyscan -t rsa tangled.org >> $HOME/.ssh/known_hosts`; 65 + await this.sh`ssh-keyscan -t rsa github.com >> $HOME/.ssh/known_hosts`; 64 66 } 65 67 66 68 async setupTailscale(authKey: string): Promise<void> {