From a20449255d97b6bce8328b0a15e8c34dcca3e39d Mon Sep 17 00:00:00 2001 From: Brandon Shippy Date: Wed, 5 Aug 2026 15:42:17 -0700 Subject: [PATCH 1/2] remove mcp ff, bump version, changelog update --- rust/crates/sift_cli/AGENTS.md | 8 ++++---- rust/crates/sift_cli/CHANGELOG.md | 14 ++++++++++++++ rust/crates/sift_cli/Cargo.toml | 4 ++-- rust/crates/sift_cli/src/cli/mod.rs | 6 ------ rust/crates/sift_cli/src/cmd/config/mod.rs | 1 - rust/crates/sift_cli/src/cmd/mod.rs | 9 +-------- rust/crates/sift_cli/src/main.rs | 8 +------- 7 files changed, 22 insertions(+), 28 deletions(-) diff --git a/rust/crates/sift_cli/AGENTS.md b/rust/crates/sift_cli/AGENTS.md index 1d1d07120..d8179349c 100644 --- a/rust/crates/sift_cli/AGENTS.md +++ b/rust/crates/sift_cli/AGENTS.md @@ -40,8 +40,8 @@ switch back to the default; each change applies to every detected client. Doctor reports both settings. Mixed modes or profiles are errors rather than values the CLI silently resolves. -The `agent` command and `mcp` sidecar remain behind the `mcp` Cargo feature until -the open-beta release explicitly changes that policy. +The `agent` command and `mcp` sidecar ship in every build. The prior `mcp` +Cargo feature was removed in 0.4.0. ## Updating the skill @@ -63,8 +63,8 @@ pressure, so every line should change what the agent does. From the repository root: ```sh -cargo build -p sift_cli --features mcp -cargo test -p sift_cli --features mcp cmd::agent +cargo build -p sift_cli +cargo test -p sift_cli cmd::agent ./target/debug/sift-cli agent doctor ``` diff --git a/rust/crates/sift_cli/CHANGELOG.md b/rust/crates/sift_cli/CHANGELOG.md index 9b1ece8a0..30bf1aa43 100644 --- a/rust/crates/sift_cli/CHANGELOG.md +++ b/rust/crates/sift_cli/CHANGELOG.md @@ -5,6 +5,8 @@ This project adheres to [Semantic Versioning](http://semver.org/). ## [Unreleased] +## [v0.4.0] - August 5, 2026 + ### What's New - Added `sift-cli agent install`, `update`, `doctor`, and `uninstall` for @@ -16,6 +18,18 @@ This project adheres to [Semantic Versioning](http://semver.org/). modes. - Consolidated the duplicated agent instructions into one canonical skill at `assets/skills/sift/SKILL.md`. +- The `agent` command and `mcp` sidecar are no longer behind a Cargo feature + and ship in every build. `cargo build -p sift_cli` now includes them by + default; the prior `--features mcp` flag is gone. +- Added top-level `sift-cli get jobs`, `get job `, `status job `, and + `wait job [ID ...]` commands. Enables the CI/CD pattern: fire imports + without `--wait`, capture each printed `Job ID:` line, then gate the + pipeline on a single `wait job` call. +- Import commands now print the assigned `Job ID: ` on the no-wait path + so scripts can capture it. +- Added an opt-in `test-reports` Cargo feature on `sift_mcp` (forwarded from + `sift_cli`) that gates the test-report tools. Off by default; enable with + `--features test-reports` when a build needs them. - Removed the project-scoped `install agent-skills` workflow. Existing Sift blocks in project `AGENTS.md` files must be removed manually because the new lifecycle is user-scoped. diff --git a/rust/crates/sift_cli/Cargo.toml b/rust/crates/sift_cli/Cargo.toml index 1113392eb..5276eb82c 100644 --- a/rust/crates/sift_cli/Cargo.toml +++ b/rust/crates/sift_cli/Cargo.toml @@ -1,9 +1,9 @@ [features] -mcp = [] +test-reports = ["sift_mcp/test-reports"] [package] name = "sift_cli" -version = "0.3.0" +version = "0.4.0" authors.workspace = true edition.workspace = true categories.workspace = true diff --git a/rust/crates/sift_cli/src/cli/mod.rs b/rust/crates/sift_cli/src/cli/mod.rs index e4653c16d..29e6332de 100644 --- a/rust/crates/sift_cli/src/cli/mod.rs +++ b/rust/crates/sift_cli/src/cli/mod.rs @@ -64,17 +64,14 @@ pub enum Cmd { Install(InstallCmd), /// Manage the Sift integration for detected AI coding clients - #[cfg(feature = "mcp")] #[command(subcommand)] Agent(AgentCmd), /// Start the Sift MCP server - #[cfg(feature = "mcp")] #[command(hide = true)] Mcp(McpArgs), } -#[cfg(feature = "mcp")] #[derive(clap::Args)] pub struct McpArgs { /// Expose destructive tools (updates, archives, restores). When omitted, @@ -101,7 +98,6 @@ pub enum InstallCmd { } /// Manage Sift's release-matched skill and MCP sidecar as one bundle. -#[cfg(feature = "mcp")] #[derive(Subcommand)] pub enum AgentCmd { /// Install every detected client in safe mode using the default profile unless selected @@ -117,7 +113,6 @@ pub enum AgentCmd { Uninstall, } -#[cfg(feature = "mcp")] #[derive(clap::Args)] pub struct AgentInstallArgs { /// Enable tools that modify or archive resources for every detected MCP client @@ -125,7 +120,6 @@ pub struct AgentInstallArgs { pub allow_destructive: bool, } -#[cfg(feature = "mcp")] #[derive(clap::Args)] pub struct AgentUpdateArgs { /// Enable tools that modify or archive resources for every detected MCP client diff --git a/rust/crates/sift_cli/src/cmd/config/mod.rs b/rust/crates/sift_cli/src/cmd/config/mod.rs index b9d2f2f80..616b8fdff 100644 --- a/rust/crates/sift_cli/src/cmd/config/mod.rs +++ b/rust/crates/sift_cli/src/cmd/config/mod.rs @@ -266,7 +266,6 @@ fn apply_profile_updates( Ok(()) } -#[cfg(feature = "mcp")] pub(super) fn inspect_app_uri(profile: Option<&str>) -> Result { let path = get_config_file_path()?; let contents = read_to_string(path).context("failed to read config file")?; diff --git a/rust/crates/sift_cli/src/cmd/mod.rs b/rust/crates/sift_cli/src/cmd/mod.rs index 79dcb375a..29c77d4eb 100644 --- a/rust/crates/sift_cli/src/cmd/mod.rs +++ b/rust/crates/sift_cli/src/cmd/mod.rs @@ -1,20 +1,16 @@ use crate::BIN_NAME; -#[cfg(feature = "mcp")] -use crate::util::app_uri::infer_app_uri; -use crate::util::app_uri::normalize_app_uri; +use crate::util::app_uri::{infer_app_uri, normalize_app_uri}; use anyhow::{Context as AnyhowContext, Result, anyhow}; use crossterm::style::Stylize; use std::{fs::read_to_string, io::ErrorKind, path::Path}; use toml::{Table, Value}; -#[cfg(feature = "mcp")] pub mod agent; pub mod config; pub mod doc; pub mod export; pub mod import; pub mod install; -#[cfg(feature = "mcp")] pub mod mcp; pub mod ping; pub mod version; @@ -125,7 +121,6 @@ impl Context { }) } - #[cfg(feature = "mcp")] pub fn require_app_uri(&self, profile: Option<&str>) -> Result<&str> { self.app_uri .as_deref() @@ -133,7 +128,6 @@ impl Context { } } -#[cfg(feature = "mcp")] fn app_uri_guidance(profile: Option<&str>, rest_uri: &str) -> String { let profile_name = profile.unwrap_or("default"); let profile_flag = profile.map_or_else(String::new, |profile| format!("--profile {profile} ")); @@ -264,7 +258,6 @@ apikey = "key" ); } - #[cfg(feature = "mcp")] #[test] fn mcp_requires_app_uri_with_profile_guidance() { let known = r#" diff --git a/rust/crates/sift_cli/src/main.rs b/rust/crates/sift_cli/src/main.rs index 2b6503386..e620da980 100644 --- a/rust/crates/sift_cli/src/main.rs +++ b/rust/crates/sift_cli/src/main.rs @@ -14,9 +14,7 @@ use util::tty::Output; use clap::{CommandFactory, Parser}; -#[cfg(feature = "mcp")] -use crate::cli::AgentCmd; -use crate::cli::InstallCmd; +use crate::cli::{AgentCmd, InstallCmd}; const BIN_NAME: &str = "sift-cli"; @@ -44,7 +42,6 @@ where runtime.block_on(fut) } -#[allow(dead_code)] fn run_future_mt(fut: F) -> Result where F: Future> + 'static, @@ -82,7 +79,6 @@ fn run(clargs: cli::Args) -> Result { cli::CompletionsCmd::Update => return cmd::install::completions::update(), }, }, - #[cfg(feature = "mcp")] Cmd::Agent(cmd) => match cmd { AgentCmd::Install(args) => return cmd::agent::install(clargs.profile, args), AgentCmd::Update(args) => { @@ -96,8 +92,6 @@ fn run(clargs: cli::Args) -> Result { let ctx = Context::new(clargs.profile.clone(), clargs.disable_tls)?; - // Mcp Server - #[cfg(feature = "mcp")] if let Cmd::Mcp(args) = cmd { let app_uri = match ctx.require_app_uri(clargs.profile.as_deref()) { Ok(app_uri) => app_uri.to_string(), From c96b37e69686afb20adcbebfd28876413f1287a2 Mon Sep 17 00:00:00 2001 From: Brandon Shippy Date: Wed, 5 Aug 2026 15:51:16 -0700 Subject: [PATCH 2/2] update changelog --- rust/crates/sift_cli/CHANGELOG.md | 45 ++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/rust/crates/sift_cli/CHANGELOG.md b/rust/crates/sift_cli/CHANGELOG.md index 30bf1aa43..65b5486b0 100644 --- a/rust/crates/sift_cli/CHANGELOG.md +++ b/rust/crates/sift_cli/CHANGELOG.md @@ -12,24 +12,39 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Added `sift-cli agent install`, `update`, `doctor`, and `uninstall` for stateless, lockstep management of the release-matched Sift skill and MCP sidecar across detected Claude Code, Codex, Cursor, and OpenCode clients. + Cursor and OpenCode support is new in this release. - Added safe-by-default, lockstep MCP access controls: install defaults to read-only, update preserves the existing mode, explicit flags enable or disable destructive tools for all detected clients, and doctor reports mixed modes. -- Consolidated the duplicated agent instructions into one canonical skill at - `assets/skills/sift/SKILL.md`. - The `agent` command and `mcp` sidecar are no longer behind a Cargo feature and ship in every build. `cargo build -p sift_cli` now includes them by default; the prior `--features mcp` flag is gone. -- Added top-level `sift-cli get jobs`, `get job `, `status job `, and - `wait job [ID ...]` commands. Enables the CI/CD pattern: fire imports - without `--wait`, capture each printed `Job ID:` line, then gate the - pipeline on a single `wait job` call. -- Import commands now print the assigned `Job ID: ` on the no-wait path - so scripts can capture it. +- Split the installed skill into a router (`SKILL.md`) plus dedicated + reference files under `references/` for better token efficiency and clearer + agent guidance. +- Added a `list_users` MCP tool. Combined with the other list tools, this + supports patterns like "runs I created" or "assets created by " + without guessing IDs. +- Added report-template MCP tools: `list_report_templates`, + `create_report_template`, and `update_report_template`. Templates bundle a + reusable set of rules that any `create_report` call can inherit via + `report_template_id`. +- Improved MCP filter guidance: agents default `is_archived == false` on + every list call, use regex/case-insensitive matching + (`name.matches("(?i)...")`) instead of `==` for text search, and always + pass `limit` to keep results within the context window. +- MCP tool calls no longer proceed on an empty list result. Empty lists + surface to the user for guidance instead of triggering a follow-up call + with an empty ID. - Added an opt-in `test-reports` Cargo feature on `sift_mcp` (forwarded from `sift_cli`) that gates the test-report tools. Off by default; enable with `--features test-reports` when a build needs them. +- Added `app_uri` as a required profile field. Profile setup now asks for the + web app origin. `sift-cli agent doctor` treats a missing value as an error and + prints the config command. `sift-cli mcp` does not expose tools for an + incomplete profile. MCP links now use only the selected profile value. The + MCP tool-list error includes the config command. - Removed the project-scoped `install agent-skills` workflow. Existing Sift blocks in project `AGENTS.md` files must be removed manually because the new lifecycle is user-scoped. @@ -38,11 +53,15 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Removed the MCP server, built-in prompt, and agent skill pages from the bundled `sift-cli` documentation. The agent-facing tool surface is documented in the installed skill instead. -- Added `app_uri` as a required profile field. Profile setup now asks for the - web app origin. `sift-cli agent doctor` treats a missing value as an error and - prints the config command. `sift-cli mcp` does not expose tools for an - incomplete profile. MCP links now use only the selected profile value. The - MCP tool-list error includes the config command. +- Replaced the ASCII loading indicator with a braille spinner across the + `agent` commands. + +### Bug Fixes + +- `create_report` now actually starts the rule evaluation for the new report + instead of leaving it in the initial state. +- Various fixes surfaced during the internal alpha across the MCP data, + reports, and rules tools. ## [v0.3.0] - July 13, 2026