Documentation
¶
Overview ¶
Package config loads Codog configuration from files, environment, and flags.
Index ¶
- Constants
- func HookCommandDisplay(value HookCommand) string
- func InspectionPaths(overrides FlagOverrides) ([]string, error)
- func IsDiagnosticLoadError(err error) bool
- func IsFileError(err error) bool
- func ManagedPolicyPayload(policy ManagedPolicy) ([]byte, error)
- func MergeHookConfig(dst *HookConfig, src HookConfig)
- func NormalizePermissionModeLabel(mode string) (string, bool)
- func ParseConfigValue(raw string) any
- func VerifyManagedPolicy(policy ManagedPolicy, publicKey string) error
- type APITimeoutConfig
- type BackgroundConfig
- type CompatibilityConfig
- type Config
- func (c Config) EffectiveAllowManagedHooksOnly() bool
- func (c Config) EffectiveCleanupPeriodDays() int
- func (c Config) EffectiveDisableAllHooks() bool
- func (c Config) EffectiveRespectGitignore() bool
- func (c Config) EffectiveRulesImport() RulesImportConfig
- func (c *Config) UnmarshalJSON(data []byte) error
- type EditorBridgeConfig
- type EnterpriseConfig
- type FileError
- type FlagOverrides
- type FutureConfig
- type GuestPassEligibilityCacheEntry
- type HookCommand
- type HookConfig
- type MCPServerConfig
- type MCPServerOAuthConfig
- type ManagedPolicy
- type MarketplaceConfig
- type MoneyInfo
- type MutationReport
- type PermissionRules
- type PreferencesConfig
- type PrivacyConfig
- type ProviderFallbackConfig
- type RateLimitConfig
- type RemoteConfig
- type RulesImportConfig
- type SandboxConfig
- type StatusLineConfig
- type UpdaterConfig
- type WorktreeConfig
Constants ¶
const ( DefaultBaseURL = modelrouting.DefaultAnthropicBaseURL DefaultModel = "claude-sonnet-4-5" )
Variables ¶
This section is empty.
Functions ¶
func HookCommandDisplay ¶
func HookCommandDisplay(value HookCommand) string
func InspectionPaths ¶
func InspectionPaths(overrides FlagOverrides) ([]string, error)
InspectionPaths returns the config files that inspection commands should use without reading or unmarshalling them.
func IsDiagnosticLoadError ¶
IsDiagnosticLoadError reports whether err can still be shown through degraded diagnostic commands that do not need the rejected setting itself.
func IsFileError ¶
func ManagedPolicyPayload ¶
func ManagedPolicyPayload(policy ManagedPolicy) ([]byte, error)
func MergeHookConfig ¶
func MergeHookConfig(dst *HookConfig, src HookConfig)
func NormalizePermissionModeLabel ¶
NormalizePermissionModeLabel resolves canonical Codog permission modes and Claude-compatible defaultMode aliases to canonical Codog modes.
func ParseConfigValue ¶
func VerifyManagedPolicy ¶
func VerifyManagedPolicy(policy ManagedPolicy, publicKey string) error
Types ¶
type APITimeoutConfig ¶
type BackgroundConfig ¶
type BackgroundConfig struct {
StatePath string `json:"state_path,omitempty"`
}
BackgroundConfig holds local background worker state settings.
func (*BackgroundConfig) UnmarshalJSON ¶
func (b *BackgroundConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON accepts snake_case and camelCase state path aliases.
type CompatibilityConfig ¶
type CompatibilityConfig struct {
SlackAppInstallCount int `json:"slack_app_install_count,omitempty"`
StickerOrderCount int `json:"sticker_order_count,omitempty"`
ExtraUsageVisitCount int `json:"extra_usage_visit_count,omitempty"`
GuestPassReferralURL string `json:"guest_pass_referral_url,omitempty"`
GuestPassVisitCount int `json:"guest_pass_visit_count,omitempty"`
GuestPassEligibilityCache map[string]GuestPassEligibilityCacheEntry `json:"guest_pass_eligibility_cache,omitempty"`
HasVisitedPasses *bool `json:"has_visited_passes,omitempty"`
PassesUpsellSeenCount int `json:"passes_upsell_seen_count,omitempty"`
PassesLastSeenRemaining *int `json:"passes_last_seen_remaining,omitempty"`
// contains filtered or unexported fields
}
CompatibilityConfig holds counters for Claude Code compatibility entrypoints.
func (*CompatibilityConfig) UnmarshalJSON ¶
func (c *CompatibilityConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON accepts snake_case and camelCase compatibility aliases.
type Config ¶
type Config struct {
APIKey string `json:"api_key,omitempty"`
APIKeyHelper string `json:"apiKeyHelper,omitempty"`
AuthToken string `json:"auth_token,omitempty"`
OAuthProfile string `json:"oauth_profile,omitempty"`
ForceLoginMethod string `json:"forceLoginMethod,omitempty"`
ForceLoginOrgUUID string `json:"forceLoginOrgUUID,omitempty"`
BaseURL string `json:"base_url,omitempty"`
Model string `json:"model,omitempty"`
ModelEnvVar string `json:"-"`
RuntimeProvider string `json:"-"`
RuntimeProviderSource string `json:"-"`
AdvisorModel string `json:"advisor_model,omitempty"`
SubagentModel string `json:"subagentModel,omitempty"`
SystemPrompt string `json:"system_prompt,omitempty"`
AppendSystemPrompt string `json:"append_system_prompt,omitempty"`
Language string `json:"language,omitempty"`
Theme string `json:"theme,omitempty"`
EditorMode string `json:"editorMode,omitempty"`
DefaultShell string `json:"defaultShell,omitempty"`
ReasoningEffort string `json:"reasoning_effort,omitempty"`
FastMode *bool `json:"fast_mode,omitempty"`
VoiceEnabled *bool `json:"voice_enabled,omitempty"`
VoiceCommand string `json:"voice_command,omitempty"`
SpeechCommand string `json:"speech_command,omitempty"`
MaxTokens int `json:"max_tokens,omitempty"`
MaxTurns int `json:"max_turns,omitempty"`
Temperature *float64 `json:"temperature,omitempty"`
ExtraBody map[string]any `json:"extra_body,omitempty"`
PermissionMode string `json:"permission_mode,omitempty"`
PermissionModeRaw string `json:"-"`
PermissionModeSource string `json:"-"`
PermissionModeEnvVar string `json:"-"`
PlanMode bool `json:"-"`
ToolNames []string `json:"-"`
ToolNamesSet bool `json:"-"`
Debug bool `json:"-"`
Verbose bool `json:"-"`
DebugFile string `json:"-"`
Privacy PrivacyConfig `json:"privacy_settings,omitempty"`
PermissionRules PermissionRules `json:"permission_rules,omitempty"`
ConfigHome string `json:"config_home,omitempty"`
AutoCompactMessages int `json:"auto_compact_messages,omitempty"`
CleanupPeriodDays *int `json:"cleanupPeriodDays,omitempty"`
RespectGitignore *bool `json:"respectGitignore,omitempty"`
DisableAllHooks *bool `json:"disableAllHooks,omitempty"`
AllowManagedHooksOnly *bool `json:"allowManagedHooksOnly,omitempty"`
AllowedHTTPHookURLs *[]string `json:"allowedHttpHookUrls,omitempty"`
HTTPHookAllowedEnvVars *[]string `json:"httpHookAllowedEnvVars,omitempty"`
StatusLine *StatusLineConfig `json:"statusLine,omitempty"`
Worktree WorktreeConfig `json:"worktree,omitempty"`
EnableAllProjectMCPServers *bool `json:"enableAllProjectMcpServers,omitempty"`
EnabledMCPJSONServers []string `json:"enabledMcpjsonServers,omitempty"`
DisabledMCPJSONServers []string `json:"disabledMcpjsonServers,omitempty"`
RateLimit RateLimitConfig `json:"rate_limit,omitempty"`
APITimeout APITimeoutConfig `json:"apiTimeout,omitempty"`
ProviderFallbacks ProviderFallbackConfig `json:"providerFallbacks,omitempty"`
RulesImport *RulesImportConfig `json:"rulesImport,omitempty"`
Env map[string]string `json:"env,omitempty"`
TrustedRoots []string `json:"trustedRoots,omitempty"`
RAGBaseURL string `json:"rag_base_url,omitempty"`
RAGTimeoutSeconds int `json:"rag_timeout_seconds,omitempty"`
RAGTopKMax int `json:"rag_top_k_max,omitempty"`
AdditionalDirs []string `json:"additional_dirs,omitempty"`
EnabledSkills []string `json:"enabled_skills,omitempty"`
Hooks HookConfig `json:"hooks,omitempty"`
MCPServers map[string]MCPServerConfig `json:"mcp_servers,omitempty"`
Future FutureConfig `json:"future,omitempty"`
}
func Default ¶
func Default(overrides FlagOverrides) (Config, error)
func DiagnosticDefault ¶
func DiagnosticDefault(overrides FlagOverrides) (Config, error)
DiagnosticDefault returns a validated baseline configuration for commands that need to render diagnostics after full configuration loading has already failed. It intentionally skips config files, environment overrides, external credential helpers, and managed policy so the original load error remains visible instead of being repeated by the fallback renderer.
func Load ¶
func Load(overrides FlagOverrides) (Config, error)
func LoadForInspection ¶
func LoadForInspection(overrides FlagOverrides) (Config, []string, error)
func (Config) EffectiveAllowManagedHooksOnly ¶
EffectiveAllowManagedHooksOnly reports whether unmanaged hooks are ignored.
func (Config) EffectiveCleanupPeriodDays ¶
EffectiveCleanupPeriodDays returns the configured transcript retention window.
func (Config) EffectiveDisableAllHooks ¶
EffectiveDisableAllHooks reports whether hook execution is globally disabled.
func (Config) EffectiveRespectGitignore ¶
EffectiveRespectGitignore reports whether file enumeration should honor .gitignore.
func (Config) EffectiveRulesImport ¶
func (c Config) EffectiveRulesImport() RulesImportConfig
EffectiveRulesImport returns the normalized external rule import policy.
func (*Config) UnmarshalJSON ¶
type EditorBridgeConfig ¶
type EditorBridgeConfig struct {
Socket string `json:"socket,omitempty"`
Token string `json:"token,omitempty"`
}
EditorBridgeConfig holds local editor bridge connection settings.
func (*EditorBridgeConfig) UnmarshalJSON ¶
func (e *EditorBridgeConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON accepts socket and token aliases used by editor integrations.
type EnterpriseConfig ¶
type EnterpriseConfig struct {
Policy string `json:"policy,omitempty"`
PolicyPublicKey string `json:"policy_public_key,omitempty"`
}
EnterpriseConfig holds managed organization policy configuration.
func (*EnterpriseConfig) UnmarshalJSON ¶
func (e *EnterpriseConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON accepts snake_case and camelCase public key aliases.
type FlagOverrides ¶
type FlagOverrides struct {
ConfigPath string
Settings string
SettingSources []string
SettingSourcesSet bool
CWD string
SessionID string
SessionName string
Resume string
FromPR string
ResumeSessionAt string
Prefill string
InitialPrompt string
InitialAttachments []string
Agents string
PluginDirs []string
IDE bool
DeepLinkOrigin bool
DeepLinkRepo string
DeepLinkLastFetchMS int64
Model string
FallbackModel string
Thinking string
BaseURL string
SystemPrompt string
SystemPromptFile string
AppendPrompt string
AppendPromptFile string
PermissionMode string
PlanModeRequired bool
SkipPermissions bool
AllowBroadCWD bool
AllowedTools []string
DisallowedTools []string
AdditionalDirs []string
ToolNames []string
ToolNamesSet bool
NoSessionPersistence bool
InputFormat string
ReplayUserMessages bool
IncludePartialMessages bool
JSONSchema string
ForkSession bool
MCPConfigs []string
StrictMCPConfig bool
OutputFormatSource string
OutputFormatRaw string
OutputFormatOverridden bool
OutputFormatSubcommandExplicit bool
Debug bool
Verbose bool
DebugFile string
MaxTurns int
MaxTokens int
MaxBudgetUSD *float64
Temperature *float64
}
type FutureConfig ¶
type FutureConfig struct {
RemoteEnabled bool `json:"remote_enabled,omitempty"`
RemoteAuthToken string `json:"remote_auth_token,omitempty"`
RemoteLeaseSeconds int `json:"remote_lease_seconds,omitempty"`
EnterprisePolicy string `json:"enterprise_policy,omitempty"`
EnterprisePolicyPublicKey string `json:"enterprise_policy_public_key,omitempty"`
PluginMarketplaces []string `json:"plugin_marketplaces,omitempty"`
PluginMarketplaceKeys map[string]string `json:"plugin_marketplace_public_keys,omitempty"`
SandboxStrategy string `json:"sandbox_strategy,omitempty"`
Sandbox SandboxConfig `json:"sandbox,omitempty"`
UpdaterManifestURL string `json:"updater_manifest_url,omitempty"`
EditorBridgeSocket string `json:"editor_bridge_socket,omitempty"`
EditorBridgeToken string `json:"editor_bridge_token,omitempty"`
BackgroundStatePath string `json:"background_state_path,omitempty"`
ChromeDefaultEnabled *bool `json:"chrome_default_enabled,omitempty"`
NotificationsEnabled *bool `json:"notifications_enabled,omitempty"`
UltraReviewEnabled *bool `json:"ultrareview_enabled,omitempty"`
SlackAppInstallCount int `json:"slack_app_install_count,omitempty"`
StickerOrderCount int `json:"sticker_order_count,omitempty"`
ExtraUsageVisitCount int `json:"extra_usage_visit_count,omitempty"`
GuestPassReferralURL string `json:"guest_pass_referral_url,omitempty"`
GuestPassVisitCount int `json:"guest_pass_visit_count,omitempty"`
GuestPassEligibilityCache map[string]GuestPassEligibilityCacheEntry `json:"guest_pass_eligibility_cache,omitempty"`
HasVisitedPasses *bool `json:"has_visited_passes,omitempty"`
PassesUpsellSeenCount int `json:"passes_upsell_seen_count,omitempty"`
PassesLastSeenRemaining *int `json:"passes_last_seen_remaining,omitempty"`
}
type GuestPassEligibilityCacheEntry ¶
type GuestPassEligibilityCacheEntry struct {
Eligible bool `json:"eligible"`
Timestamp time.Time `json:"timestamp"`
Campaign string `json:"campaign,omitempty"`
ReferralURL string `json:"referral_url,omitempty"`
RemainingPasses *int `json:"remaining_passes,omitempty"`
Limit *int `json:"limit,omitempty"`
Redeemed *int `json:"redeemed,omitempty"`
AvailablePasses *int `json:"available_passes,omitempty"`
ReferrerReward *MoneyInfo `json:"referrer_reward,omitempty"`
}
GuestPassEligibilityCacheEntry stores cached guest pass eligibility by organization UUID.
type HookCommand ¶
type HookCommand struct {
Matcher string
Type string
Command string
URL string
Prompt string
Model string
If string
Shell string
TimeoutSeconds float64
Headers map[string]string
AllowedEnvVars []string
StatusMessage string
Once bool
Async bool
AsyncRewake bool
InvalidKind string
InvalidField string
InvalidReason string
}
type HookConfig ¶
type HookConfig struct {
PreToolUse []string `json:"pre_tool_use,omitempty"`
PostToolUse []string `json:"post_tool_use,omitempty"`
PostToolUseFailure []string `json:"post_tool_use_failure,omitempty"`
PermissionRequest []string `json:"permission_request,omitempty"`
PermissionDenied []string `json:"permission_denied,omitempty"`
UserPromptSubmit []string `json:"user_prompt_submit,omitempty"`
SessionStart []string `json:"session_start,omitempty"`
SessionEnd []string `json:"session_end,omitempty"`
Setup []string `json:"setup,omitempty"`
Stop []string `json:"stop,omitempty"`
StopFailure []string `json:"stop_failure,omitempty"`
PreCompact []string `json:"pre_compact,omitempty"`
PostCompact []string `json:"post_compact,omitempty"`
Notification []string `json:"notification,omitempty"`
SubagentStart []string `json:"subagent_start,omitempty"`
SubagentStop []string `json:"subagent_stop,omitempty"`
WorktreeCreate []string `json:"worktree_create,omitempty"`
WorktreeRemove []string `json:"worktree_remove,omitempty"`
CwdChanged []string `json:"cwd_changed,omitempty"`
TaskCreated []string `json:"task_created,omitempty"`
TaskCompleted []string `json:"task_completed,omitempty"`
InstructionsLoaded []string `json:"instructions_loaded,omitempty"`
FileChanged []string `json:"file_changed,omitempty"`
PreToolUseCommands []HookCommand `json:"-"`
PostToolUseCommands []HookCommand `json:"-"`
PostToolUseFailureCommands []HookCommand `json:"-"`
PermissionRequestCommands []HookCommand `json:"-"`
PermissionDeniedCommands []HookCommand `json:"-"`
UserPromptSubmitCommands []HookCommand `json:"-"`
SessionStartCommands []HookCommand `json:"-"`
SessionEndCommands []HookCommand `json:"-"`
SetupCommands []HookCommand `json:"-"`
StopCommands []HookCommand `json:"-"`
StopFailureCommands []HookCommand `json:"-"`
PreCompactCommands []HookCommand `json:"-"`
PostCompactCommands []HookCommand `json:"-"`
NotificationCommands []HookCommand `json:"-"`
SubagentStartCommands []HookCommand `json:"-"`
SubagentStopCommands []HookCommand `json:"-"`
WorktreeCreateCommands []HookCommand `json:"-"`
WorktreeRemoveCommands []HookCommand `json:"-"`
CwdChangedCommands []HookCommand `json:"-"`
TaskCreatedCommands []HookCommand `json:"-"`
TaskCompletedCommands []HookCommand `json:"-"`
InstructionsLoadedCommands []HookCommand `json:"-"`
FileChangedCommands []HookCommand `json:"-"`
}
func (*HookConfig) UnmarshalJSON ¶
func (h *HookConfig) UnmarshalJSON(data []byte) error
type MCPServerConfig ¶
type MCPServerConfig struct {
Command string `json:"command,omitempty"`
Args []string `json:"args,omitempty"`
Env []string `json:"env,omitempty"`
URL string `json:"url,omitempty"`
Headers map[string]string `json:"headers,omitempty"`
HeadersHelper string `json:"headers_helper,omitempty"`
OAuth *MCPServerOAuthConfig `json:"oauth,omitempty"`
ToolCallTimeoutMS int `json:"tool_call_timeout_ms,omitempty"`
Required bool `json:"required,omitempty"`
}
func (*MCPServerConfig) UnmarshalJSON ¶
func (m *MCPServerConfig) UnmarshalJSON(data []byte) error
type MCPServerOAuthConfig ¶
type MCPServerOAuthConfig struct {
ClientID string `json:"clientId,omitempty"`
CallbackPort int `json:"callbackPort,omitempty"`
AuthServerMetadataURL string `json:"authServerMetadataUrl,omitempty"`
XAA *bool `json:"xaa,omitempty"`
}
func (*MCPServerOAuthConfig) UnmarshalJSON ¶
func (m *MCPServerOAuthConfig) UnmarshalJSON(data []byte) error
type ManagedPolicy ¶
type ManagedPolicy struct {
MaxPermissionMode string `json:"max_permission_mode,omitempty"`
PermissionRules PermissionRules `json:"permission_rules,omitempty"`
DeniedTools []string `json:"denied_tools,omitempty"`
Signature string `json:"signature,omitempty"`
}
func LoadManagedPolicyFile ¶
func LoadManagedPolicyFile(path string) (ManagedPolicy, error)
func VerifyManagedPolicyFile ¶
func VerifyManagedPolicyFile(path, publicKey string) (ManagedPolicy, error)
type MarketplaceConfig ¶
type MarketplaceConfig struct {
Sources []string `json:"sources,omitempty"`
PublicKeys map[string]string `json:"public_keys,omitempty"`
// contains filtered or unexported fields
}
MarketplaceConfig holds trusted plugin marketplace index sources.
func (*MarketplaceConfig) UnmarshalJSON ¶
func (m *MarketplaceConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON accepts public_keys and publicKeys aliases.
type MoneyInfo ¶
type MoneyInfo struct {
Currency string `json:"currency,omitempty"`
AmountMinorUnits int `json:"amount_minor_units,omitempty"`
}
MoneyInfo describes a monetary reward value returned by guest pass eligibility APIs.
type MutationReport ¶
type MutationReport struct {
Kind string `json:"kind"`
Action string `json:"action"`
Status string `json:"status"`
Path string `json:"path"`
Key string `json:"key"`
}
func ResetFile ¶
func ResetFile(path string) (MutationReport, error)
func SetFileValue ¶
func SetFileValue(path string, key string, value any) (MutationReport, error)
func UnsetFileValue ¶
func UnsetFileValue(path string, key string) (MutationReport, error)
type PermissionRules ¶
type PermissionRules struct {
DefaultMode string `json:"defaultMode,omitempty"`
AdditionalDirectories []string `json:"additionalDirectories,omitempty"`
Allow []string `json:"allow,omitempty"`
Deny []string `json:"deny,omitempty"`
Ask []string `json:"ask,omitempty"`
DeniedTools []string `json:"denied_tools,omitempty"`
}
func (*PermissionRules) UnmarshalJSON ¶
func (r *PermissionRules) UnmarshalJSON(data []byte) error
type PreferencesConfig ¶
type PreferencesConfig struct {
ChromeDefaultEnabled *bool `json:"chrome_default_enabled,omitempty"`
NotificationsEnabled *bool `json:"notifications_enabled,omitempty"`
UltraReviewEnabled *bool `json:"ultrareview_enabled,omitempty"`
}
PreferencesConfig holds user-facing runtime preferences.
func (*PreferencesConfig) UnmarshalJSON ¶
func (p *PreferencesConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON accepts snake_case and camelCase preference aliases.
type PrivacyConfig ¶
type ProviderFallbackConfig ¶
type RateLimitConfig ¶
type RateLimitConfig struct {
MaxRetries int `json:"max_retries,omitempty"`
InitialBackoffMS int `json:"initial_backoff_ms,omitempty"`
MaxBackoffMS int `json:"max_backoff_ms,omitempty"`
}
func DefaultRateLimitConfig ¶
func DefaultRateLimitConfig() RateLimitConfig
func NormalizeRateLimitConfig ¶
func NormalizeRateLimitConfig(cfg RateLimitConfig) RateLimitConfig
type RemoteConfig ¶
type RemoteConfig struct {
Enabled *bool `json:"enabled,omitempty"`
AuthToken string `json:"auth_token,omitempty"`
LeaseSeconds int `json:"lease_seconds,omitempty"`
}
RemoteConfig holds the formal top-level remote-control configuration.
func (*RemoteConfig) UnmarshalJSON ¶
func (r *RemoteConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON accepts both snake_case and camelCase remote field aliases.
type RulesImportConfig ¶
RulesImportConfig controls which external AI coding rule files are imported into project memory.
func (RulesImportConfig) IsZero ¶
func (r RulesImportConfig) IsZero() bool
func (RulesImportConfig) MarshalJSON ¶
func (r RulesImportConfig) MarshalJSON() ([]byte, error)
func (RulesImportConfig) ShouldImport ¶
func (r RulesImportConfig) ShouldImport(framework string) bool
ShouldImport reports whether framework rules should be imported.
func (*RulesImportConfig) UnmarshalJSON ¶
func (r *RulesImportConfig) UnmarshalJSON(data []byte) error
type SandboxConfig ¶
type SandboxConfig struct {
Strategy string `json:"-"`
Enabled *bool `json:"enabled,omitempty"`
NamespaceRestrictions *bool `json:"namespace_restrictions,omitempty"`
NetworkIsolation *bool `json:"network_isolation,omitempty"`
FilesystemMode string `json:"filesystem_mode,omitempty"`
AllowedMounts []string `json:"allowed_mounts,omitempty"`
}
func (*SandboxConfig) UnmarshalJSON ¶
func (s *SandboxConfig) UnmarshalJSON(data []byte) error
type StatusLineConfig ¶
type UpdaterConfig ¶
type UpdaterConfig struct {
ManifestURL string `json:"manifest_url,omitempty"`
}
UpdaterConfig holds manifest-based binary update configuration.
func (*UpdaterConfig) UnmarshalJSON ¶
func (u *UpdaterConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON accepts snake_case, camelCase, and short URL aliases.