diff --git a/README.md b/README.md index f5c5fe7a..52840fe5 100644 --- a/README.md +++ b/README.md @@ -53,9 +53,11 @@ Your AI reads `.trinity/` on startup and writes back what it learned before the ```bash mkdir my-project && cd my-project -aipass init +aipass init run ``` +A 12-step guided setup walks you through everything: system detection, health check, profile, CLI choice, agent creation, and handoff. At the end, a new terminal window opens with your first AI agent ready to talk. The whole thing takes about 5 minutes. + Your project gets its own registry, its own identity, and persistent memory. Each project is isolated — its own agents, its own rules. No cross-contamination between projects. **Add agents when you need them:** @@ -66,8 +68,9 @@ aipass init agent my-agent # Full agent: apps, mail, memory, identity | What you need | Command | What you get | |---------------|---------|-------------| -| A new project | `aipass init` | Registry, project identity, prompts, hooks, docs | -| A full agent | `aipass init agent ` | Apps scaffold, mailbox, memory, identity — registered in project | +| A new project | `aipass init` | Project scaffold (registry, prompts, hooks, docs) | +| Guided setup | `aipass init run` | 12-step interactive onboarding — creates project + first agent + handoff | +| Another agent | `aipass init agent ` | Apps scaffold, mailbox, memory, identity — registered in project | | A lightweight agent | `drone @spawn create --template birthright` | Identity + memory only (no apps scaffold) | **What makes this different:** @@ -90,17 +93,22 @@ aipass init agent my-agent # Full agent: apps, mail, memory, identity pip install aipass mkdir my-project && cd my-project -aipass init # Creates project: registry, prompts, hooks, docs -aipass init agent my-agent # Creates your first agent inside the project -cd my-agent -claude # Or: codex, gemini — your agent reads its memory and is ready +aipass init run # 12-step guided setup — creates project, first agent, opens terminal ``` -That's it. Your agent has identity, memory, a mailbox, and knows what AIPass is. Say "hi" — it picks up where it left off. Come back tomorrow, it remembers. +That's it. The setup creates your project, runs a health check, asks your name, creates your first AI agent, and opens a new terminal window where that agent is already running. Your agent has identity, memory, a mailbox, and knows what AIPass is. Say "hi" — it picks up where it left off. Come back tomorrow, it remembers. + +Want more control? Use the individual commands: + +```bash +aipass init # Just the project scaffold (no guided setup) +aipass init agent my-agent # Add another agent to your project +aipass doctor # Check system health +``` > **Need help?** [Ask in Discussions](https://github.com/AIOSAI/AIPass/discussions) or [file feedback](https://github.com/AIOSAI/AIPass/issues/new?template=feedback.yml) — both take 30 seconds. -Your project automatically gets access to every AIPass service — dispatch work to specialists, create plans, run quality audits, send feedback to devpulse. Agents within your project can email each other. All through `drone @branch command`. +Your project automatically gets access to every AIPass service — dispatch work to specialists, create plans, run quality audits, monitor agents in real-time. Agents within your project can email each other. All through `drone @branch command`. ### Explore the full framework @@ -118,18 +126,19 @@ claude # Talk to the orchestrator ```bash # Things you can do: -drone @seedgo audit aipass # Run 33 quality checks across all agents -drone @flow create . "Add user auth" # Create a work plan -drone @ai_mail email @agent "Subject" # Send mail between agents -drone @devpulse feedback send "Note" # Send feedback from any project -drone systems # List every agent and what it does +aipass doctor # Check system health (15+ checks) +drone @seedgo audit aipass # Run 34 quality checks across all agents +drone @flow create . "Add user auth" # Create a work plan +drone @ai_mail dispatch @agent "Subject" "Body" # Send task + wake an agent +drone @prax monitor run # Watch all agent activity in real-time +drone systems # List every agent and what it does ``` --- ## How It Works -**One agent:** Your AI reads `.trinity/` on startup and picks up where it left off. But memory files have limits. When they fill up, the memory agent automatically archives older entries into a searchable vector database (ChromaDB). Nothing is lost — it just moves from active memory to long-term recall. +**One agent:** Run `aipass init run` and in 5 minutes you have a project with an agent that reads `.trinity/` on startup and picks up where it left off. Memory files have limits — when they fill up, the memory agent automatically archives older entries into a searchable vector database (ChromaDB). Nothing is lost — it just moves from active memory to long-term recall. **A team:** When one agent isn't enough, every agent shares the same structure: @@ -153,10 +162,10 @@ drone @flow create . "Refactor auth module" # Create a work plan drone @ai_mail dispatch @memory "Archive old sessions" "Find sessions older than 30 days" ``` -**Two ways to work:** +**Two ways to use AIPass:** -- **Team mode (most of the time):** Talk to `devpulse`, dispatch work across the team. Agents work in parallel and report back. -- **Direct mode (for deeper work):** `cd src/aipass/memory && claude` — work one-on-one with a specialist when the problem needs focused domain expertise. +- **Your own project:** `aipass init run` sets up a new project with your first agent. Add more agents as you need them. Your first agent is the orchestrator — it coordinates the others. +- **The full framework:** Clone the repo to work with all 11 core agents. Talk to `devpulse` (the orchestrator), dispatch work across specialists. Agents work in parallel and report back. **AIPass ships with 11 core agents** that maintain and develop the framework — the reference implementation proving the architecture works at scale: @@ -226,11 +235,11 @@ setup.sh auto-detects which CLIs are installed and configures hooks for each. | Metric | Value | |--------|-------| -| Version | 2.1.0 | -| Agents | 11 | -| Quality standards | 33 automated checks | +| Version | 2.2.0 | +| Agents | 11 core + user-created | +| Quality standards | 34 automated checks | | Tests | 6,500+ (across all agents) | -| PRs merged | 510+ (created by agents, reviewed by human) | +| PRs merged | 517+ (created by agents, reviewed by human) | | Code coverage | 75% ([codecov](https://codecov.io/gh/AIOSAI/AIPass)) | | CI | Green (0 failures) | diff --git a/src/aipass/aipass/apps/modules/init_flow.py b/src/aipass/aipass/apps/modules/init_flow.py index 4e329e98..4ff64208 100644 --- a/src/aipass/aipass/apps/modules/init_flow.py +++ b/src/aipass/aipass/apps/modules/init_flow.py @@ -577,8 +577,33 @@ def stage_11_handoff( return {"handoff_command": command, "launched": launched} -def stage_12_done(dry_run: bool = False) -> Dict[str, Any]: - """Print completion summary.""" +def _write_init_report(agent_path: str, accumulated: Dict[str, Any], dry_run: bool = False) -> None: + """Drop init_report.json into the agent's dropbox.""" + if dry_run or not agent_path: + return + dropbox = Path(agent_path) / "dropbox" + dropbox.mkdir(parents=True, exist_ok=True) + system_data = {k: accumulated.get(k) for k in ("os", "python", "shell", "ram_gb", "install") if accumulated.get(k)} + report = { + "created": datetime.now(timezone.utc).isoformat(), + "project_name": Path.cwd().name, + "project_path": str(Path.cwd()), + "agent_name": accumulated.get("agent_name", Path(agent_path).name.upper()), + "agent_number": 1, + "is_orchestrator": True, + "install_method": accumulated.get("install", "unknown"), + "cli_choice": accumulated.get("cli", "claude"), + "total_agents": 1, + "system": system_data, + "note": "You are the first agent created in this project. You are the orchestrator. After dispatching work to other agents, monitor them with: drone @devpulse watchdog agent @target", + } + report_path = dropbox / "init_report.json" + report_path.write_text(json.dumps(report, indent=2) + "\n", encoding="utf-8") + logger.info("[init_flow] init report written to %s", report_path) + + +def stage_12_done(accumulated: Dict[str, Any] | None = None, dry_run: bool = False) -> Dict[str, Any]: + """Print completion summary and drop init report.""" console.print() console.print("[bold cyan]Step 12/12[/bold cyan] — Done!") console.print() @@ -588,6 +613,8 @@ def stage_12_done(dry_run: bool = False) -> Dict[str, Any]: console.print(" [cyan]aipass doctor[/cyan] [dim]# Check system health[/dim]") console.print(" [cyan]aipass profile[/cyan] [dim]# View your profile[/dim]") console.print() + if accumulated: + _write_init_report(accumulated.get("agent_path", ""), accumulated, dry_run=dry_run) _save_stage(12, dry_run=dry_run) return {} @@ -674,7 +701,7 @@ def run_init( dry_run=dry_run, ), ), - (12, lambda: stage_12_done(dry_run=dry_run)), + (12, lambda: stage_12_done(accumulated=accumulated, dry_run=dry_run)), ] for stage_num, fn in stage_fns: