Content
# Agent Forge Intelligent Platform
Built on top of the [Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk), a next-generation intelligent platform designed to address the core pain points of governments and enterprises in using AI in strict intranet environments. We aim to resolve the dilemma of safely using intelligent agents (similar to OpenClaw architecture) within intranet environments through a SaaS-based architecture, ensuring secure, private, and efficient deployment.
- This platform's architecture enables plugin-based business installation and the construction and distribution of multiple intelligent agents, allowing for professional intelligent agent development in just minutes. It truly separates technology and business, enabling business-driven architecture.
- It innovatively implements dynamic UI rendering and loading technology similar to Claude's official website, allowing for the understanding of the entire graph's rendering without lengthy waiting.
- A single backend supports multiple intelligent agents, administrator configuration, and regular user usage, providing a complete Skill / MCP / model / file / security / audit closed loop.
- **Backend**: FastAPI · SQLAlchemy 2.0 (async) · PostgreSQL · Claude Agent SDK · OpenAI Python SDK
- **Frontend**: Vue 3 · Vite · TypeScript · Pinia · Element Plus
- **AI Parsing**: [MinerU](https://mineru.net) Cloud/Private + Local Python Library Fallback
---
## System Preview:
| Picture 1 | Picture 2 |
| :---: | :---: |
| Dynamic UI Flow Rendering<img width="1400" height="729" alt="截屏2026-05-15 11 58 47" src="https://github.com/user-attachments/assets/8c816571-43ea-44f3-a723-824301d5e4bb" /> | Skill Invocation Generating PPT<img width="1440" height="727" alt="截屏2026-05-15 12 00 05" src="https://github.com/user-attachments/assets/b802b2ce-7c7e-41fd-be5e-8340e2d9344f" /> |
| File Preview Download <img width="1400" height="729" alt="截屏2026-05-15 12 00 29" src="https://github.com/user-attachments/assets/2dd07129-b800-4115-b734-1ebb2ecfe571" />| Online HTML Generation <img width="1440" height="685" alt="截屏2026-05-15 12 09 10" src="https://github.com/user-attachments/assets/9c127d38-223f-4e47-85ef-6f2691e043ee" />|
| Complex Principle Dynamic Effect<img width="1400" height="729" alt="截屏2026-05-15 12 34 58" src="https://github.com/user-attachments/assets/d116f216-1551-4e17-8c3a-5ce162cd58aa" />| MCP Invocation and Form Rendering<img width="1440" height="792" alt="截屏2026-05-15 12 11 54" src="https://github.com/user-attachments/assets/05b9ad51-8b33-4fce-89e8-d826abe5fb40" />|
| Intelligent Agent Dynamic Configuration<img width="1200" height="729" alt="截屏2026-05-15 12 31 49" src="https://github.com/user-attachments/assets/7b5892ba-090a-4143-b548-644ed989f680" />| Overall Security Prevention and Control Architecture<img width="300" height="500" alt="image" src="https://github.com/user-attachments/assets/0d40572b-50e5-4f5a-9a97-937afc1a26fa" />
## I. Function Overview
| Module | Key Capabilities |
|---|---|
| **Authentication / Authorization** | Local Account + JWT (access + refresh) + RBAC Three Roles (admin / operator / user) + Department (User Grouping) + Agent Role Visibility |
| **Intelligent Agent** | Multi-Agent / Default Agent / Model + Degradation Model / Mount Skill and MCP / Role Visibility / File Upload Policy / system_prompt |
| **Model Management** | Anthropic / DeepSeek / Qwen / GLM / OpenAI / Arbitrary OpenAI Compatibility, API Key Fernet Encryption Storage, extra_params Pass-through (e.g., Close Thinking), One-Click Test |
| **Skill Warehouse** | path Type (SKILL.md Package) / composite (YAML DAG) / callable (Python Function) Three Types; ZIP Package Upload + Static Scanning; Online File Tree Browsing + Markdown Online Editing and Saving; Isolated by Agent File Level (per-agent .claude/skills/ Sandbox); Cross-Path Scheduling (`save_output_file` / `_read_skill_file` / `run_skill_script`) |
| **MCP Connector** | stdio / SSE / Streamable-HTTP Three Transports; Real-time Connection Management + Tool Listing + Input Schema Display; Isolated by Agent; On-demand Injection at Runtime |
| **Chat and Streaming** | Multi-Session + History Persistence + Multi-Round Context (Default 30 Bars) + Real Token-by-Token Streaming (Claude Agent SDK Partial Messages); Independent Thinking Process Thinking Card (Supports DeepSeek-Reasoner reasoning_content); Tool / MCP / Skill Invocation Step Card Real-time Display |
| **File Upload and Parsing** | User Upload in Dialog Box (per-user Physical Isolation) → Asynchronous Parsing → MinerU Cloud/Private → Fallback to Local Library (pypdf/python-docx/openpyxl/bs4) → Markdown Injection Prompt; Supports Multiple References, Parsing Visible Status, and Retry on Failure |
| **File Preview and Download** | Similar to Gemini Canvas Right-Side Split Screen; HTML / PDF / Markdown / SVG / Image / Text Code Online Preview; Word / PPT / Excel Only Download; One-Time Token URL, Cross-User/Expiration/Path Traversal Full Block; Skill Product Automatic Registration Download Link |
| **Generative UI** | Skill Output Embedded Widget Rendering (Callback to Intelligent Agent Message); Right-Side Split Screen Draggable Size |
| **Security Hardening** | Anthropic Path Default Disable Bash/Write/Edit; System Prompt Injection Security Rules; Input Regular Expression Filtering (injection / shell); Skill Upload Static Scanning (AST Level Dangerous Import Blacklist); File-Level cwd Sandbox (per-agent Symlink); All Admin / Tool Invocation / File Operation Audit Logging |
| **Audit and Log** | `call_logs` (token/Delay/Status) + `audit_logs` (Management Operation / Security Interception / File Download) Dual Tables, Management End Screening Query |
| **Lifecycle** | File 30 Days Unreferenced Automatic Cleanup; Conversation Deletion Cascade Message; UploadedFile last_used_at Tracking |
| **Production Deployment** | Docker Compose One-Click Start db/api/web; `storage/` Volume Persistence |
---
## II. Directory Structure
```
h3c-agent/
├── backend/
│ ├── app/
│ │ ├── api/
│ │ │ ├── auth.py Login / Refresh / me
│ │ │ ├── chat.py Session / Message / SSE Streaming
│ │ │ ├── files.py Upload / Asynchronous Parsing / Status Query / Retry / Raw Direct Link
│ │ │ ├── downloads.py Token URL Download (Skill Product)
│ │ │ └── admin/
│ │ │ ├── users.py User + Role CRUD
│ │ │ ├── departments.py Department Tree
│ │ │ ├── models.py Model Management + Test
│ │ │ ├── mcp.py MCP Connector + Tool List
│ │ │ ├── skills.py Skill ZIP Upload / File Tree / Online Editing / Static Scanning
│ │ │ ├── agents.py Agent Configuration (including Upload Policy)
│ │ │ └── logs.py Call/Audit Log
│ │ ├── core/
│ │ │ ├── config.py Environment Configuration (MinerU / JWT / Upload, etc.)
│ │ │ ├── crypto.py Fernet Encryption (API Key)
│ │ │ ├── security.py JWT / bcrypt
│ │ │ └── security_rules.py SAFETY_PREFIX + Input Filtering Regular Expression
│ │ ├── runtime/
│ │ │ ├── agent_runner.py Dual-Path Streaming (Anthropic SDK + OpenAI Compatible); Skill/MCP/File Orchestration; Widget Protocol; Tool-Use Status Card
│ │ │ ├── skill_loader.py Composite YAML Verification + DAG Topology
│ │ │ ├── dag_executor.py DAG Parallel Execution + Template Variable
│ │ │ ├── mcp_manager.py MCP Client Factory
│ │ │ └── widget_guidelines.py Generative UI Guidelines
│ │ ├── services/
│ │ │ ├── audit.py Audit Assistance
│ │ │ ├── downloads.py Download Token Registration / Verification
│ │ │ ├── file_cleanup.py 30-Day Orphan Cleanup (Background Task)
│ │ │ ├── file_parser.py Parsing Route (text / MinerU / Local Library)
│ │ │ ├── mineru_client.py MinerU Cloud/Private Mode
│ │ │ └── skill_scan.py Shell + Python AST Scanning
│ │ ├── db/
│ │ │ ├── models.py 14+ Tables
│ │ │ └── init_db.py Idempotent Migration + Default Admin
│ │ ├── schemas/ Pydantic
│ │ ├── deps.py JWT Dependency + Role Guard
│ │ └── main.py Entry + Lifespan (Mounted Cleanup Task)
│ ├── pyproject.toml
│ └── Dockerfile
├── frontend/
│ ├── src/
│ │ ├── views/
│ │ │ ├── chat/Chat.vue Chat Page (50/50 Split Screen / Thinking Block / Step Card / File Chip / Preview Panel)
│ │ │ ├── admin/ 8 Management Pages
│ │ │ ├── Layout.vue Left-Side NavigationRail + Topbar
│ │ │ └── Login.vue Glassmorphism Login Page
│ │ ├── components/
│ │ │ ├── FileCard.vue File Card (Download / Preview)
│ │ │ ├── PreviewPanel.vue Right-Side Split Screen Multi-Type Rendering
│ │ │ └── WidgetRenderer.vue Generative UI Widget
│ │ ├── api/ Unified Axios Encapsulation + Interception
│ │ ├── stores/ Pinia (auth + chat)
│ │ ├── router/ Route + Role Guard
│ │ └── styles.css Material 3 Token + Google Blue/Red/Yellow/Green
│ ├── vite.config.ts Including SSE Agent Prohibition Buffer
│ └── Dockerfile
├── storage/
│ ├── uploads/<user_id>/ User Upload (Physical Isolation)
│ ├── outputs/<user_id>/ Skill / Tool Product
│ └── skills/<code>/ path Type Skill Package
└── docker-compose.yml
```
---
## III. Core Mechanisms
### 3.1 Roles and Visibility
| Role | Permissions |
|---|---|
| **admin** | All: User / Role / Department / Agent / Skill / MCP / Model / Log + Usage |
| **operator** | Configure Skill / MCP / Agent / Model + View Log + Usage, **Cannot Manage User/Role/Department** |
| **user** | Only Chat Usage; Visible Agents Controlled by `role_agent_grants` |
### 3.2 Dual Streaming Paths
**Anthropic Path** (provider=anthropic)
- Using Claude Agent SDK, `include_partial_messages=True` for `content_block_delta` Real Streaming
- File-Level Skill Sandbox: `<tmp>/.claude/skills/` Only Symbolic Links to Currently Selected Agent Skills
- Tool Whitelist: Read / Glob / Grep / Skill / WebSearch / `mcp__<server>` —— Bash/Write/Edit Globally Disabled
**OpenAI Compatible Path** (provider=deepseek/qwen/glm/openai/openai-compatible)
- `/v1/chat/completions` Stream + `tool_calls`
- Multi-Round Function-Calling Loop (MAX 8 Rounds)
- DeepSeek-Reasoner `reasoning_content` Automatic Return
- MCP / Skill Translated into OpenAI Function Tools, Runtime Routing
### 3.3 Skill Three States
| Type | Form | Execution Method |
|---|---|---|
| **path Type Atomic** | ZIP Upload → SKILL.md + Resource File | Anthropic SDK through cwd File-Level Loading; OpenAI Path Model First Calls `_read_skill_file` to Load SKILL.md, then Uses `run_skill_script` to Call Contained Python (in-process, No Bash) |
| **callable Atomic** | source_json.callable: `module.path:func` | Direct Import Call (admin Can Create, with Audit) |
| **composite (YAML DAG)** | Steps + depends_on + Template Variables | DAGExecutor Topology Layering + Same Layer Parallelism, Variable Replacement Does Not Use eval |
Each request: Skill in `storage/skills/<code>/` Symlinked into `tmp/.claude/skills/` by Agent Selection —— Physical Sandbox, Read/Bash Cannot Reach Other Skills.
### 3.4 File Parsing
```
TXT/MD/CSV/JSON/HTML/... → Direct Read
PDF/DOCX/PPTX/XLSX/PNG/JPG → MinerU (Cloud/Private) → Fallback to Local Library
Others → Marked Failed, Retryable
```
- MinerU Cloud Process: Apply Pre-Signed URL → PUT Upload → Polling Batch Result → Get Markdown
- Private Deployment Only Changes Three Environment Variables (`MINERU_MODE=local`, `MINERU_BASE_URL`, `MINERU_API_KEY`), Business Code Zero Intrusion
#### Raw File Direct Transmission (parse_mode=never)
For scenarios like Sealed PDF / Visual Model / Binary Dedicated Format, Agent Can Disable Automatic Parsing and Pass Raw File to Tool Processing.
- Agent Edit Page → **File Parsing Mode** → Select "Do Not Parse, Raw File Direct Transmission to Tool"
- Upload `parse_status="skipped"`, No OCR / Text Extraction
- When Sending Message, Backend Issues 60-Minute Short-Term Token, Prompt Provides Local Path (for Skill Read) + Signed URL (for MCP Pull)
- Cross-Host Deployment Requires Backend Environment Variable `BACKEND_BASE_URL` Configured as MCP Accessible Backend Address
- Details See [docs/handover/raw-file-passthrough.md](docs/handover/raw-file-passthrough.md) / [docs/insights/why-raw-file-mode.md](docs/insights/why-raw-file-mode.md)
- Parsing Hard Upper Limit 20K Characters, Overlong Truncation
### 3.5 File Download and Preview
- Upload file: `/api/files/{id}/raw` + Dual-channel authentication (Bearer header / `?t=<jwt>` query)
- Skill / Tool product: `download_tokens` table registration + `/api/downloads/{token}` short URL
- Cross-user access / Expiration / Path traversal all block
- Right-side split-screen rendering: HTML iframe / PDF browser native / Markdown rendering / Text code block / SVG embedded / Image; Office only downloads
### 3.6 Security Hardening (Layered)
1. **Tool whitelist** (Runtime layer): Anthropic path defaults to disable Bash/Write/Edit
2. **System prompt security prefix** (Model layer): Each Agent is forced to inject, anti-prompt injection
3. **Input regular filtering** (Gateway layer): Shell commands, injection routines, sensitive path patterns → Direct 400 + Audit
4. **Skill static scanning** (During upload): Shell pattern + Python AST (eval/exec/subprocess/os.system blacklist)
5. **File cwd sandbox** (SDK layer): Per-agent temporary dir, model physically cannot see other Skills
6. **Download token** (Exit layer): One-time token / 24h expiration / user_id verification / Path traversal rejection
7. **API Key encryption**: Fernet storage in DB, frontend only sees `has_api_key`
### 3.7 Audit
| Table | Purpose |
|---|---|
| `audit_logs` | Management CRUD + File upload/download/re-parse + Input filtering hit + Skill upload interception |
| `call_logs` | Each conversation: token in/out / latency / status / error / model |
Management log page supports filtering by user / Agent + pagination + detail JSON expansion.
## Four. Quick Start
> **Prerequisites**: Server has installed [Docker](https://docs.docker.com/engine/install/) + Docker Compose (v2+). Other dependencies are automatically handled within the container.
### 4.1 One-click Deployment (Recommended)
```bash
# 1. Clone code
git clone <repo-url> h3c-agent
cd h3c-agent
# 2. Generate configuration file
cp .env.example .env
```
**Edit `.env`, fill in the following required fields** (others can be kept default):
| Field | Description | Generation command |
|---|---|---|
| `DB_PASSWORD` | Database password | Any strong password |
| `JWT_SECRET` | Authentication key | `python3 -c "import secrets; print(secrets.token_urlsafe(48))"` |
| `ENCRYPTION_KEY` | API Key encryption key | `python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"` |
| `APP_BASE_URL` | Server access address | e.g., `http://192.168.1.100` or `https://agent.example.com` |
| `SEED_ADMIN_PASSWORD` | Initial admin password | Any strong password |
| `MINERU_API_KEY` | Document parsing token | Go to [mineru.net](https://mineru.net) to register and apply (optional) |
```bash
# 3. One-click deployment (build image + start + initialize database)
./deploy.sh
```
After deployment, the access address and admin account information will be output. **Change the admin password immediately after the first login.**
### 4.2 Daily Operation Commands
```bash
# View all service running status
./deploy.sh --status
# View logs in real-time (exit with Ctrl+C)
./deploy.sh --logs
# Update deployment (pull new code and rebuild)
git pull && ./deploy.sh --update
# Force rebuild all images (clear cache)
./deploy.sh --rebuild
# Stop service (retain database volume)
./deploy.sh --down
```
You can also use docker compose commands directly:
```bash
docker compose ps # View status
docker compose logs -f api # View backend logs
docker compose logs -f web # View frontend logs
docker compose exec api python -m app.db.init_db # Manually re-run database migration
docker compose restart api # Restart backend
```
### 4.3 Local Development (without Docker)
```bash
# 1. Start PostgreSQL (use Docker to quickly pull up)
docker run -d --name h3c-pg -p 5432:5432 \
-e POSTGRES_USER=h3c -e POSTGRES_PASSWORD=h3c -e POSTGRES_DB=h3c_agent \
postgres:16
# 2. Backend
cd backend
python -m venv .venv && source .venv/bin/activate
cp ../.env.example backend/.env # Edit backend/.env: change DATABASE_URL to localhost address, fill in JWT_SECRET / ENCRYPTION_KEY / MINERU_API_KEY
pip install -e .
python -m app.db.init_db # Create table + create default admin
# 3. Frontend
cd ../frontend
npm install
# 4. Start with one command (two processes)
cd ..
./start.sh # backend :8000 + frontend :5173
./stop.sh # Stop
# Real-time logs
tail -f /tmp/agent-forge-backend.log
tail -f /tmp/agent-forge-frontend.log
```
### 4.4 Complete `.env` Configuration Description
> `.env.example` contains all fields and comments, the following is a quick check of key items.
```bash
# ── Docker Compose exclusive ────────────────────────────────
DB_USER=h3c # Database username (default is fine)
DB_PASSWORD=<strong password> # Database password (consistent with DATABASE_URL)
DB_NAME=h3c_agent # Database name (default is fine)
WEB_PORT=80 # Frontend exposed port
API_PORT=8000 # Backend exposed port
# ── Database connection ─────────────────────────────────────────
# Docker deployment automatically covers the container internal address, no need to manually change
DATABASE_URL=postgresql+asyncpg://h3c:<DB_PASSWORD>@localhost:5432/h3c_agent
# ── Access address ────────────────────────────────────────────
APP_BASE_URL=http://your-server-ip # CORS whitelist + email return link
# ── Authentication ───────────────────────────────────────────────
JWT_SECRET=<48-byte random string> # python3 -c "import secrets; print(secrets.token_urlsafe(48))"
JWT_ALG=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=720
REFRESH_TOKEN_EXPIRE_DAYS=2
ENCRYPTION_KEY=<Fernet 32-byte> # python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# ── File storage ────────────────────────────────────────────
# Docker deployment automatically covers the container internal path
STORAGE_ROOT=../storage
SKILLS_DIR=../storage/skills
UPLOADS_DIR=../storage/uploads
MAX_UPLOAD_MB=50
# ── CORS ────────────────────────────────────────────────
# Docker deployment automatically covers based on APP_BASE_URL
CORS_ORIGINS=http://localhost:5173
# ── Initial administrator ──────────────────────────────────────────
SEED_ADMIN_USERNAME=admin
SEED_ADMIN_PASSWORD=<strong password>
# ── MinerU document parsing ─────────────────────────────────────
MINERU_MODE=cloud # cloud | local | disabled
MINERU_BASE_URL=https://mineru.net
MINERU_API_KEY=<token> # Apply after registering on mineru.net
MINERU_TIMEOUT_SEC=60
PARSED_MARKDOWN_HARD_LIMIT=20000
# Private deployment only needs to change the following three items, business code zero invasion:
# MINERU_MODE=local
# MINERU_BASE_URL=http://10.0.0.50:8000
# MINERU_API_KEY=(usually not needed)
# ── SMTP email notification (optional, leave blank to disable)──────────────
SMTP_HOST=smtp.qq.com
SMTP_PORT=587
SMTP_USER=xxx@qq.com
SMTP_PASSWORD=<QQ authorization code> # QQ mailbox settings → IMAP/SMTP → Generate authorization code (not login password)
SMTP_FROM=display name <xxx@qq.com> # QQ requires mailbox part to be equal to SMTP_USER
SMTP_USE_TLS=true
SMTP_USE_SSL=false
```
## Five. API Quick Check
### User End
```
POST /api/auth/login Login
POST /api/auth/refresh Refresh token
GET /api/auth/me Current user
GET /api/agents My available Agents
GET /api/agents/default My default Agent
GET /api/agents/{id}/capabilities Agent capabilities (model/Skill/MCP)
GET /api/agents/{id}/mcps/{mid}/tools Real-time pull of tools list for an Agent's MCP
GET /api/conversations My conversations
POST /api/conversations Create conversation
PATCH /api/conversations/{id} Rename
DELETE /api/conversations/{id} Delete
GET /api/conversations/{id}/messages Message list (automatically hydrate file)
POST /api/conversations/{id}/messages Send message (SSE stream)
POST /api/files/upload Upload file (background asynchronous parsing)
GET /api/files/{id} Check parsing status
POST /api/files/{id}/reparse Retry parsing
DELETE /api/files/{id} Delete
GET /api/files/{id}/raw Original file stream (support ?t= direct link)
GET /api/downloads/{token} Skill product download (token URL)
```
### Admin End (`/api/admin/`)
```
roles users departments # User system
models # Model + /test
mcp + /{id}/ping + /{id}/tools # MCP
skills + /upload + /{id}/files + /{id}/file (PUT online editing)
agents
logs/calls logs/audit # Dual logs
```
### SSE Event Types
```
meta First response, with agent/model/provider
thinking Thinking process token (collapsible)
text Text token (streaming)
tool_use Tool call start (status card)
tool_result Tool return (status card done)
file File product registration (download card)
error Streaming error
done End + token usage + latency
```
## Six. Data Models (Main Tables)
```
roles, users, departments
role_agent_grants User role → Agent visibility
models provider + api_key_enc + extra_params
mcp_connectors
skills type ∈ {atomic, composite}
agents default_model_id + system_prompt + upload_policy_json
agent_skills, agent_mcps Many-to-many
conversations user × agent
messages content_json(text/thinking/files) + tool_calls_json
uploaded_files parse_status / parsed_markdown / parsed_chars / last_used_at
download_tokens token + expires_at + user_id
audit_logs who / action / target / detail_json
call_logs tokens / latency / status
```
## Seven. Secondary Development Guide
| What I want to do | Change here |
|---|---|
| Connect new model supplier | `agent_runner.py:_stream_via_openai` provider routing (compatible with OpenAI protocol) + Frontend `Models.vue` PROVIDERS array |
| Add new file type parsing | `services/file_parser.py:_local_for_ext` + `MINERU_EXTS` |
| Private MinerU | Change env; if interface shape is different, change `services/mineru_client.py` single file |
| Add new Skill tool | `agent_runner.py:_build_openai_tools` add function definition + `_exec_skill` add dispatch |
| Add custom security rules | `core/security_rules.py` add regular |
| Add new preview type | `components/PreviewPanel.vue` + `FileCard.vue` PREVIEWABLE collection |
## Eight. Production Checklist
- [ ] Replace `JWT_SECRET` with 32+ byte random string
- [ ] Generate `ENCRYPTION_KEY` (`python -c "from cryptography.fernet import Fernet;print(Fernet.generate_key().decode())"`)
- [ ] Enable HTTPS (SSE streaming nginx has configured `proxy_buffering off`)
- [ ] Change admin default password
- [ ] Set global `MAX_UPLOAD_MB`, configure `max_size_mb` / `max_files_per_send` by Agent
- [ ] Configure `allowed_ext` whitelist for critical Agents
- [ ] Verify MinerU quota / switch to private deployment
- [ ] Regularly backup `storage/` volume + Postgres
## 9. Sensitive Information Security
**Never submit to the code repository**:
- `backend/.env`(already gitignored) — All real credentials go here
- `.history/`, `.vscode/`, `.idea/`(already gitignored) — IDE local snapshots, may contain intermediate passwords
- Any true values containing `*_API_KEY` / `*_PASSWORD` / `*_SECRET`
- `.pem` / `.key` private key files
Pre-commit self-inspection:
```bash
git diff --staged | grep -iE 'password|api[_-]?key|secret|token' | grep -v 'placeholder\|example\|change-me'
```
If true values are found, **immediately**:
1. Do not push; `git reset HEAD <file>` to revert changes to the working directory, and modify to read from `.env`
2. If already pushed, go to the corresponding service platform (QQ email, various LLM providers, etc.) to **revoke password / rotate key**, and consider `git filter-repo` to rewrite history
- [ ] Check the log page (management side) for `input_filter_blocked` / `skill.upload_blocked` abnormal explosion points
---
## 9. Version Planning
**MVP (Completed)**
- Dual-path streaming / Skill three states / MCP three transports / MinerU parsing / File preview / Security hardening / Audit
**Phase 2**
- Sub-Agent delegation (master-slave architecture)
- Quota / Cost control
- SSO access (OIDC / LDAP)
- S3 / MinIO file storage
- Skill market (export/import)
- Traffic limiting / Anomaly alerting
---
## 10. Acknowledgements
- [Claude Agent SDK](https://code.claude.com/docs/en/agent-sdk) — Intelligent body core
- [MinerU](https://mineru.net) — Document parsing
- [Element Plus](https://element-plus.org) — UI components
Connection Info
You Might Also Like
cc-switch
All-in-One Assistant for Claude Code, Codex & Gemini CLI across platforms.
awesome-claude-skills
A curated list of awesome Claude Skills, resources, and tools for...
claude-flow
Claude-Flow v2.7.0 is an enterprise AI orchestration platform.
Appwrite
Build like a team of hundreds
semantic-kernel
Build and deploy intelligent AI agents with Semantic Kernel's orchestration...
Anthropic-Cybersecurity-Skills
734+ structured cybersecurity skills for AI agents · MITRE ATT&CK mapped ·...