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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
165 changes: 165 additions & 0 deletions .github/workflows/build-and-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,165 @@
# Workflow: Build & Publish
#
# Builds the augur-cli binary and packages the .github/ runtime assets,
# then publishes them as a numbered GitHub Release so that online-installer.sh
# can download them.
#
# Asset naming convention (matches online-installer.sh expectations):
# augur-cli-latest-{target}.tar.gz — prebuilt binary per platform
# dot-github-latest.tar.gz — .github/ runtime assets
#
# Each run produces a release tagged v{version}-build.{run_number}.
# The most recent build is always the "latest" release, so the default
# installer path (no --beta) will fetch it via /releases/latest.

name: build and publish

on:
workflow_dispatch:
push:
branches: [main]

# ---------------------------------------------------------------------------
# Environment
# ---------------------------------------------------------------------------
env:
CARGO_TERM_COLOR: always
WORKSPACE_DIR: augur-cli
BINARY_PACKAGE: augur-app
BINARY_NAME: augur-cli

permissions:
contents: write

jobs:
# ── Build ───────────────────────────────────────────────────────────────
# Builds the binary for each target platform and packages it into a
# versioned tarball. Run on the native OS for each target.
build:
strategy:
fail-fast: false
matrix:
target:
- x86_64-unknown-linux-gnu
include:
- target: x86_64-unknown-linux-gnu
os: ubuntu-latest
runs-on: ${{ matrix.os }}

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Cache Cargo registry and build artifacts
uses: swatinem/rust-cache@v2
with:
workspaces: ${{ env.WORKSPACE_DIR }}

- name: Build binary (${{ matrix.target }})
working-directory: ${{ env.WORKSPACE_DIR }}
run: cargo build --release -p ${{ env.BINARY_PACKAGE }} --bin ${{ env.BINARY_NAME }}

- name: Package binary tarball
run: |
mkdir -p dist
cp "${{ env.WORKSPACE_DIR }}/target/release/${{ env.BINARY_NAME }}" dist/
cd dist
tar czf "../${{ env.BINARY_NAME }}-latest-${{ matrix.target }}.tar.gz" \
"${{ env.BINARY_NAME }}"

- name: Upload binary artifact
uses: actions/upload-artifact@v4
with:
name: binary-${{ matrix.target }}
path: ${{ env.BINARY_NAME }}-latest-${{ matrix.target }}.tar.gz
if-no-files-found: error

# ── Package .github/ ────────────────────────────────────────────────────
# Archives the runtime agents, instructions, prompts, and skills into a
# tarball that online-installer.sh extracts into ~/.augur-cli/.github/.
# The archive contains a top-level .github/ directory (excluding local/).
package-dot-github:
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Package .github runtime assets
working-directory: ${{ env.WORKSPACE_DIR }}
run: |
tar czf ../dot-github-latest.tar.gz \
--exclude='.github/local/' \
.github/

- name: Upload dot-github artifact
uses: actions/upload-artifact@v4
with:
name: dot-github
path: dot-github-latest.tar.gz
if-no-files-found: error

# ── Release ─────────────────────────────────────────────────────────────
# Gathers all artifacts from the build and package-dot-github jobs, then
# creates a numbered GitHub Release with make_latest=true so that
# online-installer.sh (without --beta) resolves it as the latest release.
release:
needs: [build, package-dot-github]
runs-on: ubuntu-latest

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Download all build artifacts
uses: actions/download-artifact@v4

- name: Determine release tag
id: version
run: |
# Read the crate version from Cargo.toml
VERSION="$(
sed -n 's/^version = "\(.*\)"/\1/p' \
"${{ env.WORKSPACE_DIR }}/crates/${{ env.BINARY_PACKAGE }}/Cargo.toml" \
| head -1
)"
TAG="v${VERSION}-build.${{ github.run_number }}"
echo "tag=${TAG}" >> "${GITHUB_OUTPUT}"
echo "version=${VERSION}" >> "${GITHUB_OUTPUT}"

- name: Prepare files for upload
run: |
# Flatten the multi-artifact download into a single staging directory.
# Each artifact download creates a subdirectory named after the artifact.
mkdir -p release-assets
find binary-* dot-github -name '*.tar.gz' -exec cp {} release-assets/ \;
ls -lh release-assets/

