Debugging Guide
When things don't work as expected, this guide helps you diagnose and fix common issues.
Quick Diagnosis
Common Issues
1. Service Won't Connect
Symptoms: Service doesn't show as online, connection errors in terminal.
Check:
# Verify environment variables are set
echo $DAEMO_AGENT_API_KEY
# Check for typos in your .env file
cat .env | grep DAEMO
Common causes:
- Missing or invalid
DAEMO_AGENT_API_KEY - Network/firewall blocking connection
- Wrong gateway URL
Fix:
# Ensure .env is loaded
npm install dotenv
# In your entry point
import 'dotenv/config';
2. Functions Not Appearing in Dashboard
Symptoms: Service is online but functions list is empty.
Check:
- Are decorators imported?
- Is the service instance registered?
// ❌ Missing import
class MyFunctions {
@DaemoFunction({ description: "..." }) // Error: DaemoFunction is not defined
async myFunc() {}
}
// ✅ Correct
import { DaemoFunction } from 'daemo-engine';
class MyFunctions {
@DaemoFunction({ description: "..." })
async myFunc() {}
}
// ❌ Forgot to register
const builder = new DaemoBuilder().withServiceName("my_service");
builder.build(); // Functions never registered!
// ✅ Correct
const myFuncs = new MyFunctions();
builder.registerService(myFuncs); // Register the instance
builder.build();
3. Wrong Function Called
Symptoms: AI calls a different function than expected.
Diagnosis: Use CLI testing and watch the function_call events.
Fix: Improve your function descriptions:
// ❌ Too vague - AI can't distinguish
@DaemoFunction({ description: "Search contacts" })
async searchByEmail() {}
@DaemoFunction({ description: "Search contacts" })
async searchByCompany() {}
// ✅ Specific - AI knows which to use
@DaemoFunction({
description: "Search contacts by email address. Supports partial matching (e.g., 'john' matches 'john@example.com')."
})
async searchByEmail() {}
@DaemoFunction({
description: "Search contacts by company name. Returns all contacts who work at the specified company."
})
async searchByCompany() {}
Rule of thumb: Your description should answer "When should the AI call this function?"
4. Function Returns Error
Symptoms: function_result shows an error message.
Diagnosis: Check your service logs:
# Your service terminal will show the error
[ERROR] Database error: connection refused
Common causes:
- Database not running
- Missing environment variables
- Invalid input data
Fix: Add error handling with clear messages:
@DaemoFunction({ description: "Get contact by ID" })
async getContact(input: { id: string }) {
try {
const { data, error } = await supabase
.from('contacts')
.select('*')
.eq('id', input.id)
.single();
if (error) throw error;
if (!data) throw new Error(`Contact not found: ${input.id}`);
return data;
} catch (err) {
// Clear error message for the AI to relay
throw new Error(`Failed to get contact: ${err.message}`);
}
}
5. "No final_response found"
Symptoms: CLI script shows no final response.
Possible causes:
- Request timed out
- Service crashed mid-request
- Stream interrupted
Diagnosis:
# Check if service is still running
# Look for errors in service terminal
# Try a simpler query
./ask.sh "Hello"
6. Authentication Errors
Symptoms: 401 or 403 errors.
Fix:
# Regenerate your auth token
# Go to app.daemo.ai → Agent → Settings → Regenerate Key
# Update .auth_token
echo "new-token-here" > .auth_token
Debugging Tools
1. Console Logging
Add logs in your functions:
@DaemoFunction({ description: "..." })
async myFunction(input: { query: string }) {
console.log('[myFunction] Called with:', JSON.stringify(input));
const result = await doSomething(input);
console.log('[myFunction] Returning:', JSON.stringify(result));
return result;
}
2. CLI Stream Analysis
The CLI shows the full event stream:
./ask.sh "test query" 2>&1 | grep function_call
3. Dashboard Logs
Check Logs in the Daemo dashboard for:
- Timestamps
- Function inputs/outputs
- Execution duration
- Errors
Performance Issues
Slow Responses
Diagnosis: Check which function is slow:
@DaemoFunction({ description: "..." })
async slowFunction(input: any) {
const start = Date.now();
const result = await doWork();
console.log(`[slowFunction] Took ${Date.now() - start}ms`);
return result;
}
Common fixes:
- Add database indexes
- Reduce data returned (use
.limit()) - Cache frequently-accessed data
- Add timeouts to external API calls
Timeouts
If functions take too long, they may timeout:
// Add timeout to external calls
const response = await axios.get(url, { timeout: 10000 }); // 10 seconds
Getting Help
1. Check the Logs
Always start with logs:
- Service terminal output
- Dashboard logs
- Browser console (for Playground issues)
2. Reproduce with CLI
Use CLI testing to get the exact error:
./ask.sh "the failing query" 2>&1 | tee debug.log
3. Simplify
Reduce to the minimum failing case:
- Test with a simple function
- Try with minimal input
- Remove complexity until it works