feat: add comprehensive documentation for AI Workspace, including architecture, memory model, profiles, services, and security guidelines
This commit is contained in:
456
README.md
456
README.md
@@ -1,368 +1,200 @@
|
||||
# AI Workspace - Fidelity Profile
|
||||
# AI Workspace
|
||||
|
||||
Reusable AI-native companion workspace with Fidelity configured as the first real project profile.
|
||||
AI Workspace is a local, profile-based companion workspace for AI-assisted professional work. It keeps project memory, raw evidence, local services, and AI client integrations organized so agents can work from current, auditable context instead of chat history alone.
|
||||
|
||||
This repository is not the product codebase. It is an operational context layer used to keep project state current, capture communication evidence, prepare standups, draft clear stakeholder updates, and generate self-contained prompts for another AI that has access to the implementation codebase.
|
||||
The first real profile in this repository is `fidelity`, but the reusable model is intentionally project-independent.
|
||||
|
||||
The reusable logic lives in `core/`. The clean project second brain lives in `project-knowledge/`. Agent operating memory lives in `agent-memory/`. Fidelity-specific setup lives in the active profile under `profiles/fidelity/`.
|
||||
## What This Repo Is
|
||||
|
||||
Shared cross-platform workflow/rule content lives in `.agents/`. OpenCode reads that content through `.opencode/` compatibility paths, and Gemini-compatible entry context starts at `GEMINI.md`.
|
||||
Use this repository beside your real implementation work to:
|
||||
|
||||
---
|
||||
- maintain human-readable project memory;
|
||||
- capture communication or screenshot evidence before curation;
|
||||
- generate standups, stakeholder updates, and AI-to-AI prompts;
|
||||
- expose bounded local context to AI clients through MCP;
|
||||
- manage local services such as capture tools, context servers, and inbox helpers;
|
||||
- support long-running AI workflows with durable state artifacts.
|
||||
|
||||
## Purpose
|
||||
This repository is not the product codebase. It is a context and workflow layer.
|
||||
|
||||
- Provide a reusable file-based AI workspace pattern
|
||||
- Keep Fidelity context current outside the main development machine
|
||||
- Turn fragmented daily work into reusable AI-ready context
|
||||
- Support standups, manager updates, Jira notes, and debugging summaries
|
||||
- Generate high-quality prompts for GitHub Copilot or another AI on the Fidelity development machine
|
||||
- Improve communication quality without losing technical accuracy
|
||||
## Architecture At A Glance
|
||||
|
||||
---
|
||||
|
||||
## Operating Model
|
||||
|
||||
You work on Fidelity from a different machine.
|
||||
|
||||
This workspace is used to:
|
||||
|
||||
- record what happened during implementation and debugging
|
||||
- sync relevant communication from Mattermost
|
||||
- preserve current project context between sessions
|
||||
- draft messages for the current manager or stakeholder with the right tone and scope
|
||||
- translate rough notes into concise native-sounding English
|
||||
- generate self-contained prompts for another AI that does have access to the product codebase
|
||||
```text
|
||||
Communication / photos / archives / manual notes
|
||||
↓
|
||||
Raw profile inbox evidence
|
||||
↓
|
||||
Human or agent curation
|
||||
↓
|
||||
Canonical Markdown project knowledge
|
||||
↓
|
||||
Derived local index
|
||||
↓
|
||||
Read-only MCP context server
|
||||
↓
|
||||
OpenCode / Claude Code / Copilot / Antigravity / other AI clients
|
||||
```
|
||||
|
||||
Core principle:
|
||||
|
||||
Context must be updated before asking AI to write.
|
||||
```text
|
||||
Markdown project knowledge is canonical. Inboxes, indexes, chat memory, and cloud memory are supporting layers.
|
||||
```
|
||||
|
||||
Reusable principle:
|
||||
## Main Folders
|
||||
|
||||
Integrations extract evidence. The agent promotes memory.
|
||||
| Path | Purpose |
|
||||
|---|---|
|
||||
| `docs/` | Simple project-independent documentation for developers adopting the workspace |
|
||||
| `core/` | Reusable operating model and architecture notes |
|
||||
| `profiles/` | Project-specific configuration and assumptions |
|
||||
| `project-knowledge/` | Current canonical Markdown vault for the active Fidelity profile; future profiles should use explicit profile paths |
|
||||
| `agent-memory/` | Agent behavior, promotion, verification, and workflow memory |
|
||||
| `ai/inbox/` | Raw evidence before promotion into canonical memory |
|
||||
| `scripts/aiw/` | Service manager and local indexer |
|
||||
| `scripts/mcp/` | MCP servers exposing bounded local context |
|
||||
| `scripts/memory/` | Project-agnostic interface for canonical memory operations |
|
||||
| `scripts/obsidian/` | Current Obsidian adapter |
|
||||
| `scripts/mattermost-proxy/` | Mattermost proxy mirror connector for local evidence capture |
|
||||
| `scripts/iphone-photo-inbox/` | Local photo inbox receiver |
|
||||
| `apps/mac/AIWorkspace/` | macOS menu bar app for service visibility and control |
|
||||
|
||||
---
|
||||
## Quick Start
|
||||
|
||||
## Reusable Architecture
|
||||
Run basic checks for the active profile:
|
||||
|
||||
### /project-knowledge
|
||||
```bash
|
||||
python3 scripts/aiw/services.py doctor --profile fidelity
|
||||
python3 scripts/aiw/services.py status --profile fidelity
|
||||
python3 scripts/aiw/indexer.py build --profile fidelity
|
||||
```
|
||||
|
||||
Canonical Obsidian second brain and transferable project knowledge.
|
||||
Start the read-only context MCP server:
|
||||
|
||||
- `00-start/` -> onboarding, glossary, and start-here
|
||||
- `01-current/` -> current work and active work-item summary
|
||||
- `02-work-items/` -> ticket/task notes with metadata properties
|
||||
- `03-context/` -> systems, workstreams, project-facing process, and iOS context
|
||||
- `04-people/` -> people, roles, and collaboration context
|
||||
- `05-decisions/` -> durable decisions
|
||||
- `06-daily/` -> daily notes
|
||||
- `07-maps/` -> graph hubs and semantic maps
|
||||
- `08-bases/` -> Obsidian Bases
|
||||
- `09-templates/` -> Obsidian templates
|
||||
- `attachments/` -> vault assets
|
||||
```bash
|
||||
python3 scripts/aiw/services.py start aiw-context-mcp --profile fidelity
|
||||
```
|
||||
|
||||
### /agent-memory
|
||||
HTTP endpoint:
|
||||
|
||||
Agent operating memory.
|
||||
```text
|
||||
http://127.0.0.1:8765/mcp
|
||||
```
|
||||
|
||||
- `behavior/` -> agent learning and self-maintenance rules
|
||||
- `memory/` -> promotion, correction, and context-maintenance rules
|
||||
- `integrations/` -> memory interface, Obsidian adapter, communication sources, and technical verification
|
||||
- `workflows/` -> AI-to-AI prompting and workspace behavior model
|
||||
- `maps/` -> agent-side navigation maps
|
||||
Health endpoint:
|
||||
|
||||
### /.agents
|
||||
```text
|
||||
http://127.0.0.1:8765/health
|
||||
```
|
||||
|
||||
Shared cross-platform workflow and rule source.
|
||||
## Documentation
|
||||
|
||||
- `workflows/` -> reusable workflow definitions used by OpenCode-compatible commands and Antigravity-compatible workflow views
|
||||
- `rules/` -> reusable skill/rule content
|
||||
- `skills/` -> skill-path compatibility layer pointing at `rules/`
|
||||
Start here:
|
||||
|
||||
### /.opencode
|
||||
- [Getting Started](docs/getting-started.md)
|
||||
- [Architecture](docs/architecture.md)
|
||||
- [Profiles](docs/profiles.md)
|
||||
- [Memory Model](docs/memory-model.md)
|
||||
- [MCP](docs/mcp.md)
|
||||
- [Services](docs/services.md)
|
||||
- [Local RAG Index](docs/local-rag-index.md)
|
||||
- [Security and Privacy](docs/security-and-privacy.md)
|
||||
|
||||
OpenCode runtime surface.
|
||||
Profile-specific project knowledge starts at:
|
||||
|
||||
- `commands/` -> OpenCode slash commands, currently linked to `.agents/workflows/`
|
||||
- `skills/` -> OpenCode skills, currently linked to shared `.agents/` content
|
||||
- `agents/` -> OpenCode agent definitions
|
||||
- `plugins/` -> OpenCode-specific plugins
|
||||
- `project-knowledge/00-start/start-here.md` for the current Fidelity vault
|
||||
- `profiles/fidelity/profile.md` for the Fidelity profile declaration
|
||||
- `profiles/example/profile.md` for a sanitized reusable profile example
|
||||
|
||||
### /core
|
||||
## Profiles
|
||||
|
||||
Project-independent workspace logic.
|
||||
A profile represents one project, client, team, or workflow. It declares project assumptions, context sources, local services, and workflow defaults.
|
||||
|
||||
- `README.md` -> reusable operating model
|
||||
- `memory/operational-memory.md` -> reusable memory classes, promotion rules, correction rules, self-maintenance rules
|
||||
- `integrations/communication-model.md` -> live communication and historical archive connector contract
|
||||
- `profiles/create-project-profile.md` -> checklist for adapting the workspace to another project
|
||||
Current profiles:
|
||||
|
||||
### /profiles
|
||||
```text
|
||||
profiles/fidelity/
|
||||
profiles/example/
|
||||
```
|
||||
|
||||
Project-specific configuration.
|
||||
The current Fidelity profile still uses root-level `project-knowledge/` and `ai/inbox/` for compatibility. The target reusable shape is to resolve memory and inbox paths from profile configuration so future projects can keep isolated data under profile/workspace-specific directories.
|
||||
|
||||
- `profiles/fidelity/` -> active Fidelity implementation profile
|
||||
- `profiles/example/` -> non-sensitive example profile for new projects
|
||||
## Memory Model
|
||||
|
||||
Profiles declare project assumptions, communication sources, work-item system, stakeholders, enabled commands, and enabled skills.
|
||||
The workspace separates memory by responsibility:
|
||||
|
||||
---
|
||||
- `project-knowledge/`: canonical project facts for humans and AI;
|
||||
- `ai/inbox/`: raw evidence;
|
||||
- `agent-memory/`: rules for how agents behave;
|
||||
- `.aiw/indexes/`: derived local search indexes;
|
||||
- external systems such as mem9: optional agent recall, not project truth.
|
||||
|
||||
## Project Scope
|
||||
Do not treat generated connector output or vector indexes as authoritative memory. Promote durable facts into the smallest correct Markdown file.
|
||||
|
||||
Fidelity iOS ecosystem:
|
||||
## MCP Model
|
||||
|
||||
- Fid4
|
||||
- XFlowSDK
|
||||
- FTFrameworks
|
||||
- REST migration replacing GraphQL over time
|
||||
- Discourse and AO issues that require careful classification
|
||||
`aiw-context-mcp` exposes profile-bounded, read-only context through MCP tools and resources. It does not capture traffic, send messages, or promote memory.
|
||||
|
||||
---
|
||||
Current examples:
|
||||
|
||||
## Runtime Structure
|
||||
- `project_current_context`
|
||||
- `project_search_memory`
|
||||
- `memory_hybrid_search`
|
||||
- `communication_latest`
|
||||
- `communication_standup_context`
|
||||
- `photos_latest`
|
||||
|
||||
### /ai
|
||||
## Service Manager
|
||||
|
||||
Runtime inbox for communication evidence.
|
||||
The service manager provides a single local lifecycle surface:
|
||||
|
||||
- `inbox/` -> communication evidence and transient inbox files before promotion into `project-knowledge/`
|
||||
```bash
|
||||
python3 scripts/aiw/services.py start --profile fidelity
|
||||
python3 scripts/aiw/services.py stop --profile fidelity
|
||||
python3 scripts/aiw/services.py status --profile fidelity --json
|
||||
python3 scripts/aiw/services.py logs aiw-context-mcp --profile fidelity
|
||||
```
|
||||
|
||||
### /prompts
|
||||
Runtime logs, PID files, and state live under `.aiw/runtime/` and are ignored.
|
||||
|
||||
Reusable prompts for:
|
||||
## Local Index
|
||||
|
||||
- standups
|
||||
- Mattermost updates
|
||||
- manager communication
|
||||
- issue clarification
|
||||
Build a derived search index over canonical Markdown:
|
||||
|
||||
### /workflows
|
||||
```bash
|
||||
python3 scripts/aiw/indexer.py build --profile fidelity
|
||||
python3 scripts/aiw/indexer.py search "dismissal lifecycle" --profile fidelity
|
||||
```
|
||||
|
||||
Repeatable working guides for:
|
||||
Indexes live under `.aiw/indexes/` and are ignored because they are rebuildable local artifacts.
|
||||
|
||||
- daily context sync
|
||||
- flow debugging
|
||||
- external issue analysis
|
||||
## Security Defaults
|
||||
|
||||
### /scripts
|
||||
- Keep secrets in ignored `.env` files.
|
||||
- Do not commit raw tokens, cookies, session IDs, or captured headers.
|
||||
- Keep MCP read-only by default.
|
||||
- Treat inboxes and generated indexes as sensitive local artifacts.
|
||||
- Use cloud memory systems only with an explicit data policy.
|
||||
|
||||
Helpers for automation around memory access, context generation, communication drafting, and imports.
|
||||
## Tests
|
||||
|
||||
- `scripts/aiw/` -> local AI Workspace service manager for profile services such as the Mattermost proxy mirror, Photo Inbox, and context MCP
|
||||
- `scripts/mcp/` -> local MCP servers that expose bounded read-only workspace context to AI clients
|
||||
- `scripts/memory/` -> project-agnostic interface for canonical memory
|
||||
- `scripts/obsidian/` -> current Obsidian adapter and URI helpers
|
||||
- `scripts/mattermost/` -> live communication connector
|
||||
- `scripts/slack/` -> historical archive importer
|
||||
```bash
|
||||
python3 scripts/aiw/test_services.py
|
||||
python3 scripts/aiw/test_indexer.py
|
||||
python3 scripts/mcp/aiw-context-mcp/test_server.py
|
||||
python3 scripts/iphone-photo-inbox/test_receiver.py
|
||||
```
|
||||
|
||||
### /project-knowledge/.obsidian
|
||||
## Adoption Strategy
|
||||
|
||||
Optional Obsidian vault configuration.
|
||||
Recommended order for new projects:
|
||||
|
||||
Open `project-knowledge/` as the Obsidian vault. Do not open the repository root as the vault.
|
||||
1. Copy `profiles/example/` to a new profile.
|
||||
2. Create or point to a project knowledge vault.
|
||||
3. Configure only the services the project needs.
|
||||
4. Keep raw evidence outside canonical memory.
|
||||
5. Build the local index.
|
||||
6. Connect AI clients through MCP.
|
||||
7. Promote durable facts into Markdown as work progresses.
|
||||
|
||||
Portable vault configuration can be versioned, while local layout and plugin runtime files are ignored.
|
||||
|
||||
Obsidian is the current visual interface over canonical memory. The reusable memory access layer is `scripts/memory/`, so the workspace can later swap Obsidian for another Markdown knowledge tool without changing the memory model.
|
||||
|
||||
---
|
||||
|
||||
## Daily Usage
|
||||
|
||||
### Start of day
|
||||
|
||||
Read:
|
||||
|
||||
- `project-knowledge/00-start/start-here.md`
|
||||
- `project-knowledge/01-current/current-work.md`
|
||||
- `project-knowledge/01-current/work-items.md`
|
||||
- `project-knowledge/03-context/project.md`
|
||||
- `project-knowledge/04-people/manager.md`
|
||||
- `project-knowledge/04-people/index.md`
|
||||
- latest file under `project-knowledge/06-daily/`
|
||||
|
||||
### During the day
|
||||
|
||||
Capture:
|
||||
|
||||
- implementation progress from the main development machine
|
||||
- Mattermost conversations that change scope or priorities
|
||||
- debugging findings
|
||||
- open questions, blockers, and follow-ups
|
||||
|
||||
Write updates in:
|
||||
|
||||
- `project-knowledge/06-daily/YYYY-MM-DD.md`
|
||||
|
||||
### Before sending a message
|
||||
|
||||
Confirm:
|
||||
|
||||
- context
|
||||
- current observation
|
||||
- requested or implied action
|
||||
- whether the issue is external behavior or regression
|
||||
- whether the flow is authenticated or non-authenticated
|
||||
|
||||
### End of day
|
||||
|
||||
Update:
|
||||
|
||||
- today log
|
||||
- current state
|
||||
- next communication needs for the current manager or stakeholder
|
||||
|
||||
---
|
||||
|
||||
## Expected Output
|
||||
|
||||
This workspace should help produce:
|
||||
|
||||
- high-signal standups
|
||||
- clearer Mattermost updates
|
||||
- concise supervisor communication
|
||||
- better issue framing
|
||||
- more reliable AI-generated English
|
||||
|
||||
---
|
||||
|
||||
## OpenCode Entry Point
|
||||
|
||||
This workspace is designed to work well with the OpenCode VS Code extension.
|
||||
|
||||
Recommended usage:
|
||||
|
||||
1. Open this repository as its own VS Code workspace.
|
||||
2. Start OpenCode from the integrated terminal at the repository root.
|
||||
3. Begin each session with `/workspace-context` or the Fidelity alias `/fidelity-context`.
|
||||
4. As new information appears during the day, update context before asking for drafting help.
|
||||
|
||||
Project commands live under `.opencode/commands/` and are intended to:
|
||||
|
||||
- load the reusable core plus active project profile
|
||||
- sync live communication context into the workspace inbox
|
||||
- draft standups
|
||||
- draft manager updates
|
||||
- draft prompts for another AI on the implementation machine
|
||||
- force-refresh and inspect latest communication messages
|
||||
- convert rough notes into daily log updates
|
||||
|
||||
This keeps AI output tied to the latest workspace state instead of relying on chat memory alone.
|
||||
|
||||
Cross-platform note:
|
||||
|
||||
- `.agents/` is the shared source of truth for reusable workflows/rules
|
||||
- `.opencode/` is the OpenCode execution layer
|
||||
- `.agent/` may exist as a naming alias for tools that look for singular agent directories
|
||||
- `GEMINI.md` is the Gemini CLI entrypoint for shared workspace context
|
||||
|
||||
---
|
||||
|
||||
## Generic Commands
|
||||
|
||||
- `/workspace-context` -> load core plus active profile
|
||||
- `/memory-health` -> check canonical memory and adapter health
|
||||
- `/memory-create` -> create a typed canonical note through the memory interface
|
||||
- `/communication-sync` -> sync live communication evidence and promote high-confidence memory
|
||||
- `/archive-import` -> import historical archive evidence
|
||||
- `/ai-prompt` -> generate a self-contained prompt for another AI
|
||||
- `/standup` -> generate a work-item-aware daily standup
|
||||
- `/manager-update` -> draft stakeholder-ready status
|
||||
- `/translate` -> rewrite rough notes into professional English
|
||||
- `/sync-context` -> incorporate new facts or corrections into memory
|
||||
|
||||
Compatibility aliases remain available for the Fidelity profile:
|
||||
|
||||
- `/fidelity-context`
|
||||
- `/mattermost-sync`
|
||||
- `/slack-import`
|
||||
- `/copilot-prompt`
|
||||
- `/swift-help`
|
||||
|
||||
---
|
||||
|
||||
## Communication Memory Flow
|
||||
|
||||
This workspace supports a live-memory pattern for communication sources such as Mattermost.
|
||||
|
||||
Recommended setup:
|
||||
|
||||
1. Use the workspace-local script at `scripts/mattermost/sync.sh`, or override it with `AIW_MATTERMOST_SYNC_CMD`.
|
||||
2. Let OpenCode run with the project plugins enabled.
|
||||
3. The Mattermost inbox plugin will periodically refresh `ai/inbox/mattermost-latest.md`.
|
||||
4. Promote durable facts from the inbox into `project-knowledge/06-daily/`, `project-knowledge/01-current/`, `project-knowledge/02-work-items/`, and `project-knowledge/03-context/`.
|
||||
|
||||
Use `/communication-sync` or `/mattermost-sync` when you want to force a refresh manually.
|
||||
|
||||
Generic environment variables:
|
||||
|
||||
- `AIW_PROJECT_PROFILE`
|
||||
- `AIW_CHANNEL_PREFIX`
|
||||
- `AIW_MATTERMOST_SYNC_CMD`
|
||||
- `AIW_MATTERMOST_SYNC_INTERVAL_MINUTES`
|
||||
- `AIW_SLACK_EXPORT_PATH`
|
||||
|
||||
The `FIDELITY_*` variables remain supported as Fidelity-profile aliases, but new reusable setup should prefer `AIW_*`.
|
||||
|
||||
---
|
||||
|
||||
## Project Knowledge Vault
|
||||
|
||||
Open `project-knowledge/` as the Obsidian vault. The repository root remains the technical workspace for OpenCode, scripts, profiles, runtime inboxes, and generated evidence.
|
||||
|
||||
Recommended entry point:
|
||||
|
||||
- `project-knowledge/00-start/start-here.md`
|
||||
- `project-knowledge/00-start/onboarding.md` for new members
|
||||
- `project-knowledge/00-start/glossary.md` for terminology
|
||||
- `project-knowledge/07-maps/` for graph hubs
|
||||
|
||||
Use Obsidian for:
|
||||
|
||||
- visual navigation
|
||||
- graph/backlink review
|
||||
- manual review of work items, people, decisions, and logs
|
||||
- lightweight editing of the same Markdown memory files
|
||||
|
||||
Do not use Obsidian as a second memory database. The source of truth remains the versioned Markdown files under `project-knowledge/`.
|
||||
|
||||
Runtime/evidence stays outside the vault:
|
||||
|
||||
- `.opencode/`
|
||||
- `scripts/`
|
||||
- `core/`
|
||||
- `profiles/`
|
||||
- `ai/inbox/`
|
||||
- `scripts/*/generated/`
|
||||
|
||||
Ignored Obsidian runtime files include workspace layout, plugin cache, snippets, and local plugin installs.
|
||||
|
||||
Project-agnostic memory helpers live under `scripts/memory/`:
|
||||
|
||||
- `scripts/memory/memory.sh create <type> <slug> [title]`
|
||||
- `scripts/memory/memory.sh search <query> [folder]`
|
||||
- `scripts/memory/memory.sh base-query <base-name> [format]`
|
||||
- `scripts/memory/memory.sh health`
|
||||
|
||||
Obsidian adapter helpers live under `scripts/obsidian/`:
|
||||
|
||||
- `scripts/obsidian/cli.sh <obsidian-cli-command>`
|
||||
- `scripts/obsidian/open.sh <vault-relative-path>`
|
||||
- `scripts/obsidian/daily.sh`
|
||||
- `scripts/obsidian/search.sh <query>`
|
||||
- `scripts/obsidian/uri.sh <action> key=value`
|
||||
|
||||
---
|
||||
|
||||
## Creating Another Project
|
||||
|
||||
1. Copy `profiles/example/` to `profiles/<project>/`.
|
||||
2. Fill in `profiles/<project>/profile.md`.
|
||||
3. Set `AIW_PROJECT_PROFILE=<project>`.
|
||||
4. Configure any communication connector with `AIW_*` variables.
|
||||
5. Create or adapt `project-knowledge/` for the project-specific canonical memory.
|
||||
6. Use `/workspace-context` to load the core plus active profile.
|
||||
|
||||
See `core/profiles/create-project-profile.md` for the full checklist.
|
||||
The reusable core should not depend on a company name, ticket prefix, channel name, programming stack, or AI client.
|
||||
|
||||
Reference in New Issue
Block a user