From d50b9a4a7c1886ff207ed302dd5dd1004aedc79b Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 9 Mar 2026 17:19:21 +0000
Subject: [PATCH 1/2] Initial plan


From ce18364a6108cd3c039978f8dd1d66bd52a0603b Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 9 Mar 2026 17:25:11 +0000
Subject: [PATCH 2/2] Fix CLI consistency issues: remove emojis from help
 strings, fix config group, update uninstall description, fix --yes trailing
 period

- Add invoke_without_command=True to config group so bare `apm config` shows config
- Remove emojis from command help strings (init, install, update, compile)
- Remove emojis from compile option descriptions (5 options)
- Remove emojis from deps subcommand help strings (list, tree, clean, update, info)
- Fix trailing period on runtime remove --yes option
- Update uninstall help to reflect full scope
- Remove emojis from all docs/cli-reference.md section headings

Co-authored-by: danielmeppiel <51440732+danielmeppiel@users.noreply.github.com>
---
 docs/cli-reference.md        | 50 ++++++++++++++++++------------------
 src/apm_cli/cli.py           | 24 ++++++++---------
 src/apm_cli/commands/deps.py | 10 ++++----
 3 files changed, 42 insertions(+), 42 deletions(-)

diff --git a/docs/cli-reference.md b/docs/cli-reference.md
index 3f0658024..4f97220a0 100644
--- a/docs/cli-reference.md
+++ b/docs/cli-reference.md
@@ -60,7 +60,7 @@ apm [OPTIONS] COMMAND [ARGS]...
 
 ## Core Commands
 
-### `apm init` - 🚀 Initialize new APM project
+### `apm init` - Initialize new APM project
 
 Initialize a new APM project with minimal `apm.yml` configuration (like `npm init`).
 
@@ -104,7 +104,7 @@ apm init my-project --yes
 - `description` - Generated from project name
 - `version` - Defaults to "1.0.0"
 
-### `apm install` - 📦 Install APM and MCP dependencies
+### `apm install` - Install APM and MCP dependencies
 
 Install APM package and MCP server dependencies from `apm.yml` (like `npm install`). Auto-creates minimal `apm.yml` when packages are specified but no manifest exists.
 
@@ -259,7 +259,7 @@ Skills are copied directly to target directories:
 
 This makes all package prompts available in VSCode, Claude Code, and compatible editors for immediate use with your coding agents.
 
-### `apm uninstall` - 🗑️ Remove APM packages
+### `apm uninstall` - Remove APM packages
 
 Remove installed APM packages and their integrated files.
 
@@ -310,7 +310,7 @@ apm uninstall microsoft/apm-sample-package --dry-run
 - Cleans up empty parent directories
 - Safe operation: only removes files tracked in the `deployed_files` manifest
 
-### `apm prune` - 🧹 Remove orphaned packages
+### `apm prune` - Remove orphaned packages
 
 Remove APM packages from `apm_modules/` that are not listed in `apm.yml`, along with their deployed integration files (prompts, agents, hooks, etc.).
 
@@ -335,7 +335,7 @@ apm prune --dry-run
 - Removes deployed integration files (prompts, agents, hooks, etc.) for pruned packages using the `deployed_files` manifest in `apm.lock`
 - Updates `apm.lock` to reflect the pruned state
 
-### `apm update` - ⬆️ Update APM to the latest version
+### `apm update` - Update APM to the latest version
 
 Update the APM CLI to the latest version available on GitHub releases.
 
@@ -378,7 +378,7 @@ If the automatic update fails, you can always update manually:
 curl -sSL https://raw.githubusercontent.com/microsoft/apm/main/install.sh | sh
 ```
 
-### `apm deps` - 🔗 Manage APM package dependencies
+### `apm deps` - Manage APM package dependencies
 
 Manage APM package dependencies with installation status, tree visualization, and package information.
 
@@ -386,7 +386,7 @@ Manage APM package dependencies with installation status, tree visualization, an
 apm deps COMMAND [OPTIONS]
 ```
 
-#### `apm deps list` - 📋 List installed APM dependencies
+#### `apm deps list` - List installed APM dependencies
 
 Show all installed APM dependencies in a Rich table format with per-primitive counts.
 
