@@ -17,6 +17,12 @@ ARG_DANGEROUSLY_SKIP_PERMISSIONS=${ARG_DANGEROUSLY_SKIP_PERMISSIONS:-}
1717ARG_PERMISSION_MODE=${ARG_PERMISSION_MODE:- }
1818ARG_WORKDIR=${ARG_WORKDIR:- " $HOME " }
1919ARG_AI_PROMPT=$( echo -n " ${ARG_AI_PROMPT:- } " | base64 -d)
20+ ARG_ENABLE_BOUNDARY=${ARG_ENABLE_BOUNDARY:- false}
21+ ARG_BOUNDARY_VERSION=${ARG_BOUNDARY_VERSION:- " main" }
22+ ARG_BOUNDARY_LOG_DIR=${ARG_BOUNDARY_LOG_DIR:- " /tmp/boundary_logs" }
23+ ARG_BOUNDARY_LOG_LEVEL=${ARG_BOUNDARY_LOG_LEVEL:- " WARN" }
24+ ARG_BOUNDARY_PROXY_PORT=${ARG_BOUNDARY_PROXY_PORT:- " 8087" }
25+ ARG_CODER_HOST=${ARG_CODER_HOST:- }
2026
2127echo " --------------------------------"
2228
@@ -27,6 +33,12 @@ printf "ARG_DANGEROUSLY_SKIP_PERMISSIONS: %s\n" "$ARG_DANGEROUSLY_SKIP_PERMISSIO
2733printf " ARG_PERMISSION_MODE: %s\n" " $ARG_PERMISSION_MODE "
2834printf " ARG_AI_PROMPT: %s\n" " $ARG_AI_PROMPT "
2935printf " ARG_WORKDIR: %s\n" " $ARG_WORKDIR "
36+ printf " ARG_ENABLE_BOUNDARY: %s\n" " $ARG_ENABLE_BOUNDARY "
37+ printf " ARG_BOUNDARY_VERSION: %s\n" " $ARG_BOUNDARY_VERSION "
38+ printf " ARG_BOUNDARY_LOG_DIR: %s\n" " $ARG_BOUNDARY_LOG_DIR "
39+ printf " ARG_BOUNDARY_LOG_LEVEL: %s\n" " $ARG_BOUNDARY_LOG_LEVEL "
40+ printf " ARG_BOUNDARY_PROXY_PORT: %s\n" " $ARG_BOUNDARY_PROXY_PORT "
41+ printf " ARG_CODER_HOST: %s\n" " $ARG_CODER_HOST "
3042
3143echo " --------------------------------"
3244
@@ -35,6 +47,14 @@ echo "--------------------------------"
3547# avoid exiting if the script fails
3648bash " /tmp/remove-last-session-id.sh" " $( pwd) " 2> /dev/null || true
3749
50+ function install_boundary() {
51+ # Install boundary from public github repo
52+ git clone https://github.com/coder/boundary
53+ cd boundary
54+ git checkout $ARG_BOUNDARY_VERSION
55+ go install ./cmd/...
56+ }
57+
3858function validate_claude_installation() {
3959 if command_exists claude; then
4060 printf " Claude Code is installed\n"
@@ -76,7 +96,47 @@ function start_agentapi() {
7696 fi
7797 fi
7898 printf " Running claude code with args: %s\n" " $( printf ' %q ' " ${ARGS[@]} " ) "
79- agentapi server --type claude --term-width 67 --term-height 1190 -- claude " ${ARGS[@]} "
99+
100+ if [ " ${ARG_ENABLE_BOUNDARY:- false} " = " true" ]; then
101+ install_boundary
102+
103+ mkdir -p " $ARG_BOUNDARY_LOG_DIR "
104+ printf " Starting with coder boundary enabled\n"
105+
106+ # Build boundary args with conditional --unprivileged flag
107+ BOUNDARY_ARGS=(--log-dir " $ARG_BOUNDARY_LOG_DIR " )
108+ # Add default allowed URLs
109+ BOUNDARY_ARGS+=(--allow " *anthropic.com" --allow " registry.npmjs.org" --allow " *sentry.io" --allow " claude.ai" --allow " $ARG_CODER_HOST " )
110+
111+ # Add any additional allowed URLs from the variable
112+ if [ -n " $ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS " ]; then
113+ IFS=' ' read -ra ADDITIONAL_URLS <<< " $ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS"
114+ for url in " ${ADDITIONAL_URLS[@]} " ; do
115+ BOUNDARY_ARGS+=(--allow " $url " )
116+ done
117+ fi
118+
119+ # Set HTTP Proxy port used by Boundary
120+ BOUNDARY_ARGS+=(--proxy-port $ARG_BOUNDARY_PROXY_PORT )
121+
122+ # Set log level for boundary
123+ BOUNDARY_ARGS+=(--log-level $ARG_BOUNDARY_LOG_LEVEL )
124+
125+ # Remove --dangerously-skip-permissions from ARGS when using boundary (it doesn't work with elevated permissions)
126+ # Create a new array without the dangerous permissions flag
127+ CLAUDE_ARGS=()
128+ for arg in " ${ARGS[@]} " ; do
129+ if [ " $arg " != " --dangerously-skip-permissions" ]; then
130+ CLAUDE_ARGS+=(" $arg " )
131+ fi
132+ done
133+
134+ agentapi server --allowed-hosts=" *" --type claude --term-width 67 --term-height 1190 -- \
135+ sudo -E env PATH=$PATH setpriv --inh-caps=+net_admin --ambient-caps=+net_admin --bounding-set=+net_admin boundary " ${BOUNDARY_ARGS[@]} " -- \
136+ claude " ${CLAUDE_ARGS[@]} "
137+ else
138+ agentapi server --type claude --term-width 67 --term-height 1190 -- claude " ${ARGS[@]} "
139+ fi
80140}
81141
82142validate_claude_installation
0 commit comments