Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 0 additions & 22 deletions config.example.toml
Original file line number Diff line number Diff line change
Expand Up @@ -994,11 +994,9 @@ max_subagents = 10 # optional (default 64, clamped to 1-128)
# ─────────────────────────────────────────────────────────────────────────────────
# Enables automatic claim-of-done verifier preview once the runtime trigger is
# active. Manual `run_verifiers` remains available even when this is false.
# The shipped policy maps pass/partial/fail to hunted/wounded/escaped.
#
# [verifier]
# enabled = false
# verdict_policy = "hunt"

# ─────────────────────────────────────────────────────────────────────────────────
# Advisor / Watcher (#3982)
Expand Down Expand Up @@ -1189,26 +1187,6 @@ exponential_base = 2.0
# Bash = 2048 # shell output synthesised aggressively
# Web = 8192 # web results can be large; give them more room

# ─────────────────────────────────────────────────────────────────────────────────
# Harness Profiles (preview schema; runtime consumption follows later)
# ─────────────────────────────────────────────────────────────────────────────────
# Harness profiles let future Codewhale runtime slices select model-specific
# prompt, context, tool, and subagent posture. v0.9 parses, validates, and can
# resolve profiles for tests/status plumbing, but normal Agent and Workflow
# runs do not silently promote or mutate behavior from these profiles yet.
#
# [[harness_profiles]]
# provider_route = "deepseek"
# model_pattern = "deepseek-v4.*"
#
# [harness_profiles.posture]
# kind = "cache-heavy" # standard | cache-heavy | lean | custom
# max_subagents = 10 # 0 means runtime default
# prefer_codebase_search = false
# compaction_strategy = "prefix-cache" # default | prefix-cache | aggressive
# tool_surface = "full" # full | read-only | auto
# safety_posture = "standard" # standard | strict | permissive

