Ce document montre le même workflow implémenté dans :
- Claude Code (workflow JS exécutable)
- GitHub Copilot (workflow Markdown déclaratif)
Le workflow est volontairement simple :
- Vérifier la connectivité Kubernetes
- Découvrir le namespace cible
- Déployer l'application
- Valider le déploiement
- Arrêter le workflow en cas d'échec
phase('Connectivity')
const connectivity = await agent(
'Verify kubectl connectivity',
{
schema: {
type: 'object',
properties: {
connected: { type: 'boolean' }
}
}
}
)
if (!connectivity.connected) {
return { status: 'failed' }
}
phase('Discovery')
const discovery = await agent(
'Find deployment namespace',
{
schema: {
type: 'object',
properties: {
namespace: { type: 'string' }
}
}
}
)
phase('Deploy')
const deployment = await agent(
`Deploy application into ${discovery.namespace}`,
{
schema: {
type: 'object',
properties: {
success: { type: 'boolean' }
}
}
}
)
if (!deployment.success) {
return { status: 'failed' }
}
phase('Validation')
const validation = await agent(
`Validate deployment in ${discovery.namespace}`,
{
schema: {
type: 'object',
properties: {
valid: { type: 'boolean' }
}
}
}
)
return {
status: validation.valid ? 'success' : 'failed'
}- Workflow exécutable
- Variables partagées entre phases
- Conditions programmatiques (
if) - Arrêt explicite du workflow (
return) - Sorties structurées via JSON Schema
# Kubernetes Deployment Workflow
## Stage 1 - Connectivity
Delegate to: connectivity-agent
Expected output:
{
"connected": true
}
Gate:
- connected must be true
- otherwise stop workflow
---
## Stage 2 - Discovery
Delegate to: discovery-agent
Expected output:
{
"namespace": "demo"
}
---
## Stage 3 - Deploy
Delegate to: deploy-agent
Inputs:
{
"namespace": "{{namespace}}"
}
Expected output:
{
"success": true
}
Gate:
- success must be true
- otherwise stop workflow
---
## Stage 4 - Validation
Delegate to: validation-agent
Inputs:
{
"namespace": "{{namespace}}"
}
Expected output:
{
"valid": true
}
---
## Final Result
Workflow succeeds if:
{
"valid": true
}# Connectivity Agent
Check:
- kubectl version
- kubectl cluster-info
Return:
{
"connected": true
}# Discovery Agent
Determine deployment namespace.
Return:
{
"namespace": "demo"
}# Deploy Agent
Deploy the application into the provided namespace.
Input:
{
"namespace": ""
}
Output:
{
"success": true
}# Validation Agent
Verify:
- Deployment exists
- Pods are running
Return:
{
"valid": true
}| Claude Code | Copilot |
|---|---|
| Workflow JS | workflow.md |
| phase() | Stage |
| agent() | Delegate to Agent |
| Variable JS | Structured Output |
| if (...) | Gate |
| return | Stop Workflow |
| Knowledge files | Skills |
| MCP | MCP |
| Sub-agents | Custom Agents |
Pour une compatibilité maximale entre Claude, Copilot et Codex, il est préférable d'adopter une structure indépendante du moteur :
migration/
│
├── workflow/
│ └── workflow.md
│
├── agents/
│ ├── connectivity.md
│ ├── discovery.md
│ ├── deployment.md
│ └── validation.md
│
└── skills/
├── kubernetes/
├── deployment-rules/
└── troubleshooting/
Workflow
└── orchestration uniquement
Agents
└── responsabilités métier
Skills
└── connaissances métier
Objectif :
- Workflow ≈ 5 à 10 % du contenu
- Agents ≈ 20 à 30 % du contenu
- Skills ≈ 60 à 80 % du contenu
Ainsi, le même ensemble de connaissances peut être réutilisé par :
- Claude Code
- GitHub Copilot
- Codex
- tout autre agent compatible MCP