feat: prepare for open-source migration to coleam00/Archon

- Replace all dynamous-community/remote-coding-agent references with coleam00/Archon
- Replace all ghcr.io/dynamous-community/remote-coding-agent with ghcr.io/coleam00/archon
- Change license from proprietary Dynamous to MIT
- Fix cd directory name in docs (remote-coding-agent → Archon)
- Remove hardcoded local paths from skills and docs
- Add Windows x64 binary to release pipeline (cross-compiled from Linux)
- Add --minify --bytecode flags to binary compilation
- Create PowerShell install script (scripts/install.ps1)
- Fix isBinaryBuild() detection for Bun 1.3.5+ (use import.meta.dir virtual FS check)
- Scaffold Astro Starlight docs site at website/ (Astro 6 + Starlight 0.38)
- Add deploy-docs.yml workflow for GitHub Pages
- Update test.yml branch triggers (develop → dev)
- Add install section with curl/PowerShell/Homebrew/Docker to README
- Add badges and archon.diy docs link to README
- Create SECURITY.md with vulnerability disclosure policy
- Update CONTRIBUTING.md for public audience
- Add website/ and eslint ignores for Astro-generated files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Cole Medin 2026-04-04 10:47:22 -05:00
parent 0cb45400ed
commit ae346c2a67
57 changed files with 8330 additions and 138 deletions

View file

@ -34,7 +34,7 @@ If `$ARGUMENTS` is empty, ask the user for the issue number before proceeding.
Ensure you are testing against the latest code on `main` so results are accurate.
```bash
cd /mnt/c/Users/colem/dynamous-community/remote-coding-agent
cd /path/to/archon
# Stash any local changes to avoid conflicts
git stash 2>/dev/null || true
@ -67,7 +67,7 @@ sleep 2
### 0.3 Start Archon Backend + Frontend
```bash
cd /mnt/c/Users/colem/dynamous-community/remote-coding-agent
cd /path/to/archon
# Start both backend and frontend together
bun run dev &

View file

@ -67,17 +67,17 @@ which agent-browser 2>/dev/null || npx agent-browser --version 2>/dev/null
Start both services. Backend must be up before frontend SSE connections work.
```bash
# From the repo root: /mnt/c/Users/colem/dynamous-community/remote-coding-agent
# From the repo root: /path/to/archon
# Start backend (port 3090)
cd /mnt/c/Users/colem/dynamous-community/remote-coding-agent && bun run dev:server &
cd /path/to/archon && bun run dev:server &
sleep 5 # Wait for server initialization + DB
# Verify backend is healthy
curl -s http://localhost:3090/api/health | head -c 200
# Start frontend (port 5173)
cd /mnt/c/Users/colem/dynamous-community/remote-coding-agent && bun run dev:web &
cd /path/to/archon && bun run dev:web &
sleep 5 # Wait for Vite dev server
# Verify frontend is serving
@ -100,7 +100,7 @@ curl -s http://localhost:3090/api/codebases | python3 -m json.tool 2>/dev/null |
# Register the current repo as a codebase (if none exist)
curl -s -X POST http://localhost:3090/api/codebases \
-H "Content-Type: application/json" \
-d '{"path": "/mnt/c/Users/colem/dynamous-community/remote-coding-agent"}'
-d '{"path": "/path/to/archon"}'
# Create a test conversation
curl -s -X POST http://localhost:3090/api/conversations \
@ -154,7 +154,7 @@ Take screenshots at each major test point: `agent-browser screenshot /tmp/archon
**2.2 Add Project (Local Path)**
- Click `+` again
- Fill in a local path (e.g., `/mnt/c/Users/colem/dynamous-community/remote-coding-agent`)
- Fill in a local path (e.g., `/path/to/archon`)
- Submit and verify the project appears
- Verify deduplication: if the path was already registered, it should not create a duplicate

View file

@ -61,7 +61,7 @@ complexity, each building on the previous. (Prepped by Rasmus.)
**Follow the full guide**: [part2-guide.md](part2-guide.md) — contains all
copy-paste prompts, feature tables, architecture diagrams, bash commands,
talking points, and cleanup steps. Runs on this codebase (`dynamous-community/remote-coding-agent`).
talking points, and cleanup steps. Runs on this codebase (`coleam00/Archon`).
**Section summary** (see part2-guide.md for full demo steps):

View file

@ -2,7 +2,7 @@
**Host**: Rasmus
**Duration**: ~35 min
**Codebase**: `dynamous-community/remote-coding-agent` (this repo)
**Codebase**: `coleam00/Archon` (this repo)
**Required**: Claude Code v2.1.63+, GitHub CLI (`gh`)
---

38
.github/workflows/deploy-docs.yml vendored Normal file
View file

@ -0,0 +1,38 @@
name: Deploy Docs
on:
push:
branches: [main]
paths: ['website/**']
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
concurrency:
group: pages
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: withastro/action@v3
with:
path: ./website
node-version: 22
package-manager: npm@latest
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

View file

@ -48,6 +48,8 @@ jobs:
type=semver,pattern={{major}}
type=sha
type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'main') }}
flavor: |
latest=auto
- name: Build and push
uses: docker/build-push-action@v5

View file

