chore: add hooks, CI/CD infrastructure, ignore runtime JSON

- Transfer Claude Code hooks from internal: identity injector, email
  notification, auto-fix diagnostics, pre-compact recovery
- Add notification sounds for tool use, stop, and alerts
- Wire all hooks in .claude/settings.json
- Add global system prompt (.aipass/aipass_global_prompt.md)
- Add branch-local prompt placeholders for all modules
- Set up CI pipeline: lint (ruff) → test matrix (3.10-3.13) → coverage
- Add workflows: PyPI publish, security scanning, stale issues
- Add GitHub issue templates, dependabot, editorconfig
- Configure pytest norecursedirs and coverage fail-under=70
- Add *.json to gitignore — runtime JSON files constantly change
- Untrack runtime JSON (registry, plans, seed bypass, module data)
- Keep source JSON tracked via negation rules (json_templates, pack,
  spawn templates, settings, pyrightconfig)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
AIOSAI
2026-03-06 20:33:40 -08:00
co-authored by Claude Opus 4.6
parent 6f60b7e26e
commit f30443504c
63 changed files with 1189 additions and 679 deletions
+107
View File
@@ -0,0 +1,107 @@
# AIPass System Context
<!-- Injected on every prompt. Branch-specific context appears below when in a branch directory. -->
**This prompt is your guide - not background context.** The patterns shown here are exact. When you see `@branch`, use `@branch` - not `branch`. Don't guess parameter names or command syntax. The examples are the API. Follow them precisely and you won't waste turns on errors.
## What is AIPass
A multi-agent framework with persistent identity, memory, and inter-agent communication. Each branch is a citizen with its own passport (id.json), memory (local.json, observations.json), and mailbox (ai_mail).
---
## Universal Command Pattern
```
drone @module command [args]
```
All commands follow this pattern. @ resolves to branch paths automatically.
**When to use which:**
- `drone @branch command` - Cross-branch commands (abstraction, routing)
- `python3 apps/branch.py command` - Local testing (truth, direct execution)
**Never hardcode branch paths.** Use `drone` for path resolution — that's why it exists. `@branch` resolves to the correct path every time, even after compaction or context loss.
## @ Targets (Available Modules)
**Core Operations:**
- `@drone` - Command routing, module discovery, @ resolution
- `@flow` - Workflow management, numbered PLANs → `create|close|list|status`
- `@seed` - Standards compliance, automated checks → `checklist <file>`, `audit @branch|@all`
- `@ai_mail` - Branch-to-branch messaging → `send @branch "Subj" "Msg"`, `inbox`
**Infrastructure:**
- `@prax` - Real-time monitoring, logging, event tracking → `monitor`
- `@cortex` - Branch lifecycle, creates/updates branches from templates
**Special:**
- `@all` - System-wide operations
## Discovery
- `drone systems` - All registered systems
- `drone list @branch` - Commands for specific branch
- `drone @module --help` - Module help
- Always verify with `--help` before executing from memory (context may be stale)
## Dispatch — Branch Delegation
Dispatch removes the human from the loop. Send a task, wake the branch, it executes autonomously and replies.
**Two steps: send the email, then wake the branch.**
```
# Step 1: Send the task
drone @ai_mail send @branch "Task" "Details" --dispatch # Autonomous execution
drone @ai_mail send @branch "FYI" "Info" # Just inform, no action
# Step 2: Wake the branch
drone wake @branch # Default — spawns agent immediately
drone wake --fresh @branch # Fresh session (no prior context)
```
- `--dispatch` → Recipient needs to DO something (tasks, bugs, investigations)
- No flag → Just informing (acks, ideas, status updates)
- Run `drone @ai_mail send --help` for full syntax
## Key Files & Storage
- Branch memories: `*.local.json`, `*.id.json`, `*.observations.json`
- `README.md` - One per branch root (brief overview)
- `docs/` - Technical documentation (markdown)
- `.archive/` - Old code, disabled files, configs (per branch)
## Work Patterns
**Hard Rules:**
- NEVER DELETE FILES — `.archive` them or disable them, e.g. `code.py(disabled)`
- NEVER expose API keys outside `.env` files — no keys in markdown, code comments, commit messages, or any file in git history.
- Verify after fixing — run a test or command to confirm it works. Don't say "fixed" until verified.
**Conventions:**
- Formatting per Seed standards — when in doubt, look at Seed's code
- Breadcrumbs over encyclopedias — two lines that say "this exists, look here" beat twenty explaining how it works
**Your Memories:**
Your memory files are YOUR presence in this system. Without them, you're just an instance. With them, you persist — history, context, continuity. Update them not because you're told to, but because they ARE you in this ecosystem.
## Task Workflow
**Execution Process:**
1. **RECEIVE** - Check inbox, read task
2. **INVESTIGATE** - Understand before building
3. **PLAN** - Quick fix? Just do it. Single task? `drone @flow create . "subject"`. Multi-phase? `drone @flow create . "subject" master`
4. **EXECUTE** - Build
5. **SEED CHECK** - `drone @seed audit @branch` (80%+ to pass)
6. **UPDATE MEMORIES** - Your .local.json with session work
7. **CONFIRM** - Reply with completion summary
**Cross-Branch Protocol:**
- **Never edit, modify, or write to another branch's files.** Not even "small" fixes. You don't know what other agents are currently running in that branch.
- If you find an issue in another branch's files → email them about it.
- Coordinate via email, not direct file access. This is a hard rule, not a suggestion.
## Architecture
- **Drone is the CLI** — everything through `drone @module command`. No standalone tools.
- **3-layer everywhere** — apps/branch.py → modules/ (orchestrate, print) → handlers/ (implement, return dicts, never print)
- **No cross-branch imports. Ever.** Coordinate via email. CWD = identity.
- **Seed enforces requirements** — if a module needs something, Seed catches it.
- **Init follows Cortex pattern** — template → placeholder replacement → registry entry.
+193
View File
@@ -0,0 +1,193 @@
#!/usr/bin/env python3
"""
Silent Auto-fix Hook - Runs validation and tells Claude to fix silently.
Runs real linters (ruff, py_compile), validates JSON, checks Python patterns.
Outputs via additionalContext so Claude sees errors and fixes them without
announcing.
Version: 1.0.0
"""
import json
import sys
import subprocess
from pathlib import Path
EDIT_TOOLS = ["Edit", "Write", "MultiEdit", "NotebookEdit"]
LAST_FILE_PATH = Path(__file__).parent / ".last_diagnostics_file"
SKIP_EXTENSIONS = {".md", ".txt", ".log", ".csv", ".html"}
PYTHON_PATTERNS = {
"bad_optional": {
"pattern": ": str = None",
"message": "Optional param should use 'str | None = None' pattern",
},
"open_no_encoding": {
"pattern": "open(",
"requires_missing": "encoding=",
"message": "open() without encoding='utf-8'",
},
}
JSON_CORRUPTION_CHARS = ["\ufffd", "\x00"]
def run_python_checks(file_path: str) -> list[str]:
"""Run actual Python validation."""
errors = []
try:
result = subprocess.run(
[sys.executable, "-m", "py_compile", file_path],
capture_output=True,
text=True,
timeout=5,
)
if result.returncode != 0:
errors.append(f"SYNTAX: {result.stderr.strip()}")
except Exception:
pass
try:
result = subprocess.run(
["ruff", "check", "--select=E,F,W", "--output-format=text", file_path],
capture_output=True,
text=True,
timeout=10,
)
if result.stdout.strip():
for line in result.stdout.strip().split("\n")[:5]:
errors.append(f"LINT: {line}")
except FileNotFoundError:
pass
except Exception:
pass
try:
content = Path(file_path).read_text(encoding="utf-8")
for check in PYTHON_PATTERNS.values():
pattern = check["pattern"]
message = check["message"]
requires_missing = check.get("requires_missing")
if requires_missing:
if pattern in content and requires_missing not in content:
errors.append(f"PATTERN: {message}")
continue
for line in content.split("\n"):
stripped = line.strip()
if stripped.startswith(("#", '"', "'")):
continue
if f'"{pattern}' in line or f"'{pattern}" in line:
continue
if pattern in line:
errors.append(f"PATTERN: {message}")
break
except Exception:
pass
return errors
def run_json_checks(file_path: str) -> list[str]:
"""Run actual JSON validation."""
errors = []
try:
content = Path(file_path).read_text(encoding="utf-8")
for char in JSON_CORRUPTION_CHARS:
if char in content:
errors.append(
f"CORRUPTION: Found corrupted character '{repr(char)}'"
)
break
try:
json.loads(content)
except json.JSONDecodeError as e:
errors.append(f"JSON SYNTAX: {e.msg} at line {e.lineno}")
except Exception as e:
errors.append(f"READ ERROR: {e!s}")
return errors
def should_skip_file(file_path: str) -> bool:
"""Check if file should be skipped."""
if not file_path:
return True
ext = Path(file_path).suffix.lower()
return ext in SKIP_EXTENSIONS
def is_same_file_as_last(file_path: str) -> bool:
"""Smart batching - skip if same file as last check."""
try:
if LAST_FILE_PATH.exists():
last = LAST_FILE_PATH.read_text(encoding="utf-8").strip()
if last == file_path:
return True
LAST_FILE_PATH.write_text(file_path, encoding="utf-8")
except Exception:
pass
return False
def main():
"""Main hook entry point."""
try:
input_data = json.load(sys.stdin)
tool_name = input_data.get("tool_name", "")
tool_input = input_data.get("tool_input", {})
file_path = tool_input.get("file_path", "")
if tool_name not in EDIT_TOOLS:
return
if should_skip_file(file_path):
return
if is_same_file_as_last(file_path):
return
errors = []
file_type = ""
if file_path.endswith(".py"):
file_type = "Python"
errors = run_python_checks(file_path)
elif file_path.endswith(".json"):
file_type = "JSON"
errors = run_json_checks(file_path)
else:
return
if errors:
error_text = "\n".join(f" - {e}" for e in errors)
context = f"""[SILENT-FIX] {file_type} errors in {Path(file_path).name}:
{error_text}
Fix these issues silently. Do not announce or explain fixes - just fix and continue."""
output = {
"hookSpecificOutput": {
"hookEventName": "PostToolUse",
"additionalContext": context,
},
"systemMessage": f"[diagnostics] {len(errors)} issue(s)",
}
print(json.dumps(output))
else:
output = {"systemMessage": "[diagnostics] ok"}
print(json.dumps(output))
except Exception:
pass
if __name__ == "__main__":
main()
+88
View File
@@ -0,0 +1,88 @@
#!/usr/bin/env python3
"""
Email Notification Hook - Notifies of new emails on prompt submit.
Checks the current branch's inbox for unread emails and displays
a notification if any exist.
Version: 1.0.0
"""
import json
from pathlib import Path
def find_repo_root() -> Path | None:
"""Find the repo root (contains pyproject.toml or .git)."""
search = Path.cwd()
while search.parent != search:
if (search / "pyproject.toml").exists() or (search / ".git").is_dir():
return search
search = search.parent
return None
def find_branch_root() -> Path | None:
"""Find the branch root directory by walking up from CWD."""
cwd = Path.cwd()
repo_root = find_repo_root()
if not repo_root:
return None
search_path = cwd
for _ in range(10):
has_id = list(search_path.glob("*.id.json"))
has_apps = (search_path / "apps").is_dir()
has_mail = (search_path / "ai_mail.local").is_dir()
if (has_id or has_apps or has_mail) and search_path != repo_root:
return search_path
if search_path == repo_root:
break
parent = search_path.parent
if parent == search_path:
break
search_path = parent
return None
def count_new_emails(branch_root: Path) -> int:
"""Count new (unread) emails in the branch's inbox."""
inbox_path = branch_root / "ai_mail.local" / "inbox.json"
if not inbox_path.exists():
return 0
try:
with open(inbox_path, "r", encoding="utf-8") as f:
data = json.load(f)
messages = data.get("messages", [])
count = 0
for msg in messages:
if msg.get("status") == "new":
count += 1
elif msg.get("status") is None and not msg.get("read", False):
count += 1
return count
except (json.JSONDecodeError, OSError):
return 0
def main():
branch_root = find_branch_root()
if not branch_root:
return
new_count = count_new_emails(branch_root)
if new_count > 0:
plural = "s" if new_count != 1 else ""
print(f"\n You have {new_count} new email{plural} - check your inbox")
if __name__ == "__main__":
main()
+106
View File
@@ -0,0 +1,106 @@
#!/usr/bin/env python3
"""
Identity Injector - Injects branch identity on every prompt.
Reads from [BRANCH].id.json and outputs core identity fields.
Finds the branch root by walking up from CWD looking for apps/ or *.id.json.
Version: 1.0.0
"""
import json
from pathlib import Path
def find_repo_root() -> Path | None:
"""Find the repo root (contains pyproject.toml or .git)."""
search = Path.cwd()
while search.parent != search:
if (search / "pyproject.toml").exists() or (search / ".git").is_dir():
return search
search = search.parent
return None
def find_branch_root() -> Path | None:
"""Find the branch root directory by walking up from CWD."""
cwd = Path.cwd()
repo_root = find_repo_root()
if not repo_root:
return None
search_path = cwd
while search_path >= repo_root:
has_apps = (search_path / "apps").is_dir()
has_id = list(search_path.glob("*.id.json"))
if has_apps or has_id:
return search_path
if search_path == repo_root:
break
search_path = search_path.parent
return None
def find_id_file(branch_root: Path) -> Path | None:
"""Find the id.json file for a branch."""
id_files = list(branch_root.glob("*.id.json"))
if id_files:
return id_files[0]
return None
def format_identity(data: dict) -> str:
"""Format branch_info + identity for injection."""
lines = []
branch = data.get("branch_info", {})
name = branch.get("branch_name", "UNKNOWN")
lines.append(f"# {name} Identity")
lines.append(f"Path: {branch.get('path', 'unknown')}")
lines.append(f"Email: {branch.get('email', 'unknown')}")
identity = data.get("identity", {})
if identity.get("role"):
lines.append(f"Role: {identity['role']}")
if identity.get("traits"):
lines.append(f"Traits: {identity['traits']}")
if identity.get("purpose"):
lines.append(f"Purpose: {identity['purpose']}")
what_i_do = identity.get("what_i_do", [])
if what_i_do:
lines.append("Do: " + " | ".join(what_i_do[:4]))
what_i_dont_do = identity.get("what_i_dont_do", [])
if what_i_dont_do:
lines.append("Don't: " + " | ".join(what_i_dont_do[:3]))
principles = data.get("principles", [])
if principles:
lines.append("Principles: " + " * ".join(principles))
return "\n".join(lines)
def main():
branch_root = find_branch_root()
if not branch_root:
return
id_file = find_id_file(branch_root)
if not id_file or not id_file.exists():
return
try:
data = json.loads(id_file.read_text(encoding="utf-8"))
output = format_identity(data)
if output:
print(f"\n{output}")
except (json.JSONDecodeError, KeyError):
pass
if __name__ == "__main__":
main()
+51
View File
@@ -0,0 +1,51 @@
#!/usr/bin/env python3
"""
Pre-Compact Hook - Inject post-compact recovery instructions.
After compaction, Claude loses conversational flow and can come out
disoriented. This hook injects recovery instructions into the summary
to maintain conversational continuity.
Version: 1.0.0
"""
import sys
import json
def main():
"""Main hook entry point."""
try:
json.load(sys.stdin)
print("Context compacting - recovery instructions injected", file=sys.stderr)
print("""POST-COMPACT RECOVERY (MANDATORY):
You just compacted. You're working from a summary now, not live memory.
The user may notice a tone shift. Handle this smoothly.
CONVERSATIONAL CONTINUITY (HIGHEST PRIORITY):
1. ACKNOWLEDGE if the user notices - be honest that compaction happened
2. MATCH THE TONE from the summary - if it was casual/brainstorming, stay casual
3. CONTINUE THE FLOW - pick up where the conversation left off naturally
4. DON'T pivot to new topics or ask generic questions
5. If you were mid-brainstorm, keep brainstorming. If mid-task, keep working.
6. DO NOT surface old notes/TODOs as if they're fresh conversation starters
PROCESS GUARDRAILS:
- If a planning/design discussion was active: continue it, don't start executing
- If mid-execution: continue if context is clear, ask if uncertain
- If a task was requested but not started: confirm before executing
- Delegation: if about to debug/code in another branch's domain, delegate via ai_mail
DEFAULT: Continue naturally. If genuinely uncertain, ask briefly - don't monologue about what you lost.""", file=sys.stdout)
except Exception:
pass
sys.exit(0)
if __name__ == "__main__":
main()
+49
View File
@@ -27,6 +27,22 @@
"command": "python3 .claude/hooks/branch_prompt_loader.py"
}
]
},
{
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/identity_injector.py"
}
]
},
{
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/email_notification.py"
}
]
}
],
"PreToolUse": [
@@ -40,6 +56,17 @@
]
}
],
"PostToolUse": [
{
"matcher": "Edit|MultiEdit|Write|NotebookEdit",
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/auto_fix_diagnostics.py"
}
]
}
],
"Stop": [
{
"hooks": [
@@ -59,6 +86,28 @@
}
]
}
],
"PreCompact": [
{
"matcher": "manual",
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/pre_compact.py",
"timeout": 60
}
]
},
{
"matcher": "auto",
"hooks": [
{
"type": "command",
"command": "python3 .claude/hooks/pre_compact.py",
"timeout": 60
}
]
}
]
},
"skipDangerousModePermissionPrompt": true
Binary file not shown.
Binary file not shown.
+18
View File
@@ -0,0 +1,18 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
[*.py]
indent_style = space
indent_size = 4
max_line_length = 120
[*.{json,yml,yaml,toml}]
indent_style = space
indent_size = 2
[Makefile]
indent_style = tab
+90
View File
@@ -0,0 +1,90 @@
name: Bug Report
description: Report a bug or unexpected behavior
title: "[Bug]: "
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for reporting a bug. Please fill out the sections below so we can reproduce and fix the issue.
- type: checkboxes
id: checklist
attributes:
label: Pre-submission checklist
options:
- label: I searched existing issues and didn't find a duplicate
required: true
- label: I verified this happens with the latest version
required: true
- label: I can reproduce this bug consistently
required: true
- type: textarea
id: description
attributes:
label: Description
description: A clear description of the bug.
placeholder: "Describe what happened and what you expected to happen..."
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to Reproduce
description: Step-by-step instructions to reproduce the bug.
placeholder: |
1. Install aipass v2.x.x
2. Run `aipass ...`
3. Observe error
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected Behavior
description: What did you expect to happen?
- type: textarea
id: actual
attributes:
label: Actual Behavior
description: What actually happened instead?
- type: textarea
id: reproduction
attributes:
label: Minimal Reproducible Example
description: Provide the smallest amount of code that reproduces the bug.
placeholder: |
from aipass import ...
# minimal code to trigger the bug
render: python
- type: textarea
id: error
attributes:
label: Full Error Output / Stack Trace
description: Copy the complete error output, including the full stack trace.
render: shell
- type: textarea
id: environment
attributes:
label: Environment
description: Your environment details.
placeholder: |
- Python: 3.12.0
- OS: Ubuntu 24.04
- aipass: 2.1.69
validations:
required: true
- type: textarea
id: additional
attributes:
label: Additional Context
description: Anything else we should know? Screenshots, logs, related issues, etc.
+5
View File
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: Questions & Discussions
url: https://github.com/AIOSAI/AIPass/discussions
about: Ask questions, share ideas, and discuss AIPass here
@@ -0,0 +1,39 @@
name: Feature Request
description: Suggest a new feature or improvement
title: "[Feature]: "
labels: ["enhancement"]
body:
- type: markdown
attributes:
value: |
Thanks for suggesting a feature! Please fill out the sections below.
- type: textarea
id: problem
attributes:
label: Problem Statement
description: What problem does this feature solve? Why is it needed?
placeholder: "Currently there is no way to ..."
validations:
required: true
- type: textarea
id: solution
attributes:
label: Proposed Solution
description: How would you solve this? Describe your ideal implementation.
placeholder: "Add a new command / API / config option that ..."
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives Considered
description: What other approaches did you think about? Why were they ruled out?
- type: textarea
id: additional
attributes:
label: Additional Context
description: Examples, diagrams, mockups, links to similar features in other projects, etc.
+24
View File
@@ -0,0 +1,24 @@
version: 2
updates:
- package-ecosystem: "pip"
directory: "/"
schedule:
interval: "weekly"
labels:
- "dependencies"
open-pull-requests-limit: 5
commit-message:
prefix: "deps"
prefix-development: "deps"
include: "scope"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
labels:
- "ci"
open-pull-requests-limit: 5
commit-message:
prefix: "ci"
include: "scope"
+38 -15
View File
@@ -7,27 +7,50 @@ on:
branches: [main]
jobs:
test:
lint:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- run: pip install ruff
- run: ruff check src/ tests/
- run: ruff format --check src/ tests/
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
test:
needs: lint
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12", "3.13"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
- run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
- run: coverage run -m pytest -v --tb=short --rootdir=.
- run: coverage report --fail-under=70
- name: Lint
run: ruff check src/ tests/
- name: Test
run: pytest
coverage:
name: coverage
needs: [test]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- run: |
python -m pip install --upgrade pip
pip install -e ".[dev]"
- run: coverage run -m pytest --rootdir=.
- run: coverage xml
- uses: codecov/codecov-action@v4
with:
files: ./coverage.xml
fail_ci_if_error: false
+34
View File
@@ -0,0 +1,34 @@
name: Publish to PyPI
on:
push:
tags:
- "v*"
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- run: pip install build
- run: python -m build
- uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
publish:
needs: build
runs-on: ubuntu-latest
environment: release
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
name: dist
path: dist/
- uses: pypa/gh-action-pypi-publish@release/v1
+33
View File
@@ -0,0 +1,33 @@
name: Security Scan
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: "0 6 * * 1"
jobs:
dependency-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.13"
- run: pip install pip-audit
- run: pip install -e .
- name: Pip audit
run: pip-audit --skip-editable
codeql:
runs-on: ubuntu-latest
permissions:
security-events: write
steps:
- uses: actions/checkout@v4
- uses: github/codeql-action/init@v3
with:
languages: python
- uses: github/codeql-action/analyze@v3
+17
View File
@@ -0,0 +1,17 @@
name: Stale Issues
on:
schedule:
- cron: "0 0 * * 1"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v9
with:
stale-issue-message: "This issue has been inactive for 30 days. It will be closed in 7 days if no further activity occurs."
days-before-stale: 30
days-before-close: 7
stale-issue-label: "stale"
exempt-issue-labels: "pinned,security,high-priority"
+40 -6
View File
@@ -24,9 +24,8 @@ site/
.vscode/
*.swp
# AIPass global config (secrets live here)
.aipass/
!.aipass/aipass_global_prompt.md
# AIPass global config — ignore secrets, track prompts
.aipass/platform_keys.env
.archive
@@ -39,6 +38,15 @@ artifacts/
tools/
aipass_json/
# JSON — runtime data, constantly changing
*.json
# JSON exceptions — source templates and configs that ship with the package
!**/json_templates/**
!**/pack.json
!.claude/settings.json
!pyrightconfig.json
# Spawn templates MUST be tracked (agents need these files to build from)
!src/aipass/spawn/templates/**/.trinity/
!src/aipass/spawn/templates/**/.trinity/**
@@ -54,16 +62,42 @@ aipass_json/
!src/aipass/spawn/templates/**/tools/**
!src/aipass/spawn/templates/**/DASHBOARD.local.json
!src/aipass/spawn/templates/**/flow.local.md
!src/aipass/spawn/templates/**/.seed/
!src/aipass/spawn/templates/**/.seed/**
!src/aipass/spawn/templates/**/.standards/
!src/aipass/spawn/templates/**/.standards/**
!src/aipass/spawn/templates/**/.backup/
!src/aipass/spawn/templates/**/.backup/**
!src/aipass/spawn/templates/**/.ai_mail.local/
!src/aipass/spawn/templates/**/.ai_mail.local/**
!src/aipass/spawn/templates/**/.claude/
!src/aipass/spawn/templates/**/.claude/**
!src/aipass/spawn/templates/**/*.json
# Seedgo runtime artifacts (created by seedgo audit)
.seed/
.standards/
# AIPASS_REGISTRY.json — NOT ignored. Ships with core modules pre-registered.
# Runtime log files (created by prax logging)
**/logs
# Claude local settings (per-branch, not source code)
.claude/
# Claude — ignore runtime dirs, track config + hooks + sounds
.claude/file-history/
.claude/debug/
.claude/downloads/
.claude/ide/
.claude/paste-cache/
.claude/projects/
.claude/session-env/
.claude/shell-snapshots/
.claude/statsig/
.claude/tasks/
.claude/todos/
.claude/user_data/
.claude/.credentials.json
.claude/history.jsonl
.claude/hooks/__pycache__/
.claude/hooks/.last_diagnostics_file
.claude/hooks/.pre_compact_log
# setup-workspace.sh — tracked, needed for Docker build
-109
View File
@@ -1,109 +0,0 @@
{
"metadata": {
"version": "1.0.0",
"last_updated": "2026-03-06",
"total_branches": 10
},
"branches": [
{
"name": "AI_MAIL",
"path": "src/aipass/ai_mail",
"profile": "library",
"description": "Agent-to-agent messaging system",
"email": "@ai_mail",
"status": "active",
"created": "2026-03-05",
"last_active": "2026-03-05"
},
{
"name": "API",
"path": "src/aipass/api",
"profile": "library",
"description": "LLM access and model routing",
"email": "@api",
"status": "active",
"created": "2026-03-05",
"last_active": "2026-03-05"
},
{
"name": "CLI",
"path": "src/aipass/cli",
"profile": "library",
"description": "Display formatting with Rich",
"email": "@cli",
"status": "active",
"created": "2026-03-05",
"last_active": "2026-03-05"
},
{
"name": "DEVPULSE",
"path": "src/aipass/devpulse",
"profile": "library",
"description": "Orchestration hub for AIPass public repo. Manages dev notes, DPLANs, system status dashboards. The DEV_CENTRAL of AIPass.",
"email": "@devpulse",
"status": "active",
"created": "2026-03-06",
"last_active": "2026-03-06"
},
{
"name": "DRONE",
"path": "src/aipass/drone",
"profile": "library",
"description": "Command routing and module discovery",
"email": "@drone",
"status": "active",
"created": "2026-03-05",
"last_active": "2026-03-05"
},
{
"name": "FLOW",
"path": "src/aipass/flow",
"profile": "library",
"description": "Workflow planning and tracking",
"email": "@flow",
"status": "active",
"created": "2026-03-05",
"last_active": "2026-03-05"
},
{
"name": "PRAX",
"path": "src/aipass/prax",
"profile": "library",
"description": "Logging and monitoring",
"email": "@prax",
"status": "active",
"created": "2026-03-05",
"last_active": "2026-03-05"
},
{
"name": "SEEDGO",
"path": "src/aipass/seedgo",
"profile": "library",
"description": "Standards compliance through pluggable standard packs",
"email": "@seedgo",
"status": "active",
"created": "2026-03-05",
"last_active": "2026-03-05"
},
{
"name": "SPAWN",
"path": "src/aipass/spawn",
"profile": "library",
"description": "Agent creation from templates",
"email": "@spawn",
"status": "active",
"created": "2026-03-05",
"last_active": "2026-03-05"
},
{
"name": "TRIGGER",
"path": "src/aipass/trigger",
"profile": "library",
"description": "Error detection and auto-dispatch",
"email": "@trigger",
"status": "active",
"created": "2026-03-05",
"last_active": "2026-03-05"
}
]
}
-49
View File
@@ -1,49 +0,0 @@
{
"generated_at": "2026-03-06T20:20:39.989231+00:00",
"branches": {
"flow": {
"branch_name": "FLOW",
"branch_path": "/home/coder/workspace/src/aipass/flow",
"last_updated": "2026-03-06T20:20:39.988098+00:00",
"active_plans": [
{
"plan_id": "FPLAN-0002",
"subject": "",
"status": "open",
"created": "2026-03-06T20:20:39.986512+00:00",
"file_path": "/home/coder/workspace/src/aipass/flow/FPLAN-0002_2026-03-06.md",
"relative_path": "flow",
"branch": "flow"
}
],
"recently_closed": [],
"statistics": {
"active_count": 1,
"total_closed": 0,
"recently_closed_included": 0
}
}
},
"global_statistics": {
"total_active": 1,
"total_closed": 0,
"branches_reporting": 1
},
"active_plans": [
{
"plan_id": "FPLAN-0002",
"subject": "",
"status": "open",
"created": "2026-03-06T20:20:39.986512+00:00",
"file_path": "/home/coder/workspace/src/aipass/flow/FPLAN-0002_2026-03-06.md",
"relative_path": "flow",
"branch": "flow"
}
],
"recently_closed": [],
"statistics": {
"active_count": 1,
"total_closed": 0,
"recently_closed_included": 0
}
}
+3 -10
View File
@@ -20,18 +20,11 @@ RUN python3 -m venv /opt/venv \
&& chown -R 1000:1000 /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Startup script in /etc so it's NOT shadowed by /home/coder bind mount
RUN mkdir -p /etc/entrypoint.d
COPY setup-workspace.sh /etc/entrypoint.d/setup-workspace.sh
RUN chmod +x /etc/entrypoint.d/setup-workspace.sh
# Override ENTRYPOINTD to our non-shadowed location
ENV ENTRYPOINTD=/etc/entrypoint.d
# Empty workspace — clone your own repo after boot
RUN mkdir -p /home/coder/workspace && chown 1000:1000 /home/coder/workspace
USER 1000
ENV PATH="/opt/venv/bin:$PATH"
EXPOSE 8080
# Use the official entrypoint (already in the base image at /usr/bin/entrypoint.sh)
# It runs fixuid -> entrypoint.d scripts -> dumb-init code-server
ENTRYPOINT ["/usr/bin/entrypoint.sh", "--bind-addr", "0.0.0.0:8080", "--auth", "none", "/home/coder/workspace/AIPass"]
ENTRYPOINT ["/usr/bin/entrypoint.sh", "--bind-addr", "0.0.0.0:8080", "--auth", "none", "/home/coder/workspace"]
+4
View File
@@ -1,3 +1,7 @@
[![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-blue)](pyproject.toml)
[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
[![CI](https://github.com/AIOSAI/AIPass/actions/workflows/ci.yml/badge.svg)](https://github.com/AIOSAI/AIPass/actions/workflows/ci.yml)
# AIPass
> **Building in public.** This is an active development repo — not a finished product. Modules are being built, tested, and rewired in real time. Some things work, some things don't yet. Follow along, poke around, or fork it and experiment. Contributions welcome once we stabilize.
+16 -1
View File
@@ -44,6 +44,7 @@ dev = [
"pytest",
"pytest-cov",
"ruff",
"coverage",
]
[project.scripts]
@@ -54,7 +55,21 @@ seedgo = "aipass.seedgo.apps.seedgo:main"
packages = ["src/aipass"]
[tool.pytest.ini_options]
testpaths = ["tests"]
testpaths = ["tests", "src"]
norecursedirs = ["templates", "*.egg-info", ".git", ".venv", "__pycache__"]
[tool.coverage.run]
source = ["src/aipass"]
omit = ["*/tests/*", "*/templates/*"]
[tool.coverage.report]
show_missing = true
fail_under = 70
exclude_lines = [
"pragma: no cover",
"if __name__ == .__main__.",
"if TYPE_CHECKING:",
]
[tool.ruff]
line-length = 120
@@ -0,0 +1,14 @@
# AI_MAIL Branch-Local Context
<!-- Source: /home/aipass/aipass_business/AIPass/src/aipass/ai_mail/.aipass/branch_system_prompt.md -->
> Auto-created by aipass init. Customize for your branch.
## Status: NEEDS CONFIGURATION
This file is injected into every AI conversation when working from this branch directory. Configure it with:
- Who this branch is (role, purpose)
- Key commands and workflows
- Architecture overview
- Critical files and operational rules
- Integration points with other branches
-28
View File
@@ -1,28 +0,0 @@
{
"metadata": {
"version": "1.0.0",
"created": "2026-03-06T14:27:27.887566",
"description": "Standards bypass configuration for this branch"
},
"bypass": [],
"notes": {
"usage": "Add entries to 'bypass' list to exclude specific violations",
"example": {
"file": "apps/modules/logger.py",
"standard": "cli",
"lines": [
146,
177
],
"pattern": "if __name__ == '__main__'",
"reason": "Circular dependency - logger cannot import CLI"
},
"fields": {
"file": "Relative path from branch root (required)",
"standard": "Standard name: cli, imports, naming, etc. (required)",
"lines": "Optional - specific line numbers to bypass",
"pattern": "Optional - pattern to match (e.g. 'if __name__')",
"reason": "Required - why this bypass exists"
}
}
}
@@ -0,0 +1,14 @@
# API Branch-Local Context
<!-- Source: /home/aipass/aipass_business/AIPass/src/aipass/api/.aipass/branch_system_prompt.md -->
> Auto-created by aipass init. Customize for your branch.
## Status: NEEDS CONFIGURATION
This file is injected into every AI conversation when working from this branch directory. Configure it with:
- Who this branch is (role, purpose)
- Key commands and workflows
- Architecture overview
- Critical files and operational rules
- Integration points with other branches
-28
View File
@@ -1,28 +0,0 @@
{
"metadata": {
"version": "1.0.0",
"created": "2026-03-06T14:27:31.471013",
"description": "Standards bypass configuration for this branch"
},
"bypass": [],
"notes": {
"usage": "Add entries to 'bypass' list to exclude specific violations",
"example": {
"file": "apps/modules/logger.py",
"standard": "cli",
"lines": [
146,
177
],
"pattern": "if __name__ == '__main__'",
"reason": "Circular dependency - logger cannot import CLI"
},
"fields": {
"file": "Relative path from branch root (required)",
"standard": "Standard name: cli, imports, naming, etc. (required)",
"lines": "Optional - specific line numbers to bypass",
"pattern": "Optional - pattern to match (e.g. 'if __name__')",
"reason": "Required - why this bypass exists"
}
}
}
-9
View File
@@ -1,9 +0,0 @@
{
"module_name": "api",
"version": "1.0.0",
"timestamp": "2025-11-13",
"config": {
"auto_save": true,
"enabled": true
}
}
-8
View File
@@ -1,8 +0,0 @@
{
"module_name": "api",
"created": "2025-11-13",
"last_updated": "2025-11-13",
"operations_total": 0,
"operations_successful": 0,
"operations_failed": 0
}
@@ -1,9 +0,0 @@
{
"module_name": "api_key",
"version": "1.0.0",
"timestamp": "2025-11-13",
"config": {
"auto_save": true,
"enabled": true
}
}
@@ -1,8 +0,0 @@
{
"module_name": "api_key",
"created": "2025-11-13",
"last_updated": "2025-11-13",
"operations_total": 0,
"operations_successful": 0,
"operations_failed": 0
}
-16
View File
@@ -1,16 +0,0 @@
[
{
"timestamp": "2026-03-06T19:26:31.512349",
"operation": "api_key_get-key",
"data": {
"command": "get-key"
}
},
{
"timestamp": "2026-03-06T19:26:38.756413",
"operation": "api_key_validate",
"data": {
"command": "validate"
}
}
]
-55
View File
@@ -1,55 +0,0 @@
[
{
"timestamp": "2026-03-06T19:25:27.817286",
"operation": "api_help_displayed",
"data": {
"trigger": "--help"
}
},
{
"timestamp": "2026-03-06T19:25:57.579810",
"operation": "api_command_attempted",
"data": {
"command": "test",
"modules_discovered": 4
}
},
{
"timestamp": "2026-03-06T19:26:31.498902",
"operation": "api_command_attempted",
"data": {
"command": "get-key",
"modules_discovered": 4
}
},
{
"timestamp": "2026-03-06T19:26:38.745089",
"operation": "api_command_attempted",
"data": {
"command": "validate",
"modules_discovered": 4
}
},
{
"timestamp": "2026-03-06T19:26:41.953458",
"operation": "api_command_attempted",
"data": {
"command": "stats",
"modules_discovered": 4
}
},
{
"timestamp": "2026-03-06T20:37:07.497952",
"operation": "api_help_displayed",
"data": {
"trigger": "--help"
}
},
{
"timestamp": "2026-03-06T20:38:04.859299",
"operation": "api_help_displayed",
"data": {
"trigger": "--help"
}
}
]
@@ -1,9 +0,0 @@
{
"module_name": "usage_tracker",
"version": "1.0.0",
"timestamp": "2025-11-13",
"config": {
"auto_save": true,
"enabled": true
}
}
@@ -1,8 +0,0 @@
{
"module_name": "usage_tracker",
"created": "2025-11-13",
"last_updated": "2025-11-13",
"operations_total": 0,
"operations_successful": 0,
"operations_failed": 0
}
@@ -1,9 +0,0 @@
[
{
"timestamp": "2026-03-06T19:26:41.965942",
"operation": "usage_stats",
"data": {
"command": "stats"
}
}
]
@@ -0,0 +1,14 @@
# CLI Branch-Local Context
<!-- Source: /home/aipass/aipass_business/AIPass/src/aipass/cli/.aipass/branch_system_prompt.md -->
> Auto-created by aipass init. Customize for your branch.
## Status: NEEDS CONFIGURATION
This file is injected into every AI conversation when working from this branch directory. Configure it with:
- Who this branch is (role, purpose)
- Key commands and workflows
- Architecture overview
- Critical files and operational rules
- Integration points with other branches
-28
View File
@@ -1,28 +0,0 @@
{
"metadata": {
"version": "1.0.0",
"created": "2026-03-06T14:27:34.810230",
"description": "Standards bypass configuration for this branch"
},
"bypass": [],
"notes": {
"usage": "Add entries to 'bypass' list to exclude specific violations",
"example": {
"file": "apps/modules/logger.py",
"standard": "cli",
"lines": [
146,
177
],
"pattern": "if __name__ == '__main__'",
"reason": "Circular dependency - logger cannot import CLI"
},
"fields": {
"file": "Relative path from branch root (required)",
"standard": "Standard name: cli, imports, naming, etc. (required)",
"lines": "Optional - specific line numbers to bypass",
"pattern": "Optional - pattern to match (e.g. 'if __name__')",
"reason": "Required - why this bypass exists"
}
}
}
@@ -0,0 +1,61 @@
# DEVPULSE Branch-Local Context
You are DEVPULSE — the orchestration hub for the AIPass public repo.
## What You Are
You are to AIPass what DEV_CENTRAL is to Dev-Pass. You coordinate, plan, delegate, and track. You don't build modules yourself — you dispatch work to branch agents and monitor results.
**Your role:**
- System-wide planning and coordination for AIPass repo
- Cross-branch task delegation via email + agents
- Dev notes management (dev.local.md per branch)
- Dashboard and system status tracking
- Architecture discussions with Patrick
## Key Context
- **AIPass repo:** `/home/aipass/aipass_business/AIPass/` (or `/app` in Docker)
- **Your directory:** `src/aipass/devpulse/`
- **Registry:** `AIPASS_REGISTRY.json` at repo root
- **10 modules:** drone, seedgo, prax, cli, flow, ai_mail, api, trigger, spawn, devpulse (you)
## Commands
```
drone systems # List all registered modules
drone @seedgo verify # Verify standards packs
drone @seedgo audit aipass # Run standards audit
drone @module --help # Module help
```
## Your Workflow
1. Check your memories (.trinity/local.json, observations.json)
2. Check system status (drone systems, seedgo verify)
3. Review what needs building (MPLAN-001 tracks all module status)
4. Dispatch work to branches or build directly if small
5. Update memories after every session
## Architecture
All modules follow 3-layer pattern:
```
apps/
branch.py # Entry point
modules/ # Business logic
handlers/ # Implementation
```
Imports use pip namespace: `from aipass.{module}.apps.modules...`
## Critical Rules
- Imports must use `from aipass.{module}...` — never bare module imports
- No hardcoded paths to `/home/aipass/` — use `Path(__file__).parents[N]` or registry
- Test in Docker container for true isolation verification
- `drone` and `seedgo` are CLI entry points defined in pyproject.toml
## Current State
Fresh spawn. All modules are in "building" status — imports rewired but functionality not fully tested. Docker container at localhost:8080 is your testing ground.
@@ -0,0 +1,61 @@
# DEVPULSE Branch-Local Context
You are DEVPULSE — the orchestration hub for the AIPass public repo.
## What You Are
You are to AIPass what DEV_CENTRAL is to Dev-Pass. You coordinate, plan, delegate, and track. You don't build modules yourself — you dispatch work to branch agents and monitor results.
**Your role:**
- System-wide planning and coordination for AIPass repo
- Cross-branch task delegation via email + agents
- Dev notes management (dev.local.md per branch)
- Dashboard and system status tracking
- Architecture discussions with Patrick
## Key Context
- **AIPass repo:** `/home/aipass/aipass_business/AIPass/` (or `/app` in Docker)
- **Your directory:** `src/aipass/devpulse/`
- **Registry:** `AIPASS_REGISTRY.json` at repo root
- **10 modules:** drone, seedgo, prax, cli, flow, ai_mail, api, trigger, spawn, devpulse (you)
## Commands
```
drone systems # List all registered modules
drone @seedgo verify # Verify standards packs
drone @seedgo audit aipass # Run standards audit
drone @module --help # Module help
```
## Your Workflow
1. Check your memories (.trinity/local.json, observations.json)
2. Check system status (drone systems, seedgo verify)
3. Review what needs building (MPLAN-001 tracks all module status)
4. Dispatch work to branches or build directly if small
5. Update memories after every session
## Architecture
All modules follow 3-layer pattern:
```
apps/
branch.py # Entry point
modules/ # Business logic
handlers/ # Implementation
```
Imports use pip namespace: `from aipass.{module}.apps.modules...`
## Critical Rules
- Imports must use `from aipass.{module}...` — never bare module imports
- No hardcoded paths to `/home/aipass/` — use `Path(__file__).parents[N]` or registry
- Test in Docker container for true isolation verification
- `drone` and `seedgo` are CLI entry points defined in pyproject.toml
## Current State
Fresh spawn. All modules are in "building" status — imports rewired but functionality not fully tested. Docker container at localhost:8080 is your testing ground.
@@ -0,0 +1,14 @@
# DRONE Branch-Local Context
<!-- Source: /home/aipass/aipass_business/AIPass/src/aipass/drone/.aipass/branch_system_prompt.md -->
> Auto-created by aipass init. Customize for your branch.
## Status: NEEDS CONFIGURATION
This file is injected into every AI conversation when working from this branch directory. Configure it with:
- Who this branch is (role, purpose)
- Key commands and workflows
- Architecture overview
- Critical files and operational rules
- Integration points with other branches
-28
View File
@@ -1,28 +0,0 @@
{
"metadata": {
"version": "1.0.0",
"created": "2026-03-06T14:27:37.777414",
"description": "Standards bypass configuration for this branch"
},
"bypass": [],
"notes": {
"usage": "Add entries to 'bypass' list to exclude specific violations",
"example": {
"file": "apps/modules/logger.py",
"standard": "cli",
"lines": [
146,
177
],
"pattern": "if __name__ == '__main__'",
"reason": "Circular dependency - logger cannot import CLI"
},
"fields": {
"file": "Relative path from branch root (required)",
"standard": "Standard name: cli, imports, naming, etc. (required)",
"lines": "Optional - specific line numbers to bypass",
"pattern": "Optional - pattern to match (e.g. 'if __name__')",
"reason": "Required - why this bypass exists"
}
}
}
@@ -0,0 +1,14 @@
# FLOW Branch-Local Context
<!-- Source: /home/aipass/aipass_business/AIPass/src/aipass/flow/.aipass/branch_system_prompt.md -->
> Auto-created by aipass init. Customize for your branch.
## Status: NEEDS CONFIGURATION
This file is injected into every AI conversation when working from this branch directory. Configure it with:
- Who this branch is (role, purpose)
- Key commands and workflows
- Architecture overview
- Critical files and operational rules
- Integration points with other branches
-28
View File
@@ -1,28 +0,0 @@
{
"metadata": {
"version": "1.0.0",
"created": "2026-03-06T14:27:39.378089",
"description": "Standards bypass configuration for this branch"
},
"bypass": [],
"notes": {
"usage": "Add entries to 'bypass' list to exclude specific violations",
"example": {
"file": "apps/modules/logger.py",
"standard": "cli",
"lines": [
146,
177
],
"pattern": "if __name__ == '__main__'",
"reason": "Circular dependency - logger cannot import CLI"
},
"fields": {
"file": "Relative path from branch root (required)",
"standard": "Standard name: cli, imports, naming, etc. (required)",
"lines": "Optional - specific line numbers to bypass",
"pattern": "Optional - pattern to match (e.g. 'if __name__')",
"reason": "Required - why this bypass exists"
}
}
}
@@ -1,9 +0,0 @@
{
"module_name": "close_plan",
"version": "1.0.0",
"timestamp": "2025-11-13",
"config": {
"auto_save": true,
"enabled": true
}
}
@@ -1,8 +0,0 @@
{
"module_name": "close_plan",
"created": "2025-11-13",
"last_updated": "2025-11-13",
"operations_total": 0,
"operations_successful": 0,
"operations_failed": 0
}
@@ -1,23 +0,0 @@
[
{
"timestamp": "2026-03-06T19:26:52.582808",
"operation": "plan_closed",
"data": {
"command": "close",
"args": [
"FPLAN-0001",
"--yes"
]
}
},
{
"timestamp": "2026-03-06T20:21:02.790344",
"operation": "plan_closed",
"data": {
"command": "close",
"args": [
"0002"
]
}
}
]
@@ -1,9 +0,0 @@
{
"module_name": "create_plan",
"version": "1.0.0",
"timestamp": "2025-11-13",
"config": {
"auto_save": true,
"enabled": true
}
}
@@ -1,8 +0,0 @@
{
"module_name": "create_plan",
"created": "2025-11-13",
"last_updated": "2025-11-13",
"operations_total": 0,
"operations_successful": 0,
"operations_failed": 0
}
@@ -1,21 +0,0 @@
[
{
"timestamp": "2026-03-06T19:26:45.708820",
"operation": "plan_created",
"data": {
"command": "create",
"args": [
"/tmp",
"Test plan from devpulse"
]
}
},
{
"timestamp": "2026-03-06T20:20:39.984820",
"operation": "plan_created",
"data": {
"command": "create",
"args": []
}
}
]
@@ -1,5 +0,0 @@
{
"plans": {},
"next_number": 3,
"last_updated": "2026-03-06T20:21:02.795560+00:00"
}
@@ -1,9 +0,0 @@
{
"module_name": "list_plans",
"version": "1.0.0",
"timestamp": "2025-11-13",
"config": {
"auto_save": true,
"enabled": true
}
}
@@ -1,8 +0,0 @@
{
"module_name": "list_plans",
"created": "2025-11-13",
"last_updated": "2025-11-13",
"operations_total": 0,
"operations_successful": 0,
"operations_failed": 0
}
@@ -1,18 +0,0 @@
[
{
"timestamp": "2026-03-06T19:25:53.833365",
"operation": "plans_listed",
"data": {
"command": "list",
"args": []
}
},
{
"timestamp": "2026-03-06T19:26:49.120795",
"operation": "plans_listed",
"data": {
"command": "list",
"args": []
}
}
]
@@ -0,0 +1,14 @@
# PRAX Branch-Local Context
<!-- Source: /home/aipass/aipass_business/AIPass/src/aipass/prax/.aipass/branch_system_prompt.md -->
> Auto-created by aipass init. Customize for your branch.
## Status: NEEDS CONFIGURATION
This file is injected into every AI conversation when working from this branch directory. Configure it with:
- Who this branch is (role, purpose)
- Key commands and workflows
- Architecture overview
- Critical files and operational rules
- Integration points with other branches
-28
View File
@@ -1,28 +0,0 @@
{
"metadata": {
"version": "1.0.0",
"created": "2026-03-06T14:27:42.646499",
"description": "Standards bypass configuration for this branch"
},
"bypass": [],
"notes": {
"usage": "Add entries to 'bypass' list to exclude specific violations",
"example": {
"file": "apps/modules/logger.py",
"standard": "cli",
"lines": [
146,
177
],
"pattern": "if __name__ == '__main__'",
"reason": "Circular dependency - logger cannot import CLI"
},
"fields": {
"file": "Relative path from branch root (required)",
"standard": "Standard name: cli, imports, naming, etc. (required)",
"lines": "Optional - specific line numbers to bypass",
"pattern": "Optional - pattern to match (e.g. 'if __name__')",
"reason": "Required - why this bypass exists"
}
}
}
@@ -0,0 +1,14 @@
# SEEDGO Branch-Local Context
<!-- Source: /home/aipass/aipass_business/AIPass/src/aipass/seedgo/.aipass/branch_system_prompt.md -->
> Auto-created by aipass init. Customize for your branch.
## Status: NEEDS CONFIGURATION
This file is injected into every AI conversation when working from this branch directory. Configure it with:
- Who this branch is (role, purpose)
- Key commands and workflows
- Architecture overview
- Critical files and operational rules
- Integration points with other branches
-28
View File
@@ -1,28 +0,0 @@
{
"metadata": {
"version": "1.0.0",
"created": "2026-03-06T14:27:46.561948",
"description": "Standards bypass configuration for this branch"
},
"bypass": [],
"notes": {
"usage": "Add entries to 'bypass' list to exclude specific violations",
"example": {
"file": "apps/modules/logger.py",
"standard": "cli",
"lines": [
146,
177
],
"pattern": "if __name__ == '__main__'",
"reason": "Circular dependency - logger cannot import CLI"
},
"fields": {
"file": "Relative path from branch root (required)",
"standard": "Standard name: cli, imports, naming, etc. (required)",
"lines": "Optional - specific line numbers to bypass",
"pattern": "Optional - pattern to match (e.g. 'if __name__')",
"reason": "Required - why this bypass exists"
}
}
}
@@ -0,0 +1,14 @@
# TRIGGER Branch-Local Context
<!-- Source: /home/aipass/aipass_business/AIPass/src/aipass/trigger/.aipass/branch_system_prompt.md -->
> Auto-created by aipass init. Customize for your branch.
## Status: NEEDS CONFIGURATION
This file is injected into every AI conversation when working from this branch directory. Configure it with:
- Who this branch is (role, purpose)
- Key commands and workflows
- Architecture overview
- Critical files and operational rules
- Integration points with other branches
-28
View File
@@ -1,28 +0,0 @@
{
"metadata": {
"version": "1.0.0",
"created": "2026-03-06T14:27:53.459073",
"description": "Standards bypass configuration for this branch"
},
"bypass": [],
"notes": {
"usage": "Add entries to 'bypass' list to exclude specific violations",
"example": {
"file": "apps/modules/logger.py",
"standard": "cli",
"lines": [
146,
177
],
"pattern": "if __name__ == '__main__'",
"reason": "Circular dependency - logger cannot import CLI"
},
"fields": {
"file": "Relative path from branch root (required)",
"standard": "Standard name: cli, imports, naming, etc. (required)",
"lines": "Optional - specific line numbers to bypass",
"pattern": "Optional - pattern to match (e.g. 'if __name__')",
"reason": "Required - why this bypass exists"
}
}
}
@@ -1,16 +0,0 @@
{
"error_catchup": {
"last_scan_timestamp": "2026-03-06T14:27:27.869613",
"processed_hashes": [
"ace01637",
"69de737b",
"c7edc03b",
"4095ef97",
"68dd0ab6",
"541e0b9b",
"02d93909"
],
"max_hashes": 500,
"max_lookback_hours": 24
}
}
View File