Files
claude-code-conduit/claude-info/contributing.md
mikael-lovqvists-claude-agent dd7743501a Add runtime policy overrides and TUI policy management view
- server/policy_overrides.mjs: persistent group/action override store
- Group toggle: disabling a group forces all its actions to auto-deny without
  touching individual overrides; re-enabling restores them intact
- Action overrides: cycle auto-accept/queue/auto-deny/clear per action
- Effective policy resolution in index.mjs: group > action override > hardcoded default
- auth.mjs: add check_can_manage_policies (requires canApprove.length > 0)
- Three new endpoints: GET /policies, POST /policies/group/:group, POST /policies/action/:action
- client/conduit.mjs: get_policies, set_group_policy, set_action_policy
- ccc-queue.mjs: policy view (Tab to switch); group/action panel with space/e/←/→
- actions.mjs: group fields on desktop/email/calendar actions; list-actions includes group
- config.example.json: add policy_overrides key
- Bump version to 1.3.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 16:01:45 +00:00

2.3 KiB

Contributing checklist

Use this when adding any non-trivial feature to CCC. Go through every section — skipping docs or config is a common mistake.


Adding a new action (simple — no new service)

  • Add the action definition to server/actions.mjs
  • Update the actions table in README.md
  • If the action has special behavior, add a note under the table
  • Update claude-info/architecture.md if ctx shape changes

Adding a new injectable service (e.g. a new API integration)

Code

  • Create server/<service>.mjs with a factory function create_<service>(cfg)
  • Extend server/config.mjs to read and return the new config block (resolve paths relative to config dir)
  • Import and instantiate in server/index.mjs; handle missing config gracefully (warn, set to null)
  • Add the service to the make_ctx() return object in index.mjs
  • Add actions to server/actions.mjs; guard with if (!ctx.<service>) throw new Error('<service> not configured')
  • If setup requires a one-time manual step (OAuth, keygen, etc.) add a bin script in bin/
  • Add new dependencies to package.json and add bin scripts to the bin map

Config

  • Add the new config block to config.example.json

Documentation

  • Update README.md:
    • Add new actions to the actions table
    • Add a setup section explaining prerequisites and one-time steps
    • Update the ctx comment in "Adding actions" if ctx changed
  • Update claude-info/architecture.md:
    • Add the new service to the ctx shape block
    • Note any new files in the file layout
    • Update the permission model section if a new permission gate was added
  • Update or add a plan file in claude-info/ — mark status as implemented
  • Update CLAUDE.md — mark the plan entry as done

Git

  • git status — read every line before staging
  • Stage files explicitly by name (never git add -A or git add .)
  • Bump version in package.json if this is a meaningful release
  • Commit with a clear message describing what was added
  • Check git identity is set correctly for this repo (git config user.name)

After commit

  • Tell the user to run npm install if new dependencies were added
  • Tell the user about any one-time setup steps required before the feature works