@@ -415,7 +415,7 @@ apm deps list
 - Source information
 - Per-primitive counts (prompts, instructions, agents, skills)
 
-#### `apm deps tree` - 🌳 Show dependency tree structure
+#### `apm deps tree` - Show dependency tree structure
 
 Display dependencies in hierarchical tree format with primitive counts.
 
@@ -447,7 +447,7 @@ company-website (local)
 - Version numbers from dependency package metadata
 - Version information for each dependency
 
-#### `apm deps info` - ℹ️ Show detailed package information
+#### `apm deps info` - Show detailed package information
 
 Display comprehensive information about a specific installed package.
 
@@ -474,7 +474,7 @@ apm deps info design-guidelines
 - Agent workflow descriptions and counts
 - Installation path and status
 
-#### `apm deps clean` - 🧹 Remove all APM dependencies
+#### `apm deps clean` - Remove all APM dependencies
 
 Remove the entire `apm_modules/` directory and all installed APM packages.
 
@@ -494,7 +494,7 @@ apm deps clean
 - Displays count of packages that will be removed
 - Can be cancelled with Ctrl+C or 'n' response
 
-#### `apm deps update` - 🔄 Update APM dependencies
+#### `apm deps update` - Update APM dependencies
 
 Update installed APM dependencies to their latest versions.
 
@@ -514,7 +514,7 @@ apm deps update
 apm deps update compliance-rules
 ```
 
-### `apm mcp` - 🔌 Browse MCP server registry
+### `apm mcp` - Browse MCP server registry
 
 Browse and discover MCP servers from the GitHub MCP Registry.
 
@@ -522,7 +522,7 @@ Browse and discover MCP servers from the GitHub MCP Registry.
 apm mcp COMMAND [OPTIONS]
 ```
 
-#### `apm mcp list` - 📋 List MCP servers
+#### `apm mcp list` - List MCP servers
 
 List all available MCP servers from the registry.
 
@@ -542,7 +542,7 @@ apm mcp list
 apm mcp list --limit 20
 ```
 
-#### `apm mcp search` - 🔍 Search MCP servers
+#### `apm mcp search` - Search MCP servers
 
 Search for MCP servers in the GitHub MCP Registry.
 
@@ -568,7 +568,7 @@ apm mcp search database --limit 5
 apm mcp search github
 ```
 
-#### `apm mcp show` - 📋 Show MCP server details
+#### `apm mcp show` - Show MCP server details
 
 Show detailed information about a specific MCP server from the registry.
 
@@ -595,7 +595,7 @@ apm mcp show a5e8a7f0-d4e4-4a1d-b12f-2896a23fd4f1
 - Available installation packages
 - Installation instructions
 
-### `apm run` - 🚀 Execute prompts
+### `apm run` - Execute prompts
 
 Execute a script defined in your apm.yml with parameters and real-time output streaming.
 
@@ -627,7 +627,7 @@ apm run llm --param service=api --param environment=prod
 - `0` - Success
 - `1` - Execution failed or error occurred
 
-### `apm preview` - 👀 Preview compiled scripts
+### `apm preview` - Preview compiled scripts
 
 Show the processed prompt content with parameters substituted, without executing.
 
@@ -650,7 +650,7 @@ apm preview start --param name="<YourGitHubHandle>"
 apm preview llm --param name="Alice"
 ```
 
-### `apm list` - 📋 List available scripts
+### `apm list` - List available scripts
 
 Display all scripts defined in apm.yml.
 
@@ -672,7 +672,7 @@ Available scripts:
   debug: RUST_LOG=debug codex hello-world.prompt.md
 ```
 
-### `apm compile` - 📝 Compile APM context into distributed AGENTS.md files
+### `apm compile` - Compile APM context into distributed AGENTS.md files
 
 Compile APM context files (chatmodes, instructions, contexts) into distributed AGENTS.md files with conditional sections, markdown link resolution, and project setup auto-detection.
 
