ARES · first agent

Colonel is the door. Everything else walks through him.

You do not start an Architect. You do not start Imagine. You type python3 -m ares …. That call hits one function. That function is the first agent.

1 · The shell

Same entry every time. Package script ares and python3 -m ares are the same door.

src/ares/__main__.py

"""python3 -m ares …"""

from ares.colonel import main

if __name__ == "__main__":
    raise SystemExit(main())

2 · The first agent

Colonel. Orchestrator. Does not write product code. Reads argv. One if cmd per command. First match wins. That is how an agent “goes in.”

src/ares/colonel.py — main()

MOS = "Colonel"

def main() -> int:
    load_dotenv()
    cmd = sys.argv[1] if len(sys.argv) > 1 else "help"
    if cmd in {"help", "-h", "--help"}:
        print(USAGE.strip())
        return 0
    if cmd in {"status", "ld"}:
        print(status())
        …
    if cmd == "roster":
        …

3 · How the next one goes in

You asked to see what I add when I add a capability. Imagine is that example. Four files. No new MOS. No new docs chapter.

  1. src/ares/imagine.py — the work
  2. colonel.py USAGE line + one if cmd
  3. research/store.py seed so ares commands lists it
  4. tests/test_imagine.py — mock transport, no live API

src/ares/colonel.py — the branch that lets Imagine in

    if cmd in {"imagine", "image"}:
        return _imagine_cmd(sys.argv[2:])

src/ares/colonel.py — _imagine_cmd

def _imagine_cmd(args: list[str]) -> int:
    from ares.imagine import generate, render_list
    …
    result = generate(prompt, aspect=aspect, model=model,
                      resolution=resolution, negative=negative)
    if not result.get("ok"):
        print("HOLD " + (result.get("reason") or "imagine failed"))
        return 1
    print(f"saved {result['path']}")
    return 0

4 · Roster after the door

Colonel already knows who exists. ares roster prints this list. A new MOS only goes here if it has one job. Imagine did not get a MOS. It is a command, not a personality.

src/ares/colonel.py — roster()

def roster() -> list[str]:
    return [
        architect.brief(),
        s3.brief(),
        s2.brief(),
        s6.brief(),
        engineer.brief(),
        fister.brief(),
        commo.brief(),
        s4.brief(),
        scribe_brief(),
    ]

5 · Skills — the playbook they carry

Code is the door. A skill is what they do after they walk in. Live under .grok/skills/. Slash: /ares-colonel, /ares-engineer, /ares-fister, /ares-s2, /ares-s4, /ares-staff, /ares-scribe.

Local: python3 ares site preview first-agent
Live: first-agent.pages.dev
Source: sites/first-agent/