Skip to content

Aeon

Aeon #27

Workflow file for this run

name: Aeon
"on":
workflow_dispatch:
inputs:
skill:
description: Skill name
required: false
default: external-feature
var:
description: Skill var
required: false
default: ""
model:
description: Model override
required: false
default: ""
charon_approval:
description: Charon approval id
required: false
default: ""
jobs:
run:
runs-on: ubuntu-latest
permissions:
contents: write
actions: write
steps:
- uses: actions/checkout@v5
- id: work
run: echo "mode=skill" >> "$GITHUB_OUTPUT"
- id: skill
run: echo "name=${{ inputs.skill || 'external-feature' }}" >> "$GITHUB_OUTPUT"
- name: Charon approval
if: inputs.charon_approval != ''
run: |
{
echo "### Charon approval"
echo ""
echo "- review: \`${{ inputs.charon_approval }}\`"
echo "- preflight: \`approved by Telegram callback\`"
} >> "$GITHUB_STEP_SUMMARY"
# >>> charon aeon preflight
- name: Charon preflight
id: charon_preflight
if: steps.work.outputs.mode != '' && inputs.charon_approval == ''
env:
SKILL: ${{ steps.skill.outputs.name }}
SKILL_VAR: ${{ inputs.var }}
AEON_ACTOR: ${{ github.actor }}
AEON_TRIGGER: ${{ github.event_name == 'repository_dispatch' && github.event.action || github.event_name }}
run: |
set +e
mkdir -p .charon/aeon
npx -y github:CharonAI-code/charon aeon preflight \
--skill "$SKILL" \
--var "$SKILL_VAR" \
--trigger "$AEON_TRIGGER" \
--repo "$GITHUB_REPOSITORY" \
--run-id "$GITHUB_RUN_ID" \
--actor "$AEON_ACTOR" \
--policy charon.aeon.yml \
--review > .charon/aeon/preflight.json
code=$?
cat .charon/aeon/preflight.json
if [ "$code" = "125" ]; then
npx -y github:CharonAI-code/charon aeon telegram send latest || true
elif [ "$code" = "126" ]; then
npx -y github:CharonAI-code/charon aeon telegram send --preflight .charon/aeon/preflight.json || true
fi
exit "$code"
- name: Charon review export
if: always()
id: charon_review
run: |
npx -y github:CharonAI-code/charon aeon review export latest --github-output "$GITHUB_OUTPUT" || true
for file in .charon/aeon/exports/*.md; do
if [ -f "$file" ]; then cat "$file" >> "$GITHUB_STEP_SUMMARY"; fi
done
# <<< charon aeon preflight
- name: Run pre-fetch scripts
run: echo "prefetch"
- name: Run
id: aeon_run
env:
BANKR_API_KEY: ${{ secrets.BANKR_API_KEY || secrets.BANKR_LLM_KEY }}
BANKR_LLM_KEY: ${{ secrets.BANKR_LLM_KEY }}
ANTHROPIC_BASE_URL: https://llm.bankr.bot
ANTHROPIC_AUTH_TOKEN: ${{ secrets.BANKR_API_KEY || secrets.BANKR_LLM_KEY }}
ANTHROPIC_MODEL: deepseek-v4-pro
CLAUDE_CODE_MODEL: deepseek-v4-pro
INPUT_MODEL: ${{ inputs.model }}
SKILL_NAME: ${{ steps.skill.outputs.name }}
SKILL_VAR: ${{ inputs.var }}
run: |
if ! command -v claude >/dev/null 2>&1; then
npm install -g @anthropic-ai/claude-code >/dev/null
fi
CONFIG_MODEL="$(grep -E '^model:' aeon.yml | sed 's/^model: *//' | tr -d ' \"')"
SKILL_MODEL="$(grep "^ ${SKILL_NAME}:" aeon.yml | sed -n 's/.*model: *\"\([^\"]*\)\".*/\1/p')"
if [ -n "$INPUT_MODEL" ]; then
MODEL="$INPUT_MODEL"
elif [ -n "$SKILL_MODEL" ]; then
MODEL="$SKILL_MODEL"
else
MODEL="${CONFIG_MODEL:-deepseek-v4-pro}"
fi
echo "Using model: $MODEL"
ALLOWED="Bash(git:*),Write,Edit"
prompt="$(printf 'Run AEON skill: %s\n\nTask:\n%s\n\nIf you complete the task, summarize the result clearly.' "$SKILL_NAME" "$SKILL_VAR")"
claude -p "$prompt" --model "$MODEL" --allowedTools "$ALLOWED"
- name: Notify AEON success
if: success()
env:
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
run: |
if [ -z "${TELEGRAM_BOT_TOKEN:-}" ] || [ -z "${TELEGRAM_CHAT_ID:-}" ]; then
exit 0
fi
text="$(printf '<code>AEON COMPLETE</code>\n<code>run</code> %s\n<code>url</code> %s' "$GITHUB_RUN_ID" "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID")"
curl -fsS -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d "chat_id=${TELEGRAM_CHAT_ID}" \
--data-urlencode "text=${text}" \
-d "parse_mode=HTML" \
-d "disable_web_page_preview=true" >/dev/null || true
- name: Notify AEON failure
if: failure()
env:
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
run: |
if [ -z "${TELEGRAM_BOT_TOKEN:-}" ] || [ -z "${TELEGRAM_CHAT_ID:-}" ]; then
exit 0
fi
text="$(printf '<code>AEON FAILED</code>\n<code>run</code> %s\n<code>url</code> %s' "$GITHUB_RUN_ID" "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID")"
curl -fsS -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d "chat_id=${TELEGRAM_CHAT_ID}" \
--data-urlencode "text=${text}" \
-d "parse_mode=HTML" \
-d "disable_web_page_preview=true" >/dev/null || true