@ -26,6 +26,9 @@ jobs:
- os: ubuntu-latest
target: bun-linux-arm64
binary: archon-linux-arm64
- os: ubuntu-latest
target: bun-windows-x64
binary: archon-windows-x64.exe
- os: macos-latest
target: bun-darwin-x64
binary: archon-darwin-x64
@ -48,7 +51,7 @@ jobs:
- name: Build binary
run: |
mkdir -p dist
bun build --compile --target=${{ matrix.target }} --outfile=dist/${{ matrix.binary }} packages/cli/src/cli.ts
bun build --compile --minify --bytecode --target=${{ matrix.target }} --outfile=dist/${{ matrix.binary }} packages/cli/src/cli.ts
- name: Upload binary artifact
uses: actions/upload-artifact@v4
@ -101,36 +104,56 @@ jobs:
## Installation
### Quick Install (Recommended)
**macOS / Linux**
```bash
curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/scripts/install.sh | bash
curl -fsSL https://archon.diy/install | bash
```
**Windows (PowerShell)**
```powershell
irm https://archon.diy/install.ps1 | iex
```
**Homebrew (macOS / Linux)**
```bash
brew install coleam00/archon/archon
```
**Docker**
```bash
docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow list
```
### Manual Installation
**macOS (Apple Silicon)**
```bash
curl -fsSL https://github.com/dynamous-community/remote-coding-agent/releases/latest/download/archon-darwin-arm64 -o /usr/local/bin/archon
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-darwin-arm64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archon
```
**macOS (Intel)**
```bash
curl -fsSL https://github.com/dynamous-community/remote-coding-agent/releases/latest/download/archon-darwin-x64 -o /usr/local/bin/archon
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-darwin-x64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archon
```
**Linux (x64)**
```bash
curl -fsSL https://github.com/dynamous-community/remote-coding-agent/releases/latest/download/archon-linux-x64 -o /usr/local/bin/archon
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-linux-x64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archon
```
**Linux (ARM64)**
```bash
curl -fsSL https://github.com/dynamous-community/remote-coding-agent/releases/latest/download/archon-linux-arm64 -o /usr/local/bin/archon
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-linux-arm64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archon
```
**Windows (Manual)**
Download `archon-windows-x64.exe` from the assets below, rename to `archon.exe`, and add to your PATH.
### Verify installation
```bash
archon version

View file

@ -2,9 +2,9 @@ name: Test Suite
on:
push:
branches: [main, develop]
branches: [main, dev]
pull_request:
branches: [main, develop]
branches: [main, dev]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}

View file

@ -27,6 +27,9 @@ package-lock.json
.claude/
.archon/
# Website (Astro/Starlight - uses own formatting)
website/
# GitHub templates (don't auto-format)
.github/

View file

@ -1,6 +1,6 @@
## Project Overview
**Remote Agentic Coding Platform**: Control AI coding assistants (Claude Code SDK, Codex SDK) remotely from Slack, Telegram, and GitHub. Built with **Bun + TypeScript + SQLite/PostgreSQL**, single-developer tool for practitioners of the Dynamous Agentic Coding Course. Architecture prioritizes simplicity, flexibility, and user control.
**Remote Agentic Coding Platform**: Control AI coding assistants (Claude Code SDK, Codex SDK) remotely from Slack, Telegram, and GitHub. Built with **Bun + TypeScript + SQLite/PostgreSQL**, single-developer tool for AI-assisted development practitioners. Architecture prioritizes simplicity, flexibility, and user control.
## Core Principles

View file

@ -1,6 +1,6 @@
# Contributing
Thank you for your interest in contributing to the Remote Agentic Coding Platform.
Thank you for your interest in contributing to Archon!
## Getting Started
@ -20,9 +20,14 @@ Before submitting a PR, ensure:
bun run type-check # TypeScript types
bun run lint # ESLint
bun run format # Prettier
bun test # Bun tests
bun run test # All tests (per-package isolation)
# Or run the full validation suite:
bun run validate
```
**Important:** Use `bun run test` (not `bun test` from the repo root) to avoid mock pollution across packages.
### Commit Messages
- Use present tense ("Add feature" not "Added feature")
@ -31,7 +36,7 @@ bun test # Bun tests
### Pull Requests
1. Create a feature branch from `main`
1. Create a feature branch from `dev`
2. Make your changes
3. Ensure all checks pass
4. Submit a PR with a clear description
@ -49,4 +54,4 @@ See [CLAUDE.md](./CLAUDE.md) for detailed architecture documentation.
## Questions?
Open an issue for questions or discussion.
Open an [issue](https://github.com/coleam00/Archon/issues) or start a [discussion](https://github.com/coleam00/Archon/discussions).

View file

@ -46,7 +46,7 @@ RUN bun run build:web && \
FROM oven/bun:1.2-slim AS production
# OCI Labels for GHCR
LABEL org.opencontainers.image.source="https://github.com/dynamous-community/remote-coding-agent"
LABEL org.opencontainers.image.source="https://github.com/coleam00/Archon"
LABEL org.opencontainers.image.description="Control AI coding assistants remotely from Telegram, Slack, Discord, and GitHub"
LABEL org.opencontainers.image.licenses="MIT"

43
LICENSE
View file

@ -1,30 +1,21 @@
# DYNAMOUS COMMUNITY - PROPRIETARY LICENSE
MIT License
Copyright (c) 2025 Cole Medin / Dynamous
Copyright (c) 2025-2026 Cole Medin
## TERMS AND CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
1. **GRANT OF LICENSE**: This code (and other resources in the repository) is licensed exclusively to paying members of the Dynamous AI Mastery community.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
2. **RESTRICTED ACCESS**: Access to this repository and its contents is restricted to current, active paying members of the Dynamous community. It may not be shared with anyone outside of currently paying Dynamous community members in any way. No forking this repository to share with others or downloading the code and sending it to non-members.
3. **USAGE RIGHTS**: Members are permitted to use the code for personal and commercial projects. Members may modify the code for their own use.
4. **RESTRICTIONS**:
- Members may not redistribute, share, publish, or otherwise make available any portion of this code outside of the Dynamous community.
- Members may not sublicense, sell, rent, or lease the code to any third party.
- Members may not remove or alter any copyright notices or attributions in the code.
5. **TERMINATION**: This license automatically terminates if a member cancels their Dynamous membership or violates any of these terms. Upon termination, the member must cease all use of the code and delete all copies. The exception to this which applies to a membership cancellation can be read in #9.
6. **OWNERSHIP**: All intellectual property rights to the code, including copyright, remain with Cole Medin / Dynamous. This license does not transfer ownership of the code.
7. **NO WARRANTY**: The code is provided "as is" without warranty of any kind, express or implied. Cole Medin / Dynamous is not liable for any damages arising from the use of this code.
8. **UPDATES**: Cole Medin / Dynamous reserves the right to update or modify this license at any time. Continued use of the code after any modification constitutes acceptance of the new terms.
9. **LEGACY ACCESS**: If a member has maintained active paid membership for at least 3 months, they will retain personal usage rights to any code they accessed during their membership period, even after their membership ends. However, redistribution restrictions remain in effect permanently.
10. **COMMUNITY SUNSET PROVISION**: In the event that the Dynamous community officially closes or becomes inactive (defined as no updates to the repository for 12 consecutive months), all current and former members who maintained membership in good standing will automatically receive a perpetual license to use the code for personal and commercial projects, though redistribution restrictions will remain in effect.
By accessing or using this repository, you acknowledge that you have read this license, understand it, and agree to be bound by its terms.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View file

@ -1,11 +1,39 @@
# Archon
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![CI](https://github.com/coleam00/Archon/actions/workflows/test.yml/badge.svg)](https://github.com/coleam00/Archon/actions/workflows/test.yml)
[![Docs](https://img.shields.io/badge/docs-archon.diy-blue)](https://archon.diy)
Make AI coding deterministic and repeatable.
Archon is a workflow engine for AI coding agents. Define your development processes as YAML workflows — planning, implementation, validation, code review, PR creation — and run them reliably across all your projects.
Think n8n, but for software development.
## Install
**macOS / Linux**
```bash
curl -fsSL https://archon.diy/install | bash
```
**Windows (PowerShell)**
```powershell
irm https://archon.diy/install.ps1 | iex
```
**Homebrew**
```bash
brew install coleam00/archon/archon
```
**Docker**
```bash
docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow list
```
See the [Installation Guide](https://archon.diy/getting-started/installation/) for all options.
## Why Archon?
When you ask an AI agent to "fix this bug", what happens depends on the model's mood. It might skip planning. It might forget to run tests. It might write a PR description that ignores your template. Every run is different.
@ -115,8 +143,8 @@ See the [E2E Testing Guide](docs/e2e-testing.md) for platform-specific setup.
### Setup (2 min)
```bash
git clone https://github.com/dynamous-community/remote-coding-agent
cd remote-coding-agent
git clone https://github.com/coleam00/Archon
cd Archon
bun install
claude
```
@ -249,6 +277,8 @@ The Web UI and CLI work out of the box. Optionally connect a chat platform for r
## Documentation
Full documentation is available at **[archon.diy](https://archon.diy)**.
| Topic | Description |
|-------|-------------|
| [Getting Started](docs/getting-started.md) | Setup guide (Web UI or CLI) |
@ -267,8 +297,10 @@ The Web UI and CLI work out of the box. Optionally connect a chat platform for r
## Contributing
Contributions welcome. See the open [issues](https://github.com/dynamous-community/remote-coding-agent/issues) for things to work on.
Contributions welcome! See the open [issues](https://github.com/coleam00/Archon/issues) for things to work on.
Please read [CONTRIBUTING.md](CONTRIBUTING.md) before submitting a pull request.
## License
MIT
[MIT](LICENSE)

34
SECURITY.md Normal file
View file

@ -0,0 +1,34 @@
# Security Policy
## Reporting a Vulnerability
If you discover a security vulnerability in Archon, please report it responsibly.
**Do NOT open a public issue for security vulnerabilities.**
Instead, email **cole@dynamous.ai** or use [GitHub's private vulnerability reporting](https://github.com/coleam00/Archon/security/advisories/new).
Include:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Suggested fix (if any)
We'll acknowledge and respond as soon as possible.
## Scope
This policy covers the Archon codebase, including:
- CLI binary
- Server and Web UI
- Platform adapters (Slack, Telegram, GitHub, Discord)
- Docker images published to GHCR
## Best Practices for Users
- Never commit API keys to your repository
- Use environment variables or `.env` files (which are gitignored)
- When deploying the server publicly, use the Caddy reverse proxy with authentication (see `deploy/docker-compose.yml`)
- Keep Archon updated to the latest version

View file

@ -43,7 +43,7 @@ runcmd:
- ufw --force enable
# --- Clone and configure ---
- git clone https://github.com/dynamous-community/remote-coding-agent.git /opt/archon
- git clone https://github.com/coleam00/Archon.git /opt/archon
- cp /opt/archon/.env.example /opt/archon/.env
- cp /opt/archon/Caddyfile.example /opt/archon/Caddyfile
@ -85,7 +85,7 @@ runcmd:
Logs: docker compose logs -f
Health: curl https://your-domain.com/api/health
Docs: https://github.com/dynamous-community/remote-coding-agent/blob/main/docs/docker.md
Docs: https://github.com/coleam00/Archon/blob/main/docs/docker.md
============================================
DONE
- echo "[archon] Setup complete. Edit /opt/archon/.env and run docker compose up."

View file

@ -8,11 +8,11 @@
# 3. Run: docker compose up -d
#
# For full documentation, see:
# https://github.com/dynamous-community/remote-coding-agent
# https://github.com/coleam00/Archon
services:
app:
image: ghcr.io/dynamous-community/remote-coding-agent:latest
image: ghcr.io/coleam00/archon:latest
restart: unless-stopped
env_file: .env
environment:

View file

@ -8,8 +8,8 @@ Run AI-powered workflows from your terminal.
1. Clone the repository and install dependencies:
```bash
git clone https://github.com/dynamous-community/remote-coding-agent
cd remote-coding-agent
git clone https://github.com/coleam00/Archon
cd Archon
bun install
```

View file

@ -231,7 +231,7 @@ sudo chown deploy:deploy /remote-coding-agent
# Clone repository into the directory
cd /remote-coding-agent
git clone https://github.com/dynamous-community/remote-coding-agent .
git clone https://github.com/coleam00/Archon .
```
---

View file

@ -244,7 +244,7 @@ commands:
### Docker with Custom Volume
```bash
docker run -v /my/data:/.archon ghcr.io/dynamous-community/remote-coding-agent
docker run -v /my/data:/.archon ghcr.io/coleam00/archon
```
## Streaming Modes

View file

@ -20,8 +20,8 @@ Local development with SQLite is the recommended default. No database setup is n
```bash
# 1. Clone and install
git clone https://github.com/dynamous-community/remote-coding-agent
cd remote-coding-agent
git clone https://github.com/coleam00/Archon
cd Archon
bun install
# 2. Configure environment
@ -84,8 +84,8 @@ Use this option when your database is hosted externally (Supabase, Neon, AWS RDS
```bash
# 1. Get the deployment files
mkdir remote-agent && cd remote-agent
curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/deploy/docker-compose.yml -o docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/deploy/.env.example -o .env
curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/deploy/docker-compose.yml -o docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/deploy/.env.example -o .env
# 2. Configure (edit .env with your tokens and DATABASE_URL)
nano .env

View file

@ -88,8 +88,8 @@ docker compose version
### 2. Clone the repo
```bash
git clone https://github.com/dynamous-community/remote-coding-agent.git
cd remote-coding-agent
git clone https://github.com/coleam00/Archon.git
cd Archon
```
### 3. Configure environment
@ -400,8 +400,8 @@ For users who don't need to build from source:
```bash
mkdir archon && cd archon
curl -O https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/deploy/docker-compose.yml
curl -O https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/.env.example
curl -O https://raw.githubusercontent.com/coleam00/Archon/main/deploy/docker-compose.yml
curl -O https://raw.githubusercontent.com/coleam00/Archon/main/.env.example
cp .env.example .env
# Edit .env — set AI credentials, DOMAIN, etc.
@ -409,7 +409,7 @@ cp .env.example .env
docker compose up -d
```
Uses `ghcr.io/dynamous-community/remote-coding-agent:latest`. To add PostgreSQL, uncomment the `postgres` service in the compose file and set `DATABASE_URL` in `.env`.
Uses `ghcr.io/coleam00/archon:latest`. To add PostgreSQL, uncomment the `postgres` service in the compose file and set `DATABASE_URL` in `.env`.
---

View file

@ -76,8 +76,8 @@ Screenshots must be saved to a WSL-native path first, then copied to the Windows
```bash
# Save to WSL home, then copy to project
wsl -d Ubuntu -- bash -c '
agent-browser screenshot /home/coleam/screenshot.png 2>&1 &&
cp /home/coleam/screenshot.png /mnt/c/Users/colem/dynamous-community/remote-coding-agent/e2e-screenshots/my-test.png
agent-browser screenshot /home/user/screenshot.png 2>&1 &&
cp /home/user/screenshot.png /path/to/archon/e2e-screenshots/my-test.png
'
```

View file

@ -41,16 +41,16 @@ Linux/macOS:
```bash
cd ~ # or your preferred directory
git clone https://github.com/dynamous-community/remote-coding-agent
cd remote-coding-agent
git clone https://github.com/coleam00/Archon
cd Archon
```
Windows (PowerShell):
```powershell
cd $HOME # or your preferred directory
git clone https://github.com/dynamous-community/remote-coding-agent
cd remote-coding-agent
git clone https://github.com/coleam00/Archon
cd Archon
```
**Option B: /opt** (Linux/macOS server installs — keeps things tidy)
@ -58,7 +58,7 @@ cd remote-coding-agent
```bash
sudo mkdir -p /opt/archon
sudo chown $USER:$USER /opt/archon
git clone https://github.com/dynamous-community/remote-coding-agent /opt/archon
git clone https://github.com/coleam00/Archon /opt/archon
cd /opt/archon
```

View file

@ -65,7 +65,7 @@ If you maintain a Homebrew tap (`homebrew-archon`), copy the updated formula the
```bash
# Test the install script (only works if repo is public)
curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/scripts/install.sh | bash
curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/scripts/install.sh | bash
# Verify version
archon version
@ -78,7 +78,7 @@ archon version
>
> ```bash
> # Download and install using gh (requires GitHub authentication)
> gh release download v0.2.0 --repo dynamous-community/remote-coding-agent \
> gh release download v0.2.0 --repo coleam00/Archon \
> --pattern "archon-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/x86_64/x64/;s/aarch64/arm64/')" \
> --dir /tmp/archon-install
>

View file

@ -35,8 +35,8 @@ WSL2 provides a full Linux environment that runs seamlessly on Windows.
4. **Clone and install Archon**:
```bash
git clone https://github.com/dynamous-community/remote-coding-agent
cd remote-coding-agent
git clone https://github.com/coleam00/Archon
cd Archon
bun install
```

View file

@ -12,6 +12,7 @@ export default tseslint.config(
'dist/**',
'coverage/**',
'.agents/examples/**',
'website/**',
'workspace/**',
'worktrees/**',
'.claude/worktrees/**',

View file

@ -1,33 +1,33 @@
# Homebrew formula for Archon CLI
# To install: brew install dynamous-community/tap/archon
# To install: brew install coleam00/archon/archon
#
# This formula downloads pre-built binaries from GitHub releases.
# For development, see: https://github.com/dynamous-community/remote-coding-agent
# For development, see: https://github.com/coleam00/Archon
class Archon < Formula
desc "Remote agentic coding platform - control AI assistants from anywhere"
homepage "https://github.com/dynamous-community/remote-coding-agent"
homepage "https://github.com/coleam00/Archon"
version "0.2.0"
license "MIT"
on_macos do
on_arm do
url "https://github.com/dynamous-community/remote-coding-agent/releases/download/v#{version}/archon-darwin-arm64"
url "https://github.com/coleam00/Archon/releases/download/v#{version}/archon-darwin-arm64"
sha256 "PLACEHOLDER_SHA256_DARWIN_ARM64"
end
on_intel do
url "https://github.com/dynamous-community/remote-coding-agent/releases/download/v#{version}/archon-darwin-x64"
url "https://github.com/coleam00/Archon/releases/download/v#{version}/archon-darwin-x64"
sha256 "PLACEHOLDER_SHA256_DARWIN_X64"
end
end
on_linux do
on_arm do
url "https://github.com/dynamous-community/remote-coding-agent/releases/download/v#{version}/archon-linux-arm64"
url "https://github.com/coleam00/Archon/releases/download/v#{version}/archon-linux-arm64"
sha256 "PLACEHOLDER_SHA256_LINUX_ARM64"
end
on_intel do
url "https://github.com/dynamous-community/remote-coding-agent/releases/download/v#{version}/archon-linux-x64"
url "https://github.com/coleam00/Archon/releases/download/v#{version}/archon-linux-x64"
sha256 "PLACEHOLDER_SHA256_LINUX_X64"
end
end

View file

@ -52,7 +52,7 @@ let cachedGlobalConfig: GlobalConfig | null = null;
* Default config file content
*/
const DEFAULT_CONFIG_CONTENT = `# Archon Global Configuration
# See: https://github.com/dynamous-community/remote-coding-agent/blob/main/docs/configuration.md
# See: https://github.com/coleam00/Archon/blob/main/docs/configuration.md
# Bot display name (shown in messages)
# botName: Archon

View file

@ -1833,7 +1833,7 @@ Talk naturally — the orchestrator routes your requests to the right workflow a
// Create default config.yaml
const defaultConfig = `# Archon repository configuration
# See: https://github.com/dynamous-community/remote-coding-agent
# See: https://github.com/coleam00/Archon
# AI assistant preference (optional - overrides global default)
# assistant: claude

View file

@ -195,7 +195,7 @@ describe('parseOrchestratorCommands', () => {
const planWorkflow = makeTestWorkflow({ name: 'plan' });
const myProject = makeCodebase('my-project');
const orgProject = makeCodebase('dynamous-community/remote-coding-agent');
const orgProject = makeCodebase('coleam00/Archon');
const workflows = [assistWorkflow, implementWorkflow, planWorkflow];
const codebases = [myProject, orgProject];
@ -390,19 +390,19 @@ describe('parseOrchestratorCommands', () => {
});
test('matches project by last path segment (partial match)', () => {
// "dynamous-community/remote-coding-agent" matched by "remote-coding-agent"
const response = '/invoke-workflow assist --project remote-coding-agent';
// "coleam00/Archon" matched by "Archon"
const response = '/invoke-workflow assist --project Archon';
const result = parseOrchestratorCommands(response, codebases, workflows);
expect(result.workflowInvocation).not.toBeNull();
expect(result.workflowInvocation?.projectName).toBe('dynamous-community/remote-coding-agent');
expect(result.workflowInvocation?.projectName).toBe('coleam00/Archon');
});
test('partial match is case-insensitive', () => {
const response = '/invoke-workflow assist --project REMOTE-CODING-AGENT';
const response = '/invoke-workflow assist --project archon';
const result = parseOrchestratorCommands(response, codebases, workflows);
expect(result.workflowInvocation?.projectName).toBe('dynamous-community/remote-coding-agent');
expect(result.workflowInvocation?.projectName).toBe('coleam00/Archon');
});
test('returns null workflowInvocation when project does not exist', () => {
@ -420,11 +420,11 @@ describe('parseOrchestratorCommands', () => {
});
test('uses matched codebase name (not the input name) in result', () => {
// Input "remote-coding-agent" should resolve to full name "dynamous-community/remote-coding-agent"
const response = '/invoke-workflow assist --project remote-coding-agent';
// Input "Archon" should resolve to full name "coleam00/Archon"
const response = '/invoke-workflow assist --project Archon';
const result = parseOrchestratorCommands(response, codebases, workflows);
expect(result.workflowInvocation?.projectName).toBe('dynamous-community/remote-coding-agent');
expect(result.workflowInvocation?.projectName).toBe('coleam00/Archon');
});
});

View file

@ -126,7 +126,7 @@ export function parseOrchestratorCommands(
const workflow = findWorkflow(workflowName, [...workflows]);
if (workflow) {
// Validate project exists (case-insensitive, supports partial name matching)
// e.g., "remote-coding-agent" matches "dynamous-community/remote-coding-agent"
// e.g., "Archon" matches "coleam00/Archon"
const matchedCodebase = findCodebaseByName(codebases, projectName);
if (matchedCodebase) {
// Extract message before the command

View file

@ -409,7 +409,7 @@ describe('POST /api/conversations with message (atomic create+send)', () => {
// Platform conversation IDs from forge adapters contain slashes and # characters:
// e.g. "CyberFitz-LLC/devops-platform#24" — these must be URL-encoded by the client
// and correctly decoded by the server route params.
// Ref: https://github.com/dynamous-community/remote-coding-agent/issues/476
// Ref: https://github.com/coleam00/Archon/issues/476
describe('GET /api/conversations/:id — forge platform IDs with encoded slashes', () => {
const GITEA_CONV = {
id: 'gitea-internal-uuid',

View file

@ -1,37 +1,37 @@
import { describe, it, expect, beforeEach, afterEach } from 'bun:test';
import { isBinaryBuild, BUNDLED_COMMANDS, BUNDLED_WORKFLOWS } from './bundled-defaults';
import { describe, it, expect } from 'bun:test';
import {
isBinaryBuild,
isBunVirtualFs,
BUNDLED_COMMANDS,
BUNDLED_WORKFLOWS,
} from './bundled-defaults';
describe('bundled-defaults', () => {
describe('isBunVirtualFs', () => {
it('should detect Linux/macOS virtual filesystem paths', () => {
expect(isBunVirtualFs('/$bunfs/root/bundled-defaults')).toBe(true);
expect(isBunVirtualFs('/$bunfs/root/')).toBe(true);
});
it('should detect Windows virtual filesystem paths (backslash)', () => {
expect(isBunVirtualFs('B:\\~BUN\\root\\bundled-defaults')).toBe(true);
expect(isBunVirtualFs('B:\\~BUN\\root')).toBe(true);
});
it('should detect Windows virtual filesystem paths (forward slash)', () => {
expect(isBunVirtualFs('B:/~BUN/root/bundled-defaults')).toBe(true);
expect(isBunVirtualFs('B:/~BUN/root')).toBe(true);
});
it('should return false for real filesystem paths', () => {
expect(isBunVirtualFs('/home/user/project/src')).toBe(false);
expect(isBunVirtualFs('C:\\Users\\user\\project\\src')).toBe(false);
expect(isBunVirtualFs('/tmp/test')).toBe(false);
});
});
describe('isBinaryBuild', () => {
let originalVersions: NodeJS.ProcessVersions;
beforeEach(() => {
originalVersions = process.versions;
});
afterEach(() => {
Object.defineProperty(process, 'versions', { value: originalVersions, writable: true });
});
it('should return false when running with Bun', () => {
// In test environment, process.versions.bun is set by the Bun runtime
expect((process.versions as Record<string, string | undefined>).bun).toBeDefined();
expect(isBinaryBuild()).toBe(false);
});
it('should return true when process.versions.bun is absent (compiled binary)', () => {
Object.defineProperty(process, 'versions', {
value: { node: '18.0.0' },
writable: true,
});
expect(isBinaryBuild()).toBe(true);
});
it('should return false when process.versions.bun is present', () => {
Object.defineProperty(process, 'versions', {
value: { ...process.versions, bun: '1.1.0' },
writable: true,
});
it('should return false when running in test environment (not compiled)', () => {
expect(isBinaryBuild()).toBe(false);
});
});

View file

@ -100,10 +100,23 @@ export const BUNDLED_WORKFLOWS: Record<string, string> = {
'archon-adversarial-dev': archonAdversarialDevWf,
};
/**
* Check if a given module directory path belongs to a compiled Bun binary.
*
* Compiled Bun binaries use a virtual filesystem for bundled modules:
* - Linux/macOS: `/$bunfs/root/`
* - Windows: `B:\~BUN\root\` or `B:/~BUN/root/`
*/
export function isBunVirtualFs(dir: string): boolean {
return dir.startsWith('/$bunfs/') || dir.startsWith('B:\\~BUN\\') || dir.startsWith('B:/~BUN/');
}
/**
* Check if the current process is running as a compiled binary (not via Bun CLI).
* `process.versions.bun` is set by the Bun runtime; absent in standalone binaries.
*
* Note: `process.versions.bun` is still set in compiled binaries as of Bun 1.3.5,
* so we use the virtual filesystem path prefix for detection instead.
*/
export function isBinaryBuild(): boolean {
return (process.versions as Record<string, string | undefined>).bun === undefined;
return isBunVirtualFs(import.meta.dir);
}

307
scripts/install.ps1 Normal file
View file

@ -0,0 +1,307 @@
# scripts/install.ps1
# Install Archon CLI from GitHub Releases on Windows
#
# Usage: irm https://archon.diy/install.ps1 | iex
#
# Options (via environment variables):
# $env:VERSION - Specific version to install (default: latest)
# $env:INSTALL_DIR - Installation directory (default: $env:USERPROFILE\.archon\bin)
# $env:SKIP_CHECKSUM - Set to "true" to skip checksum verification (not recommended)
#
# Examples:
# # Install latest
# irm https://archon.diy/install.ps1 | iex
#
# # Install specific version
# $env:VERSION = "v0.2.0"; irm https://archon.diy/install.ps1 | iex
#
# # Install to custom directory
# $env:INSTALL_DIR = "C:\tools\archon"; irm https://archon.diy/install.ps1 | iex
#Requires -Version 5.1
Set-StrictMode -Version Latest
$ErrorActionPreference = 'Stop'
# ---------------------------------------------------------------------------
# Configuration
# ---------------------------------------------------------------------------
$REPO = "coleam00/Archon"
$BINARY_NAME = "archon"
$VERSION = if ($env:VERSION) { $env:VERSION } else { "latest" }
$INSTALL_DIR = if ($env:INSTALL_DIR) { $env:INSTALL_DIR } else { "$env:USERPROFILE\.archon\bin" }
$SKIP_CHECKSUM = ($env:SKIP_CHECKSUM -eq "true")
# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------
function Write-Info { param([string]$Msg) Write-Host "[INFO] $Msg" -ForegroundColor Cyan }
function Write-Warn { param([string]$Msg) Write-Host "[WARN] $Msg" -ForegroundColor Yellow }
function Write-Err { param([string]$Msg) Write-Host "[ERROR] $Msg" -ForegroundColor Red }
function Write-Ok { param([string]$Msg) Write-Host "[OK] $Msg" -ForegroundColor Green }
# ---------------------------------------------------------------------------
# Banner
# ---------------------------------------------------------------------------
function Show-Banner {
Write-Host ""
Write-Host " +---------------------------------------+" -ForegroundColor Cyan
Write-Host " | Archon CLI Installer |" -ForegroundColor Cyan
Write-Host " | Windows (PowerShell) |" -ForegroundColor Cyan
Write-Host " +---------------------------------------+" -ForegroundColor Cyan
Write-Host ""
}
# ---------------------------------------------------------------------------
# Architecture detection
# ---------------------------------------------------------------------------
function Get-Arch {
$procArch = $env:PROCESSOR_ARCHITECTURE
if (-not $procArch) {
# Fallback: query the registry directly
try {
$procArch = (Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' -Name PROCESSOR_ARCHITECTURE).PROCESSOR_ARCHITECTURE
} catch {
$procArch = "AMD64"
}
}
switch ($procArch.ToUpper()) {
"ARM64" {
Write-Warn "ARM64 architecture detected."
Write-Warn "Windows ARM64 binaries are not yet available for Archon."
Write-Warn "You can try running the x64 binary under emulation, or build from source:"
Write-Warn " https://github.com/$REPO"
throw "Unsupported architecture: ARM64 (no binary available yet)"
}
default { return "x64" }
}
}
# ---------------------------------------------------------------------------
# URL helpers
# ---------------------------------------------------------------------------
function Get-DownloadUrl {
param([string]$Arch, [string]$Ver)
$filename = "$BINARY_NAME-windows-$Arch.exe"
if ($Ver -eq "latest") {
return "https://github.com/$REPO/releases/latest/download/$filename"
} else {
return "https://github.com/$REPO/releases/download/$Ver/$filename"
}
}
function Get-ChecksumsUrl {
param([string]$Ver)
if ($Ver -eq "latest") {
return "https://github.com/$REPO/releases/latest/download/checksums.txt"
} else {
return "https://github.com/$REPO/releases/download/$Ver/checksums.txt"
}
}
# ---------------------------------------------------------------------------
# Download helper (supports progress + resume)
# ---------------------------------------------------------------------------
function Invoke-Download {
param([string]$Url, [string]$OutFile)
# Suppress the progress bar to avoid slow rendering in older PowerShell
$prevProgress = $ProgressPreference
$ProgressPreference = 'SilentlyContinue'
try {
Invoke-WebRequest -Uri $Url -OutFile $OutFile -UseBasicParsing
} finally {
$ProgressPreference = $prevProgress
}
}
# ---------------------------------------------------------------------------
# Checksum verification
# ---------------------------------------------------------------------------
function Confirm-Checksum {
param([string]$BinaryPath, [string]$Arch, [string]$ChecksumsUrl)
if ($SKIP_CHECKSUM) {
Write-Warn "Checksum verification SKIPPED by user request (SKIP_CHECKSUM=true)"
Write-Warn "This binary has NOT been verified - use at your own risk"
return
}
Write-Info "Verifying checksum..."
# Download checksums file
$tmpChecksums = [System.IO.Path]::GetTempFileName()
try {
try {
Invoke-Download -Url $ChecksumsUrl -OutFile $tmpChecksums
} catch {
Write-Err "Could not download checksums file from $ChecksumsUrl"
Write-Err "Cannot verify binary integrity."
Write-Err "To install anyway (not recommended): `$env:SKIP_CHECKSUM = 'true'; irm ... | iex"
throw "Checksum download failed"
}
$checksumContent = Get-Content -Raw $tmpChecksums
# Find the line matching our binary filename
$expectedFilename = "$BINARY_NAME-windows-$Arch.exe"
$expectedHash = $null
foreach ($line in ($checksumContent -split "`n")) {
$line = $line.Trim()
if ($line -match $expectedFilename) {
# checksums.txt is typically "<hash> <filename>" (sha256sum format)
$expectedHash = ($line -split '\s+')[0]
break
}
}
if (-not $expectedHash) {
Write-Err "Could not find checksum for $expectedFilename in checksums file"
Write-Err "This may indicate a corrupted or incomplete release."
Write-Err "To install anyway (not recommended): `$env:SKIP_CHECKSUM = 'true'; irm ... | iex"
throw "Checksum entry not found"
}
# Compute actual hash
$actualHash = (Get-FileHash -Path $BinaryPath -Algorithm SHA256).Hash.ToLower()
$expectedHash = $expectedHash.ToLower()
if ($actualHash -ne $expectedHash) {
Write-Err "Checksum verification FAILED!"
Write-Err "Expected : $expectedHash"
Write-Err "Actual : $actualHash"
Write-Err "The downloaded binary may be corrupted or tampered with."
throw "Checksum mismatch"
}
Write-Ok "Checksum verified"
} finally {
if (Test-Path $tmpChecksums) { Remove-Item $tmpChecksums -Force -ErrorAction SilentlyContinue }
}
}
# ---------------------------------------------------------------------------
# PATH management
# ---------------------------------------------------------------------------
function Add-ToUserPath {
param([string]$Dir)
$currentPath = [Environment]::GetEnvironmentVariable('Path', 'User')
$pathParts = $currentPath -split ';' | Where-Object { $_ -ne '' }
if ($Dir -notin $pathParts) {
$pathParts += $Dir
[Environment]::SetEnvironmentVariable('Path', ($pathParts -join ';'), 'User')
Write-Ok "Added $Dir to your user PATH"
Write-Info "Restart your terminal (or open a new one) for the PATH change to take effect"
} else {
Write-Info "$Dir is already in your PATH"
}
}
# ---------------------------------------------------------------------------
# Main
# ---------------------------------------------------------------------------
function Main {
Show-Banner
# --- Architecture ---
Write-Info "Detecting architecture..."
try {
$arch = Get-Arch
} catch {
Write-Err $_.Exception.Message
exit 1
}
Write-Ok "Architecture: $arch"
# --- URLs ---
$downloadUrl = Get-DownloadUrl -Arch $arch -Ver $VERSION
$checksumsUrl = Get-ChecksumsUrl -Ver $VERSION
Write-Info "Version : $VERSION"
Write-Info "Download URL: $downloadUrl"
# --- Temp file ---
$tmpDir = [System.IO.Path]::GetTempPath()
$tmpBinary = Join-Path $tmpDir "$BINARY_NAME-windows-$arch.exe"
try {
# --- Download binary ---
Write-Info "Downloading binary..."
try {
Invoke-Download -Url $downloadUrl -OutFile $tmpBinary
} catch {
Write-Err "Failed to download binary from $downloadUrl"
Write-Err $_.Exception.Message
exit 1
}
Write-Ok "Downloaded successfully"
# --- Checksum ---
try {
Confirm-Checksum -BinaryPath $tmpBinary -Arch $arch -ChecksumsUrl $checksumsUrl
} catch {
Write-Err $_.Exception.Message
exit 1
}
# --- Create install directory ---
if (-not (Test-Path $INSTALL_DIR)) {
Write-Info "Creating install directory: $INSTALL_DIR"
try {
New-Item -ItemType Directory -Path $INSTALL_DIR -Force | Out-Null
} catch {
Write-Err "Failed to create install directory: $INSTALL_DIR"
Write-Err $_.Exception.Message
exit 1
}
}
# --- Copy binary ---
$destBinary = Join-Path $INSTALL_DIR "$BINARY_NAME.exe"
Write-Info "Installing to $destBinary..."
try {
Copy-Item -Path $tmpBinary -Destination $destBinary -Force
} catch {
Write-Err "Failed to install binary to $destBinary"
Write-Err $_.Exception.Message
exit 1
}
Write-Ok "Installed to $destBinary"
# --- Add to PATH ---
try {
Add-ToUserPath -Dir $INSTALL_DIR
} catch {
Write-Warn "Could not update PATH automatically: $($_.Exception.Message)"
Write-Warn "Add the following to your PATH manually: $INSTALL_DIR"
}
# --- Verify installation ---
Write-Host ""
Write-Info "Verifying installation..."
try {
$versionOutput = & $destBinary version 2>&1
Write-Host $versionOutput
Write-Ok "Installation complete!"
} catch {
Write-Warn "Binary installed but version check failed: $($_.Exception.Message)"
Write-Warn "The binary may not work correctly in this environment."
Write-Warn "Verify manually with: $destBinary version"
}
# --- Getting started ---
Write-Host ""
Write-Host " Get started:" -ForegroundColor Cyan
Write-Host " archon workflow list"
Write-Host " archon workflow run assist `"What workflows are available?`""
Write-Host ""
Write-Host " Note: Open a new terminal window so the updated PATH takes effect." -ForegroundColor Yellow
Write-Host ""
} finally {
if (Test-Path $tmpBinary) { Remove-Item $tmpBinary -Force -ErrorAction SilentlyContinue }
}
}
Main

View file

@ -3,7 +3,7 @@
# Install Archon CLI from GitHub releases
#
# Usage:
# curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/scripts/install.sh | bash
# curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/scripts/install.sh | bash
#
# Options (via environment variables):
# VERSION - Specific version to install (default: latest)
@ -12,7 +12,7 @@
#
# Examples:
# # Install latest
# curl -fsSL https://raw.githubusercontent.com/dynamous-community/remote-coding-agent/main/scripts/install.sh | bash
# curl -fsSL https://raw.githubusercontent.com/coleam00/Archon/main/scripts/install.sh | bash
#
# # Install specific version
# VERSION=v0.2.0 curl -fsSL ... | bash
@ -23,7 +23,7 @@
set -euo pipefail
# Configuration
REPO="dynamous-community/remote-coding-agent"
REPO="coleam00/Archon"
BINARY_NAME="archon"
VERSION="${VERSION:-latest}"
INSTALL_DIR="${INSTALL_DIR:-/usr/local/bin}"

View file

@ -17,7 +17,7 @@ fi
# Remove 'v' prefix if present for formula version
FORMULA_VERSION="${VERSION#v}"
REPO="dynamous-community/remote-coding-agent"
REPO="coleam00/Archon"
FORMULA_FILE="homebrew/archon.rb"
echo "Updating Homebrew formula for version $VERSION"

BIN
website/--path Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

View file

@ -0,0 +1,628 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"editUrl": {
"default": true,
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "boolean"
}
]
},
"head": {
"default": [],
"type": "array",
"items": {
"type": "object",
"properties": {
"tag": {
"type": "string",
"enum": [
"title",
"base",
"link",
"style",
"meta",
"script",
"noscript",
"template"
]
},
"attrs": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "boolean"
},
{}
]
}
},
"content": {
"type": "string"
}
},
"required": [
"tag"
]
}
},
"tableOfContents": {
"anyOf": [
{
"type": "object",
"properties": {
"minHeadingLevel": {
"default": 2,
"type": "integer",
"minimum": 1,
"maximum": 6
},
"maxHeadingLevel": {
"default": 3,
"type": "integer",
"minimum": 1,
"maximum": 6
}
}
},
{
"type": "boolean"
}
]
},
"template": {
"default": "doc",
"type": "string",
"enum": [
"doc",
"splash"
]
},
"hero": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"tagline": {
"type": "string"
},
"image": {
"anyOf": [
{
"type": "object",
"properties": {
"alt": {
"default": "",
"type": "string"
},
"file": {
"type": "string"
}
},
"required": [
"file"
]
},
{
"type": "object",
"properties": {
"alt": {
"default": "",
"type": "string"
},
"dark": {
"type": "string"
},
"light": {
"type": "string"
}
},
"required": [
"dark",
"light"
]
},
{
"type": "object",
"properties": {
"html": {
"type": "string"
}
},
"required": [
"html"
]
}
]
},
"actions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"link": {
"type": "string"
},
"variant": {
"default": "primary",
"type": "string",
"enum": [
"primary",
"secondary",
"minimal"
]
},
"icon": {
"anyOf": [
{
"type": "string",
"enum": [
"up-caret",
"down-caret",
"right-caret",
"left-caret",
"up-arrow",
"down-arrow",
"right-arrow",
"left-arrow",
"bars",
"translate",
"pencil",
"pen",
"document",
"add-document",
"setting",
"external",
"download",
"cloud-download",
"moon",
"sun",
"laptop",
"open-book",
"information",
"magnifier",
"forward-slash",
"close",
"error",
"warning",
"approve-check-circle",
"approve-check",
"rocket",
"star",
"puzzle",
"list-format",
"random",
"comment",
"comment-alt",
"heart",
"github",
"gitlab",
"bitbucket",
"codePen",
"farcaster",
"discord",
"gitter",
"twitter",
"x.com",
"mastodon",
"codeberg",
"youtube",
"threads",
"linkedin",
"twitch",
"azureDevOps",
"microsoftTeams",
"instagram",
"stackOverflow",
"telegram",
"rss",
"facebook",
"email",
"phone",
"reddit",
"patreon",
"signal",
"slack",
"matrix",
"hackerOne",
"openCollective",
"blueSky",
"discourse",
"zulip",
"pinterest",
"tiktok",
"astro",
"alpine",
"pnpm",
"biome",
"bun",
"mdx",
"apple",
"linux",
"homebrew",
"nix",
"starlight",
"pkl",
"node",
"cloudflare",
"vercel",
"netlify",
"deno",
"jsr",
"nostr",
"backstage",
"confluence",
"jira",
"storybook",
"vscode",
"jetbrains",
"zed",
"vim",
"figma",
"sketch",
"npm",
"sourcehut",
"substack",
"chrome",
"edge",
"firefox",
"safari",
"seti:folder",
"seti:bsl",
"seti:mdo",
"seti:salesforce",
"seti:asm",
"seti:bicep",
"seti:bazel",
"seti:c",
"seti:c-sharp",
"seti:html",
"seti:cpp",
"seti:clojure",
"seti:coldfusion",
"seti:config",
"seti:crystal",
"seti:crystal_embedded",
"seti:json",
"seti:css",
"seti:csv",
"seti:xls",
"seti:cu",
"seti:cake",
"seti:cake_php",
"seti:d",
"seti:word",
"seti:elixir",
"seti:elixir_script",
"seti:hex",
"seti:elm",
"seti:favicon",
"seti:f-sharp",
"seti:git",
"seti:go",
"seti:godot",
"seti:gradle",
"seti:grails",
"seti:graphql",
"seti:hacklang",
"seti:haml",
"seti:mustache",
"seti:haskell",
"seti:haxe",
"seti:jade",
"seti:java",
"seti:javascript",
"seti:jinja",
"seti:julia",
"seti:karma",
"seti:kotlin",
"seti:dart",
"seti:liquid",
"seti:livescript",
"seti:lua",
"seti:markdown",
"seti:argdown",
"seti:info",
"seti:clock",
"seti:maven",
"seti:nim",
"seti:github",
"seti:notebook",
"seti:nunjucks",
"seti:npm",
"seti:ocaml",
"seti:odata",
"seti:perl",
"seti:php",
"seti:pipeline",
"seti:pddl",
"seti:plan",
"seti:happenings",
"seti:powershell",
"seti:prisma",
"seti:pug",
"seti:puppet",
"seti:purescript",
"seti:python",
"seti:react",
"seti:rescript",
"seti:R",
"seti:ruby",
"seti:rust",
"seti:sass",
"seti:spring",
"seti:slim",
"seti:smarty",
"seti:sbt",
"seti:scala",
"seti:ethereum",
"seti:stylus",
"seti:svelte",
"seti:swift",
"seti:db",
"seti:terraform",
"seti:tex",
"seti:default",
"seti:twig",
"seti:typescript",
"seti:tsconfig",
"seti:vala",
"seti:vite",
"seti:vue",
"seti:wasm",
"seti:wat",
"seti:xml",
"seti:yml",
"seti:prolog",
"seti:zig",
"seti:zip",
"seti:wgt",
"seti:illustrator",
"seti:photoshop",
"seti:pdf",
"seti:font",
"seti:image",
"seti:svg",
"seti:sublime",
"seti:code-search",
"seti:shell",
"seti:video",
"seti:audio",
"seti:windows",
"seti:jenkins",
"seti:babel",
"seti:bower",
"seti:docker",
"seti:code-climate",
"seti:eslint",
"seti:firebase",
"seti:firefox",
"seti:gitlab",
"seti:grunt",
"seti:gulp",
"seti:ionic",
"seti:platformio",
"seti:rollup",
"seti:stylelint",
"seti:yarn",
"seti:webpack",
"seti:lock",
"seti:license",
"seti:makefile",
"seti:heroku",
"seti:todo",
"seti:ignored"
]
},
{
"type": "string",
"pattern": "^<svg.*"
}
]
},
"attrs": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
}
]
}
}
},
"required": [
"text",
"link"
]
}
}
}
},
"lastUpdated": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "boolean"
}
]
},
"prev": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "string"
},
{
"type": "object",
"properties": {
"link": {
"type": "string"
},
"label": {
"type": "string"
}
},
"additionalProperties": false
}
]
},
"next": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "string"
},
{
"type": "object",
"properties": {
"link": {
"type": "string"
},
"label": {
"type": "string"
}
},
"additionalProperties": false
}
]
},
"sidebar": {
"default": {},
"type": "object",
"properties": {
"order": {
"type": "number"
},
"label": {
"type": "string"
},
"hidden": {
"default": false,
"type": "boolean"
},
"badge": {
"anyOf": [
{
"type": "string"
},
{
"type": "object",
"properties": {
"variant": {
"default": "default",
"type": "string",
"enum": [
"note",
"danger",
"success",
"caution",
"tip",
"default"
]
},
"class": {
"type": "string"
},
"text": {
"type": "string"
}
},
"required": [
"text"
]
}
]
},
"attrs": {
"default": {},
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{},
{
"type": "null"
}
]
}
}
}
},
"banner": {
"type": "object",
"properties": {
"content": {
"type": "string"
}
},
"required": [
"content"
]
},
"pagefind": {
"default": true,
"type": "boolean"
},
"draft": {
"default": false,
"type": "boolean"
},
"$schema": {
"type": "string"
}
},
"required": [
"title"
]
}

View file

@ -0,0 +1 @@
export default new Map();

View file

@ -0,0 +1 @@
export default new Map();

173
website/.astro/content.d.ts vendored Normal file
View file

@ -0,0 +1,173 @@
declare module 'astro:content' {
interface Render {
'.mdx': Promise<{
Content: import('astro').MDXContent;
headings: import('astro').MarkdownHeading[];
remarkPluginFrontmatter: Record<string, any>;
components: import('astro').MDXInstance<{}>['components'];
}>;
}
}
declare module 'astro:content' {
export interface RenderResult {
Content: import('astro/runtime/server/index.js').AstroComponentFactory;
headings: import('astro').MarkdownHeading[];
remarkPluginFrontmatter: Record<string, any>;
}
interface Render {
'.md': Promise<RenderResult>;
}
export interface RenderedContent {
html: string;
metadata?: {
imagePaths: Array<string>;
[key: string]: unknown;
};
}
type Flatten<T> = T extends { [K: string]: infer U } ? U : never;
export type CollectionKey = keyof DataEntryMap;
export type CollectionEntry<C extends CollectionKey> = Flatten<DataEntryMap[C]>;
type AllValuesOf<T> = T extends any ? T[keyof T] : never;
export type ReferenceDataEntry<
C extends CollectionKey,
E extends keyof DataEntryMap[C] = string,
> = {
collection: C;
id: E;
};
export type ReferenceLiveEntry<C extends keyof LiveContentConfig['collections']> = {
collection: C;
id: string;
};
export function getCollection<C extends keyof DataEntryMap, E extends CollectionEntry<C>>(
collection: C,
filter?: (entry: CollectionEntry<C>) => entry is E,
): Promise<E[]>;
export function getCollection<C extends keyof DataEntryMap>(
collection: C,
filter?: (entry: CollectionEntry<C>) => unknown,
): Promise<CollectionEntry<C>[]>;
export function getLiveCollection<C extends keyof LiveContentConfig['collections']>(
collection: C,
filter?: LiveLoaderCollectionFilterType<C>,
): Promise<
import('astro').LiveDataCollectionResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>
>;
export function getEntry<
C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}),
>(
entry: ReferenceDataEntry<C, E>,
): E extends keyof DataEntryMap[C]
? Promise<DataEntryMap[C][E]>
: Promise<CollectionEntry<C> | undefined>;
export function getEntry<
C extends keyof DataEntryMap,
E extends keyof DataEntryMap[C] | (string & {}),
>(
collection: C,
id: E,
): E extends keyof DataEntryMap[C]
? string extends keyof DataEntryMap[C]
? Promise<DataEntryMap[C][E]> | undefined
: Promise<DataEntryMap[C][E]>
: Promise<CollectionEntry<C> | undefined>;
export function getLiveEntry<C extends keyof LiveContentConfig['collections']>(
collection: C,
filter: string | LiveLoaderEntryFilterType<C>,
): Promise<import('astro').LiveDataEntryResult<LiveLoaderDataType<C>, LiveLoaderErrorType<C>>>;
/** Resolve an array of entry references from the same collection */
export function getEntries<C extends keyof DataEntryMap>(
entries: ReferenceDataEntry<C, keyof DataEntryMap[C]>[],
): Promise<CollectionEntry<C>[]>;
export function render<C extends keyof DataEntryMap>(
entry: DataEntryMap[C][string],
): Promise<RenderResult>;
export function reference<
C extends
| keyof DataEntryMap
// Allow generic `string` to avoid excessive type errors in the config
// if `dev` is not running to update as you edit.
// Invalid collection names will be caught at build time.
| (string & {}),
>(
collection: C,
): import('astro/zod').ZodPipe<
import('astro/zod').ZodString,
import('astro/zod').ZodTransform<
C extends keyof DataEntryMap
? {
collection: C;
id: string;
}
: never,
string
>
>;
type ReturnTypeOrOriginal<T> = T extends (...args: any[]) => infer R ? R : T;
type InferEntrySchema<C extends keyof DataEntryMap> = import('astro/zod').infer<
ReturnTypeOrOriginal<Required<ContentConfig['collections'][C]>['schema']>
>;
type ExtractLoaderConfig<T> = T extends { loader: infer L } ? L : never;
type InferLoaderSchema<
C extends keyof DataEntryMap,
L = ExtractLoaderConfig<ContentConfig['collections'][C]>,
> = L extends { schema: import('astro/zod').ZodSchema }
? import('astro/zod').infer<L['schema']>
: any;
type DataEntryMap = {
"docs": Record<string, {
id: string;
body?: string;
collection: "docs";
data: InferEntrySchema<"docs">;
rendered?: RenderedContent;
filePath?: string;
}>;
};
type ExtractLoaderTypes<T> = T extends import('astro/loaders').LiveLoader<
infer TData,
infer TEntryFilter,
infer TCollectionFilter,
infer TError
>
? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError }
: { data: never; entryFilter: never; collectionFilter: never; error: never };
type ExtractEntryFilterType<T> = ExtractLoaderTypes<T>['entryFilter'];
type ExtractCollectionFilterType<T> = ExtractLoaderTypes<T>['collectionFilter'];
type ExtractErrorType<T> = ExtractLoaderTypes<T>['error'];
type LiveLoaderDataType<C extends keyof LiveContentConfig['collections']> =
LiveContentConfig['collections'][C]['schema'] extends undefined
? ExtractDataType<LiveContentConfig['collections'][C]['loader']>
: import('astro/zod').infer<
Exclude<LiveContentConfig['collections'][C]['schema'], undefined>
>;
type LiveLoaderEntryFilterType<C extends keyof LiveContentConfig['collections']> =
ExtractEntryFilterType<LiveContentConfig['collections'][C]['loader']>;
type LiveLoaderCollectionFilterType<C extends keyof LiveContentConfig['collections']> =
ExtractCollectionFilterType<LiveContentConfig['collections'][C]['loader']>;
type LiveLoaderErrorType<C extends keyof LiveContentConfig['collections']> = ExtractErrorType<
LiveContentConfig['collections'][C]['loader']
>;
export type ContentConfig = typeof import("./../src/content.config.js");
export type LiveContentConfig = never;
}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,5 @@
{
"_variables": {
"lastUpdateCheck": 1775314052850
}
}

2
website/.astro/types.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
/// <reference types="astro/client" />
/// <reference path="content.d.ts" />

39
website/astro.config.mjs Normal file
View file

@ -0,0 +1,39 @@
import { defineConfig } from 'astro/config';
import starlight from '@astrojs/starlight';
export default defineConfig({
site: 'https://archon.diy',
integrations: [
starlight({
title: 'Archon',
description: 'AI workflow engine — package your coding workflows as YAML, run them anywhere.',
social: [{ icon: 'github', label: 'GitHub', href: 'https://github.com/coleam00/Archon' }],
editLink: {
baseUrl: 'https://github.com/coleam00/Archon/edit/main/website/',
},
sidebar: [
{
label: 'Getting Started',
autogenerate: { directory: 'getting-started' },
},
{
label: 'Guides',
autogenerate: { directory: 'guides' },
},
{
label: 'Adapters',
autogenerate: { directory: 'adapters' },
},
{
label: 'Deployment',
autogenerate: { directory: 'deployment' },
},
{
label: 'Reference',
autogenerate: { directory: 'reference' },
},
],
customCss: ['./src/styles/custom.css'],
}),
],
});

6678
website/package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

15
website/package.json Normal file
View file

@ -0,0 +1,15 @@
{
"name": "@archon/website",
"version": "0.2.12",
"private": true,
"scripts": {
"dev": "astro dev",
"build": "astro build",
"preview": "astro preview"
},
"dependencies": {
"astro": "^6.1.0",
"@astrojs/starlight": "^0.38.0",
"sharp": "^0.33.0"
}
}

1
website/public/CNAME Normal file
View file

@ -0,0 +1 @@
archon.diy

View file

@ -0,0 +1,7 @@
import { defineCollection } from 'astro:content';
import { docsLoader } from '@astrojs/starlight/loaders';
import { docsSchema } from '@astrojs/starlight/schema';
export const collections = {
docs: defineCollection({ loader: docsLoader(), schema: docsSchema() }),
};

View file

@ -0,0 +1,32 @@
---
title: Configuration
description: Configure Archon with API keys, assistants, and project settings.
---
## Environment Variables
Set these in your shell or `.env` file:
| Variable | Required | Description |
|----------|----------|-------------|
| `ANTHROPIC_API_KEY` | Yes (for Claude) | Your Anthropic API key |
| `OPENAI_API_KEY` | Yes (for Codex) | Your OpenAI API key |
| `DATABASE_URL` | No | PostgreSQL connection string (default: SQLite) |
| `LOG_LEVEL` | No | `debug`, `info` (default), `warn`, `error` |
## Project Configuration
Create `.archon/config.yaml` in your repository:
```yaml
assistants:
claude:
model: sonnet # or 'opus', 'haiku', 'inherit'
settingSources:
- project
codex:
model: gpt-5.3-codex
modelReasoningEffort: medium
```
See the [full configuration reference](https://github.com/coleam00/Archon/blob/main/docs/configuration.md) for all options.

View file

@ -0,0 +1,55 @@
---
title: Installation
description: Install Archon on macOS, Linux, or Windows.
---
## Quick Install
### macOS / Linux
```bash
curl -fsSL https://archon.diy/install | bash
```
### Windows (PowerShell)
```powershell
irm https://archon.diy/install.ps1 | iex
```
### Homebrew (macOS / Linux)
```bash
brew install coleam00/archon/archon
```
### Docker
```bash
docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow list
```
## From Source
```bash
git clone https://github.com/coleam00/Archon
cd Archon
bun install
```
### Prerequisites (Source Install)
- [Bun](https://bun.sh) >= 1.0.0
- [GitHub CLI](https://cli.github.com/) (`gh`)
- [Claude Code](https://claude.ai/code) (`claude`)
## Verify Installation
```bash
archon version
```
## Next Steps
- [Quick Start](/getting-started/quick-start/) — Run your first workflow
- [Configuration](/getting-started/configuration/) — Set up API keys and preferences

View file

@ -0,0 +1,46 @@
---
title: Quick Start
description: Run your first Archon workflow in minutes.
---
## Prerequisites
1. [Install Archon](/getting-started/installation/)
2. Set your Anthropic API key: `export ANTHROPIC_API_KEY=sk-ant-...`
3. Navigate to any git repository
## Run Your First Workflow
```bash
# List available workflows
archon workflow list
# Ask Archon to assist with your codebase
archon workflow run assist "What does this codebase do?"
# Run a code review
archon workflow run smart-review
```
## Key Concepts
### Workflows
Workflows are YAML files that define multi-step AI coding tasks. Each workflow has **nodes** that execute in order (or as a DAG with dependencies).
### Isolation
By default, workflows run in **git worktrees** — isolated copies of your repo. This means:
- Your working branch stays clean
- Multiple workflows can run in parallel
- Failed workflows don't leave a mess
### Commands
Commands are reusable prompt files (`.md` or `.txt`) that workflows reference. They define what the AI should do at each step.
## What's Next?
- [Authoring Workflows](/guides/authoring-workflows/) — Create your own workflows
- [CLI Guide](/guides/cli/) — Full CLI reference
- [Web UI](/guides/web-ui/) — Use the browser interface

View file

@ -0,0 +1,49 @@
---
title: Archon
description: AI workflow engine — package your coding workflows as YAML, run them anywhere.
template: splash
hero:
title: Archon
tagline: Package your AI coding workflows as YAML. Run them anywhere — CLI, Web, Slack, Telegram, GitHub, Discord.
actions:
- text: Get Started
link: /getting-started/installation/
icon: right-arrow
variant: primary
- text: View on GitHub
link: https://github.com/coleam00/Archon
icon: external
variant: minimal
---
## Install in seconds
:::code-group
```bash [macOS / Linux]
curl -fsSL https://archon.diy/install | bash
```
```powershell [Windows]
irm https://archon.diy/install.ps1 | iex
```
```bash [Homebrew]
brew install coleam00/archon/archon
```
```bash [Docker]
docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow list
```
:::
## What is Archon?
Archon is a **workflow engine for AI coding agents**. Define multi-step development workflows in YAML — code review, bug fixes, feature implementation, testing — and run them with a single command.
- **Repeatable**: Package your best AI coding patterns as shareable YAML workflows
- **Isolated**: Each workflow runs in its own git worktree — no conflicts, no mess
- **Portable**: Run from CLI, Web UI, Slack, Telegram, GitHub, or Discord
- **Composable**: Chain workflow nodes into DAGs with dependencies, loops, and conditional logic
- **Multi-provider**: Works with Claude Code SDK and Codex SDK

View file

@ -0,0 +1,7 @@
:root {
--sl-color-accent-low: #1a1f36;
--sl-color-accent: #3b82f6;
--sl-color-accent-high: #93c5fd;
--sl-font: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
--sl-font-mono: 'JetBrains Mono', ui-monospace, monospace;
}

3
website/tsconfig.json Normal file
View file

@ -0,0 +1,3 @@
{
"extends": "astro/tsconfigs/strict"
}