1DOLLY 72APPLICATION closed-source-agent3REQUIRES HOST runtime@04REQUIRES HOST display@05REQUIRES HOST audio@06REQUIRES HOST download@07REQUIRES HOST http@08REQUIRES HOST input@09REQUIRES HOST packages@010REQUIRES HOST snapshot@011REQUIRES HOST threads@012REQUIRES HOST touch@013REQUIRES HOST upload@01415# Runs Claude Code, which the launcher downloads from the npm registry into16# the session after the notice: the image holds nothing of it.17FROM /v0.1.4/Dollyfile-system 915c71d4ce772989e3076060967824e48ccd6a1a6259624fe6213542df088dbc18INSTALL /v0.1.4/Dollyfile-amy 90701fe1be537fae9f0e376f2dcfda377c019426cdbab48faeb9107f91bcb6de19INSTALL /v0.1.4/demos/javascript/Dollyfile-janis-install 0cb0afe788a87320a637319fa39ea67187922a182f5cf1d9d031d6d3e99c902d20INSTALL /v0.1.4/demos/closed-source-agent/Dollyfile-secretenv 35c345a221b4a5e10a2200147d7276ae75737f2f69881eddc9f4d327705dc5ab21INSTALL /v0.1.4/demos/rust/Dollyfile-ripgrep aa5afce6b980ec9f6f338e2578d4297f4664dfb07e4a61cb2230a9e678e56afb22REQUIRES TOOL cc23REQUIRES TOOL foreground24REQUIRES TOOL janis25REQUIRES TOOL janis-install26REQUIRES TOOL rg2728# anykey PROMPT discards earlier input, shows PROMPT and prints the one key it29# then reads from the terminal; Ctrl+C is status 130.30FILE /tmp/anykey.c31    #include <string.h>32    #include <termios.h>33    #include <unistd.h>34    int main(int argc, char **argv) {35      struct termios cooked, raw;36      if (argc != 2 || tcgetattr(0, &cooked) != 0) return 2;37      raw = cooked;38      raw.c_lflag &= ~(ICANON | ECHO | ISIG);39      raw.c_cc[VMIN] = 1;40      raw.c_cc[VTIME] = 0;41      if (tcsetattr(0, TCSAFLUSH, &raw) != 0) return 1;42      write(2, argv[1], strlen(argv[1]));43      char key;44      const long count = read(0, &key, 1);45      tcsetattr(0, TCSAFLUSH, &cooked);46      if (count != 1) return 1;47      if (key == 3) return 130;48      return write(1, &key, 1) == 1 ? 0 : 1;49    }50SLOP cc -O1 /tmp/anykey.c -o /usr/bin/anykey51EXPORTS TOOL anykey5253FILE /usr/share/doc/closed-source-agent/NOTICE54    THIS IMAGE RUNS CLAUDE CODE55    ---------------------------56    Claude Code is Anthropic's command-line coding agent. It is Anthropic's57    software and not part of Dolly; Dolly is not affiliated with or endorsed by58    Anthropic.59    - Continuing downloads Claude Code 2.1.112 (April 2026, 18.7 MB) from the60      npm registry into this browser session, checks its digest and runs it61      unchanged. This site serves nothing of it. Its use is subject to62      Anthropic's terms: https://code.claude.com/docs/en/legal-and-compliance63    - Its interface works here with your own Anthropic API key, in its minimal64      mode (--bare): no hooks, LSP, plugin sync, attribution, auto-memory,65      background prefetches, keychain reads or CLAUDE.md discovery, and only66      the Read, Edit and Bash tools. The key is asked for once, is not shown67      and is given to Claude Code alone. Usage is billed to you. Requests go68      from this browser to Anthropic; the site serving Dolly does not receive69      them.70    - Signing in with a Claude or Console account does not work in a browser:71      started as published, Claude Code stops at "Unable to connect to72      Anthropic services" before its sign-in screen, and its /login needs a73      local callback server that nothing here can run.74    - Print mode works: export ANTHROPIC_API_KEY=... and then75      closed-source-agent -p 'your request'76    - A saved or exported session contains the downloaded package and what77      Claude Code stored of your sign-in (the last 20 characters of the key).78    - Limits: an old release (the last that is JavaScript), run on Janis79      instead of Node; its Bash tool finds no shell here; a wrong key shows80      the API's error only after about three minutes of its own retries.8182# Shows the notice, installs Claude Code into the session (once) from its83# tarball at the pinned integrity and runs it unchanged: with the arguments84# given, or without any as the notice's key chose.85FILE /usr/bin/closed-source-agent86    #!/bin/slop87    package=/usr/lib/node_modules/@anthropic-ai/claude-code88    start=89    if test $# -eq 0 || ! test -s $package/cli.js; then90      clear91      cat /usr/share/doc/closed-source-agent/NOTICE92      keys=$'\nEnter (or any other key): download and start with an API key (--bare)\np: start as published        Ctrl+C: leave without downloading\n'93      test $# -eq 0 || keys=$'\nAny key: download and run it with your arguments        Ctrl+C: leave\n'94      start=$(anykey "$keys") || exit $?95    fi96    if ! test -s $package/cli.js; then97      printf '\nDownloading Claude Code 2.1.112 from registry.npmjs.org ...\n'98      janis-install --integrity sha512-9FUgJ0EOvILyhIqxFKNVliebiUjL68dwpEW3eGSSe0vkVDJ1c5qMDNWc22gW3zkD7zRAqtfQPSGv0t4vMM2DPA== @anthropic-ai/claude-code@2.1.112 || exit 199    fi100    export USE_BUILTIN_RIPGREP=0101    if test $# -gt 0 || test "$start" = p; then102      janis $package/cli.js "$@"103    elif test -n "$ANTHROPIC_API_KEY"; then104      janis $package/cli.js --bare105    else106      secretenv ANTHROPIC_API_KEY $'\nAnthropic API key (not shown; Enter alone starts without one): ' janis $package/cli.js --bare107    fi108EXPORTS TOOL closed-source-agent109110FILE /etc/dolly/init.slop111    cd /workspace112    /bin/foreground -i /usr/bin/closed-source-agent113    printf '\nDolly: image entry exited; entering the recovery Slop shell. closed-source-agent starts it again.\n'114    /bin/foreground -i /bin/slop115116ENTRY /bin/foreground -i /bin/slop /etc/dolly/init.slop117