CloneWatch is a macOS-first cloning, verification, and storage-migration project.
- A native
SwiftUIapp skeleton forCloneWatch v2 - A reusable
CloneWatchCoremodule for preflight, copying, inventory, verification, and audit bundles - A docs tool that preserves the original ChatGPT project history by extracting the provided PDFs into Markdown
- Legacy project memory and the earlier
scan_clone.pyscript for historical reference
docs/roadmap/macos-first-class-adoption.md: prioritized adoption map (Now / Next / Later / Pending integral)docs/roadmap/v1-productized-gates.md: gate-based path to productized V1docs/decisions/macos-prioritization-framework.md: decision rule for high-impact feature intakedocs/collab/protocol.md: multi-agent operating protocol with Single Writer as defaultdocs/collab/agent-capability-matrix.md: practical role/risk matrix for external agentic appsdocs/github/auth-access-policy.md: GitHub auth/access model (principal + break-glass)docs/github/codex-commit-pr-instructions.md: copy-paste commit/PR settings for CodexCHANGELOG.md: detailed change history
CloneWatch is being designed around five capability bands:
- Clone
- Verify
- Document
- Migrate
- DiskOps
Important architectural rules:
- The GUI should not run fully as
root - Normal operations should run as the user whenever possible
- Privileged storage operations should move into a narrow helper later
- Full Disk Access must be detected and guided, not silently granted
- iCloud / File Provider locations must be treated as higher-risk paths
Sources/CloneWatchApp: macOS SwiftUI appSources/CloneWatchCore: domain models and enginesSources/CloneWatchDocsTool: PDF extraction and transcript reconstruction toolTests/CloneWatchCoreTests: basic automated testsdocs/: architecture, memory, chat transcript, and reconstruction notesscan_clone.py: legacy script kept as project history
swift build
swift test
swift run CloneWatchDocsToolYou can already try the base macOS app on this Mac.
Simplest path:
- Open
Xcode - Choose
File > Open... - Open
/Users/Shared/Pruebas/CloneWatch - Select the
CloneWatchAppscheme - Press
Run
Terminal path:
cd /Users/Shared/Pruebas/CloneWatch
swift run CloneWatchAppWhat this means in beginner language:
- if it builds, the code can be translated into a runnable app
- if it runs, you can already inspect the current wizard and flow on your Mac
- this does not mean "finished V1 product", only that the base app is viable
The healthy loop is:
- Make changes locally
- Review them
- Commit them with a clear message
- Push them to GitHub
- Open a Pull Request for bigger changes
Suggested branch strategy:
main: stable baselinefeature/...: new workfix/...: bug fixesdocs/...: documentation-only changes
This repo now includes baseline GitHub automation:
CI: builds and tests the project on pushes and pull requestsDocs History Validation: reruns the chat-history extraction pipeline and fails if generated files were not committedCodeQL: scans the Swift codebase for security issuesCodeQLruns are prioritized formainand scheduled scans; Dependabot-triggered runs are skipped to reduce low-value noiseDependabot: proposes batched monthly updates for GitHub Actions and Swift dependencies (limited concurrent PRs to reduce noise)Memory Guard: if architecture/runtime/automation files change, memory files must also be updated in the same PR/commit (clonewatch.mdordocs/project-memory.md)Project Records Guard: major changes must update roadmap and/or changelog (docs/roadmap/macos-first-class-adoption.mdorCHANGELOG.md)Collab Guard: critical changes must include session-trace evidence (docs/collab/session-log.jsonland/ordocs/collab/handoffs/*)
These automations are healthy because they protect quality and security without making uncontrolled changes to your code.
This repo is currently authenticated for GitHub CLI on this Mac. Keep credentials rotated and least-privileged.
Operational status snapshot:
- local
swift buildpasses - local
swift testpasses - base app is runnable locally
- GitHub Actions is still blocked by an infra/account-level incident where jobs fail before running steps
See:
docs/github/actions-root-cause-incident.mddocs/github/actions-triage.md
This development environment is now configured to push using SSH to:
git@github.com:thelaunchpadtlp/clonewatch.git
Operational policy:
- Codex may execute
push origindirectly when the user requests it or when required to complete an agreed workflow. - Pushes should stay scoped to reviewed changes and clear commit messages.
- This capability depends on local machine SSH configuration and can be rotated/revoked at any time from GitHub SSH keys.
Default execution policy (from now on):
- After implementing agreed changes and running relevant checks, Codex will push to
origin/mainautomatically unless the user explicitly says not to push. - If a push involves non-obvious risk (for example destructive behavior, major refactors, or unresolved failures), Codex should pause and request confirmation before pushing.
- When a plan is approved, memory update is mandatory as the first implementation step (
clonewatch.md+docs/project-memory.md).
Single Writer means only one active tool/agent edits the repo at a time.
Why this helps:
- avoids overwrite conflicts
- keeps history understandable
- makes handoff between apps reliable
Minimal command flow:
tools/collab/begin-session.sh --owner "Your Name" --agent-app "ChatGPT Desktop" --session-id "session-001"
swift build
swift test
tools/collab/record-step.sh --owner "Your Name" --agent-app "ChatGPT Desktop" --session-id "session-001" --event "VALIDATE" --message "Build and tests passed."
tools/collab/handoff.sh --owner "Your Name" --agent-app "ChatGPT Desktop" --session-id "session-001" --summary "Implemented scoped changes and validated."
tools/collab/release-lock.sh --owner "Your Name" --agent-app "ChatGPT Desktop" --session-id "session-001"If the session was interrupted, use:
tools/collab/recover-interrupted-session.sh --owner "Your Name" --agent-app "ChatGPT Desktop" --session-id "session-002"Official nomenclature:
- externos = external apps/agents/developers/AI systems outside the active writer session.
Official channels:
docs/collab/external-inbox/for incoming tasksdocs/collab/external-outbox/for progress/results back to externos
Fast commands:
tools/collab/external-new-task.sh ...
tools/collab/external-claim-task.sh ...
tools/collab/external-update-task.sh ...Every external-task event must also exist in:
docs/collab/session-log.jsonldocs/collab/collab.sqlite
If Claude Desktop or another externo joins during an active Codex writer session:
- preferred mode is analysis first
- externo should read the repo, docs, GitHub state, and incident records
- externo should return findings/action items through the external inbox/outbox flow
- externo should not write into the shared workspace until the writer session is explicitly handed off
Local note:
- a local
.claude/directory was observed after Claude Desktop interaction - treat that directory as local tool state, not shared project state, unless a later policy explicitly promotes it into the repo