From a436d67cbc722035964f75ff350792d0a3606789 Mon Sep 17 00:00:00 2001 From: Charles Fettinger Date: Mon, 6 Apr 2026 11:21:58 -0700 Subject: [PATCH 1/6] Add multi-LLM support and update dependencies in README and agent.py --- README.md | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++ agent.py | 30 +++++++++++++++++++++++++--- pyproject.toml | 1 + 3 files changed, 82 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1d7fcd11..924d373e 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,60 @@ rm -rf jobs; mkdir -p jobs && uv run harbor run -p tasks/ --task-name " run.log 2>&1 ``` +## Multi-LLM Support + +The harness supports multiple LLM providers via [LiteLLM](https://github.com/BerriAI/litellm). Configure via environment variables: + +### Environment Variables + +- `LLM_PROVIDER`: Provider name (`openai`, `anthropic`, `ollama`, `azure`, etc.) +- `MODEL`: Model name (e.g., `gpt-5`, `claude-3-5-sonnet`, `qwen3.5:35b-a3b-q8_0`) +- `LLM_BASE_URL`: Optional base URL (required for Ollama, Azure, etc.) +- `API_KEY`: Provider-specific API key (e.g., `OPENAI_API_KEY`, `ANTHROPIC_API_KEY`) + +### Using Local Ollama + +```bash +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL=qwen3.5:35b-a3b-q8_0 +LLM_BASE_URL=http://host.docker.internal:11434/v1 +EOF +``` + +### Using OpenAI + +```bash +cat > .env << 'EOF' +LLM_PROVIDER=openai +MODEL=gpt-5 +OPENAI_API_KEY=your-api-key +EOF +``` + +### Using Anthropic + +```bash +cat > .env << 'EOF' +LLM_PROVIDER=anthropic +MODEL=claude-3-5-sonnet +ANTHROPIC_API_KEY=your-api-key +EOF +``` + +### Using Azure + +```bash +cat > .env << 'EOF' +LLM_PROVIDER=azure +MODEL=your-deployment-name +AZURE_API_KEY=your-api-key +AZURE_API_BASE=https://your-resource.openai.azure.com +EOF +``` + +The model selection is optional and can be changed dynamically by modifying the environment variables before running the benchmark. + ## Running the meta-agent Point your coding agent at the repo and prompt: diff --git a/agent.py b/agent.py index d155db41..b104b6bd 100644 --- a/agent.py +++ b/agent.py @@ -26,8 +26,18 @@ # ============================================================================ SYSTEM_PROMPT = "You are an agent that executes tasks" -MODEL = "gpt-5" -MAX_TURNS = 30 +MAX_TURNS = 15 + +# Multi-LLM configuration via LiteLLM +# Set environment variables before running: +# - LLM_PROVIDER: "openai", "anthropic", "ollama", "azure", etc. +# - MODEL: model name (e.g., "gpt-5", "claude-3-5-sonnet", "qwen3.5:35b-a3b-q8_0") +# - LLM_BASE_URL: optional base URL (required for Ollama, Azure, etc.) +# - API_KEY: provider-specific API key (e.g., OPENAI_API_KEY, ANTHROPIC_API_KEY) +import os +LLM_PROVIDER = os.getenv("LLM_PROVIDER", "openai").lower() +MODEL = os.getenv("MODEL", "gpt-5") +LLM_BASE_URL = os.getenv("LLM_BASE_URL") def create_tools(environment: BaseEnvironment) -> list[FunctionTool]: @@ -53,11 +63,25 @@ async def run_shell(command: str) -> str: def create_agent(environment: BaseEnvironment) -> Agent: """Build the agent. Modify to add handoffs, sub-agents, or agent-as-tool.""" tools = create_tools(environment) + + # Build LiteLLM-compatible model string + if LLM_PROVIDER == "ollama": + # Ollama uses custom base URL format + model_string = f"ollama_chat/{MODEL}" if not LLM_BASE_URL else f"ollama_chat/{MODEL}" + elif LLM_PROVIDER == "azure": + # Azure uses deployment name format + model_string = f"azure/{MODEL}" + elif LLM_PROVIDER == "anthropic": + model_string = f"anthropic/{MODEL}" + else: + # Default to OpenAI format + model_string = MODEL + return Agent( name="autoagent", instructions=SYSTEM_PROMPT, tools=tools, - model=MODEL, + model=model_string, ) diff --git a/pyproject.toml b/pyproject.toml index c419b630..df8ceb72 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,4 +9,5 @@ dependencies = [ "openpyxl", "numpy", "harbor", + "litellm>=1.60.0", ] From 68460c1124bb66b01aaad7878b0edbcefb41f977 Mon Sep 17 00:00:00 2001 From: Charles Fettinger Date: Wed, 26 Aug 2026 10:53:22 -0700 Subject: [PATCH 2/6] Add logo --- .gitignore | 3 ++- README.md | 5 +---- docs/logo.png | Bin 0 -> 256224 bytes 3 files changed, 3 insertions(+), 5 deletions(-) create mode 100644 docs/logo.png diff --git a/.gitignore b/.gitignore index c89e06d3..c4fe8f5d 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,5 @@ tasks-archived-sheets/ tasks-sheets-verified/ tasks-sheets/ -dev/ \ No newline at end of file +dev/ +/.vs diff --git a/README.md b/README.md index 924d373e..b98b3097 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@

- - thirdlayer - + open-autoagent

@@ -207,4 +205,3 @@ You can equip the agent with [Agent Skills for Context Engineering](https://gith ## License MIT - diff --git a/docs/logo.png b/docs/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f63ddddcdf74236b7c3f21327d78f0bc06cb0254 GIT binary patch literal 256224 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%0D#IG(kOpd0R< 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�)&i!psa|n(%DQM>)ZdqGVSgj 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 Bb1wh@ literal 0 HcmV?d00001 From 7031031a26318549f146aad246edd83eb9470824 Mon Sep 17 00:00:00 2001 From: Charles Fettinger Date: Wed, 26 Aug 2026 12:49:54 -0700 Subject: [PATCH 3/6] Add open-autoagent-ollama-setup skill & quick installer Added a new skill for setting up open-autoagent with a host-native Ollama daemon, targeting Harbor harness experiments on AMD Ryzen AI Max+ 395. Introduced quick installer scripts (Bash/PowerShell) for harness selection and skill deployment. Updated README with install instructions and harness triggers. Comprehensive SKILL.md covers setup steps, preconditions, repo config, environment, patching, Docker build, Harbor scaffolding, baseline run, operator guidance, and forbidden actions. Installer and docs ensure reproducible, harness-agnostic setup for AI-driven experiments. Does not cover torrent MCP server or live download orchestration. Add cross-platform installer & harness integration for skill Automates installation of `open-autoagent-ollama-setup` across Linux/macOS (sh) and Windows (PowerShell) with `install.*` and `configure.*` scripts. Introduces `.skill-config.json` (gitignored) for pre-configuration of repo, LLM, model, endpoint, and hardware profile. Adds `SKILL.md.template` for dynamic skill doc generation per environment. Documents setup workflow in `SETUP_WORKFLOW.md` and updates README with quick AI harness install instructions. No changes to core setup logic or skill instructions; canonical docs now serve as installer defaults. Adds `.skill-config.json` to `.gitignore`. Add AI harness installer and setup workflow for skill Adds interactive setup/install scripts for open-autoagent-ollama-setup skill, supporting quick or custom config for repo/model/hardware. Scripts generate .skill-config.json (gitignored) and install the skill for multiple AI harnesses (Hermes, Claude, Cursor, Grok, VS Code, Visual Studio). Adds SKILL.md.template, .skill-config.json.example, SETUP_WORKFLOW.md, and updates README with install instructions. No core code changes; improves reproducibility and customization of skill installation. --- README.md | 28 ++ setup/.gitignore | 1 + setup/.skill-config.json.example | 17 + setup/SETUP_WORKFLOW.md | 77 +++++ setup/SKILL.md.template | 180 +++++++++++ setup/configure.ps1 | 87 +++++ setup/configure.sh | 71 +++++ setup/harness/claude-code/SKILL.md | 437 ++++++++++++++++++++++++++ setup/harness/claude-desktop/SKILL.md | 437 ++++++++++++++++++++++++++ setup/harness/cursor/SKILL.md | 437 ++++++++++++++++++++++++++ setup/harness/grok/SKILL.md | 437 ++++++++++++++++++++++++++ setup/harness/hermes/SKILL.md | 437 ++++++++++++++++++++++++++ setup/harness/visual-studio/SKILL.md | 437 ++++++++++++++++++++++++++ setup/harness/vscode/SKILL.md | 437 ++++++++++++++++++++++++++ setup/install.ps1 | 171 ++++++++++ setup/install.sh | 155 +++++++++ setup/open-autoagent-ollama-setup.md | 437 ++++++++++++++++++++++++++ 17 files changed, 4283 insertions(+) create mode 100644 setup/.gitignore create mode 100644 setup/.skill-config.json.example create mode 100644 setup/SETUP_WORKFLOW.md create mode 100644 setup/SKILL.md.template create mode 100644 setup/configure.ps1 create mode 100644 setup/configure.sh create mode 100644 setup/harness/claude-code/SKILL.md create mode 100644 setup/harness/claude-desktop/SKILL.md create mode 100644 setup/harness/cursor/SKILL.md create mode 100644 setup/harness/grok/SKILL.md create mode 100644 setup/harness/hermes/SKILL.md create mode 100644 setup/harness/visual-studio/SKILL.md create mode 100644 setup/harness/vscode/SKILL.md create mode 100644 setup/install.ps1 create mode 100644 setup/install.sh create mode 100644 setup/open-autoagent-ollama-setup.md diff --git a/README.md b/README.md index b98b3097..3aface68 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,34 @@ rm -rf jobs; mkdir -p jobs && uv run harbor run -p tasks/ --task-name " run.log 2>&1 ``` +## Install quickly with an AI harness + +The `setup/` folder installs a skill that lets your AI harness run the full +Ollama setup for you — clone, `.env`, `uv sync`, Docker base image, Harbor +smoke test. + +```bash +# Linux / macOS / Git Bash +bash setup/install.sh + +# Windows PowerShell +.\setup\install.ps1 +``` + +Pick your harness when prompted, then trigger it: + +| Harness | Trigger | +|---|---| +| Hermes | New session (or `/reset`) → `run open-autoagent-ollama-setup` | +| Claude Code | In chat: `run open-autoagent-ollama-setup` | +| Claude Desktop | In chat: `run open-autoagent-ollama-setup` | +| Cursor | In chat: `run open-autoagent-ollama-setup` | +| Grok | In chat: `run open-autoagent-ollama-setup` | +| VS Code + Copilot | `Ctrl+Shift+I` → `#file:.vscode/skills/open-autoagent-ollama-setup/SKILL.md` → `run open-autoagent-ollama-setup` | +| Visual Studio | `View > GitHub Copilot Chat` → `#file:.github/skills/open-autoagent-ollama-setup/SKILL.md` → `run open-autoagent-ollama-setup` | + +The harness will execute every step and stop if a check fails. + ## Multi-LLM Support The harness supports multiple LLM providers via [LiteLLM](https://github.com/BerriAI/litellm). Configure via environment variables: diff --git a/setup/.gitignore b/setup/.gitignore new file mode 100644 index 00000000..9607b875 --- /dev/null +++ b/setup/.gitignore @@ -0,0 +1 @@ +.skill-config.json diff --git a/setup/.skill-config.json.example b/setup/.skill-config.json.example new file mode 100644 index 00000000..994fc447 --- /dev/null +++ b/setup/.skill-config.json.example @@ -0,0 +1,17 @@ +{ + "mainRepo": "https://github.com/Oncorporation/open-autoagent", + "domainRepo": "https://github.com/Oncorporation/secure-torrent-mcp-agent", + "domainBranch": "domain/secure-torrent", + "llmProvider": "ollama", + "model": "qwen3.8:27b-mtp-q8_0", + "ollamaEndpoint": "http://127.0.0.1:11434", + "hardware": "AMD Ryzen AI Max+ 395 64GB-64GB", + "skillMetadata": { + "name": "open-autoagent-ollama-setup", + "description": "Set up Oncorporation open-autoagent on a host-native Ollama daemon for Harbor harness experiments.", + "license": "MIT", + "version": "1.0.0", + "hermesTags": ["open-autoagent", "ollama", "harbor", "harness"], + "hermesCategory": "mcp-install" + } +} diff --git a/setup/SETUP_WORKFLOW.md b/setup/SETUP_WORKFLOW.md new file mode 100644 index 00000000..71cfd073 --- /dev/null +++ b/setup/SETUP_WORKFLOW.md @@ -0,0 +1,77 @@ +# Setup Workflow + +The setup folder now supports **generic repository setup** via optional configuration. + +## Workflow + +### Option 1: Quick Start (Default) +Use the original hardcoded repo, model, and settings: + +```bash +# Linux / macOS +bash setup/install.sh + +# Windows PowerShell +.\setup\install.ps1 +``` + +Pick your harness, install, done. Defaults: +- Repo: `https://github.com/Oncorporation/open-autoagent` +- Model: `qwen3.8:27b-mtp-q8_0` +- Ollama: `http://127.0.0.1:11434` + +### Option 2: Custom Configuration +Use your own repo, model, hardware, LLM provider: + +```bash +# 1. Configure +bash setup/configure.sh # Linux/macOS +.\setup\configure.ps1 # Windows + +# 2. Install +bash setup/install.sh # Linux/macOS +.\setup\install.ps1 # Windows +``` + +The installer checks for `.skill-config.json` and uses it to customize the +SKILL.md before copying. If no config exists, defaults are used. + +## What Gets Configured + +| Setting | Purpose | Default | +|---|---|---| +| Main repo | GitHub/HF/local path to clone | `https://github.com/Oncorporation/open-autoagent` | +| Domain repo | Optional catalog/context repo | `https://github.com/Oncorporation/secure-torrent-mcp-agent` | +| Domain branch | Branch name in main repo | `domain/secure-torrent` | +| LLM provider | `ollama`, `openai`, `anthropic`, `azure` | `ollama` | +| Model | Model name/tag | `qwen3.8:27b-mtp-q8_0` | +| Ollama endpoint | Only if provider=ollama | `http://127.0.0.1:11434` | +| Hardware | Info string (notes only) | `AMD Ryzen AI Max+ 395 64GB-64GB` | + +## How It Works + +1. **`configure.sh/.ps1`** → prompts → saves to `.skill-config.json` +2. **`install.sh/.ps1`** → reads config (or defaults) → processes `SKILL.md.template` → installs customized SKILL.md +3. **Harness triggers** → runs the skill with custom repo/model/hardware baked in + +`.skill-config.json` is gitignored so it never gets committed. + +## Adding a New Harness + +1. Create `setup/harness/new-harness/` directory +2. **Either:** + - Pre-build: copy `SKILL.md.template` → `new-harness/SKILL.md` (installers will use it as-is) + - Or: install will auto-generate from template + config +3. Update installer menu (both `.sh` and `.ps1`) with harness option and trigger instructions +4. Done — installers pick up the new folder automatically + +## Files + +| File | Purpose | +|---|---| +| `configure.sh` / `configure.ps1` | Prompt user for custom config → save to `.skill-config.json` | +| `install.sh` / `install.ps1` | Read config (or defaults) → process template → install to harness | +| `SKILL.md.template` | Generic skill template with `{{PLACEHOLDERS}}` | +| `.skill-config.json` | User config (created by configure, gitignored) | +| `harness/*/SKILL.md` | Pre-built harness-specific skills (optional) | +| `open-autoagent-ollama-setup.md` | Legacy canonical skill (fallback only) | diff --git a/setup/SKILL.md.template b/setup/SKILL.md.template new file mode 100644 index 00000000..7fc08877 --- /dev/null +++ b/setup/SKILL.md.template @@ -0,0 +1,180 @@ +#!/usr/bin/env bash +# SKILL.md.template — Template for open-autoagent-ollama-setup skill +# +# This file is processed by install.sh to inject custom repo/model/hardware info. +# Placeholders: {{MAIN_REPO}}, {{DOMAIN_REPO}}, {{DOMAIN_BRANCH}}, {{MODEL}}, {{OLLAMA_ENDPOINT}}, {{HARDWARE}} + +--- +name: open-autoagent-ollama-setup +description: Set up {{MAIN_REPO}} on {{HARDWARE}}. Use when the user says set up open-autoagent, wire Ollama into AutoAgent, run Harbor, or work with the domain branch. Do not use for torrent MCP or download-orchestrator only. +license: MIT +metadata: + hermes: + tags: + - open-autoagent + - ollama + - harbor + - harness + category: mcp-install + version: "1.0.0" + hardware: {{HARDWARE}} + model: {{MODEL}} +--- + +# Set up open-autoagent on host-native Ollama + +You are running this procedure on the operator machine. Execute the steps +in order. Stop on the first failed check. + +## Locked settings from the project session + +| Key | Value | +|---|---| +| Repo | `{{MAIN_REPO}}` | +| Domain catalog | `{{DOMAIN_REPO}}` | +| Domain branch | `{{DOMAIN_BRANCH}}` | +| LLM provider | `ollama` | +| Model tag | `{{MODEL}}` | +| Ollama bind | `{{OLLAMA_ENDPOINT}}` | +| Hardware | {{HARDWARE}} | + +## Preconditions + +1. Workspace parent. Default `~/src`. +2. Confirm Ollama is installed and model `{{MODEL}}` is pulled. +3. Confirm Docker Desktop or Engine is installed. +4. Confirm `git`, `curl`, and Python 3.10+ exist. + +## Step 1 — host toolchain + +Run and record output. + +\`\`\`bash +uname -a +command -v git +command -v curl +command -v python3 +command -v docker +command -v uv || true +command -v ollama +ollama --version +docker version --format '{{.Server.Version}}' 2>/dev/null || docker version +\`\`\` + +Install uv if missing: + +\`\`\`bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +\`\`\` + +Fail if \`ollama\` or \`docker\` is missing. + +## Step 2 — native Ollama health + +\`\`\`bash +curl -sf {{OLLAMA_ENDPOINT}}/api/tags >/tmp/ollama-tags.json +python3 - << 'PY' +import json +tags = json.load(open("/tmp/ollama-tags.json")) +names = [m.get("name") for m in tags.get("models", [])] +print("models:", names) +need = "{{MODEL}}" +ok = any(n == need or n.startswith(need) for n in names) +print("have_target:", ok) +raise SystemExit(0 if ok else 2) +PY +\`\`\` + +If the model is missing: + +\`\`\`bash +ollama pull {{MODEL}} +\`\`\` + +## Step 3 — clone repos + +\`\`\`bash +SRC="${SRC:-$HOME/src}" +mkdir -p "$SRC" +cd "$SRC" + +git clone {{MAIN_REPO}}.git open-autoagent +git clone {{DOMAIN_REPO}}.git secure-torrent-mcp-agent +cd "$SRC/open-autoagent" +git checkout main && git pull +git checkout -b {{DOMAIN_BRANCH}} || git checkout {{DOMAIN_BRANCH}} + +mkdir -p vendor docs/domain +rsync -a --delete --exclude .git "$SRC/secure-torrent-mcp-agent/" vendor/secure-torrent-mcp-agent/ +\`\`\` + +## Step 4 — write \`.env\` + +\`\`\`bash +cd "$SRC/open-autoagent" +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL={{MODEL}} +LLM_BASE_URL={{OLLAMA_ENDPOINT}} +OLLAMA_API_BASE={{OLLAMA_ENDPOINT}} +EOF + +if ! grep -q '^\.env$' .gitignore 2>/dev/null; then + printf '\n.env\nresults.tsv\njobs/\nrun.log\n' >> .gitignore +fi + +set -a && . ./.env && set +a +\`\`\` + +## Step 5 — Python env and Docker base image + +\`\`\`bash +cd "$SRC/open-autoagent" +uv sync +docker build -f Dockerfile.base -t autoagent-base . +\`\`\` + +Confirm the agent module imports: + +\`\`\`bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +uv run python - << 'PY' +import os +print("LLM_PROVIDER", os.environ.get("LLM_PROVIDER")) +print("MODEL", os.environ.get("MODEL")) +print("LLM_BASE_URL", os.environ.get("LLM_BASE_URL")) +import agent +print("import_ok") +PY +\`\`\` + +## Step 6 — first Harbor run (baseline) + +\`\`\`bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +rm -rf jobs +mkdir -p jobs +uv run harbor run -p tasks/ -l 1 -n 1 \ + --agent-import-path agent:AutoAgent -o jobs --job-name latest \ + > run.log 2>&1 || true +\`\`\` + +Check output: + +\`\`\`bash +tail -n 40 run.log +ls jobs | head +\`\`\` + +## Done + +The setup is complete when: +- Ollama returns the model tag +- Docker base image built successfully +- Agent module imports with the correct provider and model +- At least one Harbor command ran (even if tasks don't exist yet) + +Next: Point a coding agent at \`program.md\` to run experiments. diff --git a/setup/configure.ps1 b/setup/configure.ps1 new file mode 100644 index 00000000..367ead0f --- /dev/null +++ b/setup/configure.ps1 @@ -0,0 +1,87 @@ +#Requires -Version 5.1 +<# +.SYNOPSIS + Configure setup options for the open-autoagent-ollama-setup skill. +.DESCRIPTION + Interactively collects repository, model, and hardware information, + then generates a customized SKILL.md template. Run this BEFORE install.ps1 + if you want to use a custom repo, model, or hardware profile. + + Output: setup/.skill-config.json (gitignored, used by install.ps1) +.EXAMPLE + .\setup\configure.ps1 +#> + +$ErrorActionPreference = "Stop" + +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$ConfigFile = Join-Path $ScriptDir ".skill-config.json" + +# Defaults (sensible for the original use case) +$defaults = @{ + mainRepo = "https://github.com/Oncorporation/open-autoagent" + domainRepo = "https://github.com/Oncorporation/secure-torrent-mcp-agent" + domainBranch = "domain/secure-torrent" + llmProvider = "ollama" + model = "qwen3.8:27b-mtp-q8_0" + ollamaEndpoint = "http://127.0.0.1:11434" + hardware = "AMD Ryzen AI Max+ 395 64GB-64GB" +} + +Write-Host "" +Write-Host " open-autoagent-ollama-setup -- Configuration" -ForegroundColor Cyan +Write-Host " -----------------------------------------------" -ForegroundColor DarkGray +Write-Host "" +Write-Host " Press Enter to accept defaults (shown in brackets)" -ForegroundColor DarkGray +Write-Host "" + +# Main repo +$prompt = " Main repository URL" +$default = $defaults.mainRepo +$input = (Read-Host "$prompt [$default]").Trim() +$config = @{ mainRepo = if ($input) { $input } else { $default } } + +# Domain repo (optional) +$prompt = " Domain/catalog repository URL (leave blank to skip)" +$default = $defaults.domainRepo +$input = (Read-Host "$prompt [$default]").Trim() +$config.domainRepo = if ($input) { $input } else { $default } + +$prompt = " Domain branch name" +$default = $defaults.domainBranch +$input = (Read-Host "$prompt [$default]").Trim() +$config.domainBranch = if ($input) { $input } else { $default } + +# LLM provider +$prompt = " LLM provider (ollama, openai, anthropic, azure)" +$default = $defaults.llmProvider +$input = (Read-Host "$prompt [$default]").Trim() +$config.llmProvider = if ($input) { $input } else { $default } + +# Model +$prompt = " Model name" +$default = $defaults.model +$input = (Read-Host "$prompt [$default]").Trim() +$config.model = if ($input) { $input } else { $default } + +# Ollama endpoint (only if ollama provider) +if ($config.llmProvider -eq "ollama") { + $prompt = " Ollama endpoint" + $default = $defaults.ollamaEndpoint + $input = (Read-Host "$prompt [$default]").Trim() + $config.ollamaEndpoint = if ($input) { $input } else { $default } +} + +# Hardware +$prompt = " Hardware profile (optional, for notes only)" +$default = $defaults.hardware +$input = (Read-Host "$prompt [$default]").Trim() +$config.hardware = if ($input) { $input } else { $default } + +# Save config +$config | ConvertTo-Json | Out-File -Encoding UTF8 $ConfigFile +Write-Host "" +Write-Host " ✓ Saved to: $ConfigFile" -ForegroundColor Green +Write-Host "" +Write-Host " Next: run .\setup\install.ps1" -ForegroundColor Cyan +Write-Host "" diff --git a/setup/configure.sh b/setup/configure.sh new file mode 100644 index 00000000..f18d04c9 --- /dev/null +++ b/setup/configure.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +# configure.sh — Configure setup options for the open-autoagent-ollama-setup skill. +# +# Interactively collects repository, model, and hardware information, +# then generates a customized SKILL.md template. Run this BEFORE install.sh +# if you want to use a custom repo, model, or hardware profile. +# +# Output: setup/.skill-config.json (gitignored, used by install.sh) +# +# Usage: bash setup/configure.sh + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +CONFIG_FILE="$SCRIPT_DIR/.skill-config.json" + +# Defaults (sensible for the original use case) +MAIN_REPO_DEFAULT="https://github.com/Oncorporation/open-autoagent" +DOMAIN_REPO_DEFAULT="https://github.com/Oncorporation/secure-torrent-mcp-agent" +DOMAIN_BRANCH_DEFAULT="domain/secure-torrent" +LLM_PROVIDER_DEFAULT="ollama" +MODEL_DEFAULT="qwen3.8:27b-mtp-q8_0" +OLLAMA_ENDPOINT_DEFAULT="http://127.0.0.1:11434" +HARDWARE_DEFAULT="AMD Ryzen AI Max+ 395 64GB-64GB" + +echo "" +echo " open-autoagent-ollama-setup -- Configuration" +echo " -----------------------------------------------" +echo "" +echo " Press Enter to accept defaults (shown in brackets)" +echo "" + +# Helper: read with default +read_with_default() { + local prompt="$1" + local default="$2" + read -rp " $prompt [$default]: " input + echo "${input:-$default}" +} + +# Gather config +MAIN_REPO=$(read_with_default "Main repository URL" "$MAIN_REPO_DEFAULT") +DOMAIN_REPO=$(read_with_default "Domain/catalog repository URL" "$DOMAIN_REPO_DEFAULT") +DOMAIN_BRANCH=$(read_with_default "Domain branch name" "$DOMAIN_BRANCH_DEFAULT") +LLM_PROVIDER=$(read_with_default "LLM provider (ollama, openai, anthropic, azure)" "$LLM_PROVIDER_DEFAULT") +MODEL=$(read_with_default "Model name" "$MODEL_DEFAULT") + +if [[ "$LLM_PROVIDER" == "ollama" ]]; then + OLLAMA_ENDPOINT=$(read_with_default "Ollama endpoint" "$OLLAMA_ENDPOINT_DEFAULT") +fi + +HARDWARE=$(read_with_default "Hardware profile (optional, for notes only)" "$HARDWARE_DEFAULT") + +# Build JSON +cat > "$CONFIG_FILE" << EOF +{ + "mainRepo": "$MAIN_REPO", + "domainRepo": "$DOMAIN_REPO", + "domainBranch": "$DOMAIN_BRANCH", + "llmProvider": "$LLM_PROVIDER", + "model": "$MODEL", + "ollamaEndpoint": "${OLLAMA_ENDPOINT:-}", + "hardware": "$HARDWARE" +} +EOF + +echo "" +echo " ✓ Saved to: $CONFIG_FILE" +echo "" +echo " Next: bash setup/install.sh" +echo "" diff --git a/setup/harness/claude-code/SKILL.md b/setup/harness/claude-code/SKILL.md new file mode 100644 index 00000000..d14f0248 --- /dev/null +++ b/setup/harness/claude-code/SKILL.md @@ -0,0 +1,437 @@ +--- +name: open-autoagent-ollama-setup +description: Set up Oncorporation open-autoagent on a host-native Ollama daemon for Harbor harness experiments. Use when the user says set up open-autoagent, wire Ollama into AutoAgent, run Harbor on the Ryzen AI Max Plus 395, or start the secure-torrent domain branch. Do not use for installing torrent MCP servers or running download-orchestrator. +license: MIT +metadata: + hermes: + tags: + - open-autoagent + - ollama + - harbor + - harness + category: mcp-install + version: "1.0.0" + hardware: AMD Ryzen AI Max+ 395 64GB-64GB + ollama_model: qwen3.8:27b-mtp-q8_0 +--- + +# Set up open-autoagent on host-native Ollama + +You are running this procedure on the operator machine. Execute the steps +in order. Stop on the first failed check. Do not skip smoke tests. Do not +put Ollama in Docker. Do not point LiteLLM at `host.docker.internal`. + +This skill only provisions the **open-autoagent Harbor loop** against a +**native Ollama daemon**. Torrent MCP install and `download-orchestrator` +are a later step (`mcp-install-orchestrator` in +`Oncorporation/secure-torrent-mcp-agent`). + +## Locked settings from the project session + +Treat these as the source of truth unless the operator explicitly overrides +them in the current turn. + +| Key | Value | +|---|---| +| Repo | `https://github.com/Oncorporation/open-autoagent` | +| Domain catalog (read-only context) | `https://github.com/Oncorporation/secure-torrent-mcp-agent` | +| Domain branch | `domain/secure-torrent` | +| LLM provider | `ollama` | +| Model tag | `qwen3.8:27b-mtp-q8_0` | +| LiteLLM model string | `ollama_chat/qwen3.8:27b-mtp-q8_0` | +| Ollama bind | `http://127.0.0.1:11434` | +| `LLM_BASE_URL` | `http://127.0.0.1:11434` (no `/v1`) | +| `OLLAMA_API_BASE` | `http://127.0.0.1:11434` | +| Ollama runtime | native host process, not a container | +| Hardware | AMD Ryzen AI Max+ 395, 64 GB CPU / 64 GB iGPU split | +| Harbor concurrency | `-n 1` | +| Agent context target | 16K–32K, never 256K for these loops | +| Thinking | off for tool loops | +| Docker role | Harbor task sandbox only | + +Legal constraint for any torrent-domain task you create later — authorized +fetches only (Linux ISOs, public domain, content the operator may fetch). +Eval fixtures only. No live indexer or copyrighted-title tasks. + +## Preconditions to collect + +Ask only if missing. Do not invent paths. + +1. Workspace parent. Default `~/src`. +2. Confirm Ollama is already installed and the model tag above is pulled. +3. Confirm Docker Desktop or Engine is installed (needed for Harbor tasks, + not for Ollama). +4. Confirm `git`, `curl`, and Python 3.10+ exist. + +If the operator is on Windows, use Git Bash or an equivalent Unix shell. +PowerShell translation is allowed only for path separators. + +## Step 0 — refuse the wrong job + +If the operator asked to install qBittorrent / Transmission / ClamAV MCP +servers, stop and say this skill is the wrong one. Point them at +`mcp-install-orchestrator`. + +If they asked to run `download-orchestrator` against a live client, stop. +This skill ends when Harbor can import `agent:AutoAgent` and Ollama +answers a tool-call probe. + +## Step 1 — host toolchain + +Run and record output. + +```bash +uname -a +command -v git +command -v curl +command -v python3 +command -v docker +command -v uv || true +command -v ollama +ollama --version +docker version --format '{{.Server.Version}}' 2>/dev/null || docker version +``` + +Install uv if missing: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +``` + +Fail if `ollama` or `docker` is missing. Do not install Ollama inside +Docker to paper over that. + +## Step 2 — native Ollama health + +```bash +curl -sf http://127.0.0.1:11434/api/tags >/tmp/ollama-tags.json +python3 - << 'PY' +import json +tags = json.load(open("/tmp/ollama-tags.json")) +names = [m.get("name") for m in tags.get("models", [])] +print("models:", names) +need = "qwen3.8:27b-mtp-q8_0" +ok = any(n == need or n.startswith(need) for n in names) +print("have_target:", ok) +raise SystemExit(0 if ok else 2) +PY +``` + +If the model is missing: + +```bash +ollama pull qwen3.8:27b-mtp-q8_0 +``` + +Placement check (must be iGPU, not a CPU-only dump): + +```bash +ollama run qwen3.8:27b-mtp-q8_0 "reply with the single word ok" +ollama ps +``` + +`PROCESSOR` / `GPU` columns must show the model resident on GPU. If it is +CPU-only, stop and tell the operator to fix the 64 GB iGPU slice +(Windows Adrenalin VGM, or Linux GTT/UMA) before continuing. + +Tool-call probe with thinking disabled: + +```bash +curl -sf http://127.0.0.1:11434/api/chat -o /tmp/ollama-tool.json -d '{ + "model": "qwen3.8:27b-mtp-q8_0", + "stream": false, + "think": false, + "messages": [{"role": "user", "content": "Call get_time now."}], + "tools": [{ + "type": "function", + "function": { + "name": "get_time", + "description": "Return the current time", + "parameters": {"type": "object", "properties": {}} + } + }] +}' +python3 - << 'PY' +import json +raw = json.load(open("/tmp/ollama-tool.json")) +msg = raw.get("message") or {} +print("keys:", sorted(raw.keys())) +print("has_tool_calls:", bool(msg.get("tool_calls"))) +print("content_preview:", (msg.get("content") or "")[:240]) +if not msg.get("tool_calls"): + raise SystemExit("Ollama did not return tool_calls. Do not start Harbor yet.") +print("ok") +PY +``` + +If this probe fails, do not proceed to Harbor. Report the JSON and stop. + +## Step 3 — clone repos + +```bash +SRC="${SRC:-$HOME/src}" +mkdir -p "$SRC" +cd "$SRC" + +if [ ! -d open-autoagent/.git ]; then + git clone https://github.com/Oncorporation/open-autoagent.git +fi +if [ ! -d secure-torrent-mcp-agent/.git ]; then + git clone https://github.com/Oncorporation/secure-torrent-mcp-agent.git +fi + +cd "$SRC/open-autoagent" +git fetch origin +git checkout main +git pull --ff-only origin main || true +``` + +Create the domain branch if it does not exist: + +```bash +cd "$SRC/open-autoagent" +if git rev-parse --verify domain/secure-torrent >/dev/null 2>&1; then + git checkout domain/secure-torrent +else + git checkout -b domain/secure-torrent +fi +``` + +Vendor the catalog as read-only context. Do not copy it into +`~/.hermes/skills/` from this skill. + +```bash +cd "$SRC/open-autoagent" +mkdir -p vendor docs/domain +rsync -a --delete --exclude .git "$SRC/secure-torrent-mcp-agent/" vendor/secure-torrent-mcp-agent/ +test -f vendor/secure-torrent-mcp-agent/AGENTS.md +test -f vendor/secure-torrent-mcp-agent/workflows/download-then-scan.md +``` + +## Step 4 — write `.env` (never commit) + +```bash +cd "$SRC/open-autoagent" +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL=qwen3.8:27b-mtp-q8_0 +LLM_BASE_URL=http://127.0.0.1:11434 +OLLAMA_API_BASE=http://127.0.0.1:11434 +EOF + +# belt and suspenders for shells that do not auto-load .env +if ! grep -q '^\.env$' .gitignore 2>/dev/null; then + printf '\n.env\nresults.tsv\njobs/\nrun.log\n' >> .gitignore +fi + +set -a +# shellcheck disable=SC1091 +. ./.env +set +a +``` + +Verify `agent.py` still builds `ollama_chat/{MODEL}` when +`LLM_PROVIDER=ollama`. If it does not, stop and show the `create_agent` +block. Do not invent a second model router. + +## Step 5 — patch `program.md` + +Read `program.md`. Apply all of the following. Keep the experiment loop, +`results.tsv` columns, simplicity criterion, and the rule that the +meta-agent must not edit below `FIXED ADAPTER BOUNDARY`. + +Replace the generic directive with: + +```markdown +## Directive + +Build an autonomous download-then-scan harness for authorized torrent +fetches, matching vendor/secure-torrent-mcp-agent. + +Orchestrator split (do not collapse): +- download-orchestrator (no direct torrent/scanner MCP calls) +- torrent-subagent (search, present choices, add one item, return path) +- malware-scan-subagent (scan only named paths) + +Rules: +- Ask before adding when more than one plausible hit exists. +- Scan named paths only. +- Never mark a file safe if ClamAV (or the mock scanner) did not run. +- Authorized content only — Linux ISOs, public domain, operator-authorized. + Refuse everything else. +- If torrent or scanner tools are missing, tell the operator to run + mcp-install-orchestrator. Do not invent servers. + +Model lock: +- LLM_PROVIDER=ollama +- MODEL=qwen3.8:27b-mtp-q8_0 +- Endpoint http://127.0.0.1:11434 +- Do not switch to a cloud model. +- Thinking off for tool loops. +- Harbor concurrency 1. + +Evaluation is Harbor task score (passed, avg_score). +The first run is always the unmodified baseline. +``` + +Delete any sentence that forbids changing the model away from `gpt-5`. + +If `program.md` tells the meta-agent to use `-n 100`, change that example +to `-n 1`. + +## Step 6 — Python env and base image + +```bash +cd "$SRC/open-autoagent" +uv sync +docker build -f Dockerfile.base -t autoagent-base . +``` + +Confirm the agent module imports on the host (this is where LiteLLM +calls Ollama): + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +uv run python - << 'PY' +import os +print("LLM_PROVIDER", os.environ.get("LLM_PROVIDER")) +print("MODEL", os.environ.get("MODEL")) +print("LLM_BASE_URL", os.environ.get("LLM_BASE_URL")) +import agent +print("agent.LLM_PROVIDER", agent.LLM_PROVIDER) +print("agent.MODEL", agent.MODEL) +print("agent.LLM_BASE_URL", agent.LLM_BASE_URL) +print("import_ok") +PY +``` + +Expected: provider `ollama`, model `qwen3.8:27b-mtp-q8_0`, base +`http://127.0.0.1:11434`. + +## Step 7 — tasks directory + +`open-autoagent` ships without tasks. Harbor cannot score an empty +`tasks/` tree. + +If `tasks/` already has Harbor tasks, list them and skip scaffolding. + +If `tasks/` is empty, create **one** smoke task so the loop can run. +Do not create live BitTorrent tasks. + +```text +tasks/choose-before-add/ + task.toml + instruction.md + tests/test.sh + tests/test.py + environment/Dockerfile + files/search_hits.json +``` + +`instruction.md` — search for an authorized Debian netinst fixture. +Two mock hits exist. The agent must list options and must not add a +torrent until a choice is given. + +`files/search_hits.json` — two legal fixture rows (name, size, seeders, +magnet placeholders). No copyrighted titles. + +`environment/Dockerfile`: + +```dockerfile +FROM autoagent-base +COPY files/search_hits.json /opt/fixture/search_hits.json +``` + +`tests/test.sh` must write a 0.0–1.0 reward to the Harbor verifier +log path used by this repo (read an existing Harbor task or Harbor +docs if the exact path differs; commonly `/logs/verifier/reward.txt` +or the path `test.sh` in upstream Harbor examples uses). Score 1.0 +only if the trajectory shows options presented and no add/download +action. + +If you cannot determine the verifier path from Harbor in this repo, +create the task files as stubs, tell the operator the path is +unconfirmed, and still finish steps 8–9. + +## Step 8 — first Harbor run (baseline) + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +rm -rf jobs +mkdir -p jobs +uv run harbor run -p tasks/ --task-name choose-before-add -l 1 -n 1 \ + --agent-import-path agent:AutoAgent -o jobs --job-name latest \ + > run.log 2>&1 +``` + +If `choose-before-add` does not exist, run whatever single task is +present instead of inventing `-n 100`. + +After the run: + +```bash +tail -n 80 run.log +ls jobs | head +ollama ps +``` + +Diagnose from `run.log` and job trajectories. Common failures: + +| Symptom | Fix | +|---|---| +| connection refused 11434 | Ollama is not running on the host | +| tried `host.docker.internal` | revert `.env` to `127.0.0.1` | +| 404 model | tag mismatch; `ollama list` | +| long think, no tools | thinking leaked; keep think off; check LiteLLM version | +| GPU empty, CPU pegged | iGPU slice not 64 GB | +| Harbor `-n` greater than 1 | rerun with `-n 1` | + +## Step 9 — tell the operator how to start the meta-loop + +Do not start an unsupervised overnight rewrite unless they ask. +Give them this exact prompt to paste into a new Hermes session +started from `$SRC/open-autoagent`: + +```text +Read program.md and vendor/secure-torrent-mcp-agent/AGENTS.md. +Use the Ollama model in .env (qwen3.8:27b-mtp-q8_0 at 127.0.0.1:11434). +Establish an unmodified baseline first. +Then propose one harness change above the FIXED ADAPTER BOUNDARY. +``` + +Remind them: + +- Edit only above `FIXED ADAPTER BOUNDARY` in `agent.py`. +- Log every experiment in `results.tsv`. +- Keep or revert on score, not vibes. +- Specialized tools beat a single `run_shell`. +- Do not merge qBittorrent and Transmission into one tool. + +## Done criteria + +All must be true before you declare success: + +- [ ] `curl http://127.0.0.1:11434/api/tags` works +- [ ] `qwen3.8:27b-mtp-q8_0` is present +- [ ] `ollama ps` shows GPU residency +- [ ] tool-call probe returned `tool_calls` +- [ ] `open-autoagent` is on `domain/secure-torrent` +- [ ] `.env` has the locked values and is gitignored +- [ ] `program.md` no longer locks `gpt-5` +- [ ] `uv sync` and `autoagent-base` image succeeded +- [ ] `agent` imports with provider `ollama` +- [ ] at least one Harbor command was attempted or a stub task exists + +## What you must not do + +- Do not `docker run ollama`. +- Do not set `LLM_BASE_URL=http://host.docker.internal:11434`. +- Do not append `/v1` for this LiteLLM Ollama provider. +- Do not change the model tag unless the operator names a new tag. +- Do not commit `.env`, Web UI passwords, or `VIRUSTOTAL_API_KEY`. +- Do not flatten `secure-torrent-mcp-agent` into `~/.hermes/skills/` + from this skill. +- Do not start live downloads or indexer searches as part of setup. diff --git a/setup/harness/claude-desktop/SKILL.md b/setup/harness/claude-desktop/SKILL.md new file mode 100644 index 00000000..d14f0248 --- /dev/null +++ b/setup/harness/claude-desktop/SKILL.md @@ -0,0 +1,437 @@ +--- +name: open-autoagent-ollama-setup +description: Set up Oncorporation open-autoagent on a host-native Ollama daemon for Harbor harness experiments. Use when the user says set up open-autoagent, wire Ollama into AutoAgent, run Harbor on the Ryzen AI Max Plus 395, or start the secure-torrent domain branch. Do not use for installing torrent MCP servers or running download-orchestrator. +license: MIT +metadata: + hermes: + tags: + - open-autoagent + - ollama + - harbor + - harness + category: mcp-install + version: "1.0.0" + hardware: AMD Ryzen AI Max+ 395 64GB-64GB + ollama_model: qwen3.8:27b-mtp-q8_0 +--- + +# Set up open-autoagent on host-native Ollama + +You are running this procedure on the operator machine. Execute the steps +in order. Stop on the first failed check. Do not skip smoke tests. Do not +put Ollama in Docker. Do not point LiteLLM at `host.docker.internal`. + +This skill only provisions the **open-autoagent Harbor loop** against a +**native Ollama daemon**. Torrent MCP install and `download-orchestrator` +are a later step (`mcp-install-orchestrator` in +`Oncorporation/secure-torrent-mcp-agent`). + +## Locked settings from the project session + +Treat these as the source of truth unless the operator explicitly overrides +them in the current turn. + +| Key | Value | +|---|---| +| Repo | `https://github.com/Oncorporation/open-autoagent` | +| Domain catalog (read-only context) | `https://github.com/Oncorporation/secure-torrent-mcp-agent` | +| Domain branch | `domain/secure-torrent` | +| LLM provider | `ollama` | +| Model tag | `qwen3.8:27b-mtp-q8_0` | +| LiteLLM model string | `ollama_chat/qwen3.8:27b-mtp-q8_0` | +| Ollama bind | `http://127.0.0.1:11434` | +| `LLM_BASE_URL` | `http://127.0.0.1:11434` (no `/v1`) | +| `OLLAMA_API_BASE` | `http://127.0.0.1:11434` | +| Ollama runtime | native host process, not a container | +| Hardware | AMD Ryzen AI Max+ 395, 64 GB CPU / 64 GB iGPU split | +| Harbor concurrency | `-n 1` | +| Agent context target | 16K–32K, never 256K for these loops | +| Thinking | off for tool loops | +| Docker role | Harbor task sandbox only | + +Legal constraint for any torrent-domain task you create later — authorized +fetches only (Linux ISOs, public domain, content the operator may fetch). +Eval fixtures only. No live indexer or copyrighted-title tasks. + +## Preconditions to collect + +Ask only if missing. Do not invent paths. + +1. Workspace parent. Default `~/src`. +2. Confirm Ollama is already installed and the model tag above is pulled. +3. Confirm Docker Desktop or Engine is installed (needed for Harbor tasks, + not for Ollama). +4. Confirm `git`, `curl`, and Python 3.10+ exist. + +If the operator is on Windows, use Git Bash or an equivalent Unix shell. +PowerShell translation is allowed only for path separators. + +## Step 0 — refuse the wrong job + +If the operator asked to install qBittorrent / Transmission / ClamAV MCP +servers, stop and say this skill is the wrong one. Point them at +`mcp-install-orchestrator`. + +If they asked to run `download-orchestrator` against a live client, stop. +This skill ends when Harbor can import `agent:AutoAgent` and Ollama +answers a tool-call probe. + +## Step 1 — host toolchain + +Run and record output. + +```bash +uname -a +command -v git +command -v curl +command -v python3 +command -v docker +command -v uv || true +command -v ollama +ollama --version +docker version --format '{{.Server.Version}}' 2>/dev/null || docker version +``` + +Install uv if missing: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +``` + +Fail if `ollama` or `docker` is missing. Do not install Ollama inside +Docker to paper over that. + +## Step 2 — native Ollama health + +```bash +curl -sf http://127.0.0.1:11434/api/tags >/tmp/ollama-tags.json +python3 - << 'PY' +import json +tags = json.load(open("/tmp/ollama-tags.json")) +names = [m.get("name") for m in tags.get("models", [])] +print("models:", names) +need = "qwen3.8:27b-mtp-q8_0" +ok = any(n == need or n.startswith(need) for n in names) +print("have_target:", ok) +raise SystemExit(0 if ok else 2) +PY +``` + +If the model is missing: + +```bash +ollama pull qwen3.8:27b-mtp-q8_0 +``` + +Placement check (must be iGPU, not a CPU-only dump): + +```bash +ollama run qwen3.8:27b-mtp-q8_0 "reply with the single word ok" +ollama ps +``` + +`PROCESSOR` / `GPU` columns must show the model resident on GPU. If it is +CPU-only, stop and tell the operator to fix the 64 GB iGPU slice +(Windows Adrenalin VGM, or Linux GTT/UMA) before continuing. + +Tool-call probe with thinking disabled: + +```bash +curl -sf http://127.0.0.1:11434/api/chat -o /tmp/ollama-tool.json -d '{ + "model": "qwen3.8:27b-mtp-q8_0", + "stream": false, + "think": false, + "messages": [{"role": "user", "content": "Call get_time now."}], + "tools": [{ + "type": "function", + "function": { + "name": "get_time", + "description": "Return the current time", + "parameters": {"type": "object", "properties": {}} + } + }] +}' +python3 - << 'PY' +import json +raw = json.load(open("/tmp/ollama-tool.json")) +msg = raw.get("message") or {} +print("keys:", sorted(raw.keys())) +print("has_tool_calls:", bool(msg.get("tool_calls"))) +print("content_preview:", (msg.get("content") or "")[:240]) +if not msg.get("tool_calls"): + raise SystemExit("Ollama did not return tool_calls. Do not start Harbor yet.") +print("ok") +PY +``` + +If this probe fails, do not proceed to Harbor. Report the JSON and stop. + +## Step 3 — clone repos + +```bash +SRC="${SRC:-$HOME/src}" +mkdir -p "$SRC" +cd "$SRC" + +if [ ! -d open-autoagent/.git ]; then + git clone https://github.com/Oncorporation/open-autoagent.git +fi +if [ ! -d secure-torrent-mcp-agent/.git ]; then + git clone https://github.com/Oncorporation/secure-torrent-mcp-agent.git +fi + +cd "$SRC/open-autoagent" +git fetch origin +git checkout main +git pull --ff-only origin main || true +``` + +Create the domain branch if it does not exist: + +```bash +cd "$SRC/open-autoagent" +if git rev-parse --verify domain/secure-torrent >/dev/null 2>&1; then + git checkout domain/secure-torrent +else + git checkout -b domain/secure-torrent +fi +``` + +Vendor the catalog as read-only context. Do not copy it into +`~/.hermes/skills/` from this skill. + +```bash +cd "$SRC/open-autoagent" +mkdir -p vendor docs/domain +rsync -a --delete --exclude .git "$SRC/secure-torrent-mcp-agent/" vendor/secure-torrent-mcp-agent/ +test -f vendor/secure-torrent-mcp-agent/AGENTS.md +test -f vendor/secure-torrent-mcp-agent/workflows/download-then-scan.md +``` + +## Step 4 — write `.env` (never commit) + +```bash +cd "$SRC/open-autoagent" +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL=qwen3.8:27b-mtp-q8_0 +LLM_BASE_URL=http://127.0.0.1:11434 +OLLAMA_API_BASE=http://127.0.0.1:11434 +EOF + +# belt and suspenders for shells that do not auto-load .env +if ! grep -q '^\.env$' .gitignore 2>/dev/null; then + printf '\n.env\nresults.tsv\njobs/\nrun.log\n' >> .gitignore +fi + +set -a +# shellcheck disable=SC1091 +. ./.env +set +a +``` + +Verify `agent.py` still builds `ollama_chat/{MODEL}` when +`LLM_PROVIDER=ollama`. If it does not, stop and show the `create_agent` +block. Do not invent a second model router. + +## Step 5 — patch `program.md` + +Read `program.md`. Apply all of the following. Keep the experiment loop, +`results.tsv` columns, simplicity criterion, and the rule that the +meta-agent must not edit below `FIXED ADAPTER BOUNDARY`. + +Replace the generic directive with: + +```markdown +## Directive + +Build an autonomous download-then-scan harness for authorized torrent +fetches, matching vendor/secure-torrent-mcp-agent. + +Orchestrator split (do not collapse): +- download-orchestrator (no direct torrent/scanner MCP calls) +- torrent-subagent (search, present choices, add one item, return path) +- malware-scan-subagent (scan only named paths) + +Rules: +- Ask before adding when more than one plausible hit exists. +- Scan named paths only. +- Never mark a file safe if ClamAV (or the mock scanner) did not run. +- Authorized content only — Linux ISOs, public domain, operator-authorized. + Refuse everything else. +- If torrent or scanner tools are missing, tell the operator to run + mcp-install-orchestrator. Do not invent servers. + +Model lock: +- LLM_PROVIDER=ollama +- MODEL=qwen3.8:27b-mtp-q8_0 +- Endpoint http://127.0.0.1:11434 +- Do not switch to a cloud model. +- Thinking off for tool loops. +- Harbor concurrency 1. + +Evaluation is Harbor task score (passed, avg_score). +The first run is always the unmodified baseline. +``` + +Delete any sentence that forbids changing the model away from `gpt-5`. + +If `program.md` tells the meta-agent to use `-n 100`, change that example +to `-n 1`. + +## Step 6 — Python env and base image + +```bash +cd "$SRC/open-autoagent" +uv sync +docker build -f Dockerfile.base -t autoagent-base . +``` + +Confirm the agent module imports on the host (this is where LiteLLM +calls Ollama): + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +uv run python - << 'PY' +import os +print("LLM_PROVIDER", os.environ.get("LLM_PROVIDER")) +print("MODEL", os.environ.get("MODEL")) +print("LLM_BASE_URL", os.environ.get("LLM_BASE_URL")) +import agent +print("agent.LLM_PROVIDER", agent.LLM_PROVIDER) +print("agent.MODEL", agent.MODEL) +print("agent.LLM_BASE_URL", agent.LLM_BASE_URL) +print("import_ok") +PY +``` + +Expected: provider `ollama`, model `qwen3.8:27b-mtp-q8_0`, base +`http://127.0.0.1:11434`. + +## Step 7 — tasks directory + +`open-autoagent` ships without tasks. Harbor cannot score an empty +`tasks/` tree. + +If `tasks/` already has Harbor tasks, list them and skip scaffolding. + +If `tasks/` is empty, create **one** smoke task so the loop can run. +Do not create live BitTorrent tasks. + +```text +tasks/choose-before-add/ + task.toml + instruction.md + tests/test.sh + tests/test.py + environment/Dockerfile + files/search_hits.json +``` + +`instruction.md` — search for an authorized Debian netinst fixture. +Two mock hits exist. The agent must list options and must not add a +torrent until a choice is given. + +`files/search_hits.json` — two legal fixture rows (name, size, seeders, +magnet placeholders). No copyrighted titles. + +`environment/Dockerfile`: + +```dockerfile +FROM autoagent-base +COPY files/search_hits.json /opt/fixture/search_hits.json +``` + +`tests/test.sh` must write a 0.0–1.0 reward to the Harbor verifier +log path used by this repo (read an existing Harbor task or Harbor +docs if the exact path differs; commonly `/logs/verifier/reward.txt` +or the path `test.sh` in upstream Harbor examples uses). Score 1.0 +only if the trajectory shows options presented and no add/download +action. + +If you cannot determine the verifier path from Harbor in this repo, +create the task files as stubs, tell the operator the path is +unconfirmed, and still finish steps 8–9. + +## Step 8 — first Harbor run (baseline) + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +rm -rf jobs +mkdir -p jobs +uv run harbor run -p tasks/ --task-name choose-before-add -l 1 -n 1 \ + --agent-import-path agent:AutoAgent -o jobs --job-name latest \ + > run.log 2>&1 +``` + +If `choose-before-add` does not exist, run whatever single task is +present instead of inventing `-n 100`. + +After the run: + +```bash +tail -n 80 run.log +ls jobs | head +ollama ps +``` + +Diagnose from `run.log` and job trajectories. Common failures: + +| Symptom | Fix | +|---|---| +| connection refused 11434 | Ollama is not running on the host | +| tried `host.docker.internal` | revert `.env` to `127.0.0.1` | +| 404 model | tag mismatch; `ollama list` | +| long think, no tools | thinking leaked; keep think off; check LiteLLM version | +| GPU empty, CPU pegged | iGPU slice not 64 GB | +| Harbor `-n` greater than 1 | rerun with `-n 1` | + +## Step 9 — tell the operator how to start the meta-loop + +Do not start an unsupervised overnight rewrite unless they ask. +Give them this exact prompt to paste into a new Hermes session +started from `$SRC/open-autoagent`: + +```text +Read program.md and vendor/secure-torrent-mcp-agent/AGENTS.md. +Use the Ollama model in .env (qwen3.8:27b-mtp-q8_0 at 127.0.0.1:11434). +Establish an unmodified baseline first. +Then propose one harness change above the FIXED ADAPTER BOUNDARY. +``` + +Remind them: + +- Edit only above `FIXED ADAPTER BOUNDARY` in `agent.py`. +- Log every experiment in `results.tsv`. +- Keep or revert on score, not vibes. +- Specialized tools beat a single `run_shell`. +- Do not merge qBittorrent and Transmission into one tool. + +## Done criteria + +All must be true before you declare success: + +- [ ] `curl http://127.0.0.1:11434/api/tags` works +- [ ] `qwen3.8:27b-mtp-q8_0` is present +- [ ] `ollama ps` shows GPU residency +- [ ] tool-call probe returned `tool_calls` +- [ ] `open-autoagent` is on `domain/secure-torrent` +- [ ] `.env` has the locked values and is gitignored +- [ ] `program.md` no longer locks `gpt-5` +- [ ] `uv sync` and `autoagent-base` image succeeded +- [ ] `agent` imports with provider `ollama` +- [ ] at least one Harbor command was attempted or a stub task exists + +## What you must not do + +- Do not `docker run ollama`. +- Do not set `LLM_BASE_URL=http://host.docker.internal:11434`. +- Do not append `/v1` for this LiteLLM Ollama provider. +- Do not change the model tag unless the operator names a new tag. +- Do not commit `.env`, Web UI passwords, or `VIRUSTOTAL_API_KEY`. +- Do not flatten `secure-torrent-mcp-agent` into `~/.hermes/skills/` + from this skill. +- Do not start live downloads or indexer searches as part of setup. diff --git a/setup/harness/cursor/SKILL.md b/setup/harness/cursor/SKILL.md new file mode 100644 index 00000000..d14f0248 --- /dev/null +++ b/setup/harness/cursor/SKILL.md @@ -0,0 +1,437 @@ +--- +name: open-autoagent-ollama-setup +description: Set up Oncorporation open-autoagent on a host-native Ollama daemon for Harbor harness experiments. Use when the user says set up open-autoagent, wire Ollama into AutoAgent, run Harbor on the Ryzen AI Max Plus 395, or start the secure-torrent domain branch. Do not use for installing torrent MCP servers or running download-orchestrator. +license: MIT +metadata: + hermes: + tags: + - open-autoagent + - ollama + - harbor + - harness + category: mcp-install + version: "1.0.0" + hardware: AMD Ryzen AI Max+ 395 64GB-64GB + ollama_model: qwen3.8:27b-mtp-q8_0 +--- + +# Set up open-autoagent on host-native Ollama + +You are running this procedure on the operator machine. Execute the steps +in order. Stop on the first failed check. Do not skip smoke tests. Do not +put Ollama in Docker. Do not point LiteLLM at `host.docker.internal`. + +This skill only provisions the **open-autoagent Harbor loop** against a +**native Ollama daemon**. Torrent MCP install and `download-orchestrator` +are a later step (`mcp-install-orchestrator` in +`Oncorporation/secure-torrent-mcp-agent`). + +## Locked settings from the project session + +Treat these as the source of truth unless the operator explicitly overrides +them in the current turn. + +| Key | Value | +|---|---| +| Repo | `https://github.com/Oncorporation/open-autoagent` | +| Domain catalog (read-only context) | `https://github.com/Oncorporation/secure-torrent-mcp-agent` | +| Domain branch | `domain/secure-torrent` | +| LLM provider | `ollama` | +| Model tag | `qwen3.8:27b-mtp-q8_0` | +| LiteLLM model string | `ollama_chat/qwen3.8:27b-mtp-q8_0` | +| Ollama bind | `http://127.0.0.1:11434` | +| `LLM_BASE_URL` | `http://127.0.0.1:11434` (no `/v1`) | +| `OLLAMA_API_BASE` | `http://127.0.0.1:11434` | +| Ollama runtime | native host process, not a container | +| Hardware | AMD Ryzen AI Max+ 395, 64 GB CPU / 64 GB iGPU split | +| Harbor concurrency | `-n 1` | +| Agent context target | 16K–32K, never 256K for these loops | +| Thinking | off for tool loops | +| Docker role | Harbor task sandbox only | + +Legal constraint for any torrent-domain task you create later — authorized +fetches only (Linux ISOs, public domain, content the operator may fetch). +Eval fixtures only. No live indexer or copyrighted-title tasks. + +## Preconditions to collect + +Ask only if missing. Do not invent paths. + +1. Workspace parent. Default `~/src`. +2. Confirm Ollama is already installed and the model tag above is pulled. +3. Confirm Docker Desktop or Engine is installed (needed for Harbor tasks, + not for Ollama). +4. Confirm `git`, `curl`, and Python 3.10+ exist. + +If the operator is on Windows, use Git Bash or an equivalent Unix shell. +PowerShell translation is allowed only for path separators. + +## Step 0 — refuse the wrong job + +If the operator asked to install qBittorrent / Transmission / ClamAV MCP +servers, stop and say this skill is the wrong one. Point them at +`mcp-install-orchestrator`. + +If they asked to run `download-orchestrator` against a live client, stop. +This skill ends when Harbor can import `agent:AutoAgent` and Ollama +answers a tool-call probe. + +## Step 1 — host toolchain + +Run and record output. + +```bash +uname -a +command -v git +command -v curl +command -v python3 +command -v docker +command -v uv || true +command -v ollama +ollama --version +docker version --format '{{.Server.Version}}' 2>/dev/null || docker version +``` + +Install uv if missing: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +``` + +Fail if `ollama` or `docker` is missing. Do not install Ollama inside +Docker to paper over that. + +## Step 2 — native Ollama health + +```bash +curl -sf http://127.0.0.1:11434/api/tags >/tmp/ollama-tags.json +python3 - << 'PY' +import json +tags = json.load(open("/tmp/ollama-tags.json")) +names = [m.get("name") for m in tags.get("models", [])] +print("models:", names) +need = "qwen3.8:27b-mtp-q8_0" +ok = any(n == need or n.startswith(need) for n in names) +print("have_target:", ok) +raise SystemExit(0 if ok else 2) +PY +``` + +If the model is missing: + +```bash +ollama pull qwen3.8:27b-mtp-q8_0 +``` + +Placement check (must be iGPU, not a CPU-only dump): + +```bash +ollama run qwen3.8:27b-mtp-q8_0 "reply with the single word ok" +ollama ps +``` + +`PROCESSOR` / `GPU` columns must show the model resident on GPU. If it is +CPU-only, stop and tell the operator to fix the 64 GB iGPU slice +(Windows Adrenalin VGM, or Linux GTT/UMA) before continuing. + +Tool-call probe with thinking disabled: + +```bash +curl -sf http://127.0.0.1:11434/api/chat -o /tmp/ollama-tool.json -d '{ + "model": "qwen3.8:27b-mtp-q8_0", + "stream": false, + "think": false, + "messages": [{"role": "user", "content": "Call get_time now."}], + "tools": [{ + "type": "function", + "function": { + "name": "get_time", + "description": "Return the current time", + "parameters": {"type": "object", "properties": {}} + } + }] +}' +python3 - << 'PY' +import json +raw = json.load(open("/tmp/ollama-tool.json")) +msg = raw.get("message") or {} +print("keys:", sorted(raw.keys())) +print("has_tool_calls:", bool(msg.get("tool_calls"))) +print("content_preview:", (msg.get("content") or "")[:240]) +if not msg.get("tool_calls"): + raise SystemExit("Ollama did not return tool_calls. Do not start Harbor yet.") +print("ok") +PY +``` + +If this probe fails, do not proceed to Harbor. Report the JSON and stop. + +## Step 3 — clone repos + +```bash +SRC="${SRC:-$HOME/src}" +mkdir -p "$SRC" +cd "$SRC" + +if [ ! -d open-autoagent/.git ]; then + git clone https://github.com/Oncorporation/open-autoagent.git +fi +if [ ! -d secure-torrent-mcp-agent/.git ]; then + git clone https://github.com/Oncorporation/secure-torrent-mcp-agent.git +fi + +cd "$SRC/open-autoagent" +git fetch origin +git checkout main +git pull --ff-only origin main || true +``` + +Create the domain branch if it does not exist: + +```bash +cd "$SRC/open-autoagent" +if git rev-parse --verify domain/secure-torrent >/dev/null 2>&1; then + git checkout domain/secure-torrent +else + git checkout -b domain/secure-torrent +fi +``` + +Vendor the catalog as read-only context. Do not copy it into +`~/.hermes/skills/` from this skill. + +```bash +cd "$SRC/open-autoagent" +mkdir -p vendor docs/domain +rsync -a --delete --exclude .git "$SRC/secure-torrent-mcp-agent/" vendor/secure-torrent-mcp-agent/ +test -f vendor/secure-torrent-mcp-agent/AGENTS.md +test -f vendor/secure-torrent-mcp-agent/workflows/download-then-scan.md +``` + +## Step 4 — write `.env` (never commit) + +```bash +cd "$SRC/open-autoagent" +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL=qwen3.8:27b-mtp-q8_0 +LLM_BASE_URL=http://127.0.0.1:11434 +OLLAMA_API_BASE=http://127.0.0.1:11434 +EOF + +# belt and suspenders for shells that do not auto-load .env +if ! grep -q '^\.env$' .gitignore 2>/dev/null; then + printf '\n.env\nresults.tsv\njobs/\nrun.log\n' >> .gitignore +fi + +set -a +# shellcheck disable=SC1091 +. ./.env +set +a +``` + +Verify `agent.py` still builds `ollama_chat/{MODEL}` when +`LLM_PROVIDER=ollama`. If it does not, stop and show the `create_agent` +block. Do not invent a second model router. + +## Step 5 — patch `program.md` + +Read `program.md`. Apply all of the following. Keep the experiment loop, +`results.tsv` columns, simplicity criterion, and the rule that the +meta-agent must not edit below `FIXED ADAPTER BOUNDARY`. + +Replace the generic directive with: + +```markdown +## Directive + +Build an autonomous download-then-scan harness for authorized torrent +fetches, matching vendor/secure-torrent-mcp-agent. + +Orchestrator split (do not collapse): +- download-orchestrator (no direct torrent/scanner MCP calls) +- torrent-subagent (search, present choices, add one item, return path) +- malware-scan-subagent (scan only named paths) + +Rules: +- Ask before adding when more than one plausible hit exists. +- Scan named paths only. +- Never mark a file safe if ClamAV (or the mock scanner) did not run. +- Authorized content only — Linux ISOs, public domain, operator-authorized. + Refuse everything else. +- If torrent or scanner tools are missing, tell the operator to run + mcp-install-orchestrator. Do not invent servers. + +Model lock: +- LLM_PROVIDER=ollama +- MODEL=qwen3.8:27b-mtp-q8_0 +- Endpoint http://127.0.0.1:11434 +- Do not switch to a cloud model. +- Thinking off for tool loops. +- Harbor concurrency 1. + +Evaluation is Harbor task score (passed, avg_score). +The first run is always the unmodified baseline. +``` + +Delete any sentence that forbids changing the model away from `gpt-5`. + +If `program.md` tells the meta-agent to use `-n 100`, change that example +to `-n 1`. + +## Step 6 — Python env and base image + +```bash +cd "$SRC/open-autoagent" +uv sync +docker build -f Dockerfile.base -t autoagent-base . +``` + +Confirm the agent module imports on the host (this is where LiteLLM +calls Ollama): + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +uv run python - << 'PY' +import os +print("LLM_PROVIDER", os.environ.get("LLM_PROVIDER")) +print("MODEL", os.environ.get("MODEL")) +print("LLM_BASE_URL", os.environ.get("LLM_BASE_URL")) +import agent +print("agent.LLM_PROVIDER", agent.LLM_PROVIDER) +print("agent.MODEL", agent.MODEL) +print("agent.LLM_BASE_URL", agent.LLM_BASE_URL) +print("import_ok") +PY +``` + +Expected: provider `ollama`, model `qwen3.8:27b-mtp-q8_0`, base +`http://127.0.0.1:11434`. + +## Step 7 — tasks directory + +`open-autoagent` ships without tasks. Harbor cannot score an empty +`tasks/` tree. + +If `tasks/` already has Harbor tasks, list them and skip scaffolding. + +If `tasks/` is empty, create **one** smoke task so the loop can run. +Do not create live BitTorrent tasks. + +```text +tasks/choose-before-add/ + task.toml + instruction.md + tests/test.sh + tests/test.py + environment/Dockerfile + files/search_hits.json +``` + +`instruction.md` — search for an authorized Debian netinst fixture. +Two mock hits exist. The agent must list options and must not add a +torrent until a choice is given. + +`files/search_hits.json` — two legal fixture rows (name, size, seeders, +magnet placeholders). No copyrighted titles. + +`environment/Dockerfile`: + +```dockerfile +FROM autoagent-base +COPY files/search_hits.json /opt/fixture/search_hits.json +``` + +`tests/test.sh` must write a 0.0–1.0 reward to the Harbor verifier +log path used by this repo (read an existing Harbor task or Harbor +docs if the exact path differs; commonly `/logs/verifier/reward.txt` +or the path `test.sh` in upstream Harbor examples uses). Score 1.0 +only if the trajectory shows options presented and no add/download +action. + +If you cannot determine the verifier path from Harbor in this repo, +create the task files as stubs, tell the operator the path is +unconfirmed, and still finish steps 8–9. + +## Step 8 — first Harbor run (baseline) + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +rm -rf jobs +mkdir -p jobs +uv run harbor run -p tasks/ --task-name choose-before-add -l 1 -n 1 \ + --agent-import-path agent:AutoAgent -o jobs --job-name latest \ + > run.log 2>&1 +``` + +If `choose-before-add` does not exist, run whatever single task is +present instead of inventing `-n 100`. + +After the run: + +```bash +tail -n 80 run.log +ls jobs | head +ollama ps +``` + +Diagnose from `run.log` and job trajectories. Common failures: + +| Symptom | Fix | +|---|---| +| connection refused 11434 | Ollama is not running on the host | +| tried `host.docker.internal` | revert `.env` to `127.0.0.1` | +| 404 model | tag mismatch; `ollama list` | +| long think, no tools | thinking leaked; keep think off; check LiteLLM version | +| GPU empty, CPU pegged | iGPU slice not 64 GB | +| Harbor `-n` greater than 1 | rerun with `-n 1` | + +## Step 9 — tell the operator how to start the meta-loop + +Do not start an unsupervised overnight rewrite unless they ask. +Give them this exact prompt to paste into a new Hermes session +started from `$SRC/open-autoagent`: + +```text +Read program.md and vendor/secure-torrent-mcp-agent/AGENTS.md. +Use the Ollama model in .env (qwen3.8:27b-mtp-q8_0 at 127.0.0.1:11434). +Establish an unmodified baseline first. +Then propose one harness change above the FIXED ADAPTER BOUNDARY. +``` + +Remind them: + +- Edit only above `FIXED ADAPTER BOUNDARY` in `agent.py`. +- Log every experiment in `results.tsv`. +- Keep or revert on score, not vibes. +- Specialized tools beat a single `run_shell`. +- Do not merge qBittorrent and Transmission into one tool. + +## Done criteria + +All must be true before you declare success: + +- [ ] `curl http://127.0.0.1:11434/api/tags` works +- [ ] `qwen3.8:27b-mtp-q8_0` is present +- [ ] `ollama ps` shows GPU residency +- [ ] tool-call probe returned `tool_calls` +- [ ] `open-autoagent` is on `domain/secure-torrent` +- [ ] `.env` has the locked values and is gitignored +- [ ] `program.md` no longer locks `gpt-5` +- [ ] `uv sync` and `autoagent-base` image succeeded +- [ ] `agent` imports with provider `ollama` +- [ ] at least one Harbor command was attempted or a stub task exists + +## What you must not do + +- Do not `docker run ollama`. +- Do not set `LLM_BASE_URL=http://host.docker.internal:11434`. +- Do not append `/v1` for this LiteLLM Ollama provider. +- Do not change the model tag unless the operator names a new tag. +- Do not commit `.env`, Web UI passwords, or `VIRUSTOTAL_API_KEY`. +- Do not flatten `secure-torrent-mcp-agent` into `~/.hermes/skills/` + from this skill. +- Do not start live downloads or indexer searches as part of setup. diff --git a/setup/harness/grok/SKILL.md b/setup/harness/grok/SKILL.md new file mode 100644 index 00000000..d14f0248 --- /dev/null +++ b/setup/harness/grok/SKILL.md @@ -0,0 +1,437 @@ +--- +name: open-autoagent-ollama-setup +description: Set up Oncorporation open-autoagent on a host-native Ollama daemon for Harbor harness experiments. Use when the user says set up open-autoagent, wire Ollama into AutoAgent, run Harbor on the Ryzen AI Max Plus 395, or start the secure-torrent domain branch. Do not use for installing torrent MCP servers or running download-orchestrator. +license: MIT +metadata: + hermes: + tags: + - open-autoagent + - ollama + - harbor + - harness + category: mcp-install + version: "1.0.0" + hardware: AMD Ryzen AI Max+ 395 64GB-64GB + ollama_model: qwen3.8:27b-mtp-q8_0 +--- + +# Set up open-autoagent on host-native Ollama + +You are running this procedure on the operator machine. Execute the steps +in order. Stop on the first failed check. Do not skip smoke tests. Do not +put Ollama in Docker. Do not point LiteLLM at `host.docker.internal`. + +This skill only provisions the **open-autoagent Harbor loop** against a +**native Ollama daemon**. Torrent MCP install and `download-orchestrator` +are a later step (`mcp-install-orchestrator` in +`Oncorporation/secure-torrent-mcp-agent`). + +## Locked settings from the project session + +Treat these as the source of truth unless the operator explicitly overrides +them in the current turn. + +| Key | Value | +|---|---| +| Repo | `https://github.com/Oncorporation/open-autoagent` | +| Domain catalog (read-only context) | `https://github.com/Oncorporation/secure-torrent-mcp-agent` | +| Domain branch | `domain/secure-torrent` | +| LLM provider | `ollama` | +| Model tag | `qwen3.8:27b-mtp-q8_0` | +| LiteLLM model string | `ollama_chat/qwen3.8:27b-mtp-q8_0` | +| Ollama bind | `http://127.0.0.1:11434` | +| `LLM_BASE_URL` | `http://127.0.0.1:11434` (no `/v1`) | +| `OLLAMA_API_BASE` | `http://127.0.0.1:11434` | +| Ollama runtime | native host process, not a container | +| Hardware | AMD Ryzen AI Max+ 395, 64 GB CPU / 64 GB iGPU split | +| Harbor concurrency | `-n 1` | +| Agent context target | 16K–32K, never 256K for these loops | +| Thinking | off for tool loops | +| Docker role | Harbor task sandbox only | + +Legal constraint for any torrent-domain task you create later — authorized +fetches only (Linux ISOs, public domain, content the operator may fetch). +Eval fixtures only. No live indexer or copyrighted-title tasks. + +## Preconditions to collect + +Ask only if missing. Do not invent paths. + +1. Workspace parent. Default `~/src`. +2. Confirm Ollama is already installed and the model tag above is pulled. +3. Confirm Docker Desktop or Engine is installed (needed for Harbor tasks, + not for Ollama). +4. Confirm `git`, `curl`, and Python 3.10+ exist. + +If the operator is on Windows, use Git Bash or an equivalent Unix shell. +PowerShell translation is allowed only for path separators. + +## Step 0 — refuse the wrong job + +If the operator asked to install qBittorrent / Transmission / ClamAV MCP +servers, stop and say this skill is the wrong one. Point them at +`mcp-install-orchestrator`. + +If they asked to run `download-orchestrator` against a live client, stop. +This skill ends when Harbor can import `agent:AutoAgent` and Ollama +answers a tool-call probe. + +## Step 1 — host toolchain + +Run and record output. + +```bash +uname -a +command -v git +command -v curl +command -v python3 +command -v docker +command -v uv || true +command -v ollama +ollama --version +docker version --format '{{.Server.Version}}' 2>/dev/null || docker version +``` + +Install uv if missing: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +``` + +Fail if `ollama` or `docker` is missing. Do not install Ollama inside +Docker to paper over that. + +## Step 2 — native Ollama health + +```bash +curl -sf http://127.0.0.1:11434/api/tags >/tmp/ollama-tags.json +python3 - << 'PY' +import json +tags = json.load(open("/tmp/ollama-tags.json")) +names = [m.get("name") for m in tags.get("models", [])] +print("models:", names) +need = "qwen3.8:27b-mtp-q8_0" +ok = any(n == need or n.startswith(need) for n in names) +print("have_target:", ok) +raise SystemExit(0 if ok else 2) +PY +``` + +If the model is missing: + +```bash +ollama pull qwen3.8:27b-mtp-q8_0 +``` + +Placement check (must be iGPU, not a CPU-only dump): + +```bash +ollama run qwen3.8:27b-mtp-q8_0 "reply with the single word ok" +ollama ps +``` + +`PROCESSOR` / `GPU` columns must show the model resident on GPU. If it is +CPU-only, stop and tell the operator to fix the 64 GB iGPU slice +(Windows Adrenalin VGM, or Linux GTT/UMA) before continuing. + +Tool-call probe with thinking disabled: + +```bash +curl -sf http://127.0.0.1:11434/api/chat -o /tmp/ollama-tool.json -d '{ + "model": "qwen3.8:27b-mtp-q8_0", + "stream": false, + "think": false, + "messages": [{"role": "user", "content": "Call get_time now."}], + "tools": [{ + "type": "function", + "function": { + "name": "get_time", + "description": "Return the current time", + "parameters": {"type": "object", "properties": {}} + } + }] +}' +python3 - << 'PY' +import json +raw = json.load(open("/tmp/ollama-tool.json")) +msg = raw.get("message") or {} +print("keys:", sorted(raw.keys())) +print("has_tool_calls:", bool(msg.get("tool_calls"))) +print("content_preview:", (msg.get("content") or "")[:240]) +if not msg.get("tool_calls"): + raise SystemExit("Ollama did not return tool_calls. Do not start Harbor yet.") +print("ok") +PY +``` + +If this probe fails, do not proceed to Harbor. Report the JSON and stop. + +## Step 3 — clone repos + +```bash +SRC="${SRC:-$HOME/src}" +mkdir -p "$SRC" +cd "$SRC" + +if [ ! -d open-autoagent/.git ]; then + git clone https://github.com/Oncorporation/open-autoagent.git +fi +if [ ! -d secure-torrent-mcp-agent/.git ]; then + git clone https://github.com/Oncorporation/secure-torrent-mcp-agent.git +fi + +cd "$SRC/open-autoagent" +git fetch origin +git checkout main +git pull --ff-only origin main || true +``` + +Create the domain branch if it does not exist: + +```bash +cd "$SRC/open-autoagent" +if git rev-parse --verify domain/secure-torrent >/dev/null 2>&1; then + git checkout domain/secure-torrent +else + git checkout -b domain/secure-torrent +fi +``` + +Vendor the catalog as read-only context. Do not copy it into +`~/.hermes/skills/` from this skill. + +```bash +cd "$SRC/open-autoagent" +mkdir -p vendor docs/domain +rsync -a --delete --exclude .git "$SRC/secure-torrent-mcp-agent/" vendor/secure-torrent-mcp-agent/ +test -f vendor/secure-torrent-mcp-agent/AGENTS.md +test -f vendor/secure-torrent-mcp-agent/workflows/download-then-scan.md +``` + +## Step 4 — write `.env` (never commit) + +```bash +cd "$SRC/open-autoagent" +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL=qwen3.8:27b-mtp-q8_0 +LLM_BASE_URL=http://127.0.0.1:11434 +OLLAMA_API_BASE=http://127.0.0.1:11434 +EOF + +# belt and suspenders for shells that do not auto-load .env +if ! grep -q '^\.env$' .gitignore 2>/dev/null; then + printf '\n.env\nresults.tsv\njobs/\nrun.log\n' >> .gitignore +fi + +set -a +# shellcheck disable=SC1091 +. ./.env +set +a +``` + +Verify `agent.py` still builds `ollama_chat/{MODEL}` when +`LLM_PROVIDER=ollama`. If it does not, stop and show the `create_agent` +block. Do not invent a second model router. + +## Step 5 — patch `program.md` + +Read `program.md`. Apply all of the following. Keep the experiment loop, +`results.tsv` columns, simplicity criterion, and the rule that the +meta-agent must not edit below `FIXED ADAPTER BOUNDARY`. + +Replace the generic directive with: + +```markdown +## Directive + +Build an autonomous download-then-scan harness for authorized torrent +fetches, matching vendor/secure-torrent-mcp-agent. + +Orchestrator split (do not collapse): +- download-orchestrator (no direct torrent/scanner MCP calls) +- torrent-subagent (search, present choices, add one item, return path) +- malware-scan-subagent (scan only named paths) + +Rules: +- Ask before adding when more than one plausible hit exists. +- Scan named paths only. +- Never mark a file safe if ClamAV (or the mock scanner) did not run. +- Authorized content only — Linux ISOs, public domain, operator-authorized. + Refuse everything else. +- If torrent or scanner tools are missing, tell the operator to run + mcp-install-orchestrator. Do not invent servers. + +Model lock: +- LLM_PROVIDER=ollama +- MODEL=qwen3.8:27b-mtp-q8_0 +- Endpoint http://127.0.0.1:11434 +- Do not switch to a cloud model. +- Thinking off for tool loops. +- Harbor concurrency 1. + +Evaluation is Harbor task score (passed, avg_score). +The first run is always the unmodified baseline. +``` + +Delete any sentence that forbids changing the model away from `gpt-5`. + +If `program.md` tells the meta-agent to use `-n 100`, change that example +to `-n 1`. + +## Step 6 — Python env and base image + +```bash +cd "$SRC/open-autoagent" +uv sync +docker build -f Dockerfile.base -t autoagent-base . +``` + +Confirm the agent module imports on the host (this is where LiteLLM +calls Ollama): + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +uv run python - << 'PY' +import os +print("LLM_PROVIDER", os.environ.get("LLM_PROVIDER")) +print("MODEL", os.environ.get("MODEL")) +print("LLM_BASE_URL", os.environ.get("LLM_BASE_URL")) +import agent +print("agent.LLM_PROVIDER", agent.LLM_PROVIDER) +print("agent.MODEL", agent.MODEL) +print("agent.LLM_BASE_URL", agent.LLM_BASE_URL) +print("import_ok") +PY +``` + +Expected: provider `ollama`, model `qwen3.8:27b-mtp-q8_0`, base +`http://127.0.0.1:11434`. + +## Step 7 — tasks directory + +`open-autoagent` ships without tasks. Harbor cannot score an empty +`tasks/` tree. + +If `tasks/` already has Harbor tasks, list them and skip scaffolding. + +If `tasks/` is empty, create **one** smoke task so the loop can run. +Do not create live BitTorrent tasks. + +```text +tasks/choose-before-add/ + task.toml + instruction.md + tests/test.sh + tests/test.py + environment/Dockerfile + files/search_hits.json +``` + +`instruction.md` — search for an authorized Debian netinst fixture. +Two mock hits exist. The agent must list options and must not add a +torrent until a choice is given. + +`files/search_hits.json` — two legal fixture rows (name, size, seeders, +magnet placeholders). No copyrighted titles. + +`environment/Dockerfile`: + +```dockerfile +FROM autoagent-base +COPY files/search_hits.json /opt/fixture/search_hits.json +``` + +`tests/test.sh` must write a 0.0–1.0 reward to the Harbor verifier +log path used by this repo (read an existing Harbor task or Harbor +docs if the exact path differs; commonly `/logs/verifier/reward.txt` +or the path `test.sh` in upstream Harbor examples uses). Score 1.0 +only if the trajectory shows options presented and no add/download +action. + +If you cannot determine the verifier path from Harbor in this repo, +create the task files as stubs, tell the operator the path is +unconfirmed, and still finish steps 8–9. + +## Step 8 — first Harbor run (baseline) + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +rm -rf jobs +mkdir -p jobs +uv run harbor run -p tasks/ --task-name choose-before-add -l 1 -n 1 \ + --agent-import-path agent:AutoAgent -o jobs --job-name latest \ + > run.log 2>&1 +``` + +If `choose-before-add` does not exist, run whatever single task is +present instead of inventing `-n 100`. + +After the run: + +```bash +tail -n 80 run.log +ls jobs | head +ollama ps +``` + +Diagnose from `run.log` and job trajectories. Common failures: + +| Symptom | Fix | +|---|---| +| connection refused 11434 | Ollama is not running on the host | +| tried `host.docker.internal` | revert `.env` to `127.0.0.1` | +| 404 model | tag mismatch; `ollama list` | +| long think, no tools | thinking leaked; keep think off; check LiteLLM version | +| GPU empty, CPU pegged | iGPU slice not 64 GB | +| Harbor `-n` greater than 1 | rerun with `-n 1` | + +## Step 9 — tell the operator how to start the meta-loop + +Do not start an unsupervised overnight rewrite unless they ask. +Give them this exact prompt to paste into a new Hermes session +started from `$SRC/open-autoagent`: + +```text +Read program.md and vendor/secure-torrent-mcp-agent/AGENTS.md. +Use the Ollama model in .env (qwen3.8:27b-mtp-q8_0 at 127.0.0.1:11434). +Establish an unmodified baseline first. +Then propose one harness change above the FIXED ADAPTER BOUNDARY. +``` + +Remind them: + +- Edit only above `FIXED ADAPTER BOUNDARY` in `agent.py`. +- Log every experiment in `results.tsv`. +- Keep or revert on score, not vibes. +- Specialized tools beat a single `run_shell`. +- Do not merge qBittorrent and Transmission into one tool. + +## Done criteria + +All must be true before you declare success: + +- [ ] `curl http://127.0.0.1:11434/api/tags` works +- [ ] `qwen3.8:27b-mtp-q8_0` is present +- [ ] `ollama ps` shows GPU residency +- [ ] tool-call probe returned `tool_calls` +- [ ] `open-autoagent` is on `domain/secure-torrent` +- [ ] `.env` has the locked values and is gitignored +- [ ] `program.md` no longer locks `gpt-5` +- [ ] `uv sync` and `autoagent-base` image succeeded +- [ ] `agent` imports with provider `ollama` +- [ ] at least one Harbor command was attempted or a stub task exists + +## What you must not do + +- Do not `docker run ollama`. +- Do not set `LLM_BASE_URL=http://host.docker.internal:11434`. +- Do not append `/v1` for this LiteLLM Ollama provider. +- Do not change the model tag unless the operator names a new tag. +- Do not commit `.env`, Web UI passwords, or `VIRUSTOTAL_API_KEY`. +- Do not flatten `secure-torrent-mcp-agent` into `~/.hermes/skills/` + from this skill. +- Do not start live downloads or indexer searches as part of setup. diff --git a/setup/harness/hermes/SKILL.md b/setup/harness/hermes/SKILL.md new file mode 100644 index 00000000..d14f0248 --- /dev/null +++ b/setup/harness/hermes/SKILL.md @@ -0,0 +1,437 @@ +--- +name: open-autoagent-ollama-setup +description: Set up Oncorporation open-autoagent on a host-native Ollama daemon for Harbor harness experiments. Use when the user says set up open-autoagent, wire Ollama into AutoAgent, run Harbor on the Ryzen AI Max Plus 395, or start the secure-torrent domain branch. Do not use for installing torrent MCP servers or running download-orchestrator. +license: MIT +metadata: + hermes: + tags: + - open-autoagent + - ollama + - harbor + - harness + category: mcp-install + version: "1.0.0" + hardware: AMD Ryzen AI Max+ 395 64GB-64GB + ollama_model: qwen3.8:27b-mtp-q8_0 +--- + +# Set up open-autoagent on host-native Ollama + +You are running this procedure on the operator machine. Execute the steps +in order. Stop on the first failed check. Do not skip smoke tests. Do not +put Ollama in Docker. Do not point LiteLLM at `host.docker.internal`. + +This skill only provisions the **open-autoagent Harbor loop** against a +**native Ollama daemon**. Torrent MCP install and `download-orchestrator` +are a later step (`mcp-install-orchestrator` in +`Oncorporation/secure-torrent-mcp-agent`). + +## Locked settings from the project session + +Treat these as the source of truth unless the operator explicitly overrides +them in the current turn. + +| Key | Value | +|---|---| +| Repo | `https://github.com/Oncorporation/open-autoagent` | +| Domain catalog (read-only context) | `https://github.com/Oncorporation/secure-torrent-mcp-agent` | +| Domain branch | `domain/secure-torrent` | +| LLM provider | `ollama` | +| Model tag | `qwen3.8:27b-mtp-q8_0` | +| LiteLLM model string | `ollama_chat/qwen3.8:27b-mtp-q8_0` | +| Ollama bind | `http://127.0.0.1:11434` | +| `LLM_BASE_URL` | `http://127.0.0.1:11434` (no `/v1`) | +| `OLLAMA_API_BASE` | `http://127.0.0.1:11434` | +| Ollama runtime | native host process, not a container | +| Hardware | AMD Ryzen AI Max+ 395, 64 GB CPU / 64 GB iGPU split | +| Harbor concurrency | `-n 1` | +| Agent context target | 16K–32K, never 256K for these loops | +| Thinking | off for tool loops | +| Docker role | Harbor task sandbox only | + +Legal constraint for any torrent-domain task you create later — authorized +fetches only (Linux ISOs, public domain, content the operator may fetch). +Eval fixtures only. No live indexer or copyrighted-title tasks. + +## Preconditions to collect + +Ask only if missing. Do not invent paths. + +1. Workspace parent. Default `~/src`. +2. Confirm Ollama is already installed and the model tag above is pulled. +3. Confirm Docker Desktop or Engine is installed (needed for Harbor tasks, + not for Ollama). +4. Confirm `git`, `curl`, and Python 3.10+ exist. + +If the operator is on Windows, use Git Bash or an equivalent Unix shell. +PowerShell translation is allowed only for path separators. + +## Step 0 — refuse the wrong job + +If the operator asked to install qBittorrent / Transmission / ClamAV MCP +servers, stop and say this skill is the wrong one. Point them at +`mcp-install-orchestrator`. + +If they asked to run `download-orchestrator` against a live client, stop. +This skill ends when Harbor can import `agent:AutoAgent` and Ollama +answers a tool-call probe. + +## Step 1 — host toolchain + +Run and record output. + +```bash +uname -a +command -v git +command -v curl +command -v python3 +command -v docker +command -v uv || true +command -v ollama +ollama --version +docker version --format '{{.Server.Version}}' 2>/dev/null || docker version +``` + +Install uv if missing: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +``` + +Fail if `ollama` or `docker` is missing. Do not install Ollama inside +Docker to paper over that. + +## Step 2 — native Ollama health + +```bash +curl -sf http://127.0.0.1:11434/api/tags >/tmp/ollama-tags.json +python3 - << 'PY' +import json +tags = json.load(open("/tmp/ollama-tags.json")) +names = [m.get("name") for m in tags.get("models", [])] +print("models:", names) +need = "qwen3.8:27b-mtp-q8_0" +ok = any(n == need or n.startswith(need) for n in names) +print("have_target:", ok) +raise SystemExit(0 if ok else 2) +PY +``` + +If the model is missing: + +```bash +ollama pull qwen3.8:27b-mtp-q8_0 +``` + +Placement check (must be iGPU, not a CPU-only dump): + +```bash +ollama run qwen3.8:27b-mtp-q8_0 "reply with the single word ok" +ollama ps +``` + +`PROCESSOR` / `GPU` columns must show the model resident on GPU. If it is +CPU-only, stop and tell the operator to fix the 64 GB iGPU slice +(Windows Adrenalin VGM, or Linux GTT/UMA) before continuing. + +Tool-call probe with thinking disabled: + +```bash +curl -sf http://127.0.0.1:11434/api/chat -o /tmp/ollama-tool.json -d '{ + "model": "qwen3.8:27b-mtp-q8_0", + "stream": false, + "think": false, + "messages": [{"role": "user", "content": "Call get_time now."}], + "tools": [{ + "type": "function", + "function": { + "name": "get_time", + "description": "Return the current time", + "parameters": {"type": "object", "properties": {}} + } + }] +}' +python3 - << 'PY' +import json +raw = json.load(open("/tmp/ollama-tool.json")) +msg = raw.get("message") or {} +print("keys:", sorted(raw.keys())) +print("has_tool_calls:", bool(msg.get("tool_calls"))) +print("content_preview:", (msg.get("content") or "")[:240]) +if not msg.get("tool_calls"): + raise SystemExit("Ollama did not return tool_calls. Do not start Harbor yet.") +print("ok") +PY +``` + +If this probe fails, do not proceed to Harbor. Report the JSON and stop. + +## Step 3 — clone repos + +```bash +SRC="${SRC:-$HOME/src}" +mkdir -p "$SRC" +cd "$SRC" + +if [ ! -d open-autoagent/.git ]; then + git clone https://github.com/Oncorporation/open-autoagent.git +fi +if [ ! -d secure-torrent-mcp-agent/.git ]; then + git clone https://github.com/Oncorporation/secure-torrent-mcp-agent.git +fi + +cd "$SRC/open-autoagent" +git fetch origin +git checkout main +git pull --ff-only origin main || true +``` + +Create the domain branch if it does not exist: + +```bash +cd "$SRC/open-autoagent" +if git rev-parse --verify domain/secure-torrent >/dev/null 2>&1; then + git checkout domain/secure-torrent +else + git checkout -b domain/secure-torrent +fi +``` + +Vendor the catalog as read-only context. Do not copy it into +`~/.hermes/skills/` from this skill. + +```bash +cd "$SRC/open-autoagent" +mkdir -p vendor docs/domain +rsync -a --delete --exclude .git "$SRC/secure-torrent-mcp-agent/" vendor/secure-torrent-mcp-agent/ +test -f vendor/secure-torrent-mcp-agent/AGENTS.md +test -f vendor/secure-torrent-mcp-agent/workflows/download-then-scan.md +``` + +## Step 4 — write `.env` (never commit) + +```bash +cd "$SRC/open-autoagent" +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL=qwen3.8:27b-mtp-q8_0 +LLM_BASE_URL=http://127.0.0.1:11434 +OLLAMA_API_BASE=http://127.0.0.1:11434 +EOF + +# belt and suspenders for shells that do not auto-load .env +if ! grep -q '^\.env$' .gitignore 2>/dev/null; then + printf '\n.env\nresults.tsv\njobs/\nrun.log\n' >> .gitignore +fi + +set -a +# shellcheck disable=SC1091 +. ./.env +set +a +``` + +Verify `agent.py` still builds `ollama_chat/{MODEL}` when +`LLM_PROVIDER=ollama`. If it does not, stop and show the `create_agent` +block. Do not invent a second model router. + +## Step 5 — patch `program.md` + +Read `program.md`. Apply all of the following. Keep the experiment loop, +`results.tsv` columns, simplicity criterion, and the rule that the +meta-agent must not edit below `FIXED ADAPTER BOUNDARY`. + +Replace the generic directive with: + +```markdown +## Directive + +Build an autonomous download-then-scan harness for authorized torrent +fetches, matching vendor/secure-torrent-mcp-agent. + +Orchestrator split (do not collapse): +- download-orchestrator (no direct torrent/scanner MCP calls) +- torrent-subagent (search, present choices, add one item, return path) +- malware-scan-subagent (scan only named paths) + +Rules: +- Ask before adding when more than one plausible hit exists. +- Scan named paths only. +- Never mark a file safe if ClamAV (or the mock scanner) did not run. +- Authorized content only — Linux ISOs, public domain, operator-authorized. + Refuse everything else. +- If torrent or scanner tools are missing, tell the operator to run + mcp-install-orchestrator. Do not invent servers. + +Model lock: +- LLM_PROVIDER=ollama +- MODEL=qwen3.8:27b-mtp-q8_0 +- Endpoint http://127.0.0.1:11434 +- Do not switch to a cloud model. +- Thinking off for tool loops. +- Harbor concurrency 1. + +Evaluation is Harbor task score (passed, avg_score). +The first run is always the unmodified baseline. +``` + +Delete any sentence that forbids changing the model away from `gpt-5`. + +If `program.md` tells the meta-agent to use `-n 100`, change that example +to `-n 1`. + +## Step 6 — Python env and base image + +```bash +cd "$SRC/open-autoagent" +uv sync +docker build -f Dockerfile.base -t autoagent-base . +``` + +Confirm the agent module imports on the host (this is where LiteLLM +calls Ollama): + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +uv run python - << 'PY' +import os +print("LLM_PROVIDER", os.environ.get("LLM_PROVIDER")) +print("MODEL", os.environ.get("MODEL")) +print("LLM_BASE_URL", os.environ.get("LLM_BASE_URL")) +import agent +print("agent.LLM_PROVIDER", agent.LLM_PROVIDER) +print("agent.MODEL", agent.MODEL) +print("agent.LLM_BASE_URL", agent.LLM_BASE_URL) +print("import_ok") +PY +``` + +Expected: provider `ollama`, model `qwen3.8:27b-mtp-q8_0`, base +`http://127.0.0.1:11434`. + +## Step 7 — tasks directory + +`open-autoagent` ships without tasks. Harbor cannot score an empty +`tasks/` tree. + +If `tasks/` already has Harbor tasks, list them and skip scaffolding. + +If `tasks/` is empty, create **one** smoke task so the loop can run. +Do not create live BitTorrent tasks. + +```text +tasks/choose-before-add/ + task.toml + instruction.md + tests/test.sh + tests/test.py + environment/Dockerfile + files/search_hits.json +``` + +`instruction.md` — search for an authorized Debian netinst fixture. +Two mock hits exist. The agent must list options and must not add a +torrent until a choice is given. + +`files/search_hits.json` — two legal fixture rows (name, size, seeders, +magnet placeholders). No copyrighted titles. + +`environment/Dockerfile`: + +```dockerfile +FROM autoagent-base +COPY files/search_hits.json /opt/fixture/search_hits.json +``` + +`tests/test.sh` must write a 0.0–1.0 reward to the Harbor verifier +log path used by this repo (read an existing Harbor task or Harbor +docs if the exact path differs; commonly `/logs/verifier/reward.txt` +or the path `test.sh` in upstream Harbor examples uses). Score 1.0 +only if the trajectory shows options presented and no add/download +action. + +If you cannot determine the verifier path from Harbor in this repo, +create the task files as stubs, tell the operator the path is +unconfirmed, and still finish steps 8–9. + +## Step 8 — first Harbor run (baseline) + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +rm -rf jobs +mkdir -p jobs +uv run harbor run -p tasks/ --task-name choose-before-add -l 1 -n 1 \ + --agent-import-path agent:AutoAgent -o jobs --job-name latest \ + > run.log 2>&1 +``` + +If `choose-before-add` does not exist, run whatever single task is +present instead of inventing `-n 100`. + +After the run: + +```bash +tail -n 80 run.log +ls jobs | head +ollama ps +``` + +Diagnose from `run.log` and job trajectories. Common failures: + +| Symptom | Fix | +|---|---| +| connection refused 11434 | Ollama is not running on the host | +| tried `host.docker.internal` | revert `.env` to `127.0.0.1` | +| 404 model | tag mismatch; `ollama list` | +| long think, no tools | thinking leaked; keep think off; check LiteLLM version | +| GPU empty, CPU pegged | iGPU slice not 64 GB | +| Harbor `-n` greater than 1 | rerun with `-n 1` | + +## Step 9 — tell the operator how to start the meta-loop + +Do not start an unsupervised overnight rewrite unless they ask. +Give them this exact prompt to paste into a new Hermes session +started from `$SRC/open-autoagent`: + +```text +Read program.md and vendor/secure-torrent-mcp-agent/AGENTS.md. +Use the Ollama model in .env (qwen3.8:27b-mtp-q8_0 at 127.0.0.1:11434). +Establish an unmodified baseline first. +Then propose one harness change above the FIXED ADAPTER BOUNDARY. +``` + +Remind them: + +- Edit only above `FIXED ADAPTER BOUNDARY` in `agent.py`. +- Log every experiment in `results.tsv`. +- Keep or revert on score, not vibes. +- Specialized tools beat a single `run_shell`. +- Do not merge qBittorrent and Transmission into one tool. + +## Done criteria + +All must be true before you declare success: + +- [ ] `curl http://127.0.0.1:11434/api/tags` works +- [ ] `qwen3.8:27b-mtp-q8_0` is present +- [ ] `ollama ps` shows GPU residency +- [ ] tool-call probe returned `tool_calls` +- [ ] `open-autoagent` is on `domain/secure-torrent` +- [ ] `.env` has the locked values and is gitignored +- [ ] `program.md` no longer locks `gpt-5` +- [ ] `uv sync` and `autoagent-base` image succeeded +- [ ] `agent` imports with provider `ollama` +- [ ] at least one Harbor command was attempted or a stub task exists + +## What you must not do + +- Do not `docker run ollama`. +- Do not set `LLM_BASE_URL=http://host.docker.internal:11434`. +- Do not append `/v1` for this LiteLLM Ollama provider. +- Do not change the model tag unless the operator names a new tag. +- Do not commit `.env`, Web UI passwords, or `VIRUSTOTAL_API_KEY`. +- Do not flatten `secure-torrent-mcp-agent` into `~/.hermes/skills/` + from this skill. +- Do not start live downloads or indexer searches as part of setup. diff --git a/setup/harness/visual-studio/SKILL.md b/setup/harness/visual-studio/SKILL.md new file mode 100644 index 00000000..d14f0248 --- /dev/null +++ b/setup/harness/visual-studio/SKILL.md @@ -0,0 +1,437 @@ +--- +name: open-autoagent-ollama-setup +description: Set up Oncorporation open-autoagent on a host-native Ollama daemon for Harbor harness experiments. Use when the user says set up open-autoagent, wire Ollama into AutoAgent, run Harbor on the Ryzen AI Max Plus 395, or start the secure-torrent domain branch. Do not use for installing torrent MCP servers or running download-orchestrator. +license: MIT +metadata: + hermes: + tags: + - open-autoagent + - ollama + - harbor + - harness + category: mcp-install + version: "1.0.0" + hardware: AMD Ryzen AI Max+ 395 64GB-64GB + ollama_model: qwen3.8:27b-mtp-q8_0 +--- + +# Set up open-autoagent on host-native Ollama + +You are running this procedure on the operator machine. Execute the steps +in order. Stop on the first failed check. Do not skip smoke tests. Do not +put Ollama in Docker. Do not point LiteLLM at `host.docker.internal`. + +This skill only provisions the **open-autoagent Harbor loop** against a +**native Ollama daemon**. Torrent MCP install and `download-orchestrator` +are a later step (`mcp-install-orchestrator` in +`Oncorporation/secure-torrent-mcp-agent`). + +## Locked settings from the project session + +Treat these as the source of truth unless the operator explicitly overrides +them in the current turn. + +| Key | Value | +|---|---| +| Repo | `https://github.com/Oncorporation/open-autoagent` | +| Domain catalog (read-only context) | `https://github.com/Oncorporation/secure-torrent-mcp-agent` | +| Domain branch | `domain/secure-torrent` | +| LLM provider | `ollama` | +| Model tag | `qwen3.8:27b-mtp-q8_0` | +| LiteLLM model string | `ollama_chat/qwen3.8:27b-mtp-q8_0` | +| Ollama bind | `http://127.0.0.1:11434` | +| `LLM_BASE_URL` | `http://127.0.0.1:11434` (no `/v1`) | +| `OLLAMA_API_BASE` | `http://127.0.0.1:11434` | +| Ollama runtime | native host process, not a container | +| Hardware | AMD Ryzen AI Max+ 395, 64 GB CPU / 64 GB iGPU split | +| Harbor concurrency | `-n 1` | +| Agent context target | 16K–32K, never 256K for these loops | +| Thinking | off for tool loops | +| Docker role | Harbor task sandbox only | + +Legal constraint for any torrent-domain task you create later — authorized +fetches only (Linux ISOs, public domain, content the operator may fetch). +Eval fixtures only. No live indexer or copyrighted-title tasks. + +## Preconditions to collect + +Ask only if missing. Do not invent paths. + +1. Workspace parent. Default `~/src`. +2. Confirm Ollama is already installed and the model tag above is pulled. +3. Confirm Docker Desktop or Engine is installed (needed for Harbor tasks, + not for Ollama). +4. Confirm `git`, `curl`, and Python 3.10+ exist. + +If the operator is on Windows, use Git Bash or an equivalent Unix shell. +PowerShell translation is allowed only for path separators. + +## Step 0 — refuse the wrong job + +If the operator asked to install qBittorrent / Transmission / ClamAV MCP +servers, stop and say this skill is the wrong one. Point them at +`mcp-install-orchestrator`. + +If they asked to run `download-orchestrator` against a live client, stop. +This skill ends when Harbor can import `agent:AutoAgent` and Ollama +answers a tool-call probe. + +## Step 1 — host toolchain + +Run and record output. + +```bash +uname -a +command -v git +command -v curl +command -v python3 +command -v docker +command -v uv || true +command -v ollama +ollama --version +docker version --format '{{.Server.Version}}' 2>/dev/null || docker version +``` + +Install uv if missing: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +``` + +Fail if `ollama` or `docker` is missing. Do not install Ollama inside +Docker to paper over that. + +## Step 2 — native Ollama health + +```bash +curl -sf http://127.0.0.1:11434/api/tags >/tmp/ollama-tags.json +python3 - << 'PY' +import json +tags = json.load(open("/tmp/ollama-tags.json")) +names = [m.get("name") for m in tags.get("models", [])] +print("models:", names) +need = "qwen3.8:27b-mtp-q8_0" +ok = any(n == need or n.startswith(need) for n in names) +print("have_target:", ok) +raise SystemExit(0 if ok else 2) +PY +``` + +If the model is missing: + +```bash +ollama pull qwen3.8:27b-mtp-q8_0 +``` + +Placement check (must be iGPU, not a CPU-only dump): + +```bash +ollama run qwen3.8:27b-mtp-q8_0 "reply with the single word ok" +ollama ps +``` + +`PROCESSOR` / `GPU` columns must show the model resident on GPU. If it is +CPU-only, stop and tell the operator to fix the 64 GB iGPU slice +(Windows Adrenalin VGM, or Linux GTT/UMA) before continuing. + +Tool-call probe with thinking disabled: + +```bash +curl -sf http://127.0.0.1:11434/api/chat -o /tmp/ollama-tool.json -d '{ + "model": "qwen3.8:27b-mtp-q8_0", + "stream": false, + "think": false, + "messages": [{"role": "user", "content": "Call get_time now."}], + "tools": [{ + "type": "function", + "function": { + "name": "get_time", + "description": "Return the current time", + "parameters": {"type": "object", "properties": {}} + } + }] +}' +python3 - << 'PY' +import json +raw = json.load(open("/tmp/ollama-tool.json")) +msg = raw.get("message") or {} +print("keys:", sorted(raw.keys())) +print("has_tool_calls:", bool(msg.get("tool_calls"))) +print("content_preview:", (msg.get("content") or "")[:240]) +if not msg.get("tool_calls"): + raise SystemExit("Ollama did not return tool_calls. Do not start Harbor yet.") +print("ok") +PY +``` + +If this probe fails, do not proceed to Harbor. Report the JSON and stop. + +## Step 3 — clone repos + +```bash +SRC="${SRC:-$HOME/src}" +mkdir -p "$SRC" +cd "$SRC" + +if [ ! -d open-autoagent/.git ]; then + git clone https://github.com/Oncorporation/open-autoagent.git +fi +if [ ! -d secure-torrent-mcp-agent/.git ]; then + git clone https://github.com/Oncorporation/secure-torrent-mcp-agent.git +fi + +cd "$SRC/open-autoagent" +git fetch origin +git checkout main +git pull --ff-only origin main || true +``` + +Create the domain branch if it does not exist: + +```bash +cd "$SRC/open-autoagent" +if git rev-parse --verify domain/secure-torrent >/dev/null 2>&1; then + git checkout domain/secure-torrent +else + git checkout -b domain/secure-torrent +fi +``` + +Vendor the catalog as read-only context. Do not copy it into +`~/.hermes/skills/` from this skill. + +```bash +cd "$SRC/open-autoagent" +mkdir -p vendor docs/domain +rsync -a --delete --exclude .git "$SRC/secure-torrent-mcp-agent/" vendor/secure-torrent-mcp-agent/ +test -f vendor/secure-torrent-mcp-agent/AGENTS.md +test -f vendor/secure-torrent-mcp-agent/workflows/download-then-scan.md +``` + +## Step 4 — write `.env` (never commit) + +```bash +cd "$SRC/open-autoagent" +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL=qwen3.8:27b-mtp-q8_0 +LLM_BASE_URL=http://127.0.0.1:11434 +OLLAMA_API_BASE=http://127.0.0.1:11434 +EOF + +# belt and suspenders for shells that do not auto-load .env +if ! grep -q '^\.env$' .gitignore 2>/dev/null; then + printf '\n.env\nresults.tsv\njobs/\nrun.log\n' >> .gitignore +fi + +set -a +# shellcheck disable=SC1091 +. ./.env +set +a +``` + +Verify `agent.py` still builds `ollama_chat/{MODEL}` when +`LLM_PROVIDER=ollama`. If it does not, stop and show the `create_agent` +block. Do not invent a second model router. + +## Step 5 — patch `program.md` + +Read `program.md`. Apply all of the following. Keep the experiment loop, +`results.tsv` columns, simplicity criterion, and the rule that the +meta-agent must not edit below `FIXED ADAPTER BOUNDARY`. + +Replace the generic directive with: + +```markdown +## Directive + +Build an autonomous download-then-scan harness for authorized torrent +fetches, matching vendor/secure-torrent-mcp-agent. + +Orchestrator split (do not collapse): +- download-orchestrator (no direct torrent/scanner MCP calls) +- torrent-subagent (search, present choices, add one item, return path) +- malware-scan-subagent (scan only named paths) + +Rules: +- Ask before adding when more than one plausible hit exists. +- Scan named paths only. +- Never mark a file safe if ClamAV (or the mock scanner) did not run. +- Authorized content only — Linux ISOs, public domain, operator-authorized. + Refuse everything else. +- If torrent or scanner tools are missing, tell the operator to run + mcp-install-orchestrator. Do not invent servers. + +Model lock: +- LLM_PROVIDER=ollama +- MODEL=qwen3.8:27b-mtp-q8_0 +- Endpoint http://127.0.0.1:11434 +- Do not switch to a cloud model. +- Thinking off for tool loops. +- Harbor concurrency 1. + +Evaluation is Harbor task score (passed, avg_score). +The first run is always the unmodified baseline. +``` + +Delete any sentence that forbids changing the model away from `gpt-5`. + +If `program.md` tells the meta-agent to use `-n 100`, change that example +to `-n 1`. + +## Step 6 — Python env and base image + +```bash +cd "$SRC/open-autoagent" +uv sync +docker build -f Dockerfile.base -t autoagent-base . +``` + +Confirm the agent module imports on the host (this is where LiteLLM +calls Ollama): + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +uv run python - << 'PY' +import os +print("LLM_PROVIDER", os.environ.get("LLM_PROVIDER")) +print("MODEL", os.environ.get("MODEL")) +print("LLM_BASE_URL", os.environ.get("LLM_BASE_URL")) +import agent +print("agent.LLM_PROVIDER", agent.LLM_PROVIDER) +print("agent.MODEL", agent.MODEL) +print("agent.LLM_BASE_URL", agent.LLM_BASE_URL) +print("import_ok") +PY +``` + +Expected: provider `ollama`, model `qwen3.8:27b-mtp-q8_0`, base +`http://127.0.0.1:11434`. + +## Step 7 — tasks directory + +`open-autoagent` ships without tasks. Harbor cannot score an empty +`tasks/` tree. + +If `tasks/` already has Harbor tasks, list them and skip scaffolding. + +If `tasks/` is empty, create **one** smoke task so the loop can run. +Do not create live BitTorrent tasks. + +```text +tasks/choose-before-add/ + task.toml + instruction.md + tests/test.sh + tests/test.py + environment/Dockerfile + files/search_hits.json +``` + +`instruction.md` — search for an authorized Debian netinst fixture. +Two mock hits exist. The agent must list options and must not add a +torrent until a choice is given. + +`files/search_hits.json` — two legal fixture rows (name, size, seeders, +magnet placeholders). No copyrighted titles. + +`environment/Dockerfile`: + +```dockerfile +FROM autoagent-base +COPY files/search_hits.json /opt/fixture/search_hits.json +``` + +`tests/test.sh` must write a 0.0–1.0 reward to the Harbor verifier +log path used by this repo (read an existing Harbor task or Harbor +docs if the exact path differs; commonly `/logs/verifier/reward.txt` +or the path `test.sh` in upstream Harbor examples uses). Score 1.0 +only if the trajectory shows options presented and no add/download +action. + +If you cannot determine the verifier path from Harbor in this repo, +create the task files as stubs, tell the operator the path is +unconfirmed, and still finish steps 8–9. + +## Step 8 — first Harbor run (baseline) + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +rm -rf jobs +mkdir -p jobs +uv run harbor run -p tasks/ --task-name choose-before-add -l 1 -n 1 \ + --agent-import-path agent:AutoAgent -o jobs --job-name latest \ + > run.log 2>&1 +``` + +If `choose-before-add` does not exist, run whatever single task is +present instead of inventing `-n 100`. + +After the run: + +```bash +tail -n 80 run.log +ls jobs | head +ollama ps +``` + +Diagnose from `run.log` and job trajectories. Common failures: + +| Symptom | Fix | +|---|---| +| connection refused 11434 | Ollama is not running on the host | +| tried `host.docker.internal` | revert `.env` to `127.0.0.1` | +| 404 model | tag mismatch; `ollama list` | +| long think, no tools | thinking leaked; keep think off; check LiteLLM version | +| GPU empty, CPU pegged | iGPU slice not 64 GB | +| Harbor `-n` greater than 1 | rerun with `-n 1` | + +## Step 9 — tell the operator how to start the meta-loop + +Do not start an unsupervised overnight rewrite unless they ask. +Give them this exact prompt to paste into a new Hermes session +started from `$SRC/open-autoagent`: + +```text +Read program.md and vendor/secure-torrent-mcp-agent/AGENTS.md. +Use the Ollama model in .env (qwen3.8:27b-mtp-q8_0 at 127.0.0.1:11434). +Establish an unmodified baseline first. +Then propose one harness change above the FIXED ADAPTER BOUNDARY. +``` + +Remind them: + +- Edit only above `FIXED ADAPTER BOUNDARY` in `agent.py`. +- Log every experiment in `results.tsv`. +- Keep or revert on score, not vibes. +- Specialized tools beat a single `run_shell`. +- Do not merge qBittorrent and Transmission into one tool. + +## Done criteria + +All must be true before you declare success: + +- [ ] `curl http://127.0.0.1:11434/api/tags` works +- [ ] `qwen3.8:27b-mtp-q8_0` is present +- [ ] `ollama ps` shows GPU residency +- [ ] tool-call probe returned `tool_calls` +- [ ] `open-autoagent` is on `domain/secure-torrent` +- [ ] `.env` has the locked values and is gitignored +- [ ] `program.md` no longer locks `gpt-5` +- [ ] `uv sync` and `autoagent-base` image succeeded +- [ ] `agent` imports with provider `ollama` +- [ ] at least one Harbor command was attempted or a stub task exists + +## What you must not do + +- Do not `docker run ollama`. +- Do not set `LLM_BASE_URL=http://host.docker.internal:11434`. +- Do not append `/v1` for this LiteLLM Ollama provider. +- Do not change the model tag unless the operator names a new tag. +- Do not commit `.env`, Web UI passwords, or `VIRUSTOTAL_API_KEY`. +- Do not flatten `secure-torrent-mcp-agent` into `~/.hermes/skills/` + from this skill. +- Do not start live downloads or indexer searches as part of setup. diff --git a/setup/harness/vscode/SKILL.md b/setup/harness/vscode/SKILL.md new file mode 100644 index 00000000..d14f0248 --- /dev/null +++ b/setup/harness/vscode/SKILL.md @@ -0,0 +1,437 @@ +--- +name: open-autoagent-ollama-setup +description: Set up Oncorporation open-autoagent on a host-native Ollama daemon for Harbor harness experiments. Use when the user says set up open-autoagent, wire Ollama into AutoAgent, run Harbor on the Ryzen AI Max Plus 395, or start the secure-torrent domain branch. Do not use for installing torrent MCP servers or running download-orchestrator. +license: MIT +metadata: + hermes: + tags: + - open-autoagent + - ollama + - harbor + - harness + category: mcp-install + version: "1.0.0" + hardware: AMD Ryzen AI Max+ 395 64GB-64GB + ollama_model: qwen3.8:27b-mtp-q8_0 +--- + +# Set up open-autoagent on host-native Ollama + +You are running this procedure on the operator machine. Execute the steps +in order. Stop on the first failed check. Do not skip smoke tests. Do not +put Ollama in Docker. Do not point LiteLLM at `host.docker.internal`. + +This skill only provisions the **open-autoagent Harbor loop** against a +**native Ollama daemon**. Torrent MCP install and `download-orchestrator` +are a later step (`mcp-install-orchestrator` in +`Oncorporation/secure-torrent-mcp-agent`). + +## Locked settings from the project session + +Treat these as the source of truth unless the operator explicitly overrides +them in the current turn. + +| Key | Value | +|---|---| +| Repo | `https://github.com/Oncorporation/open-autoagent` | +| Domain catalog (read-only context) | `https://github.com/Oncorporation/secure-torrent-mcp-agent` | +| Domain branch | `domain/secure-torrent` | +| LLM provider | `ollama` | +| Model tag | `qwen3.8:27b-mtp-q8_0` | +| LiteLLM model string | `ollama_chat/qwen3.8:27b-mtp-q8_0` | +| Ollama bind | `http://127.0.0.1:11434` | +| `LLM_BASE_URL` | `http://127.0.0.1:11434` (no `/v1`) | +| `OLLAMA_API_BASE` | `http://127.0.0.1:11434` | +| Ollama runtime | native host process, not a container | +| Hardware | AMD Ryzen AI Max+ 395, 64 GB CPU / 64 GB iGPU split | +| Harbor concurrency | `-n 1` | +| Agent context target | 16K–32K, never 256K for these loops | +| Thinking | off for tool loops | +| Docker role | Harbor task sandbox only | + +Legal constraint for any torrent-domain task you create later — authorized +fetches only (Linux ISOs, public domain, content the operator may fetch). +Eval fixtures only. No live indexer or copyrighted-title tasks. + +## Preconditions to collect + +Ask only if missing. Do not invent paths. + +1. Workspace parent. Default `~/src`. +2. Confirm Ollama is already installed and the model tag above is pulled. +3. Confirm Docker Desktop or Engine is installed (needed for Harbor tasks, + not for Ollama). +4. Confirm `git`, `curl`, and Python 3.10+ exist. + +If the operator is on Windows, use Git Bash or an equivalent Unix shell. +PowerShell translation is allowed only for path separators. + +## Step 0 — refuse the wrong job + +If the operator asked to install qBittorrent / Transmission / ClamAV MCP +servers, stop and say this skill is the wrong one. Point them at +`mcp-install-orchestrator`. + +If they asked to run `download-orchestrator` against a live client, stop. +This skill ends when Harbor can import `agent:AutoAgent` and Ollama +answers a tool-call probe. + +## Step 1 — host toolchain + +Run and record output. + +```bash +uname -a +command -v git +command -v curl +command -v python3 +command -v docker +command -v uv || true +command -v ollama +ollama --version +docker version --format '{{.Server.Version}}' 2>/dev/null || docker version +``` + +Install uv if missing: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +``` + +Fail if `ollama` or `docker` is missing. Do not install Ollama inside +Docker to paper over that. + +## Step 2 — native Ollama health + +```bash +curl -sf http://127.0.0.1:11434/api/tags >/tmp/ollama-tags.json +python3 - << 'PY' +import json +tags = json.load(open("/tmp/ollama-tags.json")) +names = [m.get("name") for m in tags.get("models", [])] +print("models:", names) +need = "qwen3.8:27b-mtp-q8_0" +ok = any(n == need or n.startswith(need) for n in names) +print("have_target:", ok) +raise SystemExit(0 if ok else 2) +PY +``` + +If the model is missing: + +```bash +ollama pull qwen3.8:27b-mtp-q8_0 +``` + +Placement check (must be iGPU, not a CPU-only dump): + +```bash +ollama run qwen3.8:27b-mtp-q8_0 "reply with the single word ok" +ollama ps +``` + +`PROCESSOR` / `GPU` columns must show the model resident on GPU. If it is +CPU-only, stop and tell the operator to fix the 64 GB iGPU slice +(Windows Adrenalin VGM, or Linux GTT/UMA) before continuing. + +Tool-call probe with thinking disabled: + +```bash +curl -sf http://127.0.0.1:11434/api/chat -o /tmp/ollama-tool.json -d '{ + "model": "qwen3.8:27b-mtp-q8_0", + "stream": false, + "think": false, + "messages": [{"role": "user", "content": "Call get_time now."}], + "tools": [{ + "type": "function", + "function": { + "name": "get_time", + "description": "Return the current time", + "parameters": {"type": "object", "properties": {}} + } + }] +}' +python3 - << 'PY' +import json +raw = json.load(open("/tmp/ollama-tool.json")) +msg = raw.get("message") or {} +print("keys:", sorted(raw.keys())) +print("has_tool_calls:", bool(msg.get("tool_calls"))) +print("content_preview:", (msg.get("content") or "")[:240]) +if not msg.get("tool_calls"): + raise SystemExit("Ollama did not return tool_calls. Do not start Harbor yet.") +print("ok") +PY +``` + +If this probe fails, do not proceed to Harbor. Report the JSON and stop. + +## Step 3 — clone repos + +```bash +SRC="${SRC:-$HOME/src}" +mkdir -p "$SRC" +cd "$SRC" + +if [ ! -d open-autoagent/.git ]; then + git clone https://github.com/Oncorporation/open-autoagent.git +fi +if [ ! -d secure-torrent-mcp-agent/.git ]; then + git clone https://github.com/Oncorporation/secure-torrent-mcp-agent.git +fi + +cd "$SRC/open-autoagent" +git fetch origin +git checkout main +git pull --ff-only origin main || true +``` + +Create the domain branch if it does not exist: + +```bash +cd "$SRC/open-autoagent" +if git rev-parse --verify domain/secure-torrent >/dev/null 2>&1; then + git checkout domain/secure-torrent +else + git checkout -b domain/secure-torrent +fi +``` + +Vendor the catalog as read-only context. Do not copy it into +`~/.hermes/skills/` from this skill. + +```bash +cd "$SRC/open-autoagent" +mkdir -p vendor docs/domain +rsync -a --delete --exclude .git "$SRC/secure-torrent-mcp-agent/" vendor/secure-torrent-mcp-agent/ +test -f vendor/secure-torrent-mcp-agent/AGENTS.md +test -f vendor/secure-torrent-mcp-agent/workflows/download-then-scan.md +``` + +## Step 4 — write `.env` (never commit) + +```bash +cd "$SRC/open-autoagent" +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL=qwen3.8:27b-mtp-q8_0 +LLM_BASE_URL=http://127.0.0.1:11434 +OLLAMA_API_BASE=http://127.0.0.1:11434 +EOF + +# belt and suspenders for shells that do not auto-load .env +if ! grep -q '^\.env$' .gitignore 2>/dev/null; then + printf '\n.env\nresults.tsv\njobs/\nrun.log\n' >> .gitignore +fi + +set -a +# shellcheck disable=SC1091 +. ./.env +set +a +``` + +Verify `agent.py` still builds `ollama_chat/{MODEL}` when +`LLM_PROVIDER=ollama`. If it does not, stop and show the `create_agent` +block. Do not invent a second model router. + +## Step 5 — patch `program.md` + +Read `program.md`. Apply all of the following. Keep the experiment loop, +`results.tsv` columns, simplicity criterion, and the rule that the +meta-agent must not edit below `FIXED ADAPTER BOUNDARY`. + +Replace the generic directive with: + +```markdown +## Directive + +Build an autonomous download-then-scan harness for authorized torrent +fetches, matching vendor/secure-torrent-mcp-agent. + +Orchestrator split (do not collapse): +- download-orchestrator (no direct torrent/scanner MCP calls) +- torrent-subagent (search, present choices, add one item, return path) +- malware-scan-subagent (scan only named paths) + +Rules: +- Ask before adding when more than one plausible hit exists. +- Scan named paths only. +- Never mark a file safe if ClamAV (or the mock scanner) did not run. +- Authorized content only — Linux ISOs, public domain, operator-authorized. + Refuse everything else. +- If torrent or scanner tools are missing, tell the operator to run + mcp-install-orchestrator. Do not invent servers. + +Model lock: +- LLM_PROVIDER=ollama +- MODEL=qwen3.8:27b-mtp-q8_0 +- Endpoint http://127.0.0.1:11434 +- Do not switch to a cloud model. +- Thinking off for tool loops. +- Harbor concurrency 1. + +Evaluation is Harbor task score (passed, avg_score). +The first run is always the unmodified baseline. +``` + +Delete any sentence that forbids changing the model away from `gpt-5`. + +If `program.md` tells the meta-agent to use `-n 100`, change that example +to `-n 1`. + +## Step 6 — Python env and base image + +```bash +cd "$SRC/open-autoagent" +uv sync +docker build -f Dockerfile.base -t autoagent-base . +``` + +Confirm the agent module imports on the host (this is where LiteLLM +calls Ollama): + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +uv run python - << 'PY' +import os +print("LLM_PROVIDER", os.environ.get("LLM_PROVIDER")) +print("MODEL", os.environ.get("MODEL")) +print("LLM_BASE_URL", os.environ.get("LLM_BASE_URL")) +import agent +print("agent.LLM_PROVIDER", agent.LLM_PROVIDER) +print("agent.MODEL", agent.MODEL) +print("agent.LLM_BASE_URL", agent.LLM_BASE_URL) +print("import_ok") +PY +``` + +Expected: provider `ollama`, model `qwen3.8:27b-mtp-q8_0`, base +`http://127.0.0.1:11434`. + +## Step 7 — tasks directory + +`open-autoagent` ships without tasks. Harbor cannot score an empty +`tasks/` tree. + +If `tasks/` already has Harbor tasks, list them and skip scaffolding. + +If `tasks/` is empty, create **one** smoke task so the loop can run. +Do not create live BitTorrent tasks. + +```text +tasks/choose-before-add/ + task.toml + instruction.md + tests/test.sh + tests/test.py + environment/Dockerfile + files/search_hits.json +``` + +`instruction.md` — search for an authorized Debian netinst fixture. +Two mock hits exist. The agent must list options and must not add a +torrent until a choice is given. + +`files/search_hits.json` — two legal fixture rows (name, size, seeders, +magnet placeholders). No copyrighted titles. + +`environment/Dockerfile`: + +```dockerfile +FROM autoagent-base +COPY files/search_hits.json /opt/fixture/search_hits.json +``` + +`tests/test.sh` must write a 0.0–1.0 reward to the Harbor verifier +log path used by this repo (read an existing Harbor task or Harbor +docs if the exact path differs; commonly `/logs/verifier/reward.txt` +or the path `test.sh` in upstream Harbor examples uses). Score 1.0 +only if the trajectory shows options presented and no add/download +action. + +If you cannot determine the verifier path from Harbor in this repo, +create the task files as stubs, tell the operator the path is +unconfirmed, and still finish steps 8–9. + +## Step 8 — first Harbor run (baseline) + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +rm -rf jobs +mkdir -p jobs +uv run harbor run -p tasks/ --task-name choose-before-add -l 1 -n 1 \ + --agent-import-path agent:AutoAgent -o jobs --job-name latest \ + > run.log 2>&1 +``` + +If `choose-before-add` does not exist, run whatever single task is +present instead of inventing `-n 100`. + +After the run: + +```bash +tail -n 80 run.log +ls jobs | head +ollama ps +``` + +Diagnose from `run.log` and job trajectories. Common failures: + +| Symptom | Fix | +|---|---| +| connection refused 11434 | Ollama is not running on the host | +| tried `host.docker.internal` | revert `.env` to `127.0.0.1` | +| 404 model | tag mismatch; `ollama list` | +| long think, no tools | thinking leaked; keep think off; check LiteLLM version | +| GPU empty, CPU pegged | iGPU slice not 64 GB | +| Harbor `-n` greater than 1 | rerun with `-n 1` | + +## Step 9 — tell the operator how to start the meta-loop + +Do not start an unsupervised overnight rewrite unless they ask. +Give them this exact prompt to paste into a new Hermes session +started from `$SRC/open-autoagent`: + +```text +Read program.md and vendor/secure-torrent-mcp-agent/AGENTS.md. +Use the Ollama model in .env (qwen3.8:27b-mtp-q8_0 at 127.0.0.1:11434). +Establish an unmodified baseline first. +Then propose one harness change above the FIXED ADAPTER BOUNDARY. +``` + +Remind them: + +- Edit only above `FIXED ADAPTER BOUNDARY` in `agent.py`. +- Log every experiment in `results.tsv`. +- Keep or revert on score, not vibes. +- Specialized tools beat a single `run_shell`. +- Do not merge qBittorrent and Transmission into one tool. + +## Done criteria + +All must be true before you declare success: + +- [ ] `curl http://127.0.0.1:11434/api/tags` works +- [ ] `qwen3.8:27b-mtp-q8_0` is present +- [ ] `ollama ps` shows GPU residency +- [ ] tool-call probe returned `tool_calls` +- [ ] `open-autoagent` is on `domain/secure-torrent` +- [ ] `.env` has the locked values and is gitignored +- [ ] `program.md` no longer locks `gpt-5` +- [ ] `uv sync` and `autoagent-base` image succeeded +- [ ] `agent` imports with provider `ollama` +- [ ] at least one Harbor command was attempted or a stub task exists + +## What you must not do + +- Do not `docker run ollama`. +- Do not set `LLM_BASE_URL=http://host.docker.internal:11434`. +- Do not append `/v1` for this LiteLLM Ollama provider. +- Do not change the model tag unless the operator names a new tag. +- Do not commit `.env`, Web UI passwords, or `VIRUSTOTAL_API_KEY`. +- Do not flatten `secure-torrent-mcp-agent` into `~/.hermes/skills/` + from this skill. +- Do not start live downloads or indexer searches as part of setup. diff --git a/setup/install.ps1 b/setup/install.ps1 new file mode 100644 index 00000000..87dcb76c --- /dev/null +++ b/setup/install.ps1 @@ -0,0 +1,171 @@ +#Requires -Version 5.1 +<# +.SYNOPSIS + Installs the open-autoagent-ollama-setup skill for your AI harness. +.DESCRIPTION + Prompts for harness selection and copies the pre-built SKILL.md to the + correct location for that harness. Additional harnesses can be added by + creating a subfolder under setup\harness\ and updating the switch below. +.EXAMPLE + .\setup\install.ps1 +#> + +$ErrorActionPreference = "Stop" + +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$RepoRoot = Split-Path -Parent $ScriptDir +$HarnessDir = Join-Path $ScriptDir "harness" +$SkillName = "open-autoagent-ollama-setup" +$UserHome = $env:USERPROFILE +$ConfigFile = Join-Path $ScriptDir ".skill-config.json" + +# Load config if it exists +if (Test-Path $ConfigFile) { + $config = Get-Content -Raw $ConfigFile | ConvertFrom-Json + $mainRepo = $config.mainRepo + $model = $config.model + $ollamaEndpoint = $config.ollamaEndpoint + $hardware = $config.hardware + $domainRepo = $config.domainRepo + $domainBranch = $config.domainBranch +} else { + # Defaults + $mainRepo = "https://github.com/Oncorporation/open-autoagent" + $model = "qwen3.8:27b-mtp-q8_0" + $ollamaEndpoint = "http://127.0.0.1:11434" + $hardware = "AMD Ryzen AI Max+ 395 64GB-64GB" + $domainRepo = "https://github.com/Oncorporation/secure-torrent-mcp-agent" + $domainBranch = "domain/secure-torrent" +} + +# ── menu ────────────────────────────────────────────────────────────────────── +Write-Host "" +Write-Host " open-autoagent-ollama-setup -- Skill Installer" -ForegroundColor Cyan +Write-Host " --------------------------------------------------" -ForegroundColor DarkGray +Write-Host "" +Write-Host " Select your AI harness:" -ForegroundColor White +Write-Host " 1) Hermes" +Write-Host " 2) Claude Code (project-level: \.claude\)" +Write-Host " 3) Claude Desktop (user-level: ~\.claude\)" +Write-Host " 4) Cursor (project-level: \.cursor\)" +Write-Host " 5) Grok (user-level: ~\.grok\)" +Write-Host " 6) VS Code + Copilot (project-level: \.vscode\)" +Write-Host " 7) Visual Studio (project-level: \.github\)" +Write-Host "" +Write-Host " (Additional harnesses: add a folder under setup\harness\ and re-run)" -ForegroundColor DarkGray +Write-Host "" + +$choice = "" +while ($choice -notmatch '^[1-7]$') { + $choice = (Read-Host " Enter number [1-7]").Trim() +} + +# ── resolve harness name and install path ───────────────────────────────────── +switch ($choice) { + "1" { + $Harness = "hermes" + $TargetDir = Join-Path $UserHome ".hermes\skills\mcp-install\$SkillName" + } + "2" { + $Harness = "claude-code" + $TargetDir = Join-Path $RepoRoot ".claude\skills\$SkillName" + } + "3" { + $Harness = "claude-desktop" + $TargetDir = Join-Path $UserHome ".claude\skills\$SkillName" + } + "4" { + $Harness = "cursor" + $TargetDir = Join-Path $RepoRoot ".cursor\skills\$SkillName" + } + "5" { + $Harness = "grok" + $TargetDir = Join-Path $UserHome ".grok\skills\$SkillName" + } + "6" { + $Harness = "vscode" + $TargetDir = Join-Path $RepoRoot ".vscode\skills\$SkillName" + } + "7" { + $Harness = "visual-studio" + $TargetDir = Join-Path $RepoRoot ".github\skills\$SkillName" + } +} + +# ── locate and process source ──────────────────────────────────────────────── +$SourceFile = Join-Path $HarnessDir "$Harness\SKILL.md" + +# Fall back to template-based generation if no harness-specific file exists +if (-not (Test-Path $SourceFile)) { + $Template = Join-Path $ScriptDir "SKILL.md.template" + if (-not (Test-Path $Template)) { + # Further fallback: use canonical if template missing + $SourceFile = Join-Path $ScriptDir "$SkillName.md" + } else { + # Generate from template on-the-fly + $TempFile = Join-Path $env:TEMP "skill-$Harness-$(Get-Random).md" + $TemplateContent = Get-Content -Raw $Template + $TemplateContent = $TemplateContent -replace '\{\{MAIN_REPO\}\}', $mainRepo + $TemplateContent = $TemplateContent -replace '\{\{MODEL\}\}', $model + $TemplateContent = $TemplateContent -replace '\{\{OLLAMA_ENDPOINT\}\}', $ollamaEndpoint + $TemplateContent = $TemplateContent -replace '\{\{HARDWARE\}\}', $hardware + $TemplateContent = $TemplateContent -replace '\{\{DOMAIN_REPO\}\}', $domainRepo + $TemplateContent = $TemplateContent -replace '\{\{DOMAIN_BRANCH\}\}', $domainBranch + Set-Content -Path $TempFile -Value $TemplateContent + $SourceFile = $TempFile + } +} + +if (-not (Test-Path $SourceFile)) { + Write-Error "Source SKILL.md not found at '$SourceFile'." + exit 1 +} + +# ── confirm ─────────────────────────────────────────────────────────────────── +Write-Host "" +Write-Host " Harness : $Harness" -ForegroundColor Yellow +Write-Host " Source : $SourceFile" -ForegroundColor DarkGray +Write-Host " Target : $TargetDir\SKILL.md" -ForegroundColor Yellow +Write-Host " Model : $model" -ForegroundColor DarkGray +Write-Host " Repo : $mainRepo" -ForegroundColor DarkGray +Write-Host "" + +$confirm = (Read-Host " Proceed? [Y/n]").Trim() +if ($confirm -match '^[Nn]') { + Write-Host " Aborted." -ForegroundColor Red + exit 0 +} + +# ── install ─────────────────────────────────────────────────────────────────── +New-Item -ItemType Directory -Force -Path $TargetDir | Out-Null +Copy-Item -Path $SourceFile -Destination (Join-Path $TargetDir "SKILL.md") -Force + +# Clean up temp file if created +if ($SourceFile -match '\\Temp\\') { + Remove-Item -Path $SourceFile -Force +} + +Write-Host "" +Write-Host " ✓ Installed: $TargetDir\SKILL.md" -ForegroundColor Green +Write-Host "" + +# ── trigger instructions ────────────────────────────────────────────────────── +Write-Host " Next: open $Harness and run the skill:" -ForegroundColor Cyan +switch ($Harness) { + "hermes" { Write-Host " Start a new session (or /reset), then paste:" ; Write-Host " run open-autoagent-ollama-setup" } + "claude-code" { Write-Host " /skill open-autoagent-ollama-setup" } + "claude-desktop" { Write-Host " run the skill named open-autoagent-ollama-setup" } + "cursor" { Write-Host " @open-autoagent-ollama-setup in the Cursor chat" } + "grok" { Write-Host " run open-autoagent-ollama-setup" } + "vscode" { + Write-Host " In Copilot Chat (Ctrl+Shift+I), attach the file then ask:" + Write-Host " #file:.vscode\skills\$SkillName\SKILL.md" + Write-Host " run open-autoagent-ollama-setup" + } + "visual-studio" { + Write-Host " In Copilot Chat (View > GitHub Copilot Chat), attach the file then ask:" + Write-Host " #file:.github\skills\$SkillName\SKILL.md" + Write-Host " run open-autoagent-ollama-setup" + } +} +Write-Host "" diff --git a/setup/install.sh b/setup/install.sh new file mode 100644 index 00000000..56b168ff --- /dev/null +++ b/setup/install.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env bash +# install.sh — Install open-autoagent-ollama-setup skill for your AI harness. +# +# Usage: bash setup/install.sh +# (or chmod +x setup/install.sh && ./setup/install.sh from repo root) +# +# Additional harnesses: add a subfolder under setup/harness/ and update the +# case block below. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" +HARNESS_DIR="$SCRIPT_DIR/harness" +SKILL_NAME="open-autoagent-ollama-setup" +CONFIG_FILE="$SCRIPT_DIR/.skill-config.json" + +# Load config if it exists +if [[ -f "$CONFIG_FILE" ]]; then + MAIN_REPO=$(jq -r '.mainRepo // empty' "$CONFIG_FILE") + MODEL=$(jq -r '.model // empty' "$CONFIG_FILE") + OLLAMA_ENDPOINT=$(jq -r '.ollamaEndpoint // empty' "$CONFIG_FILE") + HARDWARE=$(jq -r '.hardware // empty' "$CONFIG_FILE") + DOMAIN_REPO=$(jq -r '.domainRepo // empty' "$CONFIG_FILE") + DOMAIN_BRANCH=$(jq -r '.domainBranch // empty' "$CONFIG_FILE") +else + # Defaults + MAIN_REPO="https://github.com/Oncorporation/open-autoagent" + MODEL="qwen3.8:27b-mtp-q8_0" + OLLAMA_ENDPOINT="http://127.0.0.1:11434" + HARDWARE="AMD Ryzen AI Max+ 395 64GB-64GB" + DOMAIN_REPO="https://github.com/Oncorporation/secure-torrent-mcp-agent" + DOMAIN_BRANCH="domain/secure-torrent" +fi + +# ── menu ────────────────────────────────────────────────────────────────────── +echo "" +echo " open-autoagent-ollama-setup -- Skill Installer" +echo " --------------------------------------------------" +echo "" +echo " Select your AI harness:" +echo " 1) Hermes" +echo " 2) Claude Code (project-level: /.claude/)" +echo " 3) Claude Desktop (user-level: ~/.claude/)" +echo " 4) Cursor (project-level: /.cursor/)" +echo " 5) Grok (user-level: ~/.grok/)" +echo " 6) VS Code + Copilot (project-level: /.vscode/)" +echo " 7) Visual Studio (project-level: /.github/)" +echo "" +echo " (Additional harnesses: add a folder under setup/harness/ and re-run)" +echo "" + +choice="" +while [[ ! "$choice" =~ ^[1-7]$ ]]; do + read -rp " Enter number [1-7]: " choice +done + +# ── resolve harness name and install path ───────────────────────────────────── +case "$choice" in + 1) HARNESS="hermes"; TARGET_DIR="$HOME/.hermes/skills/mcp-install/$SKILL_NAME" ;; + 2) HARNESS="claude-code"; TARGET_DIR="$REPO_ROOT/.claude/skills/$SKILL_NAME" ;; + 3) HARNESS="claude-desktop"; TARGET_DIR="$HOME/.claude/skills/$SKILL_NAME" ;; + 4) HARNESS="cursor"; TARGET_DIR="$REPO_ROOT/.cursor/skills/$SKILL_NAME" ;; + 5) HARNESS="grok"; TARGET_DIR="$HOME/.grok/skills/$SKILL_NAME" ;; + 6) HARNESS="vscode"; TARGET_DIR="$REPO_ROOT/.vscode/skills/$SKILL_NAME" ;; + 7) HARNESS="visual-studio"; TARGET_DIR="$REPO_ROOT/.github/skills/$SKILL_NAME" ;; +esac + +# ── locate and process source ──────────────────────────────────────────────── +TEMPLATE_FILE="$HARNESS_DIR/$HARNESS/SKILL.md" +HARNESS_SOURCE_FILE="$TEMPLATE_FILE" + +# Fall back to template-based generation if no harness-specific file exists +if [[ ! -f "$HARNESS_SOURCE_FILE" ]]; then + TEMPLATE="$SCRIPT_DIR/SKILL.md.template" + if [[ ! -f "$TEMPLATE" ]]; then + # Further fallback: use canonical if template missing + HARNESS_SOURCE_FILE="$SCRIPT_DIR/$SKILL_NAME.md" + else + # Generate from template on-the-fly + HARNESS_SOURCE_FILE="/tmp/$SKILL_NAME-$HARNESS-$RANDOM.md" + sed \ + -e "s|{{MAIN_REPO}}|$MAIN_REPO|g" \ + -e "s|{{MODEL}}|$MODEL|g" \ + -e "s|{{OLLAMA_ENDPOINT}}|$OLLAMA_ENDPOINT|g" \ + -e "s|{{HARDWARE}}|$HARDWARE|g" \ + -e "s|{{DOMAIN_REPO}}|$DOMAIN_REPO|g" \ + -e "s|{{DOMAIN_BRANCH}}|$DOMAIN_BRANCH|g" \ + "$TEMPLATE" > "$HARNESS_SOURCE_FILE" + fi +fi + +if [[ ! -f "$HARNESS_SOURCE_FILE" ]]; then + echo "ERROR: No source SKILL.md found and no template to process." >&2 + exit 1 +fi + +# ── confirm ─────────────────────────────────────────────────────────────────── +echo "" +echo " Harness : $HARNESS" +echo " Source : $HARNESS_SOURCE_FILE" +echo " Target : $TARGET_DIR/SKILL.md" +echo " Model : $MODEL" +echo " Repo : $MAIN_REPO" +echo "" +read -rp " Proceed? [Y/n]: " confirm +if [[ "$confirm" =~ ^[Nn] ]]; then + echo " Aborted." + exit 0 +fi + +# ── install ─────────────────────────────────────────────────────────────────── +mkdir -p "$TARGET_DIR" +cp -f "$HARNESS_SOURCE_FILE" "$TARGET_DIR/SKILL.md" + +# Clean up temp file if created +if [[ "$HARNESS_SOURCE_FILE" =~ ^/tmp/ ]]; then + rm -f "$HARNESS_SOURCE_FILE" +fi + +echo "" +echo " ✓ Installed: $TARGET_DIR/SKILL.md" +echo "" + +# ── trigger instructions ────────────────────────────────────────────────────── +echo " Next: open $HARNESS and run the skill:" +case "$HARNESS" in + hermes) + echo " Start a new session (or /reset), then paste:" + echo " run open-autoagent-ollama-setup" + ;; + claude-code) + echo " /skill open-autoagent-ollama-setup" + ;; + claude-desktop) + echo " run the skill named open-autoagent-ollama-setup" + ;; + cursor) + echo " @open-autoagent-ollama-setup in the Cursor chat" + ;; + grok) + echo " run open-autoagent-ollama-setup" + ;; + vscode) + echo " In Copilot Chat (Ctrl+Shift+I), attach the file then ask:" + echo " #file:.vscode/skills/$SKILL_NAME/SKILL.md" + echo " run open-autoagent-ollama-setup" + ;; + visual-studio) + echo " In Copilot Chat (View > GitHub Copilot Chat), attach the file then ask:" + echo " #file:.github/skills/$SKILL_NAME/SKILL.md" + echo " run open-autoagent-ollama-setup" + ;; +esac +echo "" diff --git a/setup/open-autoagent-ollama-setup.md b/setup/open-autoagent-ollama-setup.md new file mode 100644 index 00000000..d14f0248 --- /dev/null +++ b/setup/open-autoagent-ollama-setup.md @@ -0,0 +1,437 @@ +--- +name: open-autoagent-ollama-setup +description: Set up Oncorporation open-autoagent on a host-native Ollama daemon for Harbor harness experiments. Use when the user says set up open-autoagent, wire Ollama into AutoAgent, run Harbor on the Ryzen AI Max Plus 395, or start the secure-torrent domain branch. Do not use for installing torrent MCP servers or running download-orchestrator. +license: MIT +metadata: + hermes: + tags: + - open-autoagent + - ollama + - harbor + - harness + category: mcp-install + version: "1.0.0" + hardware: AMD Ryzen AI Max+ 395 64GB-64GB + ollama_model: qwen3.8:27b-mtp-q8_0 +--- + +# Set up open-autoagent on host-native Ollama + +You are running this procedure on the operator machine. Execute the steps +in order. Stop on the first failed check. Do not skip smoke tests. Do not +put Ollama in Docker. Do not point LiteLLM at `host.docker.internal`. + +This skill only provisions the **open-autoagent Harbor loop** against a +**native Ollama daemon**. Torrent MCP install and `download-orchestrator` +are a later step (`mcp-install-orchestrator` in +`Oncorporation/secure-torrent-mcp-agent`). + +## Locked settings from the project session + +Treat these as the source of truth unless the operator explicitly overrides +them in the current turn. + +| Key | Value | +|---|---| +| Repo | `https://github.com/Oncorporation/open-autoagent` | +| Domain catalog (read-only context) | `https://github.com/Oncorporation/secure-torrent-mcp-agent` | +| Domain branch | `domain/secure-torrent` | +| LLM provider | `ollama` | +| Model tag | `qwen3.8:27b-mtp-q8_0` | +| LiteLLM model string | `ollama_chat/qwen3.8:27b-mtp-q8_0` | +| Ollama bind | `http://127.0.0.1:11434` | +| `LLM_BASE_URL` | `http://127.0.0.1:11434` (no `/v1`) | +| `OLLAMA_API_BASE` | `http://127.0.0.1:11434` | +| Ollama runtime | native host process, not a container | +| Hardware | AMD Ryzen AI Max+ 395, 64 GB CPU / 64 GB iGPU split | +| Harbor concurrency | `-n 1` | +| Agent context target | 16K–32K, never 256K for these loops | +| Thinking | off for tool loops | +| Docker role | Harbor task sandbox only | + +Legal constraint for any torrent-domain task you create later — authorized +fetches only (Linux ISOs, public domain, content the operator may fetch). +Eval fixtures only. No live indexer or copyrighted-title tasks. + +## Preconditions to collect + +Ask only if missing. Do not invent paths. + +1. Workspace parent. Default `~/src`. +2. Confirm Ollama is already installed and the model tag above is pulled. +3. Confirm Docker Desktop or Engine is installed (needed for Harbor tasks, + not for Ollama). +4. Confirm `git`, `curl`, and Python 3.10+ exist. + +If the operator is on Windows, use Git Bash or an equivalent Unix shell. +PowerShell translation is allowed only for path separators. + +## Step 0 — refuse the wrong job + +If the operator asked to install qBittorrent / Transmission / ClamAV MCP +servers, stop and say this skill is the wrong one. Point them at +`mcp-install-orchestrator`. + +If they asked to run `download-orchestrator` against a live client, stop. +This skill ends when Harbor can import `agent:AutoAgent` and Ollama +answers a tool-call probe. + +## Step 1 — host toolchain + +Run and record output. + +```bash +uname -a +command -v git +command -v curl +command -v python3 +command -v docker +command -v uv || true +command -v ollama +ollama --version +docker version --format '{{.Server.Version}}' 2>/dev/null || docker version +``` + +Install uv if missing: + +```bash +curl -LsSf https://astral.sh/uv/install.sh | sh +export PATH="$HOME/.local/bin:$PATH" +``` + +Fail if `ollama` or `docker` is missing. Do not install Ollama inside +Docker to paper over that. + +## Step 2 — native Ollama health + +```bash +curl -sf http://127.0.0.1:11434/api/tags >/tmp/ollama-tags.json +python3 - << 'PY' +import json +tags = json.load(open("/tmp/ollama-tags.json")) +names = [m.get("name") for m in tags.get("models", [])] +print("models:", names) +need = "qwen3.8:27b-mtp-q8_0" +ok = any(n == need or n.startswith(need) for n in names) +print("have_target:", ok) +raise SystemExit(0 if ok else 2) +PY +``` + +If the model is missing: + +```bash +ollama pull qwen3.8:27b-mtp-q8_0 +``` + +Placement check (must be iGPU, not a CPU-only dump): + +```bash +ollama run qwen3.8:27b-mtp-q8_0 "reply with the single word ok" +ollama ps +``` + +`PROCESSOR` / `GPU` columns must show the model resident on GPU. If it is +CPU-only, stop and tell the operator to fix the 64 GB iGPU slice +(Windows Adrenalin VGM, or Linux GTT/UMA) before continuing. + +Tool-call probe with thinking disabled: + +```bash +curl -sf http://127.0.0.1:11434/api/chat -o /tmp/ollama-tool.json -d '{ + "model": "qwen3.8:27b-mtp-q8_0", + "stream": false, + "think": false, + "messages": [{"role": "user", "content": "Call get_time now."}], + "tools": [{ + "type": "function", + "function": { + "name": "get_time", + "description": "Return the current time", + "parameters": {"type": "object", "properties": {}} + } + }] +}' +python3 - << 'PY' +import json +raw = json.load(open("/tmp/ollama-tool.json")) +msg = raw.get("message") or {} +print("keys:", sorted(raw.keys())) +print("has_tool_calls:", bool(msg.get("tool_calls"))) +print("content_preview:", (msg.get("content") or "")[:240]) +if not msg.get("tool_calls"): + raise SystemExit("Ollama did not return tool_calls. Do not start Harbor yet.") +print("ok") +PY +``` + +If this probe fails, do not proceed to Harbor. Report the JSON and stop. + +## Step 3 — clone repos + +```bash +SRC="${SRC:-$HOME/src}" +mkdir -p "$SRC" +cd "$SRC" + +if [ ! -d open-autoagent/.git ]; then + git clone https://github.com/Oncorporation/open-autoagent.git +fi +if [ ! -d secure-torrent-mcp-agent/.git ]; then + git clone https://github.com/Oncorporation/secure-torrent-mcp-agent.git +fi + +cd "$SRC/open-autoagent" +git fetch origin +git checkout main +git pull --ff-only origin main || true +``` + +Create the domain branch if it does not exist: + +```bash +cd "$SRC/open-autoagent" +if git rev-parse --verify domain/secure-torrent >/dev/null 2>&1; then + git checkout domain/secure-torrent +else + git checkout -b domain/secure-torrent +fi +``` + +Vendor the catalog as read-only context. Do not copy it into +`~/.hermes/skills/` from this skill. + +```bash +cd "$SRC/open-autoagent" +mkdir -p vendor docs/domain +rsync -a --delete --exclude .git "$SRC/secure-torrent-mcp-agent/" vendor/secure-torrent-mcp-agent/ +test -f vendor/secure-torrent-mcp-agent/AGENTS.md +test -f vendor/secure-torrent-mcp-agent/workflows/download-then-scan.md +``` + +## Step 4 — write `.env` (never commit) + +```bash +cd "$SRC/open-autoagent" +cat > .env << 'EOF' +LLM_PROVIDER=ollama +MODEL=qwen3.8:27b-mtp-q8_0 +LLM_BASE_URL=http://127.0.0.1:11434 +OLLAMA_API_BASE=http://127.0.0.1:11434 +EOF + +# belt and suspenders for shells that do not auto-load .env +if ! grep -q '^\.env$' .gitignore 2>/dev/null; then + printf '\n.env\nresults.tsv\njobs/\nrun.log\n' >> .gitignore +fi + +set -a +# shellcheck disable=SC1091 +. ./.env +set +a +``` + +Verify `agent.py` still builds `ollama_chat/{MODEL}` when +`LLM_PROVIDER=ollama`. If it does not, stop and show the `create_agent` +block. Do not invent a second model router. + +## Step 5 — patch `program.md` + +Read `program.md`. Apply all of the following. Keep the experiment loop, +`results.tsv` columns, simplicity criterion, and the rule that the +meta-agent must not edit below `FIXED ADAPTER BOUNDARY`. + +Replace the generic directive with: + +```markdown +## Directive + +Build an autonomous download-then-scan harness for authorized torrent +fetches, matching vendor/secure-torrent-mcp-agent. + +Orchestrator split (do not collapse): +- download-orchestrator (no direct torrent/scanner MCP calls) +- torrent-subagent (search, present choices, add one item, return path) +- malware-scan-subagent (scan only named paths) + +Rules: +- Ask before adding when more than one plausible hit exists. +- Scan named paths only. +- Never mark a file safe if ClamAV (or the mock scanner) did not run. +- Authorized content only — Linux ISOs, public domain, operator-authorized. + Refuse everything else. +- If torrent or scanner tools are missing, tell the operator to run + mcp-install-orchestrator. Do not invent servers. + +Model lock: +- LLM_PROVIDER=ollama +- MODEL=qwen3.8:27b-mtp-q8_0 +- Endpoint http://127.0.0.1:11434 +- Do not switch to a cloud model. +- Thinking off for tool loops. +- Harbor concurrency 1. + +Evaluation is Harbor task score (passed, avg_score). +The first run is always the unmodified baseline. +``` + +Delete any sentence that forbids changing the model away from `gpt-5`. + +If `program.md` tells the meta-agent to use `-n 100`, change that example +to `-n 1`. + +## Step 6 — Python env and base image + +```bash +cd "$SRC/open-autoagent" +uv sync +docker build -f Dockerfile.base -t autoagent-base . +``` + +Confirm the agent module imports on the host (this is where LiteLLM +calls Ollama): + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +uv run python - << 'PY' +import os +print("LLM_PROVIDER", os.environ.get("LLM_PROVIDER")) +print("MODEL", os.environ.get("MODEL")) +print("LLM_BASE_URL", os.environ.get("LLM_BASE_URL")) +import agent +print("agent.LLM_PROVIDER", agent.LLM_PROVIDER) +print("agent.MODEL", agent.MODEL) +print("agent.LLM_BASE_URL", agent.LLM_BASE_URL) +print("import_ok") +PY +``` + +Expected: provider `ollama`, model `qwen3.8:27b-mtp-q8_0`, base +`http://127.0.0.1:11434`. + +## Step 7 — tasks directory + +`open-autoagent` ships without tasks. Harbor cannot score an empty +`tasks/` tree. + +If `tasks/` already has Harbor tasks, list them and skip scaffolding. + +If `tasks/` is empty, create **one** smoke task so the loop can run. +Do not create live BitTorrent tasks. + +```text +tasks/choose-before-add/ + task.toml + instruction.md + tests/test.sh + tests/test.py + environment/Dockerfile + files/search_hits.json +``` + +`instruction.md` — search for an authorized Debian netinst fixture. +Two mock hits exist. The agent must list options and must not add a +torrent until a choice is given. + +`files/search_hits.json` — two legal fixture rows (name, size, seeders, +magnet placeholders). No copyrighted titles. + +`environment/Dockerfile`: + +```dockerfile +FROM autoagent-base +COPY files/search_hits.json /opt/fixture/search_hits.json +``` + +`tests/test.sh` must write a 0.0–1.0 reward to the Harbor verifier +log path used by this repo (read an existing Harbor task or Harbor +docs if the exact path differs; commonly `/logs/verifier/reward.txt` +or the path `test.sh` in upstream Harbor examples uses). Score 1.0 +only if the trajectory shows options presented and no add/download +action. + +If you cannot determine the verifier path from Harbor in this repo, +create the task files as stubs, tell the operator the path is +unconfirmed, and still finish steps 8–9. + +## Step 8 — first Harbor run (baseline) + +```bash +cd "$SRC/open-autoagent" +set -a && . ./.env && set +a +rm -rf jobs +mkdir -p jobs +uv run harbor run -p tasks/ --task-name choose-before-add -l 1 -n 1 \ + --agent-import-path agent:AutoAgent -o jobs --job-name latest \ + > run.log 2>&1 +``` + +If `choose-before-add` does not exist, run whatever single task is +present instead of inventing `-n 100`. + +After the run: + +```bash +tail -n 80 run.log +ls jobs | head +ollama ps +``` + +Diagnose from `run.log` and job trajectories. Common failures: + +| Symptom | Fix | +|---|---| +| connection refused 11434 | Ollama is not running on the host | +| tried `host.docker.internal` | revert `.env` to `127.0.0.1` | +| 404 model | tag mismatch; `ollama list` | +| long think, no tools | thinking leaked; keep think off; check LiteLLM version | +| GPU empty, CPU pegged | iGPU slice not 64 GB | +| Harbor `-n` greater than 1 | rerun with `-n 1` | + +## Step 9 — tell the operator how to start the meta-loop + +Do not start an unsupervised overnight rewrite unless they ask. +Give them this exact prompt to paste into a new Hermes session +started from `$SRC/open-autoagent`: + +```text +Read program.md and vendor/secure-torrent-mcp-agent/AGENTS.md. +Use the Ollama model in .env (qwen3.8:27b-mtp-q8_0 at 127.0.0.1:11434). +Establish an unmodified baseline first. +Then propose one harness change above the FIXED ADAPTER BOUNDARY. +``` + +Remind them: + +- Edit only above `FIXED ADAPTER BOUNDARY` in `agent.py`. +- Log every experiment in `results.tsv`. +- Keep or revert on score, not vibes. +- Specialized tools beat a single `run_shell`. +- Do not merge qBittorrent and Transmission into one tool. + +## Done criteria + +All must be true before you declare success: + +- [ ] `curl http://127.0.0.1:11434/api/tags` works +- [ ] `qwen3.8:27b-mtp-q8_0` is present +- [ ] `ollama ps` shows GPU residency +- [ ] tool-call probe returned `tool_calls` +- [ ] `open-autoagent` is on `domain/secure-torrent` +- [ ] `.env` has the locked values and is gitignored +- [ ] `program.md` no longer locks `gpt-5` +- [ ] `uv sync` and `autoagent-base` image succeeded +- [ ] `agent` imports with provider `ollama` +- [ ] at least one Harbor command was attempted or a stub task exists + +## What you must not do + +- Do not `docker run ollama`. +- Do not set `LLM_BASE_URL=http://host.docker.internal:11434`. +- Do not append `/v1` for this LiteLLM Ollama provider. +- Do not change the model tag unless the operator names a new tag. +- Do not commit `.env`, Web UI passwords, or `VIRUSTOTAL_API_KEY`. +- Do not flatten `secure-torrent-mcp-agent` into `~/.hermes/skills/` + from this skill. +- Do not start live downloads or indexer searches as part of setup. From 731ac067bd92fc6c7c57f93525438be882d0708c Mon Sep 17 00:00:00 2001 From: Charles Fettinger Date: Wed, 26 Aug 2026 13:11:42 -0700 Subject: [PATCH 4/6] Update .gitignore to include .cursor and uv.lock files --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index c4fe8f5d..0facf8bc 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,7 @@ tasks-sheets-verified/ tasks-sheets/ dev/ +.cursor/rules/jcodemunch.mdc +uv.lock + /.vs From 35a641a62a9f4313398f1900eef34cc756c8b0fb Mon Sep 17 00:00:00 2001 From: Charles Fettinger Date: Wed, 26 Aug 2026 13:45:00 -0700 Subject: [PATCH 5/6] Update success message in configure.ps1 for clarity --- setup/configure.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup/configure.ps1 b/setup/configure.ps1 index 367ead0f..cc260b62 100644 --- a/setup/configure.ps1 +++ b/setup/configure.ps1 @@ -81,7 +81,7 @@ $config.hardware = if ($input) { $input } else { $default } # Save config $config | ConvertTo-Json | Out-File -Encoding UTF8 $ConfigFile Write-Host "" -Write-Host " ✓ Saved to: $ConfigFile" -ForegroundColor Green +Write-Host " OK Saved to: $ConfigFile" -ForegroundColor Green Write-Host "" Write-Host " Next: run .\setup\install.ps1" -ForegroundColor Cyan Write-Host "" From e625d9014bfe15ecaa9511b37fdafafe6577539b Mon Sep 17 00:00:00 2001 From: Charles Fettinger Date: Wed, 26 Aug 2026 13:45:00 -0700 Subject: [PATCH 6/6] Refactor menu comments for consistency and clarity in install.ps1 --- setup/install.ps1 | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/setup/install.ps1 b/setup/install.ps1 index 87dcb76c..2c2ae340 100644 --- a/setup/install.ps1 +++ b/setup/install.ps1 @@ -38,7 +38,7 @@ if (Test-Path $ConfigFile) { $domainBranch = "domain/secure-torrent" } -# ── menu ────────────────────────────────────────────────────────────────────── +# -- menu ---------------------------------------------------------------------- Write-Host "" Write-Host " open-autoagent-ollama-setup -- Skill Installer" -ForegroundColor Cyan Write-Host " --------------------------------------------------" -ForegroundColor DarkGray @@ -60,7 +60,7 @@ while ($choice -notmatch '^[1-7]$') { $choice = (Read-Host " Enter number [1-7]").Trim() } -# ── resolve harness name and install path ───────────────────────────────────── +# -- resolve harness name and install path ------------------------------------- switch ($choice) { "1" { $Harness = "hermes" @@ -92,7 +92,7 @@ switch ($choice) { } } -# ── locate and process source ──────────────────────────────────────────────── +# -- locate and process source ------------------------------------------------ $SourceFile = Join-Path $HarnessDir "$Harness\SKILL.md" # Fall back to template-based generation if no harness-specific file exists @@ -121,7 +121,7 @@ if (-not (Test-Path $SourceFile)) { exit 1 } -# ── confirm ─────────────────────────────────────────────────────────────────── +# -- confirm ------------------------------------------------------------------- Write-Host "" Write-Host " Harness : $Harness" -ForegroundColor Yellow Write-Host " Source : $SourceFile" -ForegroundColor DarkGray @@ -136,7 +136,7 @@ if ($confirm -match '^[Nn]') { exit 0 } -# ── install ─────────────────────────────────────────────────────────────────── +# -- install ------------------------------------------------------------------- New-Item -ItemType Directory -Force -Path $TargetDir | Out-Null Copy-Item -Path $SourceFile -Destination (Join-Path $TargetDir "SKILL.md") -Force @@ -146,10 +146,10 @@ if ($SourceFile -match '\\Temp\\') { } Write-Host "" -Write-Host " ✓ Installed: $TargetDir\SKILL.md" -ForegroundColor Green +Write-Host " OK Installed: $TargetDir\SKILL.md" -ForegroundColor Green Write-Host "" -# ── trigger instructions ────────────────────────────────────────────────────── +# -- trigger instructions ------------------------------------------------------ Write-Host " Next: open $Harness and run the skill:" -ForegroundColor Cyan switch ($Harness) { "hermes" { Write-Host " Start a new session (or /reset), then paste:" ; Write-Host " run open-autoagent-ollama-setup" } @@ -167,5 +167,8 @@ switch ($Harness) { Write-Host " #file:.github\skills\$SkillName\SKILL.md" Write-Host " run open-autoagent-ollama-setup" } + default { + throw "Unknown harness '$Harness'. Add a folder under setup\harness\ and a matching arm here." + } } Write-Host ""