@@ -822,7 +822,7 @@ The structure is entirely dictated by the instruction context found in `.apm/` a
 
 APM integrates seamlessly with [Spec-kit](https://github.com/github/spec-kit) for specification-driven development, automatically injecting Spec-kit `constitution` into the compiled context layer.
 
-### `apm config` - ⚙️ Configure APM CLI
+### `apm config` - Configure APM CLI
 
 Manage APM CLI configuration settings. Running `apm config` without subcommands displays the current configuration.
 
@@ -914,7 +914,7 @@ apm config set auto-integrate 1
 
 ## Runtime Management
 
-### `apm runtime` - 🤖 Manage AI runtimes
+### `apm runtime` - Manage AI runtimes
 
 APM manages AI runtime installation and configuration automatically. Currently supports three runtimes: `copilot`, `codex`, and `llm`.
 
@@ -927,7 +927,7 @@ apm runtime COMMAND [OPTIONS]
 - **`codex`** - OpenAI Codex CLI with GitHub Models support
 - **`llm`** - Simon Willison's LLM library with multiple providers
 
-#### `apm runtime setup` - ⚙️ Install AI runtime
+#### `apm runtime setup` - Install AI runtime
 
 Download and configure an AI runtime from official sources.
 
@@ -963,7 +963,7 @@ apm runtime setup llm
 - Uses runtime's native defaults (e.g., OpenAI for Codex)
 - No configuration files created by APM
 
-#### `apm runtime list` - 📋 Show installed runtimes
+#### `apm runtime list` - Show installed runtimes
 
 List all available runtimes and their installation status.
 
@@ -977,7 +977,7 @@ apm runtime list
 - Installation path and version
 - Configuration details
 
-#### `apm runtime remove` - 🗑️ Uninstall runtime
+#### `apm runtime remove` - Uninstall runtime
 
 Remove an installed runtime and its configuration.
 
@@ -991,7 +991,7 @@ apm runtime remove RUNTIME_NAME
 **Options:**
 - `--yes` - Confirm the action without prompting
 
-#### `apm runtime status` - 📊 Show runtime status
+#### `apm runtime status` - Show runtime status
 
 Display which runtime APM will use for execution and runtime preference order.
 
diff --git a/src/apm_cli/cli.py b/src/apm_cli/cli.py
index 50f47e92f..763230b30 100644
--- a/src/apm_cli/cli.py
+++ b/src/apm_cli/cli.py
@@ -310,7 +310,7 @@ def cli(ctx):
 cli.add_command(deps)
 
 
-@cli.command(help="🚀 Initialize a new APM project")
+@cli.command(help="Initialize a new APM project")
 @click.argument("project_name", required=False)
 @click.option(
     "--yes", "-y", is_flag=True, help="Skip interactive prompts and use auto-detected defaults"
@@ -635,7 +635,7 @@ def _validate_package_exists(package):
 
 
 @cli.command(
-    help="📦 Install APM and MCP dependencies (auto-creates apm.yml when installing packages)"
+    help="Install APM and MCP dependencies (auto-creates apm.yml when installing packages)"
 )
 @click.argument("packages", nargs=-1)
 @click.option("--runtime", help="Target specific runtime only (copilot, codex, vscode)")
@@ -972,7 +972,7 @@ def prune(ctx, dry_run):
         sys.exit(1)
 
 
-@cli.command(help="⬆️  Update APM to the latest version")
+@cli.command(help="Update APM to the latest version")
 @click.option("--check", is_flag=True, help="Only check for updates without installing")
 def update(check):
     """Update APM CLI to the latest version (like npm update -g npm).
@@ -1099,7 +1099,7 @@ def update(check):
         sys.exit(1)
 
 
-@cli.command(help="Remove APM packages from apm.yml and apm_modules")
+@cli.command(help="Remove APM packages, their integrated files, and apm.yml entries")
 @click.argument("packages", nargs=-1, required=True)
 @click.option(
     "--dry-run", is_flag=True, help="Show what would be removed without removing"
@@ -3899,7 +3899,7 @@ def _recompile(self, changed_file):
         sys.exit(1)
 
 
-@cli.command(help="🚀 Compile APM context into distributed AGENTS.md files")
+@cli.command(help="Compile APM context into distributed AGENTS.md files")
 @click.option(
     "--output",
     "-o",
@@ -3916,7 +3916,7 @@ def _recompile(self, changed_file):
 @click.option(
     "--dry-run",
     is_flag=True,
-    help="🔍 Preview compilation without writing files (shows placement decisions)",
+    help="Preview compilation without writing files (shows placement decisions)",
 )
 @click.option("--no-links", is_flag=True, help="Skip markdown link resolution")
 @click.option("--chatmode", help="Chatmode to prepend to AGENTS.md files")
@@ -3932,23 +3932,23 @@ def _recompile(self, changed_file):
 @click.option(
     "--single-agents",
     is_flag=True,
-    help="📄 Force single-file compilation (legacy mode)",
+    help="Force single-file compilation (legacy mode)",
 )
 @click.option(
     "--verbose",
     "-v",
     is_flag=True,
-    help="🔍 Show detailed source attribution and optimizer analysis",
+    help="Show detailed source attribution and optimizer analysis",
 )
 @click.option(
     "--local-only",
     is_flag=True,
-    help="🏠 Ignore dependencies, compile only local primitives",
+    help="Ignore dependencies, compile only local primitives",
 )
 @click.option(
     "--clean",
     is_flag=True,
-    help="🧹 Remove orphaned AGENTS.md files that are no longer generated",
+    help="Remove orphaned AGENTS.md files that are no longer generated",
 )
 @click.pass_context
 def compile(
@@ -4398,7 +4398,7 @@ def compile(
         sys.exit(1)
 
 
-@cli.group(help="Configure APM CLI")
+@cli.group(help="Configure APM CLI", invoke_without_command=True)
 @click.pass_context
 def config(ctx):
     """Configure APM CLI settings."""
@@ -4683,7 +4683,7 @@ def list():
 
 @runtime.command(help="Remove an installed runtime")
 @click.argument("runtime_name", type=click.Choice(["copilot", "codex", "llm"]))
-@click.confirmation_option(prompt="Are you sure you want to remove this runtime?")
+@click.confirmation_option(prompt="Are you sure you want to remove this runtime?", help="Confirm the action without prompting")
 def remove(runtime_name):
     """Remove an installed runtime from APM management."""
     try:
diff --git a/src/apm_cli/commands/deps.py b/src/apm_cli/commands/deps.py
index 305a99ae0..4519bbca6 100644
--- a/src/apm_cli/commands/deps.py
+++ b/src/apm_cli/commands/deps.py
@@ -22,7 +22,7 @@ def deps():
     pass
 
 
-@deps.command(name="list", help="📋 List installed APM dependencies")
+@deps.command(name="list", help="List installed APM dependencies")
 def list_packages():
     """Show all installed APM dependencies with context files and agent workflows."""
     try:
@@ -229,7 +229,7 @@ def list_packages():
         sys.exit(1)
 
 
-@deps.command(help="🌳 Show dependency tree structure")  
+@deps.command(help="Show dependency tree structure")  
 def tree():
     """Display dependencies in hierarchical tree format using lockfile."""
     try:
@@ -389,7 +389,7 @@ def _add_children(parent_branch, parent_repo_url, depth=0):
         sys.exit(1)
 
 
-@deps.command(help="🧹 Remove all APM dependencies")
+@deps.command(help="Remove all APM dependencies")
 def clean():
     """Remove entire apm_modules/ directory."""
     project_root = Path(".")
@@ -423,7 +423,7 @@ def clean():
         sys.exit(1)
 
 
-@deps.command(help="🔄 Update APM dependencies")
+@deps.command(help="Update APM dependencies")
 @click.argument('package', required=False)
 def update(package: Optional[str]):
     """Update specific package or all if no package specified."""
@@ -461,7 +461,7 @@ def update(package: Optional[str]):
         _update_all_packages(project_deps, apm_modules_path)
 
 
-@deps.command(help="ℹ️ Show detailed package information")
+@deps.command(help="Show detailed package information")
 @click.argument('package', required=True)
 def info(package: str):
     """Show detailed information about a specific package including context files and workflows."""