# ─────────────────────────────────────────────────────────────────────────────────
# Profile Example (for multiple environments)
# ─────────────────────────────────────────────────────────────────────────────────
Expand Down
25 changes: 1 addition & 24 deletions crates/cli/src/config_bundles.rs
Original file line number Diff line number Diff line change
Expand Up @@ -845,7 +845,7 @@ pub fn export_bundle(
metadata: BundleMetadata,
) -> Result<PortableBundle> {
let mut preferences = BundleTable::default();
let mut profiles = BundleTable::default();
let profiles = BundleTable::default();
let mut global = BundleTable::default();
let mut project = BundleTable::default();

Expand All @@ -855,9 +855,6 @@ pub fn export_bundle(
ExportSection::Preferences => {
preferences.entries.insert(key, value);
}
ExportSection::Profiles => {
profiles.entries.insert(key, value);
}
ExportSection::Global => {
global.entries.insert(key, value);
}
Expand Down Expand Up @@ -918,16 +915,12 @@ const MACHINE_SPECIFIC_KEYS: [&str; 14] = [

enum ExportSection {
Preferences,
Profiles,
Global,
Project,
Drop,
}

fn export_section_for(key: &str, scope: BundleScope) -> ExportSection {
if key.starts_with("harness") || key.contains("harness_profiles") {
return ExportSection::Profiles;
}
if key.starts_with("skills") || key.starts_with("tools") || key.starts_with("snapshots") {
return ExportSection::Preferences;
}
Expand Down Expand Up @@ -2231,28 +2224,12 @@ max_age_days = 11
[portable_table]
enabled = true
count = 4

[[harness_profiles]]
provider_route = "deepseek"
model_pattern = "deepseek-v4-*"

[harness_profiles.posture]
kind = "custom"
max_subagents = 3
prefer_codebase_search = true
compaction_strategy = "prefix-cache"
tool_surface = "read-only"
safety_posture = "strict"
"#,
)
.expect("typed config parses");

let bundle = export_bundle(&config, BundleScope::Global, BundleMetadata::default())
.expect("typed export");
assert!(matches!(
bundle.profiles.entries.get("harness_profiles"),
Some(toml::Value::Array(_))
));
assert!(matches!(
bundle.preferences.entries.get("skills"),
Some(toml::Value::Table(_))
Expand Down
2 changes: 0 additions & 2 deletions crates/command-contract/src/types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,6 @@ pub enum CommandReasoningEffort {
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CommandMode {
Agent,
Auto,
Yolo,
Plan,
Operate,
}
Expand Down
29 changes: 8 additions & 21 deletions crates/config/src/app_mode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,13 @@
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AppMode {
Agent,
Auto,
/// Legacy compatibility alias; resolves to [`Self::Agent`] + bypass approvals.
Yolo,
Plan,
Operate,
}

impl AppMode {
/// Productive keyboard cycle: Plan -> Act -> Operate -> Plan.
///
/// `Auto` remains an internal variant while the real implementation is
/// redesigned; do not expose it through user-facing mode selection (#3733).
/// `Yolo` is kept for parse/back-compat only and is not in the Tab cycle.
/// Operate joins the visible cycle as the always-on pod operation:
/// a lead plans slices, then workers execute against an optional burn rate.
pub const CYCLE: [Self; 3] = [Self::Plan, Self::Agent, Self::Operate];
Expand All @@ -30,9 +24,12 @@ impl AppMode {
"agent" | "act" | "work" | "auto" | "1" => Some(Self::Agent),
"plan" | "2" => Some(Self::Plan),
"operate" | "operation" | "ops" | "3" => Some(Self::Operate),
// Invisible one-way permission shorthand only — never a visible mode.
// Invisible one-way permission shorthand only — never a visible
// mode. These spellings resolve to Act; the bypass posture they
// imply is carried by the permission surface (settings load,
// CLI/runtime wire), not by a mode.
"yolo" | "4" | "bypass" | "bypass-permissions" | "bypasspermissions" => {
Some(Self::Yolo)
Some(Self::Agent)
}
_ => None,
}
Expand All @@ -51,9 +48,6 @@ impl AppMode {
pub fn as_setting(self) -> &'static str {
match self {
Self::Agent => "agent",
Self::Auto => "agent",
// Write current permission vocabulary, not the legacy YOLO label.
Self::Yolo => "agent",
Self::Plan => "plan",
Self::Operate => "operate",
}
Expand All @@ -63,8 +57,6 @@ impl AppMode {
pub fn label(self) -> &'static str {
match self {
AppMode::Agent => "ACT",
AppMode::Auto => "ACT",
AppMode::Yolo => "ACT",
AppMode::Plan => "PLAN",
AppMode::Operate => "OPERATE",
}
Expand All @@ -74,8 +66,6 @@ impl AppMode {
pub fn display_name(self) -> &'static str {
match self {
AppMode::Agent => "Act",
AppMode::Auto => "Act",
AppMode::Yolo => "Act",
AppMode::Plan => "Plan",
AppMode::Operate => "Operate",
}
Expand All @@ -84,15 +74,15 @@ impl AppMode {
#[must_use]
pub fn number(self) -> char {
match self {
AppMode::Agent | AppMode::Auto | AppMode::Yolo => '1',
AppMode::Agent => '1',
AppMode::Plan => '2',
AppMode::Operate => '3',
}
}

#[must_use]
pub fn uses_agent_baseline(self) -> bool {
matches!(self, Self::Agent | Self::Auto | Self::Operate)
matches!(self, Self::Agent | Self::Operate)
}

/// Operate gets a higher parallel launch floor so background fan-out is
Expand All @@ -108,10 +98,7 @@ impl AppMode {
/// Description shown in help or onboarding text.
pub fn description(self) -> &'static str {
match self {
AppMode::Agent | AppMode::Auto => {
"Act mode - direct work in the current session with tools"
}
AppMode::Yolo => "Act mode with Full Access (legacy compatibility setting)",
AppMode::Agent => "Act mode - direct work in the current session with tools",
AppMode::Plan => "Plan mode - research and design before implementing",
AppMode::Operate => {
"Operate mode - always-on pod operation: lead plans, optional $/time burn rate, workers follow the plan"
Expand Down
Loading
Loading