
I love AI. But one thing frustrates me deeply as a System Analyst:
AI chatbots are forgetful.
Chatgpt Team / Claude Cowork: $20-30/seat/month. A team of 5 SAs = $100-150/month just for chat. Excluding API costs. For individuals or small teams in Indonesia, that's not an "investment", it's a burden.
We already have our own API keys, or could even use local models. Why pay for a closed workspace?
This is the paintful one.
I pasted FSD chapters 1-3 (business definitions), then had a long discussion about edge cases in chapter 5. Halfway through, AI forgot:
Once the chat hits 50+ pages or a long conversation, AI loses context. I have to re-paste the document, repeat the prompt, and hope it remembers.
That's not assitance. That's babysitting.
Browser AI doesn't know my file is at D:/projects/client-xyz/input/fsd/. Every analysis requires re-uploading, copy-pasting, or explaining folder structure.
Developers work in a local repo. Why should SAs work in a separate cloud?
Developers work in a local repo. Why should SAs work in a separate cloud?
In Onesist I flipped the paradigm:
Don't bring files to the AI. Bring AI to the files and watch it work in a terminal.
Instead of a headless "Run" button, the highlight is the Agent Terminal inside the dashboard xterm.js + a real PTY. You open the terminal, type a natural language prompt, and the agent works in the actual project root.


src/components/agent/AgentTerminal.tsx + src/server/terminal/terminal-server.ts):node-pty (macOS/Linux) / ConPTY (Windows) spawns opencode with cwd = projectRoot. Skills in .agents/skills/ (fsd-analyzer, markitdown, diagram-svg, query-writer) are immediately available.Use the fsd-analyzer skill. Generate ERD from FD1..FDn to output /erd/schema.dbml. the agents does readFile/writeFile directly.Honest note: the headless Agent Runner (src/server/services/agent-runner.ts——format json+ JSONL parsing) still has many errors — that's why the Terminal is the primary control center, not the runner. The runner is for internal automation only.
Results because of the Terminal:
fsd-analyzer skillAI without guardrails is like a smart but inventive junior frequent hallucinations.
Without constraints AI can:
refunds table that doesn't exist in the FSDPOST /orders/refund endpointOnesist's solution: Skill System - rules of engagement binding AI to SA methodology.
Two skills are bundled in vendor/skills/:
markitdown - PDF/DOCX/PPTX -> Markdown conversion (so FSD becomes a file the agent can read).fsd-analyzer - completeness analysis. Not just prompts, but validation scripts:vendor/skills/fsd-analyzer/scripts/
├── extract_entities.py # extract business entities from FSD
├── validate_erd.py # does ERD cover all entities?
├── validate_spec.py # does Spec cover all use cases?
└── compare_artifacts.py # compare FSD vs ERD vs Spec vs TaskOn the frontend, the Completeness Checker (lib/fsd-completeness.ts):
Example output:
[GAP] FSD Chapter 3.2 mentions "refund" but no refunds table in ERD
[GAP] Endpoint POST /orders/refund in Spec but no task in output/task/
[OK] All FSD entities have tables (12/12)AI is no longer free to invent. It must pass the checklist before an artifact is considered final. That's what makes AI consistent not long prompts, but standardization.
Because Markdown is the only format that is:
Table orders {
id uuid [pk]
user_id uuid [ref: > users.id]
status varchar [note: "DRAFT | PAID | REFUNDED"]
total decimal
}Change 5 lines -> ERD updates. AI changes the file -> UI auto-refreshes.
Living Artifacts. Files are the truth.
Ctrl+Cdon't touch MASTER_ERD.mdfile-watcher.ts + SSE (/api/events) detects write -> UI re-renders. Files on disk are the state.