Thanks for helping improve GoalPulse.
- Search existing issues.
- Run the latest
mainbuild when practical. - Include macOS version, Codex desktop version, GoalPulse version, and the exact command used.
- Redact usernames, absolute home paths, goal titles, thread IDs, tokens, and account data.
- Never upload a real
~/.codex/goals_*.sqlitedatabase.
Requirements:
- macOS 13+
- Xcode Command Line Tools
sqlite3(included with macOS)- Python 3 for the Codex plugin hook and tests
make build
make test
make test-plugin
./scripts/verify.sh
make cimake ci is the canonical pre-push entry point and is also called by the GitHub Actions macOS job. It verifies the app and plugin, runs the protocol and memory regressions, and builds both release archives. If act is installed, it also validates the workflow in strict dry-run mode. The project intentionally uses one small native Swift executable and shell-based packaging. Keep runtime dependencies at zero unless a change has a strong reason to add one.
- Create a focused branch.
- Keep unrelated formatting changes out of the patch.
- Add or update deterministic self-tests for behavior changes.
- Use synthetic fixtures for screenshots and database tests.
- Run
make cibefore opening the PR. - Update
CHANGELOG.mdwhen the change affects users.
The status-only app-server protocol, Desktop IPC protocol, and goal database are integration boundaries. If any changes:
- Document the observed Codex version.
- Preserve the final
thread/goal/getcheck before changing goal status. - Keep database access read-only.
- Do not add UI automation as an implicit fallback.
- Keep unattended approval handling fail-closed.
- Four spaces in Swift and two spaces in shell/YAML.
- Prefer clear names and small, testable helpers.
README.mdis the primary Chinese landing page;README.en.mdis its English translation. Keep theREADME.<language>.mdnaming pattern and update both for feature changes.- Keep
plugins/codex-goal-pulse/README.mdandplugins/codex-goal-pulse/README.en.mdaligned when plugin behavior changes. - Comments should explain why, not restate the code.
By contributing, you agree that your contribution is licensed under the repository’s MIT License.