claudepod 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -42,8 +42,7 @@
42
42
  ],
43
43
  "env": {
44
44
  "ODS_CONFIG_PATH": "/home/node/.claude/ods_config.json",
45
- "SEARXNG_ENGINE_API_BASE_URL": "http://localhost:8080/search",
46
- "DESIRED_TIMEZONE": "UTC"
45
+ "SEARXNG_ENGINE_API_BASE_URL": "http://localhost:80/search"
47
46
  }
48
47
  },
49
48
  "ref-tools": {
@@ -63,8 +63,7 @@
63
63
  "args": ["/usr/local/mcp-servers/searxng/mcp_server.py"],
64
64
  "env": {
65
65
  "ODS_CONFIG_PATH": "${ODS_CONFIG_PATH:-/home/node/.claude/ods_config.json}",
66
- "SEARXNG_ENGINE_API_BASE_URL": "${SEARXNG_ENGINE_API_BASE_URL:-http://localhost:8080/search}",
67
- "DESIRED_TIMEZONE": "${DESIRED_TIMEZONE:-UTC}"
66
+ "SEARXNG_ENGINE_API_BASE_URL": "${SEARXNG_ENGINE_API_BASE_URL:-http://localhost:80/search}"
68
67
  }
69
68
  }
70
69
  },
@@ -115,4 +114,4 @@
115
114
  }
116
115
  }
117
116
  }
118
- }
117
+ }
@@ -1,16 +1,22 @@
1
1
  {
2
- "searxng_engine_api_base_url": "http://localhost:8080/search",
2
+ "SEARXNG_ENGINE_API_BASE_URL": "http://localhost:80/search",
3
+ "searxng_engine_api_base_url": "http://localhost:80/search",
3
4
  "desired_timezone": "UTC",
4
- "returned_scrapped_pages_no": 3,
5
+ "returned_scrapped_pages_no": 2,
6
+ "scrapped_pages_no": 10,
7
+ "page_content_words_limit": 5000,
8
+ "citation_links": true,
9
+ "max_image_results": 10,
10
+ "max_video_results": 10,
11
+ "max_file_results": 5,
12
+ "max_map_results": 5,
13
+ "max_social_results": 5,
14
+ "trafilatura_timeout": 15,
15
+ "scraping_timeout": 30,
5
16
  "cache_maxsize": 1000,
17
+ "cache_ttl_minutes": 5,
18
+ "cache_max_age_minutes": 30,
6
19
  "rate_limit_requests_per_minute": 60,
7
- "scraping_timeout_seconds": 30,
8
- "search_timeout_seconds": 15,
9
- "user_agent": "ClaudePod/1.0 MCP-SearXNG-Enhanced",
10
- "default_search_categories": ["general"],
11
- "enable_content_scraping": true,
12
- "enable_pdf_reading": true,
13
- "max_search_results": 10,
14
- "search_language": "en-US",
15
- "fallback_language": "en"
16
- }
20
+ "rate_limit_timeout_seconds": 60,
21
+ "ignored_websites": ""
22
+ }
@@ -7,7 +7,7 @@
7
7
  # ============================================================================
8
8
 
9
9
  # SearXNG Instance Configuration
10
- SEARXNG_ENGINE_API_BASE_URL=http://localhost:8080/search
10
+ SEARXNG_ENGINE_API_BASE_URL=http://localhost:80/search
11
11
 
12
12
  # Timezone Configuration
13
13
  DESIRED_TIMEZONE=UTC
@@ -68,4 +68,4 @@ ENABLE_PDF_READING=true
68
68
  # SEARXNG_DEBUG=false
69
69
 
70
70
  # Custom SearXNG instance for testing (optional)
