By Acture
Nudge to work task-management-first: before acting, check your configured sync channels (a task tracker, project notes, an experiment tracker, ...) for blockers / in-progress work / recent decisions; after state changes, write status and results back. Channels are configurable via TOML (global + per-project). Tool- and project-agnostic.
A portable Claude Code plugin that instills a task-management-first habit: before you act, check the project's tracker and notes; after you change state, write the result back. Tool- and project-agnostic, configurable per project, and installable across Claude Code, Codex CLI, and Copilot CLI.
This repo is a git-repo marketplace hosting one plugin (project-sync).
The plugin ships two complementary pieces:
| Piece | Mechanism | Behavior |
|---|---|---|
Hook (UserPromptSubmit) | Fires automatically every prompt | Injects a reminder to consult your sync channels first; if the previous turn made state changes (edits, commits, issue saves, …), appends a "sync those changes back" nudge. |
Skill (project-sync) | Model-invoked when the task matches | The portable reminder core — a before/after playbook the model loads when starting or finishing a unit of work. |
Why both? A skill is loaded only when the model judges it relevant; only a plugin can register a hook that fires unconditionally. The hook is the auto-fire path; the skill is the graceful fallback on CLIs where hook context-injection isn't honored (see Cross-CLI support).
Behavior is driven by sync channels — each maps a purpose to a tool and
the phase(s) it applies to (before / after). Config is layered, later
sources overriding earlier ones by purpose (case-insensitive):
task plans → Linear and decisions / notes → Notion,
both before and after.$XDG_CONFIG_HOME/project-sync/config.toml
(default ~/.config/project-sync/config.toml)..project-sync.toml walking up from the cwd.# .project-sync.toml — extends/overrides the global + default channels
[[channel]]
purpose = "task plans"
tool = "Linear"
when = ["before", "after"]
[[channel]]
purpose = "experiment results/logs"
tool = "Trackio"
when = ["after"] # write-back only
tool names a kind of destination. The agent adapts to whatever MCP actually
exists on the machine — the hook never hardcodes per-host MCP tool names. See
project-sync.example.toml for a full example.
Once this repo is on GitHub (e.g. Acture/project_sync — confirm your slug):
| CLI | How to register |
|---|---|
| Claude Code | claude plugin marketplace add Acture/project_sync, then /plugin → enable project-sync. Or edit ~/.claude/settings.json: add the repo to extraKnownMarketplaces and "project-sync@claude-project-sync": true to enabledPlugins. |
| Codex | Edit ~/.codex/config.toml: add a [marketplaces.claude-project-sync] git source and [plugins."project-sync@claude-project-sync"] enabled = true. |
| Copilot | Edit ~/.copilot/settings.json: add "project-sync@claude-project-sync": true to enabledPlugins. |
For local testing before pushing:
claude plugin marketplace add ~/repos/project_sync (point at this path).
additionalContext injection is honored is CLI-confirmed only on Claude
Code. On those CLIs, treat the skill as the reliable path; the hook is a
best-effort bonus.Minimum bar on all three CLIs: the skill is model-invocable.
The hook is stdlib-only Python (no dependencies), so plain python3 runs it on
macOS / Linux / WSL.
# Run the test suite
python3 -m unittest discover -s tests -v
# Smoke-test the hook directly
echo '{"transcript_path":"/tmp/none"}' | python3 plugins/project-sync/hooks/project_sync_prompt.py
project_sync/
.claude-plugin/marketplace.json # marketplace manifest
project-sync.example.toml # example channel config
plugins/project-sync/
.claude-plugin/plugin.json
hooks/
hooks.json # registers the UserPromptSubmit hook
project_sync_prompt.py # stdlib-only, config-driven
skills/project-sync/SKILL.md
tests/test_project_sync_prompt.py
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
npx claudepluginhub acture/project_sync --plugin project-syncPermanent coding companion for Claude Code — survives any update. MCP-based terminal pet with ASCII art, stats, reactions, and personality.
Intelligent prompt optimization: injects the right context at the right moment so Claude lands a better first output. Clarifies vague prompts with research-based questions, plus targeted nudges for approach selection, plan readability, workflow routing, background execution, subagent routing, output readability, user-decision questions, and plan-mode assessment
Semantic search for Claude Code conversations. Remember past discussions, decisions, and patterns.