id = "khard"
name = "khard"
homepage = "https://khard.readthedocs.io/"
description = "A console carddav client for address book management."
executables = ["khard"]
[dotfiles]
paths = ["[configHome]/khard/khard.conf"]
exclude = []
secret = []
side_effect = false
[commands]
format = 1
label = "List contacts"
description = "List contacts from your address books, optionally filtered by search terms and sorted. Showing, creating, editing and the other subcommands are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = false, short_bundles = false }
[[commands.source]]
id = "src"
kind = "help"
url = "https://github.com/lucc/khard/blob/master/khard/cli.py"
revision = "master 2026-10"
evidence = """
"-a", "--addressbook" Specify one or several comma separated address book names to narrow the list of contacts
"-d", "--display", choices=("first_name", "last_name", "formatted_name")
"-g", "--group-by-addressbook" Group contact table by address book
"-r", "--reverse" Reverse order of contact table
"-s", "--sort", choices=("first_name", "last_name", "formatted_name")
"search_terms", nargs="*", metavar="search terms"
"-p", "--parsable" Machine readable format: uid\tcontact_name\taddress_book_name
list_parser = subparsers.add_parser("list", description="list all (selected) contacts")
Long options: --addressbook --display --group-by-addressbook --reverse --sort --parsable
"""
[[commands.subcommand]]
path = ["list"]
label = "List contacts"
[[commands.subcommand.source]]
id = "src"
kind = "help"
url = "https://github.com/lucc/khard/blob/master/khard/cli.py"
revision = "master 2026-10"
evidence = """
"-a", "--addressbook" Specify one or several comma separated address book names to narrow the list of contacts
"-d", "--display", choices=("first_name", "last_name", "formatted_name")
"-g", "--group-by-addressbook" Group contact table by address book
"-r", "--reverse" Reverse order of contact table
"-s", "--sort", choices=("first_name", "last_name", "formatted_name")
"search_terms", nargs="*", metavar="search terms"
"-p", "--parsable" Machine readable format: uid\tcontact_name\taddress_book_name
list_parser = subparsers.add_parser("list", description="list all (selected) contacts")
Long options: --addressbook --display --group-by-addressbook --reverse --sort --parsable
"""
[[commands.subcommand.field]]
id = "search_terms"
label = "Search terms"
description = "Leave empty to list everything."
type = "string"
position = 0
multiple = true
sources = ["src"]
[[commands.subcommand.field]]
id = "addressbook"
label = "Address books"
description = "Comma separated names."
type = "string"
option = ["--addressbook", "-a"]
sources = ["src"]
[[commands.subcommand.field]]
id = "sort"
label = "Sort by"
type = "enum"
option = ["--sort", "-s"]
choices = [{ value = "first_name", label = "First name" }, { value = "last_name", label = "Last name" }, { value = "formatted_name", label = "Formatted name" }]
sources = ["src"]
[[commands.subcommand.field]]
id = "display"
label = "Display names by"
type = "enum"
option = ["--display", "-d"]
choices = [{ value = "first_name", label = "First name" }, { value = "last_name", label = "Last name" }, { value = "formatted_name", label = "Formatted name" }]
sources = ["src"]
[[commands.subcommand.field]]
id = "group"
label = "Group by address book"
type = "boolean"
option = ["--group-by-addressbook", "-g"]
sources = ["src"]
[[commands.subcommand.field]]
id = "reverse"
label = "Reverse order"
type = "boolean"
option = ["--reverse", "-r"]
sources = ["src"]
[[commands.subcommand.field]]
id = "parsable"
label = "Machine readable output"
type = "boolean"
option = ["--parsable", "-p"]
sources = ["src"]
[[commands.subcommand.task]]
id = "search"
label = "Find contacts"
fields = ["search_terms", "addressbook"]
required = ["search_terms"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["search_terms", "addressbook", "sort"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["display", "group", "reverse", "parsable"]