Agent skill
deploy-agent
Deploy Bindu agents to various environments with safety checks and verification
Install this agent skill to your Project
npx add-skill https://github.com/GetBindu/Bindu/tree/main/.agents/skills/deploy-agent
SKILL.md
Deploy Agent Skill
Overview
Deploy a Bindu agent to a target environment (local, staging, production) with comprehensive safety checks.
Inputs
- Environment name (local, staging, production)
- Agent configuration file path
- Optional: deployment strategy (rolling, blue-green, canary)
Safety
- Never deploy without passing tests
- Verify environment variables before deployment
- Run health checks after deployment
- Generate deployment artifacts
- Support rollback if deployment fails
Execution Contract
- Validate environment configuration
- Run pre-deployment checks
- Apply database migrations
- Deploy agent
- Verify deployment health
- Generate deployment record
Steps
1. Pre-Deployment Validation
# Check environment
ENVIRONMENT=$1
if [ -z "$ENVIRONMENT" ]; then
echo "Error: Environment required (local, staging, production)"
exit 1
fi
# Validate tests pass
echo "==> Running tests..."
uv run pytest || { echo "❌ Tests failed"; exit 1; }
# Validate pre-commit hooks
echo "==> Running pre-commit hooks..."
uv run pre-commit run --all-files || { echo "❌ Pre-commit hooks failed"; exit 1; }
# Check for uncommitted changes
if [ -n "$(git status --porcelain)" ]; then
echo "⚠️ Warning: Uncommitted changes detected"
read -p "Continue anyway? (y/n) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
2. Environment Configuration
# Load environment-specific config
case $ENVIRONMENT in
local)
export STORAGE_BACKEND=memory
export SCHEDULER_BACKEND=memory
export PORT=3773
;;
staging)
export STORAGE_BACKEND=postgres
export SCHEDULER_BACKEND=redis
export DATABASE_URL=$STAGING_DATABASE_URL
export REDIS_URL=$STAGING_REDIS_URL
export PORT=3773
;;
production)
export STORAGE_BACKEND=postgres
export SCHEDULER_BACKEND=redis
export DATABASE_URL=$PROD_DATABASE_URL
export REDIS_URL=$PROD_REDIS_URL
export PORT=8080
;;
*)
echo "Error: Unknown environment $ENVIRONMENT"
exit 1
;;
esac
# Verify required variables
required_vars=("STORAGE_BACKEND" "SCHEDULER_BACKEND")
for var in "${required_vars[@]}"; do
if [ -z "${!var}" ]; then
echo "Error: $var not set"
exit 1
fi
done
3. Database Migrations
# Run migrations for postgres backend
if [ "$STORAGE_BACKEND" = "postgres" ]; then
echo "==> Running database migrations..."
# Check current migration
CURRENT=$(uv run alembic current 2>&1)
echo "Current migration: $CURRENT"
# Upgrade to head
uv run alembic upgrade head || { echo "❌ Migration failed"; exit 1; }
# Verify migration
NEW_CURRENT=$(uv run alembic current 2>&1)
echo "New migration: $NEW_CURRENT"
fi
4. Deploy Agent
# Local deployment
if [ "$ENVIRONMENT" = "local" ]; then
echo "==> Starting local agent with tunnel..."
uv run bindu serve --launch &
AGENT_PID=$!
echo "Agent PID: $AGENT_PID"
sleep 5
fi
# Staging/Production deployment
if [ "$ENVIRONMENT" != "local" ]; then
echo "==> Deploying to $ENVIRONMENT..."
# Docker deployment
if command -v docker &> /dev/null; then
# Build image
docker build -t bindu-agent:$ENVIRONMENT .
# Stop old container
docker stop bindu-agent-$ENVIRONMENT 2>/dev/null || true
docker rm bindu-agent-$ENVIRONMENT 2>/dev/null || true
# Start new container
docker run -d \
--name bindu-agent-$ENVIRONMENT \
-p $PORT:8080 \
-e DATABASE_URL="$DATABASE_URL" \
-e REDIS_URL="$REDIS_URL" \
-e STORAGE_BACKEND="$STORAGE_BACKEND" \
-e SCHEDULER_BACKEND="$SCHEDULER_BACKEND" \
bindu-agent:$ENVIRONMENT
CONTAINER_ID=$(docker ps -qf "name=bindu-agent-$ENVIRONMENT")
echo "Container ID: $CONTAINER_ID"
else
# Direct deployment
uv run bindu serve &
AGENT_PID=$!
echo "Agent PID: $AGENT_PID"
fi
sleep 10
fi
5. Health Verification
# Determine health URL
if [ "$ENVIRONMENT" = "local" ]; then
HEALTH_URL="http://localhost:3773/health"
else
HEALTH_URL="http://localhost:$PORT/health"
fi
# Wait for agent to be ready
echo "==> Waiting for agent to be ready..."
MAX_RETRIES=30
RETRY_COUNT=0
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
if curl -sf $HEALTH_URL > /dev/null 2>&1; then
echo "✅ Agent is healthy"
break
fi
RETRY_COUNT=$((RETRY_COUNT + 1))
echo "Waiting... ($RETRY_COUNT/$MAX_RETRIES)"
sleep 2
done
if [ $RETRY_COUNT -eq $MAX_RETRIES ]; then
echo "❌ Agent failed to become healthy"
exit 1
fi
# Get health details
HEALTH_RESPONSE=$(curl -s $HEALTH_URL)
echo "Health response:"
echo "$HEALTH_RESPONSE" | jq .
6. Verify Deployment
# Check agent card
echo "==> Verifying agent card..."
curl -sf http://localhost:$PORT/.well-known/agent.json | jq . || echo "⚠️ Agent card not available"
# Check skills
echo "==> Verifying skills..."
curl -sf http://localhost:$PORT/agent/skills | jq . || echo "⚠️ Skills not available"
# Check metrics
echo "==> Checking metrics..."
curl -sf http://localhost:$PORT/metrics | head -n 10 || echo "⚠️ Metrics not available"
7. Generate Deployment Record
Create .local/deployment.json:
{
"environment": "production",
"timestamp": "2026-02-19T07:00:00Z",
"version": "2026.8.5",
"commit": "abc1234",
"deployment_id": "deploy-20260219-070000",
"status": "success",
"health": {
"status": "ok",
"ready": true,
"uptime_seconds": 10.5
},
"configuration": {
"storage_backend": "postgres",
"scheduler_backend": "redis",
"port": 8080
},
"verification": {
"health_check": "pass",
"agent_card": "pass",
"skills": "pass",
"metrics": "pass"
}
}
Rollback Procedure
If deployment fails:
# Stop new deployment
if [ -n "$CONTAINER_ID" ]; then
docker stop $CONTAINER_ID
docker rm $CONTAINER_ID
fi
if [ -n "$AGENT_PID" ]; then
kill $AGENT_PID
fi
# Rollback database
if [ "$STORAGE_BACKEND" = "postgres" ]; then
uv run alembic downgrade -1
fi
# Restore previous version
git checkout <previous-tag>
uv sync
# Redeploy
/skill deploy-agent $ENVIRONMENT
Output Format
# Deployment Report
## Environment
- Target: production
- Version: 2026.8.5
- Commit: abc1234
## Pre-Deployment
✅ Tests passed
✅ Pre-commit hooks passed
✅ Environment configured
## Deployment
✅ Database migrations applied
✅ Agent deployed (Container: xyz123)
✅ Health check passed
## Verification
✅ Agent card available
✅ Skills endpoint responding
✅ Metrics endpoint responding
## Status
🎉 Deployment successful!
## Next Steps
1. Monitor logs for errors
2. Check metrics dashboard
3. Test agent functionality
Artifacts Generated
.local/deployment.json- Deployment metadata.local/health-check.json- Health check results.local/deployment-log.txt- Deployment logs
Guardrails
- Never deploy without passing tests
- Always run migrations before deployment
- Always verify health after deployment
- Generate deployment record
- Support rollback on failure
Example Usage
# Deploy to local
/skill deploy-agent local
# Deploy to staging
/skill deploy-agent staging
# Deploy to production
/skill deploy-agent production
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
test-pr
Test pull requests with comprehensive validation and generate structured test results
create-release
Create releases with proper versioning, release notes, and Git tags
quiz-generation
question-answering
research
Ethical Hacking Methodology
This skill should be used when the user asks to "learn ethical hacking", "understand penetration testing lifecycle", "perform reconnaissance", "conduct security scanning", "exploit vulnerabilities", or "write penetration test reports". It provides comprehensive ethical hacking methodology and techniques.
Didn't find tool you were looking for?