Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
e65f5ee
Refactor config access around an Ecto schema
frantic-openai Mar 10, 2026
8afebb3
Align workflow config spec with schema behavior
frantic-openai Mar 10, 2026
c9ec3f1
Stabilize Symphony Elixir orchestration and policy handling
frantic-openai Mar 10, 2026
b1863e8
Add a real live Linear/Codex E2E target
frantic-openai Mar 10, 2026
ff65c7c
Add SSH worker support to Symphony Elixir
frantic-openai Mar 11, 2026
1f86bac
fix(elixir): fix malformed JSON event form codex message (#50)
kevinw-openai Mar 16, 2026
a164593
fix(elixir): keep ssh retries in orchestrator (#54)
mstrautmann-oai Mar 19, 2026
9e89dd9
[codex] Pin GitHub Actions workflow references (#57)
hintz-openai Mar 27, 2026
eaa457d
Clarify Symphony service specification (#61)
frantic-openai Apr 27, 2026
58cf97d
fix(elixir): configure Codex app-server model via config
frantic-openai Apr 27, 2026
bbef623
[codex] Harden PR description lint workflow (#71)
hintz-openai May 14, 2026
3365695
Surface input-blocked Symphony sessions (#66)
danial-openai May 20, 2026
2c18518
Update README.md
frantic-openai May 20, 2026
f577cb5
docs: add SD-4 Symphony smoke-test note
poon-oai May 29, 2026
c5261d1
docs: add board review smoke test note
poon-oai May 29, 2026
68a18a7
[codex] Add Codex thread links and Linear comment resumes (#84)
yansenzhou-oai Jun 1, 2026
fecbc92
[codex] Revert Codex thread link and Linear comment resume changes (#85)
yansenzhou-oai Jun 1, 2026
0d85c27
Allow network access for package-installing workflow turns (#65)
andrew749 Jun 1, 2026
54b456b
[linear] Require opt-in labels for dispatch (#88)
sharmila-oai Jun 4, 2026
b4ccf7b
[web] Link dashboard issues to tracker (#89)
sharmila-oai Jun 5, 2026
4cbe3a9
[web] Add Symphony favicon (#90)
sharmila-oai Jun 9, 2026
504101e
Fix live E2E worker isolation and SSH paths
frantic-openai Jul 17, 2026
cdb466a
Preserve last good config on typed-invalid reloads
frantic-openai Jul 17, 2026
476b2b0
Couple workers to orchestrator runtime
frantic-openai Jul 17, 2026
d476215
Validate workflow before scheduling
frantic-openai Jul 17, 2026
45a53b8
Clarify agent simplicity guidance
frantic-openai Jul 17, 2026
91a6249
Add Burrito release packaging for Symphony
frantic-openai Jul 18, 2026
2121e5a
Fix Burrito release tag verification
frantic-openai Jul 18, 2026
7af5a76
Add generic tracker interface with Linear adapter (#102)
frantic-openai Jul 18, 2026
044f204
Add GitHub Issues tracker adapter
frantic-openai Jul 20, 2026
e574050
Add Jira Cloud tracker adapter
frantic-openai Jul 20, 2026
c68ba65
Add Asana tracker adapter
frantic-openai Jul 20, 2026
678e4ca
Add GitLab Issues tracker adapter
frantic-openai Jul 20, 2026
633eae7
feat(jira): honor blocking issue links (#108)
frantic-openai Jul 20, 2026
7cf29df
Make terminal workspace cleanup safe
frantic-openai Jul 20, 2026
0517275
Keep retry dispatch fresh without leaking claims
frantic-openai Jul 20, 2026
cbd2158
Retry failed workspace setup and anchor local roots
frantic-openai Jul 20, 2026
3c372fa
Block generic tool input and document idle timeouts
frantic-openai Jul 20, 2026
1f3219b
Gate Jira new-category issues on blockers
frantic-openai Jul 20, 2026
653f8b3
Bump Symphony version to 0.0.2
frantic-openai Jul 24, 2026
f8e8b8a
Add Symphony release skill
frantic-openai Jul 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions .codex/skills/release/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
name: release
description: Cut a Symphony release by bumping the committed version, landing it, tagging the merged commit, and verifying the Burrito release workflow. Use when asked to release, tag, or retag Symphony.
---

# Release

1. Start from fresh `origin/main` in a clean worktree. Never disturb unrelated
local changes.
2. Pick the requested version. If none is given, use the next patch after the
latest `vX.Y.Z` tag.
3. Update `elixir/mix.exs` so `version: "X.Y.Z"` matches the intended tag.
Search the old version and change other files only when they are true
release-version sources, not examples.
4. Run `make -C elixir all`, then commit, push, create a PR, and land it.
5. Fetch the merged `main` commit. Verify its `mix.exs` version, then create an
annotated tag on that exact commit:

```sh
git tag -a vX.Y.Z <merged-commit> -m "Symphony vX.Y.Z"
git push origin vX.Y.Z
```

6. Watch `burrito-release` until it finishes. Verify the build, smoke, and
release jobs pass and that the GitHub release has all expected assets.

Do not tag an uncommitted or unmerged revision. Do not move a published tag
without explicit user approval.
146 changes: 146 additions & 0 deletions .github/workflows/burrito-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
name: burrito-release

on:
workflow_dispatch:
push:
tags:
- "v*"

permissions:
contents: read

jobs:
build:
name: build-${{ matrix.target }}
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
target: [linux_x86_64, linux_arm64, macos_x86_64, macos_arm64]
defaults:
run:
working-directory: elixir

steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Set up mise tools
uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3
with:
install: true
cache: true
working_directory: elixir

- name: Install Zig
run: mise install zig@0.15.2

- name: Install xz
run: sudo apt-get update && sudo apt-get install -y xz-utils

- name: Install Mix dependencies
run: |
mix local.hex --force
mix local.rebar --force
mix deps.get

- name: Verify release tag matches project version
if: startsWith(github.ref, 'refs/tags/v')
run: |
project_version="$(sed -nE 's/^[[:space:]]*version: "([^"]+)",$/\1/p' mix.exs | head -n 1)"
expected_tag="v$project_version"

if test -z "$project_version" || test "$GITHUB_REF_NAME" != "$expected_tag"; then
echo "Release tag $GITHUB_REF_NAME does not match mix.exs version $project_version."
exit 1
fi

- name: Build Burrito executable
run: BURRITO_TARGET=${{ matrix.target }} MIX_ENV=prod mise exec zig@0.15.2 -- mix release symphony --overwrite

- name: Stage release assets
run: |
if test "$GITHUB_REF_TYPE" = "tag"; then
version="$GITHUB_REF_NAME"
else
version="${GITHUB_SHA::7}"
fi

artifact="symphony-${version}-${{ matrix.target }}"
mkdir -p dist
cp "burrito_out/symphony_${{ matrix.target }}" "dist/$artifact"
cd dist

sha256sum "$artifact" > "$artifact.sha256"

- name: Upload release assets
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: ${{ matrix.target }}
path: elixir/dist/*
if-no-files-found: error

smoke:
name: smoke-${{ matrix.target }}
needs: build
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- target: linux_x86_64
runner: ubuntu-24.04
- target: linux_arm64
runner: ubuntu-24.04-arm
- target: macos_x86_64
runner: macos-15-intel
- target: macos_arm64
runner: macos-14

steps:
- name: Download release assets
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: ${{ matrix.target }}
path: dist

- name: Smoke test executable
run: |
artifact="$(find dist -type f ! -name '*.sha256' -print -quit)"
test -n "$artifact"
chmod +x "$artifact"

set +e
output="$(SYMPHONY_INSTALL_DIR="$RUNNER_TEMP/symphony-install" "$artifact" 2>&1)"
status=$?
set -e

test "$status" -eq 1
grep -F "This Symphony implementation is a low key engineering preview." <<<"$output"

release:
if: startsWith(github.ref, 'refs/tags/v')
needs: [build, smoke]
runs-on: ubuntu-24.04
permissions:
contents: write

steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Download release assets
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
path: dist

- name: Create or update GitHub release
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ github.ref_name }}
run: |
if gh release view "$TAG" >/dev/null 2>&1; then
gh release upload "$TAG" dist/*/* --clobber
else
gh release create "$TAG" dist/*/* --verify-tag --generate-notes
fi
6 changes: 3 additions & 3 deletions .github/workflows/make-all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Set up mise tools
uses: jdx/mise-action@v3
uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3
with:
install: true
cache: true
working_directory: elixir

- name: Cache deps and build
uses: actions/cache@v4
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: |
elixir/deps
Expand Down
9 changes: 7 additions & 2 deletions .github/workflows/pr-description-lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ on:
pull_request:
types: [opened, edited, reopened, synchronize, ready_for_review]

permissions:
contents: read

jobs:
validate-pr-description:
runs-on: ubuntu-latest
Expand All @@ -13,10 +16,12 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
persist-credentials: false

- name: Set up mise tools
uses: jdx/mise-action@v3
uses: jdx/mise-action@5228313ee0372e111a38da051671ca30fc5a96db # v3
with:
install: true
cache: true
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
Symphony turns project work into isolated, autonomous implementation runs, allowing teams to manage
work instead of supervising coding agents.

[![Symphony demo video preview](.github/media/symphony-demo-poster.jpg)](.github/media/symphony-demo.mp4)
[![Symphony demo video preview](.github/media/symphony-demo-poster.jpg)](https://player.vimeo.com/video/1186371009?h=5626e4b899)

_In this [demo video](.github/media/symphony-demo.mp4), Symphony monitors a Linear board for work and spawns agents to handle the tasks. The agents complete the tasks and provide proof of work: CI status, PR review feedback, complexity analysis, and walkthrough videos. When accepted, the agents land the PR safely. Engineers do not need to supervise Codex; they can manage the work at a higher level._
_In this [demo video](https://player.vimeo.com/video/1186371009?h=5626e4b899), Symphony monitors a Linear board for work and spawns agents to handle the tasks. The agents complete the tasks and provide proof of work: CI status, PR review feedback, complexity analysis, and walkthrough videos. When accepted, the agents land the PR safely. Engineers do not need to supervise Codex; they can manage the work at a higher level._

> [!WARNING]
> Symphony is a low-key engineering preview for testing in trusted environments.
Expand Down
Loading