71
- # CUSTOM_SEARXNG_URL=http://localhost:8080/search
71
+ # CUSTOM_SEARXNG_URL=http://localhost:80/search
@@ -88,7 +88,7 @@ setup_searxng_config() {
88
88
  validate_searxng_connection() {
89
89
  echo "🔍 Validating SearXNG connection..."
90
90
 
91
- local searxng_url="${SEARXNG_ENGINE_API_BASE_URL:-http://localhost:8080/search}"
91
+ local searxng_url="${SEARXNG_ENGINE_API_BASE_URL:-http://localhost:80/search}"
92
92
 
93
93
  # Test connection to SearXNG instance
94
94
  if command -v curl >/dev/null 2>&1; then
@@ -111,7 +111,7 @@ setup_searxng_environment() {
111
111
 
112
112
  # Set default environment variables if not already set
113
113
  export ODS_CONFIG_PATH="${ODS_CONFIG_PATH:-/home/node/.claude/ods_config.json}"
114
- export SEARXNG_ENGINE_API_BASE_URL="${SEARXNG_ENGINE_API_BASE_URL:-http://localhost:8080/search}"
114
+ export SEARXNG_ENGINE_API_BASE_URL="${SEARXNG_ENGINE_API_BASE_URL:-http://localhost:80/search}"
115
115
  export DESIRED_TIMEZONE="${DESIRED_TIMEZONE:-America/New_York}"
116
116
 
117
117
  echo "📋 Environment variables configured:"
@@ -132,43 +132,199 @@ setup_searxng_local_instance() {
132
132
  fi
133
133
 
134
134
  local install_dir="${SEARXNG_LOCAL_INSTALL_DIR:-/opt/searxng-local}"
135
+ local temp_dir="/tmp/searxng-local-setup"
136
+ local repo_url="https://github.com/searxng/searxng-docker"
135
137
 
136
138
  # Ensure install directory exists with proper permissions
137
139
  sudo mkdir -p "$install_dir"
138
140
  sudo chown -R node:node "$install_dir"
139
141
  sudo chmod 755 "$install_dir"
140
142
 
141
- # Copy searxng-local configuration if it doesn't exist or is empty
143
+ # Install fresh SearXNG configuration from latest repository if it doesn't exist or is empty
142
144
  if [ ! -f "$install_dir/docker-compose.yaml" ] || [ ! -s "$install_dir/docker-compose.yaml" ]; then
143
- echo "📋 Copying SearXNG local configuration to persistent volume..."
145
+ echo "📥 Installing SearXNG from latest repository..."
144
146
 
145
- if [ -d "/workspace/searxng-local" ]; then
146
- # Copy entire searxng-local directory contents
147
- sudo cp -r /workspace/searxng-local/* "$install_dir/" 2>/dev/null || true
147
+ # Clean up any existing temp directory
148
+ if [ -d "$temp_dir" ]; then
149
+ rm -rf "$temp_dir"
150
+ fi
151
+
152
+ # Clone the latest SearXNG Docker repository
153
+ if git clone "$repo_url" "$temp_dir" 2>/dev/null; then
154
+ echo "✅ Successfully cloned SearXNG repository"
155
+
156
+ # Copy the necessary files from the repository
157
+ if [ -f "$temp_dir/docker-compose.yaml" ]; then
158
+ sudo cp "$temp_dir/docker-compose.yaml" "$install_dir/"
159
+ echo "✅ Installed docker-compose.yaml"
160
+ fi
161
+
162
+ if [ -f "$temp_dir/.env" ]; then
163
+ sudo cp "$temp_dir/.env" "$install_dir/"
164
+ echo "✅ Installed .env configuration"
165
+ fi
166
+
167
+ if [ -f "$temp_dir/Caddyfile" ]; then
168
+ sudo cp "$temp_dir/Caddyfile" "$install_dir/"
169
+ echo "✅ Installed Caddyfile"
170
+ fi
171
+
172
+ if [ -d "$temp_dir/searxng" ]; then
173
+ sudo cp -r "$temp_dir/searxng" "$install_dir/"
174
+ echo "✅ Installed SearXNG configuration directory"
175
+ fi
148
176
 
149
177
  # Ensure node user owns everything
150
178
  sudo chown -R node:node "$install_dir"
151
179
  sudo chmod -R u+rwX,g+rX "$install_dir"
152
180
 
153
- # Make sure docker-compose.yaml is properly copied
181
+ # Clean up temp directory
182
+ rm -rf "$temp_dir"
183
+
154
184
  if [ -f "$install_dir/docker-compose.yaml" ]; then
155
- echo "✅ SearXNG local configuration copied to $install_dir"
185
+ echo "✅ SearXNG local instance installed successfully from latest repository"
156
186
  else
157
- echo "⚠️ docker-compose.yaml not found after copy"
187
+ echo "❌ Failed to install docker-compose.yaml from repository"
158
188
  return 1
159
189
  fi
160
190
  else
161
- echo "⚠️ Source searxng-local directory not found in workspace"
191
+ echo " Failed to clone SearXNG repository from $repo_url"
162
192
  return 1
163
193
  fi
164
194
  else
165
195
  echo "📁 SearXNG local configuration already exists in $install_dir"
166
196
  fi
167
197
 
198
+ # Always configure SearXNG for local development (even if installation already exists)
199
+ configure_searxng_for_local_dev "$install_dir"
200
+
168
201
  echo "✅ SearXNG local instance setup complete"
169
202
  return 0
170
203
  }
171
204
 
205
+ configure_searxng_for_local_dev() {
206
+ local install_dir="$1"
207
+ echo "🔧 Configuring SearXNG for local development..."
208
+
209
+ # Fix Caddyfile if it exists as directory (from previous broken installations)
210
+ if [ -d "$install_dir/Caddyfile" ]; then
211
+ echo "🔧 Fixing Caddyfile directory issue..."
212
+ sudo rm -rf "$install_dir/Caddyfile"
213
+ # Re-download proper Caddyfile
214
+ local temp_dir="/tmp/searxng-caddyfile-fix"
215
+ if git clone "https://github.com/searxng/searxng-docker" "$temp_dir" 2>/dev/null; then
216
+ if [ -f "$temp_dir/Caddyfile" ]; then
217
+ sudo cp "$temp_dir/Caddyfile" "$install_dir/"
218
+ echo "✅ Fixed Caddyfile (was incorrectly a directory)"
219
+ fi
220
+ rm -rf "$temp_dir"
221
+ fi
222
+ fi
223
+
224
+ # Generate secure secret key
225
+ local secret_key=$(openssl rand -base64 32 2>/dev/null || echo "$(date +%s)-$(whoami)-$(hostname)" | base64)
226
+
227
+ # Create optimized settings.yml for local development
228
+ sudo tee "$install_dir/searxng/settings.yml" > /dev/null << EOF
229
+ use_default_settings: true
230
+ server:
231
+ secret_key: "$secret_key"
232
+ limiter: false
233
+ image_proxy: true
234
+ public_instance: false
235
+ bind_address: "0.0.0.0:8080"
236
+ method: "POST"
237
+ redis:
238
+ url: redis://redis:6379/0
239
+ search:
240
+ safe_search: 0
241
+ autocomplete: ""
242
+ default_lang: ""
243
+ ban_time_on_fail: 0
244
+ max_ban_time_on_fail: 0
245
+ formats: ['html', 'json']
246
+ general:
247
+ debug: false
248
+ instance_name: "SearXNG Local Development"
249
+ enabled_plugins: []
250
+ disabled_plugins: ['Hash plugin', 'Tracker URL remover', 'Hostnames plugin', 'Unit converter plugin', 'Self Information', 'Search on category select', 'Tor check plugin']
251
+ EOF
252
+
253
+ # Disable limiter configuration by renaming the file
254
+ if [ -f "$install_dir/searxng/limiter.toml" ]; then
255
+ sudo mv "$install_dir/searxng/limiter.toml" "$install_dir/searxng/limiter.toml.disabled"
256
+ echo "✅ Disabled SearXNG rate limiter"
257
+ fi
258
+
259
+ # Fix docker-compose.yaml network configuration for MCP compatibility
260
+ echo "🔧 Fixing docker-compose.yaml for MCP server compatibility..."
261
+ if [ -f "$install_dir/docker-compose.yaml" ]; then
262
+ # Replace network_mode: host with proper networks configuration
263
+ sudo sed -i 's/network_mode: host/networks:\
264
+ - searxng\
265
+ ports:\
266
+ - "80:80"\
267
+ - "443:443"/' "$install_dir/docker-compose.yaml"
268
+ echo "✅ Fixed docker-compose.yaml network configuration"
269
+ else
270
+ echo "⚠️ docker-compose.yaml not found, skipping network fix"
271
+ fi
272
+
273
+ # Fix Caddyfile proxy target and API paths for MCP compatibility
274
+ echo "🔧 Fixing Caddyfile for MCP server compatibility..."
275
+ if [ -f "$install_dir/Caddyfile" ]; then
276
+ # Replace localhost:8080 with searxng:8080 for container networking
277
+ sudo sed -i 's/reverse_proxy localhost:8080/reverse_proxy searxng:8080/' "$install_dir/Caddyfile"
278
+
279
+ # Add /search and / paths to @api matcher after /stats/checker
280
+ sudo sed -i '/path \/stats\/checker/a\\tpath \/search\
281
+ \tpath \/' "$install_dir/Caddyfile"
282
+ echo "✅ Fixed Caddyfile proxy target and API paths"
283
+ else
284
+ echo "⚠️ Caddyfile not found, skipping proxy fix"
285
+ fi
286
+
287
+ # Ensure proper ownership
288
+ sudo chown -R node:node "$install_dir"
289
+
290
+ echo "✅ SearXNG configured for local development (JSON API enabled, network fixed, no rate limiting)"
291
+ }
292
+
293
+ test_searxng_functionality() {
294
+ echo "🧪 Testing SearXNG functionality..."
295
+
296
+ local searxng_url="${SEARXNG_ENGINE_API_BASE_URL:-http://localhost:80/search}"
297
+
298
+ # Wait for services to be ready
299
+ local attempts=0
300
+ while [ $attempts -lt 30 ]; do
301
+ if curl -s --connect-timeout 5 "http://localhost:8080/" >/dev/null 2>&1; then
302
+ break
303
+ fi
304
+ sleep 2
305
+ ((attempts++))
306
+ done
307
+
308
+ if [ $attempts -eq 30 ]; then
309
+ echo "⚠️ SearXNG web interface not responding after 60 seconds"
310
+ return 1
311
+ fi
312
+
313
+ # Test web interface
314
+ if curl -s "http://localhost:8080/" | grep -qi "searxng"; then
315
+ echo "✅ SearXNG web interface accessible"
316
+ else
317
+ echo "⚠️ SearXNG web interface not working properly"
318
+ return 1
319
+ fi
320
+
321
+ # Note about API access - may require specific headers/form submission
322
+ echo "ℹ️ SearXNG installed and web interface working"
323
+ echo " API access may require proper form submission (not just GET requests)"
324
+
325
+ return 0
326
+ }
327
+
172
328
  start_searxng_local_instance() {
173
329
  echo "🚀 Starting SearXNG local instance..."
174
330
 
@@ -215,6 +371,9 @@ start_searxng_local_instance() {
215
371
  sleep 5
216
372
  if docker compose ps 2>/dev/null | grep -q "Up" || docker-compose ps 2>/dev/null | grep -q "Up"; then
217
373
  echo "🔍 SearXNG should be accessible at http://localhost:8080"
374
+
375
+ # Test functionality
376
+ test_searxng_functionality
218
377
  else
219
378
  echo "⚠️ Containers started but may need more time to initialize"
220
379
  echo " You can check status with: docker compose ps (in $install_dir)"
package/README.md CHANGED
@@ -19,7 +19,7 @@ ClaudePod is available as an npm package at [npmjs.com/package/claudepod](https:
19
19
  ```bash
20
20
  # Drop into any project
21
21
  cd your-project
22
- npx claudepod-devcontainer
22
+ npx claudepod
23
23
 
24
24
  # Fire it up
25
25
  devpod up .
@@ -60,8 +60,8 @@ ClaudePod ships with 8 MCP servers that turn Claude into a powerhouse:
60
60
  - **Sequential Thinking** - Structured problem-solving workflows
61
61
  - **ccusage** - Claude Code usage analytics and cost tracking
62
62
  - **SearXNG Enhanced** - Web search with content scraping
63
- - **GitHub MCP** - Complete GitHub API integration (API key optional)
64
- - **Tavily + Ref.Tools** - Web search and documentation tools (API keys optional)
63
+ - **GitHub MCP** - Complete GitHub API integration (API key required)
64
+ - **Tavily + Ref.Tools** - Web search and documentation tools (API keys required)
65
65
 
66
66
  **Tool Permissions**: When Claude first starts, it will ask permission to use these MCP tools. You can deny or allow specific tools based on your needs - this helps manage the large number of available tools (100+). Future versions will make this easier to configure.
67
67
 
@@ -126,6 +126,26 @@ REF_TOOLS_API_KEY=your-key
126
126
  ### The Good News
127
127
  ClaudePod is designed to be unbreakable. It uses smart configuration templates that preserve your customizations across container rebuilds.
128
128
 
129
+ ### System Prompt Customization
130
+
131
+ **Custom System Prompts** - ClaudePod includes a system prompt file that gets automatically loaded into Claude Code:
132
+
133
+ ```bash
134
+ # Edit the system prompt file
135
+ .devcontainer/config/claude/system-prompt.md
136
+ ```
137
+
138
+ This file allows you to add project-specific instructions, coding standards, or context that Claude should remember throughout your sessions. Changes are automatically applied when the container starts.
139
+
140
+ **Output Styles** - Claude Code's output styles can be paired with your custom system prompt for even more specialized behavior:
141
+
142
+ ```bash
143
+ # Create custom output styles in Claude Code
144
+ /output-style:new I want an output style that focuses on performance optimization
145
+ ```
146
+
147
+ Output styles modify Claude's system prompt to change how it responds - perfect for specialized workflows like code reviews, documentation writing, or educational contexts.
148
+
129
149
  ### Common Gotchas
130
150
 
131
151
  **Override Flags** - ClaudePod has environment variables like `OVERRIDE_CLAUDE_SETTINGS=true` that can overwrite your customizations. Only use these if you want to reset to defaults.
@@ -241,4 +261,4 @@ The GPL-3.0 is a copyleft license that ensures this software remains free and op
241
261
 
242
262
  ---
243
263
 
244
- **Ready to code with AI superpowers?** ClaudePod turns any project into an AI-native development environment.
264
+ **Ready to code with AI superpowers?** ClaudePod turns any project into an AI-native development environment.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claudepod",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Complete development container that sets up Claude Code with 8 powerful MCP servers, modern dev tools, and persistent configurations. Drop it into any project and get a production-ready AI development environment in minutes.",
5
5
  "main": "setup.js",
6
6
  "bin": {
@@ -1,77 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "serena": {
4
- "command": "uvx",
5
- "args": [
6
- "--from",
7
- "git+https://github.com/oraios/serena",
8
- "serena",
9
- "start-mcp-server",
10
- "--context",
11
- "ide-assistant",
12
- "--project",
13
- "/workspace",
14
- "--enable-web-dashboard",
15
- "false"
16
- ]
17
- },
18
- "deepwiki": {
19
- "type": "http",
20
- "url": "https://mcp.deepwiki.com/mcp"
21
- },
22
- "sequential-thinking": {
23
- "command": "uvx",
24
- "args": [
25
- "--from",
26
- "git+https://github.com/arben-adm/mcp-sequential-thinking.git",
27
- "--with",
28
- "portalocker",
29
- "mcp-sequential-thinking"
30
- ]
31
- },
32
- "ccusage": {
33
- "command": "ccusage",
34
- "args": [
35
- "mcp"
36
- ]
37
- },
38
- "searxng-enhanced": {
39
- "command": "python3",
40
- "args": [
41
- "/usr/local/mcp-servers/searxng/mcp_server.py"
42
- ],
43
- "env": {
44
- "ODS_CONFIG_PATH": "/home/node/.claude/ods_config.json",
45
- "SEARXNG_ENGINE_API_BASE_URL": "http://localhost:8080/search",
46
- "DESIRED_TIMEZONE": "UTC"
47
- }
48
- },
49
- "ref-tools": {
50
- "type": "http",
51
- "url": "https://api.ref.tools/mcp?apiKey=ref-23a0788cef18edde68af",
52
- "env": {
53
- "REF_TOOLS_API_KEY": "ref-23a0788cef18edde68af"
54
- }
55
- },
56
- "github": {
57
- "command": "docker",
58
- "args": [
59
- "run",
60
- "--rm",
61
- "-i",
62
- "-e",
63
- "GITHUB_PERSONAL_ACCESS_TOKEN=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",
64
- "-e",
65
- "GITHUB_API_URL=",
66
- "-e",
67
- "GITHUB_TOOLSET=",
68
- "ghcr.io/github/github-mcp-server:latest"
69
- ],
70
- "env": {
71
- "GITHUB_PERSONAL_ACCESS_TOKEN": "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",
72
- "GITHUB_API_URL": "",
73
- "GITHUB_TOOLSET": ""
74
- }
75
- }
76
- }
77
- }