Deployment Management
Manage LangGraph Cloud deployments using the Langstar CLI with focus on test deployment cleanup, filtering, and environment handling.
Core Capabilities
- List deployments with filtering by name, status, or type
- Filter test deployments by pattern (test-, langstar-test-)
- Delete deployments individually or in batch
- Handle environment variables automatically (check first, source if needed)
- Interactive confirmation for destructive operations
Table of Contents
Prerequisites
Required Credentials
LangSmith API:
LANGSMITH_API_KEY- API key for Control Plane authenticationLANGSMITH_WORKSPACE_ID- Workspace ID (optional if using organization)
Location: /workspace/.devcontainer/.env (gitignored)
CLI Tool
All operations use langstar graph commands:
langstar graph list- List with filteringlangstar graph get <id>- Get detailslangstar graph delete <id>- Delete deployment
Environment Handling
Critical Pattern: Check Before Sourcing
Always check if credentials exist BEFORE sourcing:
# ✅ CORRECT: Check first
if [ -z "$LANGSMITH_API_KEY" ] || [ -z "$LANGSMITH_WORKSPACE_ID" ]; then
echo "📋 Sourcing credentials..."
source /workspace/.devcontainer/.env
fi
# Verify (never expose actual values)
[ -n "$LANGSMITH_API_KEY" ] && echo "✓ LANGSMITH_API_KEY set" || echo "❌ Not set"
Security Rule: Never expose credential values:
# ❌ WRONG: Exposes sensitive data
echo "Key: $LANGSMITH_API_KEY"
# ✅ CORRECT: Only check presence
[ -n "$LANGSMITH_API_KEY" ] && echo "Set" || echo "Not set"
Core Workflows
Workflow 1: List All Deployments
# Source credentials if needed
if [ -z "$LANGSMITH_API_KEY" ]; then
source /workspace/.devcontainer/.env
fi
# List deployments
langstar graph list --limit 20
Output:
┌────────────────────────────────┬──────────────────────┬────────┐
│ Name │ ID │ Status │
├────────────────────────────────┼──────────────────────┼────────┤
│ langstar-test-1763668434 │ 97dff6a5-f844-472... │ Ready │
│ test-deployment-1763666536 │ 8665a96b-4620-407... │ Ready │
└────────────────────────────────┴──────────────────────┴────────┘
Workflow 2: Filter by Name Pattern
# Source credentials
if [ -z "$LANGSMITH_API_KEY" ]; then
source /workspace/.devcontainer/.env
fi
# Filter by substring
langstar graph list --name-contains "test"
langstar graph list --name-contains "langstar-test"
# Combine filters
langstar graph list --name-contains "test" --status READY --limit 100
Workflow 3: Delete Single Deployment
# Source credentials
if [ -z "$LANGSMITH_API_KEY" ]; then
source /workspace/.devcontainer/.env
fi
# Interactive deletion (prompts for confirmation)
langstar graph delete <deployment-id>
# Skip confirmation
langstar graph delete <deployment-id> --yes
Workflow 4: Batch Cleanup of Test Deployments
Recommended: Interactive review before each deletion
# Source credentials
if [ -z "$LANGSMITH_API_KEY" ]; then
source /workspace/.devcontainer/.env
fi
# List test deployments to review
langstar graph list --name-contains "test" --limit 100
# Get deployment IDs
deployment_ids=$(langstar graph list --name-contains "test" --limit 100 --format json | jq -r '.resources[].id')
# Delete with confirmation for each
for id in $deployment_ids; do
echo "Deployment: $id"
langstar graph get "$id" | jq '{name, status, created_at}'
read -p "Delete? (y/n): " confirm
[ "$confirm" = "y" ] && langstar graph delete "$id" --yes && echo "✓ Deleted"
done
Alternative: Bulk deletion (use with caution)
See examples/batch-cleanup.md for non-interactive scripts.
Workflow 5: Filter by Status or Type
Available filters:
- Status:
READY,AWAITING_DATABASE,UNUSED,AWAITING_DELETE - Type:
dev_free,dev,prod
# Source credentials
if [ -z "$LANGSMITH_API_KEY" ]; then
source /workspace/.devcontainer/.env
fi
# Filter by status
langstar graph list --status READY
langstar graph list --status UNUSED
# Filter by type
langstar graph list --deployment-type dev_free
# Combine filters
langstar graph list --name-contains "test" --status READY
CLI Reference
list - List deployments
langstar graph list [OPTIONS]
Options:
-l, --limit <N> Max to return [default: 20]
--offset <N> Pagination offset [default: 0]
--name-contains <STR> Filter by name substring
--status <STATUS> Filter: READY, AWAITING_DATABASE, UNUSED, etc.
--deployment-type <TYPE> Filter: dev_free, dev, prod
-f, --format <FORMAT> Output: text, json [default: text]
get - Get deployment details
langstar graph get <DEPLOYMENT_ID>
Returns full deployment JSON including source config, status, timestamps, and revisions.
delete - Delete deployment
langstar graph delete <DEPLOYMENT_ID> [OPTIONS]
Options:
-y, --yes Skip confirmation prompt
Best Practices
Environment Variables
✅ Check before sourcing
if [ -z "$LANGSMITH_API_KEY" ]; then
source /workspace/.devcontainer/.env
fi
✅ Never expose values
[ -n "$LANGSMITH_API_KEY" ] && echo "✓ Set" || echo "✗ Not set"
Deployment Deletion
✅ Review before deleting
# List first, verify, then delete
langstar graph list --name-contains "test"
langstar graph delete <id> --yes
✅ Interactive confirmation for batch
# Confirm each deletion
for id in $ids; do
read -p "Delete $id? (y/n): " confirm
[ "$confirm" = "y" ] && langstar graph delete "$id" --yes
done
Filtering
✅ Use specific patterns
# Specific reduces false matches
langstar graph list --name-contains "langstar-test-"
✅ Combine filters for precision
langstar graph list --name-contains "test" --status READY --deployment-type dev_free
Common Use Cases
Clean Up After Integration Tests
# Source credentials
if [ -z "$LANGSMITH_API_KEY" ]; then source /workspace/.devcontainer/.env; fi
# List test deployments
langstar graph list --name-contains "langstar-test"
langstar graph list --name-contains "test-deployment"
# Delete each
langstar graph delete <id-1> --yes
langstar graph delete <id-2> --yes
Find Unused Deployments
# Source credentials
if [ -z "$LANGSMITH_API_KEY" ]; then source /workspace/.devcontainer/.env; fi
# List unused
langstar graph list --status UNUSED --limit 100
# Review and delete manually
langstar graph list --limit 100 --format json | \
jq '.resources[] | select(.status == "UNUSED") | {name, id, created_at, status}'
Filter by User/CI Pattern
# Source credentials
if [ -z "$LANGSMITH_API_KEY" ]; then source /workspace/.devcontainer/.env; fi
# Filter by username/CI prefix
langstar graph list --name-contains "alice-"
langstar graph list --name-contains "ci-build-"
langstar graph list --name-contains "pr-"
Troubleshooting
"Authentication failed"
Diagnosis:
[ -n "$LANGSMITH_API_KEY" ] && echo "Set" || echo "Not set"
[ -n "$LANGSMITH_WORKSPACE_ID" ] && echo "Set" || echo "Not set"
Solution:
source /workspace/.devcontainer/.env
# Verify
[ -n "$LANGSMITH_API_KEY" ] && echo "Set" || echo "Not set"
"Deployment not found"
Cause: Deployment deleted or incorrect ID.
Solution:
# Verify ID from list
langstar graph list --limit 100
langstar graph list --name-contains "<name-fragment>"
No Deployments Returned
Solution:
# Try without filters
langstar graph list --limit 100
# Try broader patterns
langstar graph list --name-contains "test"
Additional Resources
- Batch Cleanup Examples - Non-interactive deletion scripts
- CLI Command Reference - Detailed command documentation
- Issue #188 - Original feature request
- Issue #186 - Context for orphaned deployments
- SDK -
sdk/src/deployments.rs- Full API client - CLI -
cli/src/commands/graph.rs- Implementation
Integration
With test-runner-worktree Skill
Clean up after test runs:
# After integration tests
cd /workspace/wip/<worktree-name>
if [ -z "$LANGSMITH_API_KEY" ]; then source /workspace/.devcontainer/.env; fi
langstar graph list --name-contains "langstar-test"
With git-worktrees Skill
Works in any location - credentials source the same:
# Works in main or worktree
cd /workspace
# or
cd /workspace/wip/claude-188-deployment-management
# Source once
if [ -z "$LANGSMITH_API_KEY" ]; then source /workspace/.devcontainer/.env; fi
langstar graph list
Quick Reference Templates
Environment Check
if [ -z "$LANGSMITH_API_KEY" ] || [ -z "$LANGSMITH_WORKSPACE_ID" ]; then
source /workspace/.devcontainer/.env
fi
[ -n "$LANGSMITH_API_KEY" ] && echo "✓" || echo "✗"
List Test Deployments
if [ -z "$LANGSMITH_API_KEY" ]; then source /workspace/.devcontainer/.env; fi
langstar graph list --name-contains "test" --limit 100
Interactive Batch Delete
if [ -z "$LANGSMITH_API_KEY" ]; then source /workspace/.devcontainer/.env; fi
for id in $(langstar graph list --name-contains "test" --format json | jq -r '.resources[].id'); do
langstar graph get "$id" | jq '{name, status, created_at}'
read -p "Delete? (y/n): " confirm
[ "$confirm" = "y" ] && langstar graph delete "$id" --yes
done
Key Takeaways
- Check environment variables before sourcing
- Never expose credential values
- Review deployments before batch deletion
- Use specific name patterns
- Combine filters for precision
- Interactive confirmation prevents accidents
- CLI handles all operations - no direct API calls needed