Appearance
Vibe Tools: Developer Functions
Collection of Azure Functions for developer tooling and automation. All functions share common configuration for AI providers and can be deployed together.
Functions
1. Commit Summary (/api/commitSummary)
Automatically posts AI-generated summaries of git commits to Microsoft Teams when code is pushed to Azure DevOps.
Webhook: POST /api/commitSummary
Triggers: Azure DevOps git push events
Outputs: Microsoft Teams message with commit stats + AI summary
✨ Multi-Webhook Support: Configure multiple Azure DevOps service hooks with different AI personalities using query parameters. See multiple-webhooks.md for detailed setup guide.
Quick Example:
# Directors (business-focused)
?code=<key>&prompt=directors
# Code review alerts
?code=<key>&prompt=code-review
# Security team
?code=<key>&prompt=security&webhook=<security-webhook>Setup
1. Install Dependencies
bash
npm install2. Configure Environment Variables
Edit local.settings.json (for local testing) or set Application Settings in Azure.
Shared Configuration (used by all functions):
json
{
"AI_PROVIDER": "anthropic", // or "openai"
"ANTHROPIC_API_KEY": "sk-ant-...",
"ANTHROPIC_MODEL": "claude-sonnet-4-5-20250929",
"OPENAI_API_KEY": "sk-...",
"OPENAI_MODEL": "gpt-4o"
}Function-Specific Configuration:
Commit Summary:
TEAMS_WEBHOOK_URL- Teams incoming webhook URLCOMMIT_SUMMARY_SYSTEM_PROMPT- AI instructions for commit summaries
3. Deploy to Azure
bash
# Login to Azure
az login
# Create a function app (if needed)
az functionapp create \
--resource-group <your-rg> \
--consumption-plan-type Y \
--runtime node \
--runtime-version 18 \
--functions-version 4 \
--name <your-function-app-name> \
--storage-account <your-storage>
# Deploy all functions
func azure functionapp publish <your-function-app-name>4. Get Function URLs
After deployment, get your function URLs and keys:
bash
func azure functionapp list-functions <your-function-app-name> --show-keysEach function will have its own endpoint:
https://<app-name>.azurewebsites.net/api/commitSummary?code=<key>
Function Details
Commit Summary
Setup Steps:
Get Teams Webhook URL:
- Go to your Teams channel
- Click "..." menu → Connectors
- Search for "Incoming Webhook" and configure
- Copy the webhook URL
Configure Azure DevOps Service Hook:
- In Azure DevOps → Project Settings → Service Hooks
- Create new subscription → Web Hooks
- Event: "Code pushed"
- Filters: Select your repository
- URL:
https://<app>.azurewebsites.net/api/commitSummary?code=<key>
Customize AI Summary:
Edit
COMMIT_SUMMARY_SYSTEM_PROMPTto control output style:Default (for directors):
You are summarizing code changes for non-technical directors. Keep it brief, highlight what business value or functionality changed, and avoid technical jargon. Use 2-3 sentences maximum.For executives:
Summarize code changes in one sentence for executives. Focus only on user-facing changes.For technical team:
Provide a technical summary of the changes, including architectural decisions and potential impacts on other systems.
Test Locally:
bash
# Start functions
npm start
# Test with sample payload
curl -X POST http://localhost:7071/api/commitSummary \
-H "Content-Type: application/json" \
-d @sample-payload.jsonProject Structure
vibe-tools-developer-functions/
├── src/
│ └── functions/
│ ├── commitSummary.js # Commit summary function
│ └── [future functions] # Add more functions here
├── host.json # Azure Functions config
├── local.settings.json # Environment variables
├── package.json
├── sample-payload.json # Test data for commit summary
└── README.mdAdding New Functions
To add a new function to this app:
Create new file in
src/functions/yourFunction.jsUse the
app.http()pattern:javascriptconst { app } = require("@azure/functions"); app.http("yourFunction", { methods: ["GET", "POST"], authLevel: "function", handler: async (request, context) => { // Your logic here }, });Add any new environment variables to
local.settings.jsonDocument in this README
All functions in src/functions/ are automatically discovered and deployed together.
AI Provider Configuration
Switching Providers
Change AI_PROVIDER to:
anthropic- Uses Claude (configurable viaANTHROPIC_MODEL)openai- Uses ChatGPT (configurable viaOPENAI_MODEL)
Both providers share the same system prompts, so switching is seamless.
Model Options
Anthropic:
claude-sonnet-4-5-20250929(default, recommended)claude-sonnet-4-20250514claude-opus-4-20250514
OpenAI:
gpt-4o(default, recommended)gpt-4o-minigpt-4-turbo
Cost Estimate
Azure Functions: Free tier covers typical usage (first 1M executions free)
AI APIs:
- ~$0.01-0.05 per commit summary
- Heavy daily commits (~100/day) = ~$1-5/month
Essentially negligible for internal tooling.
Notes
- All functions share the same AI configuration for simplicity
- Each function can have its own system prompt via namespaced env vars
- Azure DevOps webhook payloads don't always include full line counts
- Function keys provide security - don't commit them to git
Troubleshooting
Function not receiving webhooks:
- Check Azure DevOps service hook is "Enabled"
- Verify function key is correct in webhook URL
- Check Azure Function logs in portal
AI summary not working:
- Verify API key is set correctly
- Check
AI_PROVIDERmatches your configured key - Review function logs for error details
Teams message not appearing:
- Test webhook URL with a simple POST
- Ensure webhook hasn't been disabled in Teams
- Check for rate limiting (Teams has message limits)