系统控制
一个适用于Mac的AI代理,可以回答有关系统的问题,并可以随时使用新工具进行扩展。
92个实时工具,涵盖CPU、RAM、GPU、磁盘、网络、进程、iMessage、电子邮件、剪贴板、浏览器、天气、提醒、Docker、time Machine、Wi-Fi、日历、联系人、Notes、Homebrew、媒体控制、文件管理、Spotlight搜索、电子表格、Word文档、PDF、图像生成、深度网络研究、子代理编排、代码编辑、git集成等。代理会自动选择正确的工具,并行运行它们,并用简单的英语回答。
运行它的三种方法——选择适合您工作流程的方法:
| 如何 | 最好 | |
|---|---|---|
| 应用 | 下载 .app | 一键式原生macOS体验——无需设置 |
| 命令行界面 | syscontrol (单线安装) | 终端优先工作流、脚本、SSH会话 |
| 克劳德桌面版 | MCP服务器 | 在Claude Desktop中使用SysControl工具 |
所有接口共享相同的代理、工具和提供者——它们是可互换的。
______________________________________________________________________
应用程序(推荐)
一个具有流式聊天、Markdown渲染、聊天历史侧边栏和自动保存功能的原生SwiftUI应用程序——无需Python、无需终端、无需安装依赖项。只需在“设置”中下载、打开并配置您的提供商。
下载
选项A——预制DMG (无需Xcode):
下载最新 SysControl.dmg 从 ,拖动到“应用程序”,然后在首次启动时绕过Gatekeeper(该应用程序是临时签名的,未经过公证):
xattr -r -d com.apple.quarantine /Applications/SysControl.app或者右键单击应用程序→ 打开 → 打开 第一次。
选项B--从源代码安装 (在本地编译,自动绕过Gatekeeper):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/ks6573/SysControl/master/swift/install.sh)"稍后更新:使用 检查更新 在应用程序(⇧⌘U)中,或运行 syscontrol-update 从终端。
要卸载:请重新运行 --uninstall.
选项C——手动构建:
git clone https://github.com/ks6573/SysControl.git
cd SysControl/swift
./build.sh release
open .build/SysControl.app要求: macOS 14(索诺玛)或更高版本。选项B和C也需要Xcode命令行工具(xcode-select --install).特性
- 流媒体响应 --令牌在到达时随实时Markdown呈现而出现
- 自动保存 --每个对话都会自动保存,并使用LLM生成的标题
- 聊天历史侧栏 --浏览和删除过去的聊天记录
- 设置 --在应用程序中在本地(Ollama)和云提供商之间切换
- 应用内更新 --从菜单栏(⇧⌘U)或设置中检查新版本;DMG用户一键下载,源安装用户自动更新
- 无设置 --一切都是通过应用程序本身配置的
首次发射
首次启动时,会自动显示入职表:
- 选择 当地(Ollama) --要求 奥拉玛 在本地运行,不需要API密钥
- 或选择 云 -输入API密钥
- 点击 完成 然后开始聊天
若要稍后更改提供程序,请打开 设置 (⌘,).
聊天记录保存为Markdown ~/.syscontrol/chat_history/ --自由查看、编辑或删除。______________________________________________________________________
命令行界面
与应用程序运行相同后端的终端代理。两种安装路径:
选项A——单线安装(推荐):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/ks6573/SysControl/master/install-cli.sh)"安装 uv 如果丢失,则运行 uv tool install 针对GitHub仓库,暴露 syscontrol 和 syscontrol-server 在你的 PATH 在一个孤立的静脉里。不需要克隆。
稍后更新:运行 syscontrol --update (或 /update REPL内部);独立 syscontrol-cli-update 脚本仍在安装中。
要卸载:请重新运行 -- --uninstall.
选项B——来自克隆(用于开发):
git clone https://github.com/ks6573/SysControl.git
cd SysControl
curl -LsSf https://astral.sh/uv/install.sh | sh # if uv not installed
uv sync
uv run agent.py需求
- macOS或Linux
- python 3.11+ (如果您的系统Python较旧,uv将获取一个)
- 奥拉玛 对于本地模式, 或 用于云模式的Ollama Cloud API密钥
CLI标志
syscontrol # interactive
syscontrol --provider local --model qwen3:30b # local, skip prompt
syscontrol --provider cloud --api-key sk-... # cloud, skip prompt (key is remembered)
syscontrol --provider cloud --no-save-key # cloud, prompt every time
syscontrol --continue # resume the most recent session
syscontrol --resume # pick a previous session from a list
syscontrol --coding --approval normal # coding agent, ask before edits/shell
syscontrol --coding --approval plan # read-only planning mode
syscontrol --coding --approval auto # auto-accept coding edits/shell克隆(选项B)用户可以替换uv run agent.py为了syscontrol在下面的任何命令中。
第一次输入Ollama Cloud API密钥时(通过 --api-key 或提示),保存到 ~/.syscontrol/cli_credentials.json (0600)这样你就不会再被问到了。使用 --no-save-key 选择退出,或 /logout 从REPL忘记它。
编码模式
CLI可以作为具有窄代码工具集的编码代理运行:文件搜索/读取/编辑, git status/diff和shell命令。审批方式:
| 模式 | 行为 |
|---|---|
plan | 只读。代理可以检查并生成实施计划,但编辑和shell命令被阻止。 |
normal | 读取是自动的;文件写入和shell命令在终端中请求批准。 |
auto | “Just do it”模式。自动接受会话的编码编辑和shell命令。 |
按 Shift+Tab 在系统监控模式和编码模式之间切换。在编码模式内部, 使用 /approval plan, /approval normal,或 /approval auto 改变政策。老人 standard 和 nuke 名字仍然可以作为别名。
Slash命令和键盘快捷键
交互式CLI感觉就像Codex/Claude Code:type / 弹出完成菜单, @ 从cwd内联文件, ! 要运行一次性shell命令,底部工具栏将始终显示活动模型、提供者、审批模式和消息计数。
| 命令 | 描述 | |||
|---|---|---|---|---|
/help | 显示所有命令和键盘快捷键 | |||
/clear | 清除屏幕 | |||
/reset | 清晰的对话历史记录(保持系统提示) | |||
/tools [filter] | 列出可用工具,可选择按子字符串筛选 | |||
/model | 显示活动模型和提供程序 | |||
| `/mode [system\ | coding] [plan\ | normal\ | auto]` | 切换系统/编码模式或进入编码子模式 |
/test [command] | 在编码模式下运行检测到的测试命令或提供的命令 | |||
/lint [command] | 在编码模式下运行检测到的lint/typecheck命令或提供的命令 | |||
/memory | 将带时间戳的注释附加到 SysControl_Memory.md | |||
/show [tool_name] | 转储最近一次工具调用的完整输出 | |||
/sessions | 列出最近保存的CLI会话 | |||
/init | 生成一个 CLAUDE.md 对于当前项目 | |||
/compact [undo] | 总结对话; undo 恢复以前的历史记录 | |||
| `/approval plan\ | normal\ | auto` | 切换编码模式审批政策 | |
/update [force] | 检查并安装最新的SysControl版本 | |||
/logout | 忘记保存的Ollama Cloud API密钥 | |||
/exit | 退出会话 |
| 关键 | 行动 |
|---|---|
Enter | 提交单行缓冲区;缓冲区为多行后插入换行符 |
Ctrl+D | 提交任何非空缓冲区;在空缓冲区退出 |
Ctrl+C | 取消飞行中的LLM/工具流(在1秒内再次按下以干净退出) |
↑ / ↓ | 历史导航 |
Ctrl+R | 反向历史搜索 |
Tab | 完成当前斜线命令, @file,或争论 |
Shift+Tab | 切换系统/编码模式 |
Ctrl+L | 清除屏幕 |
Esc, Enter | 始终插入换行符(在多行模式下让Enter添加换行符的替代方法) |
类型 @ 弹出当前目录范围内的文件选择器(使用 git ls-files 如果可用;回落到递归行走)。所选路径在缓冲区中保持字面意义,并在提交时作为围栏代码块内联(每个文件的上限为64KB)。
类型 ! 直接运行shell命令——output内联打印,绕过LLM。需要 allow_shell=true 在 ~/.syscontrol/config.json.
历史坚持到 ~/.syscontrol/cli_history.对话自动保存到 ~/.syscontrol/cli_sessions/;继续使用最新 syscontrol --continue 或从列表中选择 syscontrol --resume.
本地模式(Ollama)
ollama pull qwen3:30b # recommended
ollama serve
syscontrol --provider local支持工具调用的模型:
| 型号 | 备注 |
|---|---|
qwen3:30b | 默认值。最佳工具使用和推理 |
qwen3:8b | 更快、更低的内存——包括思维模式 |
qwen2.5:7b | 轻质替代品 |
llama3.1:8b | 久经考验的回退 |
没有本机工具调用的模型(例如。 gemma3)将出错。云模式(Ollama Cloud)
syscontrol --provider cloud
# Enter your key when prompted — not echoed or stored in shell history获取钥匙 ollama.com/settings/keys默认云模型: gpt-oss:120b.
结束会话
自然地说再见(bye, exit, quit, done, farewell, cya, goodnight,…)或按 复制。代理将在退出之前提供保存您的会话。
会话记忆
退出时,系统会提示您保存有关会话的简短说明。注释附于 SysControl_Memory.md 带有时间戳。下次启动时,如果文件存在,其内容将被注入系统提示符中,以便代理具有之前会话的上下文。该文件是纯文本的,只能追加,可以自由编辑或删除条目。
代理还可以通过以下方式在会话中保存和调用内存 read_memory 和 append_memory_note 工具——无需等待退出。
隐私: SysControl仅存储您明确保存的内容。Ollama默认在本地处理查询。
______________________________________________________________________
权限和安全
敏感工具是 默认情况下禁用。启用它们 ~/.syscontrol/config.json:
{
"allow_shell": true,
"allow_messaging": true,
"allow_message_history": true,
"allow_screenshot": true,
"allow_file_read": true,
"allow_file_write": true,
"allow_calendar": true,
"allow_contacts": true,
"allow_accessibility": true,
"allow_tool_creation": true,
"allow_deep_research": true,
"allow_email": true,
"allow_notes": true,
"allow_brew": true,
"allow_agents": true
}每个禁用的工具都会返回一个错误,并带有启用它所需的确切标志。
______________________________________________________________________
Claude桌面设置
1.将MCP服务器添加到您的配置中
| 平台 | 配置路径 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| 窗户 | %APPDATA%\Claude\claude_desktop_config.json |
{
"mcpServers": {
"system-monitor": {
"command": "/path/to/uv",
"args": ["run", "/absolute/path/to/SysControl/mcp/server.py"],
"env": {}
}
}
}使用 which uv 获取紫外线路径。
2.设置系统提示 --创建Claude桌面项目并粘贴以下内容 mcp/prompt.json 进入“项目说明”字段。
3.重新启动克劳德桌面 — system-monitor 将出现在MCP服务器列表中。
______________________________________________________________________
自我延伸
当你要求一些没有工具覆盖的东西时,代理会主动构建它:
You: What song is playing in Spotify right now?
Agent: I don't have a tool for that. Want me to create one? (yes/no)
You: yes
Agent: ✓ Tool `get_spotify_track` installed. Restart and ask again.代理编写Python函数,验证语法,扫描危险模式(eval, exec等),并将其附加到 mcp/server.py。要求:
{ "allow_tool_creation": true }______________________________________________________________________
工具(共92个)
监控
| 工具 | 它做什么 |
|---|---|
get_cpu_usage | CPU负载(总负载+每个内核)、时钟频率、内联条形图 |
get_ram_usage | RAM和交换——已使用、可用、百分比、内联堆叠图表 |
get_gpu_usage | GPU负载、VRAM、每个设备的温度(NVIDI/pynvml)、内联图表 |
get_disk_usage | 每个分区空间和累积I/O计数器 |
get_network_usage | 累计发送/接收字节数和每个接口状态 |
get_realtime_io | 实时磁盘读/写和网络下载/上传速度(MB/s) |
get_top_processes | 按CPU或内存排列的前N个进程 |
get_full_snapshot | 单次调用:CPU+RAM+GPU+磁盘+网络+顶级进程 |
get_system_alerts | 分类扫描返回优先级严重/警告警报 |
系统和硬件
| 工具 | 它做什么 |
|---|---|
get_device_specs | 静态配置文件:CPU型号、内核数量、RAM、GPU VRAM、磁盘、操作系统 |
get_battery_status | 百分比、充电状态、剩余时间 |
get_temperature_sensors | CPU/主板传感器(Linux/Windows) |
get_system_uptime | 启动时间、正常运行时间、1/5/15分钟平均负载 |
get_hardware_profile | 现场压力+规格+OC能力+升级可行性+瓶颈分析 |
进程管理
| 工具 | 它做什么 |
|---|---|
get_process_details | PID的深度检查:路径、cmdline、用户、RSS/VMS、线程、打开的文件 |
search_process | 按名称查找进程(不区分大小写的部分匹配) |
kill_process | SIGTERM(默认)或SIGKILL PID。拒绝关键系统进程。 |
网络和连接
| 工具 | 它做什么 |
|---|---|
get_network_connections | 所有具有状态和拥有进程的活动TCP/UDP连接 |
network_latency_check | Pings网关、Cloudflare、Google DNS并行运行并诊断缓慢 |
get_wifi_networks | 具有SSID、频道、安全性、信号强度的附近网络 |
存储
| 工具 | 它做什么 |
|---|---|
find_large_files | 路径下最大的N个文件。跳跃 .git, node_modules, .venv |
eject_disk | 通过挂载点卸载并弹出外部磁盘 |
信息与通信
| 工具 | 它做什么 |
|---|---|
send_imessage | 通过Messages.app发送iMessage或SMS。仅限macOS。 |
get_imessage_history | 阅读来自的最新消息 ~/Library/Messages/chat.db仅限.MOSX。 |
read_emails | 从Mail.app读取最近的电子邮件(按文件夹)。需要 allow_email仅限.MOSX。 |
send_email | 通过Mail.app发送电子邮件。需要 allow_email仅限.MOSX。 |
search_emails | 在所有帐户和邮箱中搜索电子邮件。需要 allow_email仅限.MOSX。 |
浏览器和Web
| 工具 | 它做什么 |
|---|---|
web_search | DuckDuckGo搜索——标题、URL、代码片段。没有API密钥。 |
web_fetch | 以纯文本形式获取URL。无需浏览器。 |
grant_browser_access | 解锁浏览器控件(在用户同意后调用一次) |
browser_open_url | 在默认浏览器中打开URL |
browser_navigate | 通过AppleScript(macOS)导航活动选项卡 |
browser_get_page | 返回当前选项卡的URL、标题和文本(macOS) |
剪贴板和屏幕
| 工具 | 它做什么 |
|---|---|
get_clipboard | 返回当前剪贴板文本 |
set_clipboard | 将文本写入剪贴板 |
take_screenshot | 全屏PNG内联返回。(可选)保存到文件。仅限macOS。 |
generate_image | 从提示生成内联视觉图像伪影。需要一个OpenAI镜像API密钥。 |
应用程序控制和系统
| 工具 | 它做什么 |
|---|---|
open_app | 按名称打开应用程序(open -a).仅限macOS。 |
quit_app | 优雅地退出(AppleScript)或强制终止应用程序。仅限macOS。 |
get_volume | 输出、输入和警报音量;静音状态 |
set_volume | 设置系统输出量(0–100) |
get_now_playing | 当前正在Music.app或Spotify中播放曲目(标题、艺术家、专辑、位置)。仅限macOS。 |
media_control | 播放、暂停、跳过或停止Music.app/Spotify。自动检测活动玩家。仅限macOS。 |
get_frontmost_app | 返回所关注的应用程序的名称 |
toggle_do_not_disturb | 启用/禁用聚焦/DnD |
run_shortcut | 通过以下方式运行命名快捷方式 shortcuts runmacOS 12+。 |
文件I/O和外壳
| 工具 | 它做什么 |
|---|---|
read_file | 读取文本文件(最多16000个字符) |
write_file | 将文本写入任何路径,根据需要创建目录 |
list_directory | 列出目录内容,包括名称、类型、大小和修改时间 |
move_file | 移动或重命名文件或目录 |
copy_file | 将文件复制到新位置 |
delete_file | 删除文件或目录(macOS上默认为垃圾箱,可恢复) |
create_directory | 创建一个目录和任何缺失的父目录 |
search_files | 使用macOS Spotlight(mdfind)在系统范围内搜索文件。瞬间。仅限macOS。 |
read_spreadsheet | 从以下位置读取单元格 .xlsx 或 .csv --支持工作表选择和单元格范围 |
edit_spreadsheet | 写入单元格(A1表示法)或将行附加到 .xlsx / .csv。创建新文件。 |
read_document | 阅读以下段落 .docx, .txt,或 .md 字数统计 |
edit_document | 查找/替换文本、覆盖段落或附加到 .docx 文件 |
read_pdf | 从PDF文件中逐页提取文本(最多200页) |
run_shell_command | 执行bash命令并返回stdout/stderr。 默认情况下禁用。 |
日历、联系人和日志
| 工具 | 它做什么 |
|---|---|
get_calendar_events | Calendar.app未来N天的活动。仅限macOS。 |
get_contact | 按姓名、电话和电子邮件搜索Contacts.app。仅限macOS。 |
list_notes | 列出notes.app中的注释,包括标题、文件夹和时间戳。需要 allow_notes. |
read_note | 按标题阅读笔记的全文(部分匹配)。需要 allow_notes. |
create_note | 在Notes.app中创建新笔记。需要 allow_notes. |
get_startup_items | 自动启动项目(macOS LaunchAgents、Windows注册表、Linux .desktop) |
tail_system_logs | 带有可选关键字过滤器的系统日志的最后N行 |
公用事业
| 工具 | 它做什么 |
|---|---|
set_reminder | 安排macOS通知。接受 "in 2 hours", "tomorrow at 9am"等等。 |
list_reminders | 所有带有ID和火灾时间的待处理提醒 |
cancel_reminder | 按ID取消提醒 |
get_weather | 当前天气+服装建议。自动从IP检测位置。 |
check_app_updates | Homebrew、Mac App Store和系统软件更新。仅限macOS。 |
brew_list | 列出所有已安装的自制配方奶粉和木桶。需要 allow_brew. |
brew_install | 安装自制配方奶粉或木桶。需要 allow_brew. |
brew_upgrade | 升级一个或所有Homebrew软件包。需要 allow_brew. |
brew_uninstall | 卸载Homebrew配方奶粉或木桶。需要 allow_brew. |
get_docker_status | 正在运行具有实时CPU百分比、内存、映像、状态和端口的容器 |
get_time_machine_status | 上次备份时间、阶段和进度(如果正在运行)、目标。仅限macOS。 |
track_package | 通过跟踪号跟踪UPS、USPS、FedEx或DHL的货物 |
记忆
| 工具 | 它做什么 |
|---|---|
read_memory | 读取持久内存文件——跨会话保存的事实和笔记 |
append_memory_note | 在内存文件中添加一个简明的注释,以备将来调用 |
研究
| 工具 | 它做什么 |
|---|---|
deep_research | 多步骤网络研究代理:计划子问题,搜索多个来源,提取和交叉验证声明,返回引用支持的答案。需要1-3分钟。 |
代码编辑和导航
| 工具 | 它做什么 |
|---|---|
read_file_lines | 读取包含行号、偏移量和限制的文件——适合大文件。需要 allow_file_read. |
edit_file | 有针对性的查找和替换编辑。精确字符串匹配,如果不明确,则失败。需要 allow_file_write. |
glob_files | 按glob模式查找文件(例如。 **/*.py).跳过.git、node_modules、.vev。 |
grep_files | 使用可选上下文行跨文件搜索正则表达式内容。跳过二进制文件。 |
git_status | 显示分支、暂存/未暂存/未跟踪的文件以及最近的提交。 |
git_diff | 显示未暂存或暂存更改的git diff。 |
子代理编排
| 工具 | 它做什么 |
|---|---|
list_agents | 列出可用的子代理及其名称和描述 |
run_agent | 将一个重点任务委托给一个命名的子代理(资源管理器、分析师、研究员、作家),该子代理在一个具有受限工具的隔离子流程中运行。需要 allow_agents. |
自我延伸
| 工具 | 它做什么 |
|---|---|
create_tool | 编写、验证并安装新的MCP工具 server.py。需要 allow_tool_creation. |
list_user_tools | 列出通过安装的所有工具 create_tool |
______________________________________________________________________
加班支持
从硬件和平台自动检测到:
| 平台 | CPU OC | GPU OC |
|---|---|---|
| 苹果硅(M系列) | ✗ 不支持 | ✗ 不支持 |
| 英特尔Mac✗ 不支持(无BIOS) | ✗ 不支持(macOS) | |
| 英特尔K/KF/KS--Windows/Linux | ✅ 英特尔XTU或BIOS | ✅ MSI加力燃烧室 |
| AMD Ryzen——Windows/Linux✅ Ryzen大师/PBO✅ MSI加力燃烧室 |
______________________________________________________________________
项目结构
SysControl/
├── agent.py # CLI entry-point shim
├── install-cli.sh # One-line CLI installer (curl one-liner)
├── agent/
│ ├── cli.py # Interactive terminal REPL
│ ├── core.py # Shared agent logic: MCP client, streaming loop, helpers
│ ├── bridge.py # JSON-over-stdio bridge for the Swift app
│ ├── agents.py # Sub-agent specs: AgentSpec, AgentRegistry, built-in agents
│ ├── runner.py # Sub-agent runner: isolated context, filtered tools
│ └── paths.py # Path resolution (repo root, user data dir, memory file)
├── mcp/
│ ├── server.py # MCP tool server (92 tools + self-extension)
│ └── prompt.json # System prompt for the agent
├── deep_research/ # Deep research agent (iterative web research with citation verification)
├── swift/
│ ├── Package.swift # SwiftPM package definition
│ ├── build.sh # Builds the .app bundle and DMG
│ ├── install.sh # One-line source installer
│ └── SysControl/ # SwiftUI source (App, Models, Views, Services, Storage)
├── scripts/
│ └── make_icon.py # Generates the .icns app icon from source PNGs
├── pyproject.toml # Python project config, dependencies, linting
├── VERSION # Current release version (single source of truth)
└── tests/ # Pytest suite for agent core + MCP helpers建筑
┌──────────────────────┐
│ SwiftUI App │ Native macOS frontend
│ (swift/SysControl/) │ Onboarding, chat, settings, history
└────────┬─────────────┘
│ JSON-over-stdio (bridge.py)
┌────────▼─────────────┐
│ Agent Core │ Streaming agentic loop, LLM client
│ (agent/core.py) │ Provider selection, tool dispatch
└────────┬─────────────┘
│ JSON-RPC (stdio)
┌────────▼─────────────┐
│ MCP Server │ 92 tools, self-extension, permission checks
│ (mcp/server.py) │ Concurrent tool execution via client pool
└──────────────────────┘Swift前端通过以下方式与Python后端通信 agent/bridge.py,它通过stdio协议讲一个简单的JSON。这座桥重复使用了同样的东西 MCPClientPool CLI使用的流式循环,因此所有工具和功能都在每个接口上共享。
______________________________________________________________________
入口点
通过安装后 俏皮话 (或 pip install -e . 来自克隆):
| 脚本 | 描述 |
|---|---|
syscontrol | 交互式CLI代理 |
syscontrol --update | 检查并安装最新版本 |
syscontrol --version | 打印已安装的版本并退出 |
syscontrol-server | MCP服务器(stdio) |
syscontrol-cli-update | 独立更新程序脚本(与 syscontrol --update) |
从克隆中不安装,使用 uv run:
| 命令 | 描述 |
|---|---|
uv run agent.py | 交互式CLI代理 |
uv run -m mcp.server | MCP服务器(stdio)——用于克劳德桌面集成 |
______________________________________________________________________
许可证
该项目根据MIT许可证获得许可。看 许可证.
