Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: CI

on:
push:
branches:
- main
pull_request:

permissions:
contents: read

jobs:
verify:
runs-on: macos-15
timeout-minutes: 20

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Run self-test
run: swift run --disable-sandbox AgentAwakeSelfTest

- name: Build architecture-specific release images
run: ./scripts/package-release.sh

- name: Verify release images and checksums
run: |
test -f dist/release/AgentAwake-*-Apple-Silicon.dmg
test -f dist/release/AgentAwake-*-Intel.dmg
cd dist/release
shasum -a 256 -c AgentAwake-*.sha256
38 changes: 38 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Release

on:
push:
tags:
- "v*"

permissions:
contents: write

jobs:
release:
runs-on: macos-15
timeout-minutes: 30

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Verify tag matches app version
run: |
version="$(/usr/libexec/PlistBuddy \
-c 'Print :CFBundleShortVersionString' \
Resources/Info.plist)"
test "${GITHUB_REF_NAME#v}" = "$version"

- name: Build ad-hoc Apple Silicon and Intel images
run: ./scripts/package-release.sh

- name: Publish GitHub Release
env:
GH_TOKEN: ${{ github.token }}
run: |
gh release create "$GITHUB_REF_NAME" \
dist/release/AgentAwake-*.dmg \
dist/release/AgentAwake-*.sha256 \
--title "AgentAwake ${GITHUB_REF_NAME#v}" \
--generate-notes
36 changes: 32 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,38 @@ Version numbers follow [Semantic Versioning](https://semver.org/).

## [Unreleased / 未发布]

<!--
按需添加 Added / Changed / Fixed / Removed 小节。
Add Added / Changed / Fixed / Removed sections as needed.
-->
## [0.4.0] - 2026-07-31

### Added / 新增

- 分别提供 Apple Silicon 与 Intel Mac 的独立可下载 App 和 DMG。
Separate downloadable apps and DMGs for Apple silicon and Intel Macs.
- App 内设置窗口,可选管理登录项、Codex Hooks 与 Claude Hooks。
In-app settings for the login item and optional Codex/Claude Hooks.
- 首次启动自动展示菜单栏面板;定时模式无需任何 Agent 或额外配置。
First launch reveals the menu bar panel; timed modes need no agent or setup.
- Ad-hoc 签名、双架构 DMG 制作和无需 Apple 发布凭据的 GitHub Release 自动化。
Ad-hoc signing, dual-architecture DMG packaging, and GitHub Release
automation without Apple publishing credentials.

### Changed / 变更

- Hooks 安装从命令行前置步骤改为设置中的可选增强,且只修改用户明确选择、
本机已检测到的 Agent 配置。
Hooks are now optional settings and only modify explicitly selected,
locally detected agent configurations.
- 五档滑轨加入悬停光晕、加大的圆形把手、加粗轨道和带触觉反馈的弹性吸附。
The five-position slider now has a hover glow, a larger circular thumb,
a thicker track, haptic feedback, and spring-loaded snapping.
- 修复菜单栏面板首次显示时,第一次拖拽只激活窗口而不会移动滑块的问题。
Fixed the first drag being consumed by window activation when the menu bar
popover is shown for the first time.
- 菜单栏与 App 内标记统一为四角十字星和单个左倾 `Z`,并将状态栏占位收为方形。
The menu bar and in-app marks now share a four-point sparkle with one
left-leaning `Z`, while the status item uses a compact square footprint.
- APP 图标同步换为暖陶土橙配色的四角十字星与单 `Z` 版本。
The app icon now uses the same four-point sparkle and single `Z` in a warm
clay-orange palette.

## [0.3.1] - 2026-07-31

Expand Down
17 changes: 14 additions & 3 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ let package = Package(
name: "AgentAwakeCore",
targets: ["AgentAwakeCore"]
),
.library(
name: "AgentAwakeSetupCore",
targets: ["AgentAwakeSetupCore"]
),
.executable(
name: "AgentAwake",
targets: ["AgentAwake"]
Expand All @@ -35,18 +39,25 @@ let package = Package(
),
.executableTarget(
name: "AgentAwake",
dependencies: ["AgentAwakeCore"]
dependencies: ["AgentAwakeCore", "AgentAwakeSetupCore"],
linkerSettings: [
.linkedFramework("ServiceManagement")
]
),
.executableTarget(
name: "AgentAwakeHook",
dependencies: ["AgentAwakeCore"]
),
.executableTarget(
name: "AgentAwakeHookSetup"
name: "AgentAwakeHookSetup",
dependencies: ["AgentAwakeSetupCore"]
),
.target(
name: "AgentAwakeSetupCore"
),
.executableTarget(
name: "AgentAwakeSelfTest",
dependencies: ["AgentAwakeCore"]
dependencies: ["AgentAwakeCore", "AgentAwakeSetupCore"]
),
.executableTarget(
name: "AgentAwakePowerProbe",
Expand Down
83 changes: 52 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,16 @@
</p>

<p align="center">
macOS 13+ · Swift · 当前版本 0.3.1
macOS 13+ · Apple Silicon / Intel · 当前版本 0.4.0
</p>

<p align="center">
<a href="https://github.com/Raymond711xl/AgentAwake/releases/latest">下载最新版本</a>
</p>

## 软件介绍

AgentAwake 是一个为 Codex 和 Claude 长任务设计的轻量 macOS 菜单栏工具。
AgentAwake 是一个下载后即可使用的轻量 macOS 菜单栏工具。
当定时保护开启或 Agent 正在工作时,它通过带超时保护的 macOS IOKit
临时电源断言阻止空闲休眠;任务结束、倒计时结束、手动关闭或退出 App 后,
它会立即释放断言,把休眠控制权交还给系统。
Expand All @@ -35,6 +39,8 @@ AgentAwake 是一个为 Codex 和 Claude 长任务设计的轻量 macOS 菜单
保持系统和显示器唤醒。
- **Hooks 优先、日志兜底**:优先使用生命周期 Hooks 获取及时状态;未安装 Hooks
时,自动增量读取本地任务日志作为零配置兜底,不依赖可能长期常驻的进程名。
- **下载后直接使用**:普通用户不需要 Codex、Cloud、Xcode、Swift 或终端;
Hooks 与登录项等增强能力都在设置中按需启用。
- **自动释放与续租**:Agent 模式使用 120 秒短租约,每 60 秒续期;最后一个
Agent 结束 5 秒后自动释放,异常失联的状态也会过期。
- **安全的临时断言**:固定时长和 Agent 模式均使用带超时的 IOKit 断言,
Expand All @@ -57,43 +63,54 @@ AgentAwake 是一个为 Codex 和 Claude 长任务设计的轻量 macOS 菜单
## 系统要求

- macOS 13 Ventura 或更高版本
- 从源码构建时需要 Swift 工具链;安装 Xcode Command Line Tools 即可
- 支持 Apple Silicon 与 Intel Mac
- 当前菜单栏界面为简体中文

## 使用方法

### 1. 构建并启动
### 1. 下载并启动

进入仓库目录后运行:
前往 [GitHub Releases](https://github.com/Raymond711xl/AgentAwake/releases/latest):

```bash
chmod +x scripts/build-app.sh scripts/build-icon.sh
./scripts/build-app.sh
open dist/AgentAwake.app
```
1. 按本机芯片下载对应文件:
- M1、M2、M3、M4 等苹果芯片:`AgentAwake-x.y.z-Apple-Silicon.dmg`;
- Intel 芯片:`AgentAwake-x.y.z-Intel.dmg`。
2. 双击 DMG,在打开的窗口中双击 `AgentAwake.app` 即可使用;如果准备长期使用,
建议先将 App 拖入“应用程序”,尤其是在启用“登录时启动”前。

构建脚本会生成并临时签名 `dist/AgentAwake.app`,同时把 APP 图标、主程序和
Hooks helper 打包进去。首次启动后,AgentAwake 只出现在菜单栏,不显示 Dock
图标。
如果不知道芯片类型,点击苹果菜单  →“关于本机”,查看“芯片”或“处理器”。

> **首次打开被 macOS 阻止时:**先尝试双击一次并关闭提示,然后打开
> “系统设置 → 隐私与安全性”,向下滚动,在 AgentAwake 提示旁点击“仍要打开”,
> 再确认“打开”(可能需要输入登录密码)。这只需操作一次,以后可以直接双击。
> 本版本采用 ad-hoc 签名,因此不会显示已验证的 Apple 开发者身份;不需要终端命令。

首次启动后,AgentAwake 会自动展开一次菜单栏面板,之后只保留菜单栏图标,
不显示 Dock 图标。三个定时模式此时已经可以使用,不需要继续配置。

### 2. 选择保护模式

1. 点击菜单栏中的星星与三个 `Z` 图标。
1. 点击菜单栏中的四角十字星与单个 `Z` 图标。
2. 拖动滑块选择 30 分钟、1 小时、2 小时或 Agent。
3. 需要立即停止时,把滑块拖回“未开启”;临时断言会马上释放。

固定时长模式会立即开始倒计时。Agent 模式在没有任务时只等待,
检测到 Codex 或 Claude 工作后才接管休眠。

### 3. 安装 Agent Hooks(推荐)
### 3. 可选设置

先完成 App 构建,再运行幂等安装器:
点击菜单栏面板底部的“设置”,可以按需管理:

```bash
./dist/AgentAwake.app/Contents/Helpers/AgentAwakeHookSetup install
```
- 登录时启动;
- Codex Hooks;
- Claude Hooks。

安装器会:
Agent 模式默认读取本机已有的 Codex 与 Claude 活动记录,因此 Hooks 不是使用
前置条件。设置页会标明本机检测状态,只允许为实际存在的 Agent 安装 Hooks,
不会为未安装的软件创建配置。
AgentAwake 不负责安装或运行大模型;相关 Agent 由用户自行配置,App 只读取
已有的本地状态。
用户明确点击安装后,App 才会:

- 把一次性 Hook helper 安装到
`~/Library/Application Support/AgentAwake/bin/AgentAwakeHook`;
Expand All @@ -105,14 +122,8 @@ Codex 会要求审核非托管命令 Hook。安装后在 Codex CLI 输入 `/hook
检查命令路径并信任新增的 AgentAwake Hooks;未信任前 Codex 会跳过它们。
Claude 的用户级设置会自动加载。

不安装 Hooks 也可以使用 Agent 模式,App 会自动启用本地任务日志兜底,
只是状态变化可能不如 Hooks 及时。

移除适配器:

```bash
./dist/AgentAwake.app/Contents/Helpers/AgentAwakeHookSetup uninstall
```
不安装 Hooks 也可以使用 Agent 模式,只是状态变化可能不如 Hooks 及时。
安装、修复和移除均在设置页完成,不需要终端。

## 如何确认没有修改系统设置

Expand Down Expand Up @@ -155,6 +166,14 @@ app-server、sandbox 和流式进程可能长期常驻。

## 开发与验证

从源码构建需要 Swift 工具链;安装 Xcode Command Line Tools 即可。

构建 Apple Silicon 与 Intel 发布镜像:

```bash
./scripts/package-release.sh
```

运行零依赖自检:

```bash
Expand All @@ -174,14 +193,16 @@ swift run --disable-sandbox AgentAwakeSelfTest
```text
Sources/AgentAwake/ 菜单栏界面与 App 生命周期
Sources/AgentAwakeCore/ 保护会话、Agent 检测与 IOKit 断言
Sources/AgentAwakeSetupCore/ 可选集成的检测、安装、修复与移除
Sources/AgentAwakeHook/ 单次生命周期 Hook helper
Sources/AgentAwakeHookSetup/ Hooks 安装与卸载
Resources/ Info.plist 与 APP 图标
scripts/ App 和图标构建脚本
docs/RELEASING.md 双架构 DMG 与 GitHub Release 流程
```

## 当前边界

AgentAwake 当前面向本机运行的 Codex 与 Claude,并以源码构建方式提供。
它不是系统电源设置管理器,也不会替代 macOS 原有的睡眠策略;它只在所选窗口内
临时延后空闲休眠。
AgentAwake 的定时模式不依赖任何 Agent;Agent 感知模式当前支持本机运行的
Codex 与 Claude。它不是系统电源设置管理器,也不会替代 macOS 原有的睡眠
策略;它只在所选窗口内临时延后空闲休眠。
Loading
Loading