- name: Create GitHub Release
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create "${{ steps.version.outputs.tag }}" \
--title "Build ${{ github.run_number }} (v${{ steps.version.outputs.version }})" \
--notes "Automated CI build from commit ${{ github.sha }}" \
--latest \
release-assets/*.tar.gz

- name: Summarize release
run: |
echo "## Release created" >> "${GITHUB_STEP_SUMMARY}"
echo "" >> "${GITHUB_STEP_SUMMARY}"
echo "| Field | Value |" >> "${GITHUB_STEP_SUMMARY}"
echo "|---|---|" >> "${GITHUB_STEP_SUMMARY}"
echo "| Tag | \`${{ steps.version.outputs.tag }}\` |" >> "${GITHUB_STEP_SUMMARY}"
echo "| Commit | ${{ github.sha }} |" >> "${GITHUB_STEP_SUMMARY}"
echo "| Assets | |" >> "${GITHUB_STEP_SUMMARY}"
for f in release-assets/*.tar.gz; do
SIZE="$(du -h "$f" | cut -f1)"
echo "| — | \`$(basename "$f")\` (${SIZE}) |" >> "${GITHUB_STEP_SUMMARY}"
done
56 changes: 56 additions & 0 deletions .github/workflows/publish-site.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Workflow: Publish Site
#
# Publishes the contents of public-html/ to GitHub Pages.
# Manual trigger only, pulls from the static-site-gen branch.

name: publish site

on:
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

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

jobs:
deploy:
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
defaults:
run:
working-directory: augur-cli
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: main

- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable

- name: Build graph data
run: |
cargo run -p augur-graph-builder -- \
--output public-html/graph-data.json

- name: Build API docs
run: |
cargo doc --no-deps --workspace \
--exclude augur-graph-builder
cp -r target/doc public-html/api

- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
path: augur-cli/public-html

- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
20 changes: 20 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,23 @@ target
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
# Secrets files — never commit populated credentials
*.secrets.yaml
state/token-history.json
state/orchestrator-state.db
# Prevent accidental secret commits
configs/application.secrets.yaml
logs/
reports/cobertura.xml
*.db
reports/rustdoc.json
dep-advisory.json
deploy_tools.sh
advisory
reports/
sessions/
temp_scripts/
public-html-temp/
scripts/__pycache__/
# Secrets files - never commit populated credentials
# State files - never commit populated state files
50 changes: 41 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,32 +4,64 @@ This is a lightweight to run, but feature heavy, agentic CLI inspired by other t

Augur-CLI is written in [Rust](https://rust-lang.org/) and heavily tuned for building Rust applications. This project includes the CLI source code, instruction files, built in agentic conversation flow, and a guided feature implementation pipeline.

Currently the work on Augur-CLI is done using Augur-CLI and Deepseek v4 Flash via [Openrouter](https://openrouter.ai/). The repo root contains an installation bash script for installing the compiled rust binary from source into your home directory, complete with configuration files alongside easily accessible directories for holding logs and session files.
Currently the work on Augur-CLI is done using Augur-CLI and Deepseek v4 Flash via [Openrouter](https://openrouter.ai/). The repo root contains an installation bash script for installing the compiled rust binary from source into your home directory in .augur-cli, complete with configuration files alongside easily accessible directories for holding logs and session files.

While it is tuned towards developing Rust applications, the tuning is entirely contained within the agent and skill files in /.github/, so updates to the instruction files would enable projects in other major programming languages. The design tries to make careful use of Openrouter's automatic caching to reduce costs, so a 100 million token session costs roughly $4.
While it is tuned towards developing Rust applications, the tuning is entirely contained within the agent and skill files in /.github/, so updates to the instruction files would enable projects in other major programming languages. The design tries to make careful use of Openrouter's automatic caching to reduce costs. In my experience, a 100 million token session has a cost of roughly **$4** using Deepseek v4 Flash, so it's significantly cheaper than equivalent output from any other frontier model.

This is a weekend solo-project that I started the first week of April 2026, so there's rough edges, but it's production-ready enough that I switched from using Github Copilot CLI to using Augur-CLI for development. I find Deepseek v4 Flash to be roughly comparable in quality to Claude Sonnet 4.6, at a fraction of the cost, especially after caching.
This is a weekend solo-project that I started early April 2026, so there's rough edges, but it's production-ready enough that I switched from using Github Copilot CLI to using exclusively Augur-CLI for development. I find Deepseek v4 Flash to be roughly comparable in quality to Claude Sonnet 4.6, at a fraction of the cost, especially after caching.

The goal is feature parity with other major CLI platforms, plus quality-of-life upgrades that I found to be useful for my workflows.
The goal is feature parity with other major LLM CLI platforms, plus quality-of-life upgrades that I found to be useful for my workflows. As an example of QoL, this detects when you launch from inside a git repository, and creates a dedicated conversation session directory and logging directory in the home config directory, so you don't have cross-repository contamination of your context by default.

Disclaimer, this was developed on Ubuntu 24, and while Windows and MacOS versions are on my to-do list, I want to be more feature complete before I go cross-platform. This uses the fantastic [Ratatui](https://ratatui.rs/) terminal-UI library, so the next intermediate step is docker containerization for better cross platform support, before true cross-platform installers. For now it still works great running from source.
### Quick-Installation (Linux)

Linux users can run the online installer to download and install the latest binary with supporting config files.

```bash
bash <(curl -sL https://raw.githubusercontent.com/Kenneth-Posey/augur-cli/main/online-installer.sh)
```

### Configuration

The priority for loading configuration including .github files and the user/application is local directory first, then user home .augur-cli, then hardcoded defaults. The user home configuration is seeded on first launch if it doesn't already exist, so you'll need to update your application.secret.yml with API keys if you're not using the github copilot cli sdk integration.

### Disclaimer and OS Warning

This was developed on Ubuntu 24, and while native MacOS versions are on my to-do list, I want to be more feature complete before I dedicate to going cross-platform with testing. Augur-cli uses the fantastic [Ratatui](https://ratatui.rs/) terminal-UI library, and it should hopefully work out of the box, but I'm leaning heavily on the library's cross-platform support.

For MacOS, it should work running from source using [the dev launcher](augur-cli/launch-dev.sh) or [local source installer](augur-cli/install.sh). You should make sure the configuration file paths are correct and adding your SDK keys to the application.secrets.yaml file. Refer to the [Install documentation](augur-cli/docs/INSTALL.md) for details.

For Windows, good luck for now. I abandoned Windows as an operating system last year when Win10 went out of support and I have been using exclusively MacOS (work computer) and Ubuntu (personal computer) since then. I'm perfectly happy to help resolve issues with running on the windows operating system but for now due to time limitiations I can't set up a windows dev environment or proactively solve problems.

### Features

* Included modular agents, skills, instruction files and prompts
* Agentic workflow loops when using Openrouter or Github Copilot CLI SDK
* Parallel background tasks with a panel for viewing live task output, separated by task
* Easy configuration of program settings, LLM providers and models with yml config files in %userhome%
* Easy configuration of program settings, LLM providers and models with yml config files in user-home /.augur-cli
* Live LLM provider switching with **/switch** and model selection with **/model**
* Automatic conversation compaction, configurable per LLM model
* Manual conversation compaction with **/compact**
* Session saving in json files and resuming by the startup menu
* New sessions on demand with **/new-session**
* Detection of git repositories to self-organize sessions and logs in %userhome%
* Detection of git repositories to self-organize conversation sessions and logs in the config home
* Rust LSP server for better development support
* Built-in tools for granular file modifications to reduce output-token use
* Flexible terminal-UI interface
* BETA: Built-in orchestrator pipeline for BDD/TDD development of major features

### Upcoming features
#### Currently partially implemented, sorted by priority

* BETA: Steering of agentic workflows using the conversation model (currently works but needs some UI polish)
* BETA: Text file attachments with @file_path
* BETA: Built-in orchestrator pipeline for BDD/TDD development of major features
* BETA: Side-load conversations for asking questions outside the main context
* BETA: Deterministic standalone quality scanners for enforcing quality standards
* BETA: Steering of agentic workflows using the conversation model

### Future development
#### Currently not implemented, sorted by priority

* FUTURE: Free-only mode to support running only against configured *free* LLM providers and better support throttled requests
* FUTURE: Settings/config modification in-application
* FUTURE: Headless mode for server deployment (depends on docker containerization)
* FUTURE: Integration with the [VSCode Agents Window](https://code.visualstudio.com/docs/agents/agents-window) (depends on headless mode probably)
* FUTURE: Native MacOS builds and installer
5 changes: 5 additions & 0 deletions augur-cli/.gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Union merge driver for Cargo.toml files to avoid version-bump conflicts.
# When both sides bump the version field, git takes both edits (they're
# identical in content so no conflict). Different dependency additions
# on each side are also merged automatically.
crates/*/Cargo.toml merge=union
Loading
Loading