Skip to content

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 install

2. 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 URL
  • COMMIT_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-keys

Each function will have its own endpoint:

  • https://<app-name>.azurewebsites.net/api/commitSummary?code=<key>

Function Details

Commit Summary

Setup Steps:

  1. Get Teams Webhook URL:

    • Go to your Teams channel
    • Click "..." menu → Connectors
    • Search for "Incoming Webhook" and configure
    • Copy the webhook URL
  2. 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>
  3. Customize AI Summary:

    Edit COMMIT_SUMMARY_SYSTEM_PROMPT to 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.json

Project 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.md

Adding New Functions

To add a new function to this app:

  1. Create new file in src/functions/yourFunction.js

  2. Use the app.http() pattern:

    javascript
    const { app } = require("@azure/functions");
    
    app.http("yourFunction", {
      methods: ["GET", "POST"],
      authLevel: "function",
      handler: async (request, context) => {
        // Your logic here
      },
    });
  3. Add any new environment variables to local.settings.json

  4. Document 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 via ANTHROPIC_MODEL)
  • openai - Uses ChatGPT (configurable via OPENAI_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-20250514
  • claude-opus-4-20250514

OpenAI:

  • gpt-4o (default, recommended)
  • gpt-4o-mini
  • gpt-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_PROVIDER matches 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)