Automated setup powered by AI. Connect to your server via SSH and let Claude analyze your codebase to automatically discover APIs, detect secrets, and create routes.
Skip manual setup. The AI Onboarding Agent connects to your server via SSH, analyzes your codebase, discovers API integrations, detects credentials, and creates all necessary KnoxCall resources through a conversational interface.
The agent will greet you and explain what it’s doing:
Agent: Hello! I'll scan your codebase to discover API integrations. I've found 3 repositories to analyze. Starting scan...Agent: Found 47 API calls in your code. Let me classify them...Agent: I discovered calls to: - Stripe API (15 endpoints) - Twilio API (8 endpoints) - SendGrid API (5 endpoints) Are these external APIs you want to proxy through KnoxCall?You: Yes, all of themAgent: Great! I also found credentials in your .env files: - STRIPE_SECRET_KEY - TWILIO_AUTH_TOKEN - SENDGRID_API_KEY Should I create secrets for these?You: Yes please
✅ Created collection: Payment APIs✅ Created secret: stripe_secret_key✅ Created route: Stripe Charges API✅ Created route: Stripe Customers API... (continues for all resources)✅ Created client: Production Server✅ Linked client to all routesDone! Created 28 routes, 3 secrets, 2 collections, and 1 client.
Agent: I found calls to api.internal-analytics.com Is this an external service or your own infrastructure?You: That's our own service, skip itAgent: Got it, I'll ignore api.internal-analytics.com
Handle ambiguity:
Agent: The endpoint "POST /payments" is called with different base URLs in different files: - https://api.stripe.com (prod) - https://api-sandbox.stripe.com (dev) Should I create separate routes or use environments?You: Use environmentsAgent: Perfect, I'll create one route with production and development environments
Provide context:
You: Why do you need my Stripe key?Agent: I detected 15 Stripe API calls in your code at: - /var/www/api/payment.php (lines 45, 67, 89) - /var/www/api/subscriptions.php (lines 23, 56) The STRIPE_SECRET_KEY from your .env file will be stored encrypted and injected when proxying these calls. You can choose not to import it if you prefer manual setup.
Clone an existing session to re-scan the same server:
Use case: You've updated your code and want to discover new APIs without re-entering connection details.1. Go to previous onboarding session2. Click "Re-analyze"3. Credentials are NOT saved - enter password again4. Agent runs fresh analysis with updated code
Agent: I can create these collections: - Payment APIs (Stripe, PayPal) - Communication (Twilio, SendGrid) - Data Storage (AWS S3, Google Cloud Storage)You: Create separate collections for each serviceAgent: ✅ Will create 5 collections instead of 3 ORYou: Put everything in one collection called "Production APIs"Agent: ✅ All routes in single collection "Production APIs"
The agent can configure environments during creation:
Agent: I found these endpoint patterns: Production: https://api.stripe.com Sandbox: https://api-sandbox.stripe.com (in test files) Create environments for both?You: YesAgent: ✅ Creating routes with "production" and "sandbox" environments You'll need to configure sandbox credentials later
Solution:1. Verify SSH is enabled on server2. Check port (default 22)3. Confirm firewall allows connection from KnoxCall IPs4. Test: ssh username@host -p 22
Problem: “Authentication failed”
Solution:1. Verify username is correct2. Test password/key locally first3. For keys: ensure PEM format (not PPK)4. Check key passphrase if encrypted
Problem: “Permission denied when reading files”
Solution:1. Ensure SSH user has read access to code directories2. Check: ls -la /var/www/yourapp3. May need to add user to www-data group: sudo usermod -a -G www-data deploy
Possible causes:1. Code uses indirect API calls (variables instead of strings)2. Selected wrong directory (no source code)3. Unsupported language/frameworkSolution:- Manually review files at: /var/www/yourapp/src- Look for API client initialization- Check if framework uses config files instead of inline URLs
Problem: “Too many false positives”
Agent detected internal URLs as external APIsSolution:- Use bulk domain classification- Mark internal domains as "skip"- Agent learns: skips similar patterns
Problem: “Secret values not detected”
Agent found .env files but no secretsPossible causes:1. Environment variables loaded at runtime (not in files)2. Secrets stored in external vault (AWS Secrets Manager, etc.)3. Config files in non-standard locationsSolution:- Manually create secrets after onboarding- Point agent to custom config directories
Solution:1. Check SSH connection status2. Refresh page (agent state persists)3. Send a message to wake agent4. Check /var/www/knoxcall/logs for errors
Problem: “Agent is stuck in a loop”
Agent keeps asking same questionSolution:1. Answer with specific details: ❌ "yes" ✅ "Yes, all Stripe endpoints are external"2. If unclear, ask agent: "What do you need from me?"3. Last resort: restart session (data preserved)
POST /admin/onboarding/sessions/{id}/messages{ "content": "Yes, create all routes"}
Stream Events (SSE):
GET /admin/onboarding/sessions/{id}/stream?token={jwt}Events:- agent.message: Agent sent a message- agent.thinking: Agent is processing- agent.tool_call: Agent using a tool (read_file, etc.)- agent.tool_result: Tool execution completed- agent.action_needed: Agent needs user input- agent.error: Error occurred- agent.complete: Session complete