Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
62 changes: 62 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Release
Comment thread
ggallen marked this conversation as resolved.

on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+*"
Comment thread
ggallen marked this conversation as resolved.

permissions:
contents: write # required for gh release create and git push (v0 tag)

concurrency:
group: release
cancel-in-progress: false

jobs:
release:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0

- name: Create GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
TAG="${GITHUB_REF_NAME}"

if gh release view "${TAG}" >/dev/null 2>&1; then
echo "Release ${TAG} already exists, skipping"
exit 0
fi

PRERELEASE=""
if [[ "${TAG}" == *-* ]]; then
PRERELEASE="--prerelease"
fi

gh release create "${TAG}" \
--title "${TAG}" \
Comment thread
ggallen marked this conversation as resolved.
--notes "Synced with [fullsend ${TAG}](https://github.com/fullsend-ai/fullsend/releases/tag/${TAG})" \
${PRERELEASE}

- name: Move v0 floating tag
Comment thread
ggallen marked this conversation as resolved.
if: "!contains(github.ref_name, '-')"
run: |
set -euo pipefail
CURRENT=""
if git rev-parse v0 >/dev/null 2>&1; then
CURRENT=$(git rev-parse v0)
Comment thread
ggallen marked this conversation as resolved.
if ! git merge-base --is-ancestor "${CURRENT}" "${GITHUB_SHA}"; then
echo "::warning::v0 already points at a newer commit, skipping"
exit 0
fi
fi
git tag -f v0 "${GITHUB_SHA}"
if [[ -n "${CURRENT}" ]]; then
git push --force-with-lease="v0:${CURRENT}" origin v0
else
git push origin v0
fi
Comment thread
ggallen marked this conversation as resolved.
Comment thread
ggallen marked this conversation as resolved.
22 changes: 21 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,27 @@ Determine:
Use these criteria as checkpoints. If a checkpoint fails, fix the root
cause — do not weaken the check.

## 6. Skill resolution
## 6. Versioning and releases

This repository is versioned in lockstep with
[fullsend](https://github.com/fullsend-ai/fullsend). Version tags are
not created here directly — they are pushed by fullsend's release
workflow after GoReleaser succeeds.

**Workflows:**

- `fullsend.yaml` — centrally managed by fullsend for agent event
dispatch. Do not modify without coordinating with the fullsend repo.
- `release.yml` — repo-specific release automation. Triggered by
semver tag pushes from fullsend's release workflow. Creates a GitHub
Release and moves the `v0` floating tag.

**The `v0` tag** is a floating tag that always points to the latest
stable (non-prerelease) version. Downstream consumers can reference
`@v0` to track the latest release. Pre-release tags (`-rc.N`,
`-alpha.N`, `-beta.N`) do not move `v0`.

## 7. Skill resolution

Skills declared in agent frontmatter `skills:` arrays are resolved at
runtime from multiple sources in priority order: repo-level
Expand Down
52 changes: 52 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# fullsend agents

First-class agents for the [fullsend](https://github.com/fullsend-ai/fullsend) platform. These agents automate the software development lifecycle on GitHub — from issue triage through code implementation, review, fix, prioritization, and retrospective analysis.

## Agents

| Agent | Description | Trigger |
|-------|-------------|---------|
| **Triage** | Assesses issue sufficiency, searches for duplicates, applies control labels | New issues, `/fs-triage` |
| **Code** | Implements fixes and features following repo conventions | `ready-to-code` label, `/fs-code` |
| **Review** | Dispatches parallel sub-agents across six review dimensions | PR events, `/fs-review` |
| **Fix** | Implements targeted fixes from review feedback | Review comments, `/fs-fix` |
| **Prioritize** | Scores issues using the RICE framework | Schedule, `/fs-prioritize` |
| **Retro** | Analyzes completed workflows and proposes improvements | PR close, `/fs-retro` |

See [`docs/`](docs/) for detailed documentation on each agent.

## Repository structure

```
agents/ Agent system prompts (one per agent)
docs/ User-facing documentation
harness/ Harness configurations (sandbox image, timeout, scripts, plugins)
policies/ Sandbox security policies (filesystem, network, binary restrictions)
env/ Per-agent environment variables
schemas/ JSON Schema for validating agent structured output
scripts/ Pre-scripts (input validation) and post-scripts (GitHub mutations)
skills/ Reusable skill definitions loaded by agents at runtime
plugins/ Sandbox plugins (e.g. gopls LSP for the code agent)
common/ Shared configuration (GCP Vertex AI auth)
```

## Architecture

Agents run inside sandboxed containers with strict filesystem, network, and binary restrictions. Each agent follows a three-phase pipeline:

1. **Pre-script** — runs on the GitHub Actions runner to validate inputs and prepare the environment
2. **Sandbox** — runs the agent with restricted permissions; the agent writes code and produces structured JSON output
3. **Post-script** — runs on the runner with elevated permissions to perform GitHub mutations (pushing branches, creating PRs, posting comments, applying labels)

The agent never has direct write access to the repository. All mutations flow through post-scripts.

## Versioning

This repository is versioned in lockstep with [fullsend](https://github.com/fullsend-ai/fullsend). Tags are pushed by fullsend's release workflow after a successful release — they are not created here directly. The `v0` floating tag always points to the latest stable (non-prerelease) version.

## Workflows

| File | Managed by | Purpose |
|------|-----------|---------|
| `fullsend.yaml` | fullsend (centrally managed) | Routes GitHub events to agent dispatch workflows |
| `release.yml` | This repo | Creates GitHub Releases and moves the `v0` tag on version tag push |
Loading