id = "fabric-ai"
name = "Fabric"
homepage = "https://github.com/danielmiessler/Fabric"
description = "An open-source framework for augmenting humans using AI."
executables = ["fabric"]
[dotfiles]
paths = [
"[configHome]/fabric/strategies/",
"[configHome]/fabric/patterns/",
]
secret = ["[configHome]/fabric/.env"]
[commands]
format = 1
label = "Run an AI pattern"
description = "Run a Fabric prompt pattern over text piped in on standard input. YouTube/scraping inputs, the REST server, sessions and image or audio options are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false }
[[commands.source]]
id = "help"
kind = "help"
url = "https://github.com/danielmiessler/Fabric"
revision = "main 2026-10-27"
evidence = """
fabric --help (Application Options), from https://github.com/danielmiessler/Fabric README
-S, --setup Run setup for all reconfigurable parts of fabric
-p, --pattern= Choose a pattern from the available patterns
-v, --variable= Values for pattern variables, e.g. -v=#role:expert -v=#points:30
-C, --context= Choose a context from the available contexts
-a, --attachment= Attachment path or URL (e.g. for OpenAI image recognition messages)
-s, --stream Stream
-l, --listpatterns List all patterns
-L, --listmodels List all available models
-c, --copy Copy to clipboard
-m, --model= Choose model
-V, --vendor= Specify vendor for the selected model (e.g., -V "LM Studio" -m
-o, --output= Output to file
--print-prompt Print the rendered prompt without sending it to a model
--dry-run Show what would be sent to the model without actually sending it
--strategy= Choose a strategy from the available strategies
--liststrategies List all strategies
--search Enable web search tool for supported models (Anthropic, OpenAI, Gemini, Grok)
--suppress-think Suppress text enclosed in thinking tags
--thinking= Set reasoning/thinking level (e.g., off, low, medium, high, or numeric
"""
[[commands.field]]
id = "pattern"
label = "Pattern"
description = "Pattern name; the text to process is read from standard input. Run fabric --listpatterns for the list."
type = "string"
option = ["--pattern", "-p"]
suggestions = [{ value = "summarize", label = "Summarize" }, { value = "extract_wisdom", label = "Extract wisdom" }, { value = "improve_writing", label = "Improve writing" }]
sources = ["help"]
[[commands.field]]
id = "model"
label = "Model"
type = "string"
option = ["--model", "-m"]
sources = ["help"]
[[commands.field]]
id = "vendor"
label = "Vendor"
description = "Vendor for the selected model."
type = "string"
option = ["--vendor", "-V"]
sources = ["help"]
[[commands.field]]
id = "variable"
label = "Pattern variables"
description = "Values like #role:expert, repeatable."
type = "string"
option = ["--variable", "-v"]
multiple = true
sources = ["help"]
[[commands.field]]
id = "context"
label = "Context"
type = "string"
option = ["--context", "-C"]
sources = ["help"]
[[commands.field]]
id = "strategy"
label = "Strategy"
type = "string"
option = ["--strategy"]
sources = ["help"]
[[commands.field]]
id = "stream"
label = "Stream output"
type = "boolean"
option = ["--stream", "-s"]
sources = ["help"]
[[commands.field]]
id = "copy"
label = "Copy to clipboard"
type = "boolean"
option = ["--copy", "-c"]
sources = ["help"]
[[commands.field]]
id = "output"
label = "Output file"
type = "path"
option = ["--output", "-o"]
path = { kind = "file", role = "output", must_exist = false }
effect = "overwrite"
sources = ["help"]
[[commands.field]]
id = "dry_run"
label = "Dry run"
description = "Show what would be sent to the model without sending it."
type = "boolean"
option = ["--dry-run"]
sources = ["help"]
[[commands.field]]
id = "search"
label = "Web search tool"
type = "boolean"
option = ["--search"]
sources = ["help"]
[[commands.field]]
id = "thinking"
label = "Thinking level"
type = "string"
option = ["--thinking"]
suggestions = [{ value = "off", label = "Off" }, { value = "low", label = "Low" }, { value = "medium", label = "Medium" }, { value = "high", label = "High" }]
sources = ["help"]
[[commands.field]]
id = "suppress_think"
label = "Suppress thinking text"
type = "boolean"
option = ["--suppress-think"]
sources = ["help"]
[[commands.field]]
id = "attachment"
label = "Attachment"
description = "Attachment path or URL."
type = "string"
option = ["--attachment", "-a"]
sources = ["help"]
[[commands.field]]
id = "list_patterns"
label = "List patterns"
type = "boolean"
option = ["--listpatterns", "-l"]
sources = ["help"]
[[commands.field]]
id = "list_models"
label = "List models"
type = "boolean"
option = ["--listmodels", "-L"]
sources = ["help"]
[[commands.field]]
id = "setup"
label = "Run setup"
type = "boolean"
option = ["--setup", "-S"]
sources = ["help"]
[[commands.task]]
id = "run"
label = "Run a pattern on stdin"
fields = ["pattern", "model", "stream", "copy"]
required = ["pattern"]
[[commands.task]]
id = "patterns"
label = "List patterns"
fields = ["list_patterns"]
set = { list_patterns = [true] }
lock = ["list_patterns"]
[[commands.task]]
id = "models"
label = "List models"
fields = ["list_models"]
set = { list_models = [true] }
lock = ["list_models"]
[[commands.group]]
id = "basic"
label = "Basic"
fields = ["pattern", "model", "vendor", "stream", "copy", "output", "list_patterns", "list_models"]
[[commands.group]]
id = "advanced"
label = "Advanced"
fields = ["variable", "context", "strategy", "dry_run", "search", "thinking", "suppress_think", "attachment", "setup"]