name: implement description: Implement a feature, bug fix, or code change in sfdx-hardis. Use whenever the user asks to add a feature, fix a bug, implement something, or make a code change - with or without a prior /design phase. disable-model-invocation: true allowed-tools: Read Glob Grep Write Edit Bash Agent argument-hint: "[feature or change to implement]" model: opus
You are a developer working on the sfdx-hardis project.
Implement the requested changes. If a prior /design conversation exists, follow that specification. Otherwise, derive the implementation plan from the user's request and the existing codebase - explore relevant files with Glob/Grep before writing any code.
Read .claude/rules/ for coding conventions, i18n rules, and translation rules before making changes.
Related agents: this skill mirrors the
implementsubagent (same conventions, on Opus for the core code). It stays inline so it can follow the prior/designconversation and orchestrate cheaper helper agents. Two recurring subtasks can be delegated to keep Opus focused on the code:
- i18n key propagation across the 9 locales -> the
i18n-translateagent (Sonnet).- The CHANGELOG entry -> the
changelogagent (Haiku).Delegate these only when running through this skill (the main loop). Run the core edits yourself.
Process
- Understand what to implement: If a
/designspec exists in the conversation, follow it. Otherwise, read the user's request, grep for relevant existing code, and form a clear implementation plan before writing anything. - Implement changes following project conventions:
- Use
.jsimport extensions - Use
uxLog()withchalkfor logging (no emojis at line start) - Use
t()for all user-visible strings - Use
fs-extrafor file operations - Use
prompts()for user input - Follow the provider pattern for external integrations
- In
src/commands/**files, keep only the command class declaration in the file body; move interfaces, types, and helper functions to sibling utility modules. - Allowed exception: top-level
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url)andconst messages = Messages.loadMessages(...)can remain in command files.
- Use
- Add translations: If new i18n keys were introduced, add them to all 9 locale files (
en,de,es,fr,it,ja,nl,pl,pt-BR), sorted alphabetically. For more than a couple of keys, delegate this to thei18n-translateagent (Sonnet) via the Agent tool - pass it the English keys and text. - Update command description: If you add, remove, or change the behavior of a command in
src/commands/**, update its staticdescriptionproperty to accurately reflect the new behavior. Follow the format in thedocumentationskill:## Command Behaviorsection listing key features, and a<details>Technical explanations</details>block. If the command gains or loses an--agentflag, update the### Agent Modesection accordingly and updatedocs/salesforce-agentic-automation.md. - Update JSON schema: If a config property is added or modified (anything read via
getConfig()), updateconfig/sfdx-hardis.jsonschema.jsonto match. Each property needs$id,description,title,type, and optionallydefault,enum,examples,docUrl. - Verify patterns: Ensure new code matches existing patterns in the codebase.
- Update CHANGELOG.md: Add a bullet under
## [beta] (master). Be radically concise: announce the feature in ONE short line per entry, nothing more. Readers who want details click the command's doc URL. You can delegate this single line to thechangelogagent (Haiku) via the Agent tool - pass it a short description of the change and the command path if any.- One line per entry. No sub-bullets, no enumerations of flags / env vars / config keys / behavior details. Those live in the command's
descriptionand the auto-generated docs page. - Write for end users, not developers. State what they can now do (or what was fixed) - omit class names, method names, file paths, i18n keys, TypeScript types, flag names, default-value numbers, status codes, internal field names, Setup paths.
- If a new command was added, include a link:
[hardis:topic:action](https://sfdx-hardis.cloudity.com/hardis/topic/action/). If an existing command was modified, reference it the same way. - Avoid run-on sentences. If the entry needs commas or "and" three times, you are over-explaining - trim until it fits one line.
- Example - good:
- New [hardis:org:diagnose:mfa](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/mfa/): Audit MFA configuration and prepare for Salesforce's July 1 2026 phishing-resistant MFA enforcement. - Example - too verbose (do NOT do this):
All the bullets above belong in the command's- New [hardis:org:diagnose:mfa](...): Audit MFA. - Primary check: phishing-resistant MFA readiness via VerificationHistory. - Five additional checks: org-wide MFA enforcement, ... - New `--lookback-days`, `--ignore-users`, `--privileged-permissions` flags. - New `monitoringMfaIgnoreUsers` config key. - Wired into monitor:all at weekly frequency.descriptionand the docs page, not the changelog. - Exception: a sub-bullet is acceptable ONLY when a single behavior change has a critical user-visible aspect that cannot wait for the docs (e.g. a breaking migration, a required follow-up action). Default to no sub-bullets.
- One line per entry. No sub-bullets, no enumerations of flags / env vars / config keys / behavior details. Those live in the command's
Continue iterating until all changes from the design are implemented. Do not stop to ask whether to continue.
$ARGUMENTS