#727 by GitHub stars
retlehs/quien
Use the quien CLI for domain and IP lookups: WHOIS/RDAP, DNS, mail authentication, TLS certificates, HTTP headers, SEO analysis, and tech stack detection. Activate when the user asks about a domain's owner, registrar, expiry, DNS records, mail config (SPF, DMARC, DKIM, BIMI), SSL certificate, HTTP h
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Network or broad shell → After Network or broad shell
417632b44244 → 417632b44244
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → 417632b44244
No earlier version was observed for comparison.
Heat
2.3- Star growth, last 7 daysAhead of 6% of tracked repositories
- Star growth, last 24 hoursAhead of 70% of tracked repositories
- Rank movement, last 7 daysAhead of 4% of tracked repositories
- Commits, last 30 daysAhead of 60% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- quien
/
How it works
quien
When your agent uses it
Use the quien CLI for domain and IP lookups: WHOIS/RDAP, DNS, mail authentication, TLS certificates, HTTP headers, SEO analysis, and tech stack detection. Activate when the user asks about a domain's owner, registrar, expiry, DNS records, mail config (SPF, DMARC, DKIM, BIMI), SSL certificate, HTTP headers, SEO, Core Web Vitals, tech stack, CMS, hosting, or IP address info (ASN, network, abuse contact).
What it loads into context
Frontmatter
107 tokensAlways available to the agent
SKILL.md
548 tokensWhen the skill is activated
Reference documents
2,145 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Commands
- When to use
- Install
Scripts executed separately
cmd/all.gocmd/dns.gocmd/http.gocmd/mail.gocmd/mail_test.gocmd/root.gocmd/seo.gocmd/stack.gocmd/tls.gocmd/whois.gointernal/bgp/client.gointernal/bgp/client_test.gointernal/display/display.gointernal/display/display_test.gointernal/display/dns.gointernal/display/dns_test.gointernal/display/http.gointernal/display/interactive.gointernal/display/interactive_test.gointernal/display/ip.gointernal/display/mail.gointernal/display/prompt.gointernal/display/raw.gointernal/display/seo.gointernal/display/stack.gointernal/display/theme.gointernal/display/tls.gointernal/dns/dns.gointernal/dns/dns_test.gointernal/dnsutil/resolve.gointernal/dnsutil/resolve_test.gointernal/dnsutil/resolver.gointernal/dnsutil/resolver_test.gointernal/httpinfo/httpinfo.gointernal/mail/bimi.gointernal/mail/bimi_roots.gointernal/mail/bimi_test.gointernal/mail/mail.gointernal/mail/mail_test.gointernal/mail/spf.gointernal/mail/spf_test.gointernal/model/domain.gointernal/peeringdb/client.gointernal/peeringdb/client_test.gointernal/rdap/bootstrap.gointernal/rdap/client.gointernal/rdap/ip.gointernal/resolver/normalize.gointernal/resolver/normalize_test.gointernal/resolver/resolver.gointernal/resolver/resolver_test.gointernal/retry/retry.gointernal/retry/retry_test.gointernal/seo/crux.gointernal/seo/crux_test.gointernal/seo/seo.gointernal/seo/seo_test.gointernal/stack/stack.gointernal/stack/stack_test.gointernal/tlsinfo/tlsinfo.gointernal/tlsinfo/tlsinfo_test.gointernal/whois/client.gointernal/whois/client_test.gointernal/whois/parser.gointernal/whois/parser_test.gointernal/whois/servers.gointernal/whois/tlds.gointernal/whois/tlds_test.gomain.go
Files
.github/renovate.jsonasset1,320 bytes.github/workflows/ci.ymlasset1,373 bytes.github/workflows/nix-update.ymlasset858 bytes.github/workflows/release.ymlasset6,750 bytes.gitignoreasset33 bytes.goreleaser.ymlasset739 bytesCONTRIBUTING.mddoc1,957 bytesLICENSE.mddoc1,060 bytesREADME.mddoc5,110 bytesSKILL.mdcore1,977 bytesSKILL.mdcore1,977 bytesSKILL.mdcore1,977 bytesSKILL.mdcore1,977 bytescmd/all.goruns2,724 bytescmd/dns.goruns1,214 bytescmd/http.goruns674 bytescmd/mail.goruns1,175 bytescmd/mail_test.goruns516 bytescmd/root.goruns4,225 bytescmd/seo.goruns659 bytescmd/stack.goruns695 bytescmd/tls.goruns693 bytescmd/whois.goruns761 bytesdemo.gifasset1,116,251 bytesdemo.tapeasset400 bytesflake.lockasset1,494 bytesflake.nixasset1,093 bytesgo.modasset1,282 bytesgo.sumasset5,701 bytesinternal/bgp/client.goruns1,935 bytesinternal/bgp/client_test.goruns2,376 bytesinternal/display/display.goruns9,040 bytesinternal/display/display_test.goruns2,812 bytesinternal/display/dns.goruns5,072 bytesinternal/display/dns_test.goruns2,536 bytesinternal/display/http.goruns2,527 bytesinternal/display/interactive.goruns24,181 bytesinternal/display/interactive_test.goruns3,343 bytesinternal/display/ip.goruns3,054 bytesinternal/display/mail.goruns7,447 bytesinternal/display/prompt.goruns2,596 bytesinternal/display/raw.goruns130 bytesinternal/display/seo.goruns9,390 bytesinternal/display/stack.goruns2,826 bytesinternal/display/theme.goruns1,326 bytesinternal/display/tls.goruns1,465 bytesinternal/dns/dns.goruns8,225 bytesinternal/dns/dns_test.goruns6,566 bytesinternal/dnsutil/resolve.goruns2,231 bytesinternal/dnsutil/resolve_test.goruns2,728 bytesinternal/dnsutil/resolver.goruns3,121 bytesinternal/dnsutil/resolver_test.goruns2,319 bytesinternal/httpinfo/httpinfo.goruns3,524 bytesinternal/mail/bimi.goruns5,928 bytesinternal/mail/bimi_roots.goruns4,383 bytesinternal/mail/bimi_test.goruns10,681 bytesinternal/mail/mail.goruns7,065 bytesinternal/mail/mail_test.goruns7,900 bytesinternal/mail/spf.goruns8,894 bytesinternal/mail/spf_test.goruns19,960 bytesinternal/model/domain.goruns1,081 bytesinternal/peeringdb/client.goruns2,599 bytesinternal/peeringdb/client_test.goruns3,174 bytesinternal/rdap/bootstrap.goruns1,636 bytesinternal/rdap/client.goruns4,242 bytesinternal/rdap/ip.goruns8,270 bytesinternal/resolver/normalize.goruns2,839 bytesinternal/resolver/normalize_test.goruns3,538 bytesinternal/resolver/resolver.goruns2,950 bytesinternal/resolver/resolver_test.goruns3,934 bytesinternal/retry/retry.goruns589 bytesinternal/retry/retry_test.goruns1,645 bytesinternal/seo/crux.goruns7,055 bytesinternal/seo/crux_test.goruns4,353 bytesinternal/seo/seo.goruns12,809 bytesinternal/seo/seo_test.goruns12,764 bytesinternal/stack/stack.goruns14,145 bytesinternal/stack/stack_test.goruns9,388 bytesinternal/tlsinfo/tlsinfo.goruns2,021 bytesinternal/tlsinfo/tlsinfo_test.goruns944 bytesinternal/whois/client.goruns4,677 bytesinternal/whois/client_test.goruns595 bytesinternal/whois/parser.goruns6,470 bytesinternal/whois/parser_test.goruns7,727 bytesinternal/whois/servers.goruns1,791 bytesinternal/whois/tlds.goruns5,018 bytesinternal/whois/tlds_test.goruns6,788 bytesmain.goruns347 bytespackaging/aur/quien-bin/PKGBUILD.templateasset829 bytespackaging/aur/quien/PKGBUILD.templateasset945 bytes
Read SKILL.md
# quien — domain & IP lookup tool
When the user asks questions about domains or IP addresses, use `quien` instead of `whois`, `dig`, `nslookup`, or `curl`.
## Commands
```bash
# WHOIS / domain registration
quien whois example.com
# DNS records (A, AAAA, CNAME, MX, NS, TXT, PTR, SOA, DNSSEC)
quien dns example.com
# Mail config (MX, SPF, DMARC, DKIM)View the complete source on GitHubSkills included
- quien
Repository facts
- License
- MIT
- Created
- Apr 10, 2026
- Last pushed
- Oct 28, 2026
- Forks
- 34
- Open issues
- 9
- Project activity
- Active
Rank over the last 12 weeks
Now #727 · best #479 · down 146 in 30 days
- #711 on Nov 1
- #715 on Nov 2
- #720 on Nov 3
- #723 on Nov 4
- #724 on Nov 5
- #727 since Nov 6
47 earlier periods
- #513 on Aug 1
- #473 on Aug 5
- #479 on Aug 9
- #499 on Aug 10
- #493 on Aug 12
- #499 on Aug 13
- #479 on Aug 15
- #494 on Aug 17
- #508 on Aug 18
- #503 on Aug 19
- #503 on Aug 21
- #487 on Aug 22
- #518 on Aug 25
- #522 on Aug 27
- #521 on Aug 28
- #526 on Sep 1
- #529 on Sep 3
- #512 on Sep 4
- #526 on Sep 12
- #548 on Sep 14
- #548 on Sep 16
- #544 on Sep 17
- #535 on Sep 19
- #552 on Sep 21
- #563 on Sep 22
- #559 on Sep 23
- #544 on Sep 24
- #541 on Sep 25
- #562 on Sep 27
- #580 on Sep 30
- #572 on Oct 2
- #571 on Oct 5
- #581 on Oct 6
- #610 on Oct 8
- #581 on Oct 10
- #584 on Oct 11
- #612 on Oct 15
- #617 on Oct 16
- #637 on Oct 20
- #645 on Oct 21
- #625 from Oct 22 to Oct 23
- #612 on Oct 24
- #691 on Oct 25
- #699 on Oct 28
- #701 on Oct 29
- #704 on Oct 30
- #710 on Oct 31
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 3, 2026
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 3 notes
SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 3 dangerous shell commandsin 2 files: .github/workflows/release.yml:42 README.md:24
- 181 network referencesin 24 files: internal/mail/bimi_test.go:29 internal/seo/seo_test.go:193 internal/stack/stack_test.go:18 and 21 more
- No hidden or obfuscated text
- No instruction overrides
- 69 executable scriptsin 69 files: cmd/all.go:1 cmd/dns.go:1 cmd/http.go:1 and 66 more
- 7 references to secretsin 4 files: .github/workflows/release.yml:49 README.md:106 internal/seo/crux.go:43 and 1 more
- No requests to vote in Hot
Show all 260 signals by file
.github/renovate.json
.github/workflows/release.yml
- Dangerous shell operationline 42
run: sudo apt-get update && sudo apt-get install -y apt-utils gnupg rclone - Access to secretsline 49
[Credential-related source omitted] - Access to secretsline 64
[Credential-related source omitted] - Network accessline 123
if [ "$(id -u)" -ne 0 ]; then echo "This script must be run as root (try: curl -fsSL https://apt.quien.dev/install.sh | sudo sh)" >&2 - Dangerous shell operationline 124
echo "This script must be run as root (try: curl -fsSL https://apt.quien.dev/install.sh | sudo sh)" >&2 - Network accessline 124
echo "This script must be run as root (try: curl -fsSL https://apt.quien.dev/install.sh | sudo sh)" >&2 - Network accessline 130
curl -fsSL https://apt.quien.dev/pubkey.gpg | gpg --dearmor -o "$KEYRING" - Network accessline 133
echo "deb [signed-by=$KEYRING] https://apt.quien.dev stable main" > "$SOURCES" - Network accessline 149
run: | VERSION="${{ steps.version.outputs.version }}" SHA_SRC=$(curl -fsSL "https://github.com/${{ github.repository }}/archive/${{ github.ref_name }}.tar.gz" | sha256sum | awk '{print $1}') - Network accessline 150
VERSION="${{ steps.version.outputs.version }}" SHA_SRC=$(curl -fsSL "https://github.com/${{ github.repository }}/archive/${{ github.ref_name }}.tar.gz" | sha256sum | awk '{print $1}') SHA_AMD64=$(sha256sum dist/quien_lin - Network accessline 151
SHA_SRC=$(curl -fsSL "https://github.com/${{ github.repository }}/archive/${{ github.ref_name }}.tar.gz" | sha256sum | awk '{print $1}')
.goreleaser.yml
README.md
- Network accessline 3
[](https://github.com/retlehs/quien/actions) - Network accessline 4
 - Network accessline 5
 - Dangerous shell operationline 24
curl -fsSL https://apt.quien.dev/install.sh | sudo sh - Network accessline 24
curl -fsSL https://apt.quien.dev/install.sh | sudo sh - Access to secretsline 106
[Credential-related source omitted] - Network accessline 114
1. Go to the [Google Cloud Console](https://console.cloud.google.com/) - Access to secretsline 121
[Credential-related source omitted] - Network accessline 155
Add quien as a [agent skill](https://skills.sh/) so agents use it for domain and IP lookups:
cmd/all.go
- Executable scriptline 1
Executable file
cmd/dns.go
- Executable scriptline 1
Executable file
cmd/http.go
- Executable scriptline 1
Executable file
cmd/mail.go
- Executable scriptline 1
Executable file
cmd/mail_test.go
- Executable scriptline 1
Executable file
cmd/root.go
- Executable scriptline 1
Executable file
cmd/seo.go
- Executable scriptline 1
Executable file
cmd/stack.go
- Executable scriptline 1
Executable file
cmd/tls.go
- Executable scriptline 1
Executable file
cmd/whois.go
- Executable scriptline 1
Executable file
internal/bgp/client.go
- Executable scriptline 1
Executable file - Network accessline 10
const ( defaultBaseURL = "https://stat.ripe.net/data" - Network accessline 11
defaultBaseURL = "https://stat.ripe.net/data" - Network accessline 12
userAgent = "quien/0 (+https://github.com/retlehs/quien)" - Network accessline 15
var ( baseURL = defaultBaseURL client = &http.Client{Timeout: 10 * time.Second} - Network accessline 16
baseURL = defaultBaseURL client = &http.Client{Timeout: 10 * time.Second} ) - Network accessline 17
client = &http.Client{Timeout: 10 * time.Second}
internal/bgp/client_test.go
- Executable scriptline 1
Executable file
internal/display/display.go
- Executable scriptline 1
Executable file
internal/display/display_test.go
- Executable scriptline 1
Executable file
internal/display/dns.go
- Executable scriptline 1
Executable file
internal/display/dns_test.go
- Executable scriptline 1
Executable file
internal/display/http.go
- Executable scriptline 1
Executable file
internal/display/interactive.go
- Executable scriptline 1
Executable file
internal/display/interactive_test.go
- Executable scriptline 1
Executable file
internal/display/ip.go
- Executable scriptline 1
Executable file
internal/display/mail.go
- Executable scriptline 1
Executable file
internal/display/prompt.go
- Executable scriptline 1
Executable file
internal/display/raw.go
- Executable scriptline 1
Executable file
internal/display/seo.go
internal/display/stack.go
- Executable scriptline 1
Executable file
internal/display/theme.go
- Executable scriptline 1
Executable file
internal/display/tls.go
- Executable scriptline 1
Executable file
internal/dns/dns.go
- Executable scriptline 1
Executable file
internal/dns/dns_test.go
- Executable scriptline 1
Executable file
internal/dnsutil/resolve.go
- Executable scriptline 1
Executable file
internal/dnsutil/resolve_test.go
- Executable scriptline 1
Executable file
internal/dnsutil/resolver.go
- Executable scriptline 1
Executable file
internal/dnsutil/resolver_test.go
- Executable scriptline 1
Executable file
internal/httpinfo/httpinfo.go
internal/mail/bimi.go
- Executable scriptline 1
Executable file - Network accessline 63
client := &http.Client{ - Network accessline 125
// checkHTTPSRedirect refuses redirect targets that downgrade to plaintext, // so an attacker can't publish a BIMI record that 302s from https://... to - Network accessline 126
// so an attacker can't publish a BIMI record that 302s from https://... to - Network accessline 127
// http://... and swap the VMC mid-flight.
internal/mail/bimi_roots.go
- Executable scriptline 1
Executable file
internal/mail/bimi_test.go
- Executable scriptline 1
Executable file - Network accessline 29
{ name: "full record", raw: "v=BIMI1; l=https://example.com/logo.svg; a=https://example.com/vmc.pem", - Network accessline 30
name: "full record", raw: "v=BIMI1; l=https://example.com/logo.svg; a=https://example.com/vmc.pem", logo: "https://example.com/logo.svg", - Network accessline 31
raw: "v=BIMI1; l=https://example.com/logo.svg; a=https://example.com/vmc.pem", - Network accessline 32
logo: "https://example.com/logo.svg", - Network accessline 33
vmc: "https://example.com/vmc.pem", - Network accessline 35
{ name: "no spaces", raw: "v=BIMI1;l=https://example.com/logo.svg;a=https://example.com/vmc.pem", - Network accessline 36
name: "no spaces", raw: "v=BIMI1;l=https://example.com/logo.svg;a=https://example.com/vmc.pem", logo: "https://example.com/logo.svg", - Network accessline 37
raw: "v=BIMI1;l=https://example.com/logo.svg;a=https://example.com/vmc.pem", - Network accessline 38
logo: "https://example.com/logo.svg", - Network accessline 39
vmc: "https://example.com/vmc.pem", - Network accessline 41
{ name: "missing vmc", raw: "v=BIMI1; l=https://example.com/logo.svg", - Network accessline 42
name: "missing vmc", raw: "v=BIMI1; l=https://example.com/logo.svg", logo: "https://example.com/logo.svg", - Network accessline 43
raw: "v=BIMI1; l=https://example.com/logo.svg", - Network accessline 44
logo: "https://example.com/logo.svg", - Network accessline 47
{ name: "missing logo", raw: "v=BIMI1; a=https://example.com/vmc.pem", - Network accessline 48
name: "missing logo", raw: "v=BIMI1; a=https://example.com/vmc.pem", logo: "", - Network accessline 49
raw: "v=BIMI1; a=https://example.com/vmc.pem", - Network accessline 50
logo: "", vmc: "https://example.com/vmc.pem", }, - Network accessline 51
vmc: "https://example.com/vmc.pem", - Network accessline 53
{ name: "uppercase keys", raw: "v=BIMI1; L=https://example.com/logo.svg; A=https://example.com/vmc.pem", - Network accessline 54
name: "uppercase keys", raw: "v=BIMI1; L=https://example.com/logo.svg; A=https://example.com/vmc.pem", logo: "https://example.com/logo.svg", - Network accessline 55
raw: "v=BIMI1; L=https://example.com/logo.svg; A=https://example.com/vmc.pem", - Network accessline 56
logo: "https://example.com/logo.svg", - Network accessline 57
vmc: "https://example.com/vmc.pem", - Network accessline 59
{ name: "extra whitespace", raw: " v=BIMI1 ; l = https://example.com/logo.svg ; a = https://example.com/vmc.pem ", - Network accessline 60
name: "extra whitespace", raw: " v=BIMI1 ; l = https://example.com/logo.svg ; a = https://example.com/vmc.pem ", logo: "https://example.com/logo.svg", - Network accessline 61
raw: " v=BIMI1 ; l = https://example.com/logo.svg ; a = https://example.com/vmc.pem ", - Network accessline 62
logo: "https://example.com/logo.svg", - Network accessline 63
vmc: "https://example.com/vmc.pem", - Network accessline 124
func TestFetchVMCRejectsNonHTTPS(t *testing.T) { cases := []string{ "http://example.com/vmc.pem", - Network accessline 125
cases := []string{ "http://example.com/vmc.pem", "file:///etc/passwd", - Network accessline 126
"http://example.com/vmc.pem", - Network accessline 144
func TestCheckHTTPSRedirect(t *testing.T) { httpsReq := &http.Request{URL: mustParseURL(t, "https://example.com/next.pem")} - Network accessline 145
httpsReq := &http.Request{URL: mustParseURL(t, "https://example.com/next.pem")} - Network accessline 146
httpReq := &http.Request{URL: mustParseURL(t, "http://example.com/next.pem")}
internal/mail/mail.go
- Executable scriptline 1
Executable file
internal/mail/mail_test.go
- Executable scriptline 1
Executable file
internal/mail/spf.go
- Executable scriptline 1
Executable file - Network accessline 75
records, void, err := fetch(domain) - Network accessline 255
continue } records, void, err := fetch(c.Target) - Network accessline 256
} records, void, err := fetch(c.Target) if err != nil { - Network accessline 257
records, void, err := fetch(c.Target)
internal/mail/spf_test.go
- Executable scriptline 1
Executable file
internal/model/domain.go
- Executable scriptline 1
Executable file
internal/peeringdb/client.go
- Executable scriptline 1
Executable file - Network accessline 11
const defaultBaseURL = "https://www.peeringdb.com/api" - Network accessline 12
const userAgent = "quien/0 (+https://github.com/retlehs/quien)" - Network accessline 14
var ( baseURL = defaultBaseURL client = &http.Client{Timeout: 10 * time.Second} - Network accessline 15
baseURL = defaultBaseURL client = &http.Client{Timeout: 10 * time.Second} ) - Network accessline 16
client = &http.Client{Timeout: 10 * time.Second}
internal/peeringdb/client_test.go
- Executable scriptline 1
Executable file - Network accessline 18
t.Fatalf("user-agent = %q, want %q", got, want) } _, _ = w.Write([]byte(`{"data":[{"asn":15169,"name":"GOOGLE","name_long":"Google LLC","website":"https://google.com","policy_general":"Open","policy_ratio":false,"policy_locations":"Not - Network accessline 19
} _, _ = w.Write([]byte(`{"data":[{"asn":15169,"name":"GOOGLE","name_long":"Google LLC","website":"https://google.com","policy_general":"Open","policy_ratio":false,"policy_locations":"Not Required","info_traffic":"100+Tbps","ix_count":200 - Network accessline 20
_, _ = w.Write([]byte(`{"data":[{"asn":15169,"name":"GOOGLE","name_long":"Google LLC","website":"https://google.com","policy_general":"Open","policy_ratio":false,"policy_locations":"Not Required","info_traffic":"100+Tbps","ix_count":200,"fa
internal/rdap/bootstrap.go
internal/rdap/client.go
internal/rdap/ip.go
- Executable scriptline 1
Executable file - Network accessline 85
const ( ipv4BootstrapURL = "https://data.iana.org/rdap/ipv4.json" - Network accessline 86
ipv4BootstrapURL = "https://data.iana.org/rdap/ipv4.json" - Network accessline 87
ipv6BootstrapURL = "https://data.iana.org/rdap/ipv6.json" - Network accessline 107
url := baseURL + "ip/" + ip client := &http.Client{Timeout: 10 * time.Second} - Network accessline 108
client := &http.Client{Timeout: 10 * time.Second} - Network accessline 318
client := &http.Client{Timeout: 10 * time.Second}
internal/resolver/normalize.go
- Executable scriptline 1
Executable file
internal/resolver/normalize_test.go
- Executable scriptline 1
Executable file
internal/resolver/resolver.go
- Executable scriptline 1
Executable file
internal/resolver/resolver_test.go
- Executable scriptline 1
Executable file
internal/retry/retry.go
- Executable scriptline 1
Executable file
internal/retry/retry_test.go
- Executable scriptline 1
Executable file
internal/seo/crux.go
- Executable scriptline 1
Executable file - Network accessline 40
const cruxAPI = "https://chromeuxreport.googleapis.com/v1/records:queryRecord" - Network accessline 41
const cruxHistoryAPI = "https://chromeuxreport.googleapis.com/v1/records:queryHistoryRecord" - Access to secretsline 43
[Credential-related source omitted] - Access to secretsline 48
[Credential-related source omitted] - Network accessline 64
client := &http.Client{Timeout: 10 * time.Second} - Network accessline 79
func queryCrUXRecord(client *http.Client, apiKey, origin string) (*CWVData, error) { - Network accessline 113
func queryCrUXHistory(client *http.Client, apiKey, origin string) (*CWVTrend, error) { - Network accessline 223
// Rating based on Google's published p75 thresholds: // https://web.dev/articles/vitals - Network accessline 224
// https://web.dev/articles/vitals
internal/seo/crux_test.go
- Executable scriptline 1
Executable file
internal/seo/seo.go
- Executable scriptline 1
Executable file - Network accessline 93
client := &http.Client{ - Network accessline 119
func parseIndexability(r *Result, client *http.Client, baseURL string, headers http.Header, lower string) { - Network accessline 144
func fetchRobotsTxt(r *Result, client *http.Client, baseURL string) { - Network accessline 297
// Compression — Go's http.Client transparently decompresses and strips - Network accessline 323
func checkCompression(r *Result, baseURL string) { client := &http.Client{ - Network accessline 324
client := &http.Client{
internal/seo/seo_test.go
- Executable scriptline 1
Executable file - Network accessline 193
<meta property="og:title" content="OG Title"> <meta property="og:description" content="OG Description"> <meta property="og:image" content="https://example.com/image.png"> - Network accessline 194
<meta property="og:description" content="OG Description"> <meta property="og:image" content="https://example.com/image.png"> <meta property="og:type" content="website"> - Network accessline 195
<meta property="og:image" content="https://example.com/image.png"> - Network accessline 206
t.Errorf("OGDescription = %q", r.Social.OGDescription) } if r.Social.OGImage != "https://example.com/image.png" { - Network accessline 207
} if r.Social.OGImage != "https://example.com/image.png" { t.Errorf("OGImage = %q", r.Social.OGImage) - Network accessline 208
if r.Social.OGImage != "https://example.com/image.png" { - Network accessline 360
func TestParseIndexability_Canonical(t *testing.T) { html := `<link rel="canonical" href="https://example.com/page">` - Network accessline 361
html := `<link rel="canonical" href="https://example.com/page">` - Network accessline 365
r.Indexability.Canonical = m[1] } if r.Indexability.Canonical != "https://example.com/page" { - Network accessline 366
} if r.Indexability.Canonical != "https://example.com/page" { t.Errorf("Canonical = %q", r.Indexability.Canonical) - Network accessline 367
if r.Indexability.Canonical != "https://example.com/page" { - Network accessline 379
Sitemap: https://www.example.com/store/sitemap-index.xml - Network accessline 380
Sitemap: https://www.example.com/surface/surface.index.xml - Network accessline 381
Sitemap: https://www.example.com/sitemaps/ai/sitemapindex.xml - Network accessline 400
} want := []string{ "https://www.example.com/store/sitemap-index.xml", - Network accessline 401
want := []string{ "https://www.example.com/store/sitemap-index.xml", "https://www.example.com/surface/surface.index.xml", - Network accessline 402
"https://www.example.com/store/sitemap-index.xml", - Network accessline 403
"https://www.example.com/surface/surface.index.xml", - Network accessline 404
"https://www.example.com/sitemaps/ai/sitemapindex.xml", - Network accessline 418
<link rel="preload" href="/font.woff2" as="font"> <link rel="preload" href="/critical.css" as="style"> <link rel="preconnect" href="https://fonts.googleapis.com"> - Network accessline 419
<link rel="preload" href="/critical.css" as="style"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="stylesheet" href="/style.css"> - Network accessline 420
<link rel="preconnect" href="https://fonts.googleapis.com">
internal/stack/stack.go
- Executable scriptline 1
Executable file - Network accessline 79
Headers http.Header Body []byte BaseURL string // the URL that succeeded (https:// or http://) - Network accessline 80
Body []byte BaseURL string // the URL that succeeded (https:// or http://) } - Network accessline 81
BaseURL string // the URL that succeeded (https:// or http://) - Network accessline 85
func FetchPage(domain string) (*PageData, error) { client := &http.Client{ - Network accessline 86
client := &http.Client{ - Network accessline 148
wpSignals := []string{ `rel="https://api.w.org/"`, // REST API discovery link - Network accessline 149
`rel="https://api.w.org/"`, // REST API discovery link
internal/stack/stack_test.go
- Executable scriptline 1
Executable file - Network accessline 18
want bool }{ {"REST API link", `<link rel="https://api.w.org/" href="https://example.com/wp-json/" />`, true}, - Network accessline 19
}{ {"REST API link", `<link rel="https://api.w.org/" href="https://example.com/wp-json/" />`, true}, {"wp-includes", `<script src="/wp-includes/js/jquery.min.js"></script>`, true}, - Network accessline 20
{"REST API link", `<link rel="https://api.w.org/" href="https://example.com/wp-json/" />`, true}, - Network accessline 154
{ name: "Webflow not detected from a link to webflow.com", html: `<a href="https://webflow.com">Built with Webflow</a>`, - Network accessline 155
name: "Webflow not detected from a link to webflow.com", html: `<a href="https://webflow.com">Built with Webflow</a>`, want: "", - Network accessline 156
html: `<a href="https://webflow.com">Built with Webflow</a>`, - Network accessline 193
{ name: "jQuery", html: `<script src="https://cdn.jsdelivr.net/npm/jquery.min.js"></script>`, - Network accessline 194
name: "jQuery", html: `<script src="https://cdn.jsdelivr.net/npm/jquery.min.js"></script>`, want: []string{"jQuery"}, - Network accessline 195
html: `<script src="https://cdn.jsdelivr.net/npm/jquery.min.js"></script>`, - Network accessline 203
{ name: "Preact from submodule import", html: `<script type="importmap">{"imports":{"preact/hooks":"https://esm.sh/preact/hooks"}}</script>`, - Network accessline 204
name: "Preact from submodule import", html: `<script type="importmap">{"imports":{"preact/hooks":"https://esm.sh/preact/hooks"}}</script>`, want: []string{"Preact"}, - Network accessline 205
html: `<script type="importmap">{"imports":{"preact/hooks":"https://esm.sh/preact/hooks"}}</script>`, - Network accessline 308
html := `<html> <head> <script src="https://cdn.jsdelivr.net/npm/alpine.js"></script> - Network accessline 309
<head> <script src="https://cdn.jsdelivr.net/npm/alpine.js"></script> <script src="https://www.googletagmanager.com/gtag/js"></script> - Network accessline 310
<script src="https://cdn.jsdelivr.net/npm/alpine.js"></script> - Network accessline 311
<script src="https://www.googletagmanager.com/gtag/js"></script> - Network accessline 312
<link href="https://fonts.googleapis.com/css2?family=Inter" rel="stylesheet"> - Network accessline 337
func TestParseExternalServices_ExcludesSameDomain(t *testing.T) { html := `<script src="https://example.com/app.js"></script> - Network accessline 338
html := `<script src="https://example.com/app.js"></script> - Network accessline 339
<script src="https://www.example.com/other.js"></script> - Network accessline 340
<script src="https://cdn.external.com/lib.js"></script>`
internal/tlsinfo/tlsinfo.go
- Executable scriptline 1
Executable file
internal/tlsinfo/tlsinfo_test.go
- Executable scriptline 1
Executable file
internal/whois/client.go
- Executable scriptline 1
Executable file
internal/whois/client_test.go
- Executable scriptline 1
Executable file
internal/whois/parser.go
internal/whois/parser_test.go
- Executable scriptline 1
Executable file - Network accessline 10
Registry Domain ID: 2336799_DOMAIN_COM-VRSN Registrar WHOIS Server: whois.iana.org Registrar URL: http://www.iana.org - Network accessline 11
Registrar WHOIS Server: whois.iana.org Registrar URL: http://www.iana.org Updated Date: 2024-08-14T07:01:38Z - Network accessline 12
Registrar URL: http://www.iana.org - Network accessline 15
Registry Expiry Date: 2025-08-13T04:00:00Z Registrar: RESERVED-Internet Assigned Numbers Authority Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited - Network accessline 16
Registrar: RESERVED-Internet Assigned Numbers Authority Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited - Network accessline 17
Domain Status: clientDeleteProhibited https://icann.org/epp#clientDeleteProhibited - Network accessline 18
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited - Network accessline 136
func TestParse_StatusURLStripping(t *testing.T) { raw := `Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited` - Network accessline 137
raw := `Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited`
internal/whois/servers.go
- Executable scriptline 1
Executable file
internal/whois/tlds.go
- Executable scriptline 1
Executable file
internal/whois/tlds_test.go
- Executable scriptline 1
Executable file - Network accessline 111
Last Modified: 2023-07-05T00:23:15Z Registrar Name: auDA Status: serverDeleteProhibited https://identitydigital.au/whois-status-codes#serverDeleteProhibited - Network accessline 112
Registrar Name: auDA Status: serverDeleteProhibited https://identitydigital.au/whois-status-codes#serverDeleteProhibited Registrant Contact ID: 5b8528848e1b48ddbf62fa592f627c57-AU - Network accessline 113
Status: serverDeleteProhibited https://identitydigital.au/whois-status-codes#serverDeleteProhibited - Network accessline 178
"http://whois.markmonitor.com": "whois.markmonitor.com", - Network accessline 179
"https://whois.markmonitor.com": "whois.markmonitor.com", - Network accessline 181
"HTTPS://whois.markmonitor.com": "whois.markmonitor.com", - Network accessline 182
"Http://whois.example.com": "whois.example.com", - Network accessline 186
"https://whois.example.com/path": "whois.example.com", - Network accessline 187
"https://whois.example.com/p?q=1": "whois.example.com", - Network accessline 188
"https://whois.example.com#section": "whois.example.com", - Network accessline 189
" https://whois.example.com/path ": "whois.example.com", - Network accessline 191
"whois.example.com:43": "whois.example.com", "whois.example.com:4343": "whois.example.com", "https://whois.example.com:43": "whois.example.com", - Network accessline 192
"whois.example.com:4343": "whois.example.com", "https://whois.example.com:43": "whois.example.com", "http://whois.example.com:43/": "whois.example.com", - Network accessline 193
"https://whois.example.com:43": "whois.example.com", - Network accessline 194
"http://whois.example.com:43/": "whois.example.com",
main.go
- Executable scriptline 1
Executable file
packaging/aur/quien-bin/PKGBUILD.template
- Network accessline 6
pkgdesc="A better whois and domain intelligence toolkit (pre-built binary)" arch=('x86_64' 'aarch64') url="https://github.com/retlehs/quien" - Network accessline 7
arch=('x86_64' 'aarch64') url="https://github.com/retlehs/quien" license=('MIT') - Network accessline 8
url="https://github.com/retlehs/quien"
packaging/aur/quien/PKGBUILD.template
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 6 facts
- Contacts stat.ripe.net, which SKILL.md, the README and the plugin manifest do not mentioninternal/bgp/client.go:11High confidence
- Contacts www.peeringdb.com, which SKILL.md, the README and the plugin manifest do not mentioninternal/peeringdb/client.go:11High confidence
- Contacts data.iana.org, which SKILL.md, the README and the plugin manifest do not mentioninternal/rdap/bootstrap.go:12High confidence
- Contacts data.iana.org, which SKILL.md, the README and the plugin manifest do not mentioninternal/rdap/ip.go:86High confidence
- Contacts chromeuxreport.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentioninternal/seo/crux.go:40High confidence
- Contacts api.w.org, which SKILL.md, the README and the plugin manifest do not mentioninternal/stack/stack.go:149High confidence
Signal confidence: 238 facts
- Network access in prose of documentationREADME.md:3Low confidence
- Network access in prose of documentationREADME.md:4Low confidence
- Network access in prose of documentationREADME.md:5Low confidence
- Dangerous shell operation in code of documentationREADME.md:24Low confidence
- Network access in code of documentationREADME.md:24Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueREADME.md:106Low confidence
- Network access in prose of documentationREADME.md:114Low confidence
- Access to secrets in prose of documentationREADME.md:121Low confidence
- Network access in prose of documentationREADME.md:155Low confidence
- Executable script in code of a file that runscmd/all.go:1High confidence
- Executable script in code of a file that runscmd/dns.go:1High confidence
- Executable script in code of a file that runscmd/http.go:1High confidence
- Executable script in code of a file that runscmd/mail.go:1High confidence
- Executable script in code of a testcmd/mail_test.go:1Low confidence
- Executable script in code of a file that runscmd/root.go:1High confidence
- Executable script in code of a file that runscmd/seo.go:1High confidence
- Executable script in code of a file that runscmd/stack.go:1High confidence
- Executable script in code of a file that runscmd/tls.go:1High confidence
- Executable script in code of a file that runscmd/whois.go:1High confidence
- Executable script in code of a file that runsinternal/bgp/client.go:1High confidence
- Network access in code of a file that runsinternal/bgp/client.go:10High confidence
- Network access in code of a file that runsinternal/bgp/client.go:11High confidence
- Network access in code of a file that runsinternal/bgp/client.go:12High confidence
- Network access in code of a file that runsinternal/bgp/client.go:15High confidence
- Network access in code of a file that runsinternal/bgp/client.go:16High confidence
- Network access in code of a file that runsinternal/bgp/client.go:17High confidence
- Executable script in code of a testinternal/bgp/client_test.go:1Low confidence
- Executable script in code of a file that runsinternal/display/display.go:1High confidence
- Executable script in code of a testinternal/display/display_test.go:1Low confidence
- Executable script in code of a file that runsinternal/display/dns.go:1High confidence
- Executable script in code of a testinternal/display/dns_test.go:1Low confidence
- Executable script in code of a file that runsinternal/display/http.go:1High confidence
- Executable script in code of a file that runsinternal/display/interactive.go:1High confidence
- Executable script in code of a testinternal/display/interactive_test.go:1Low confidence
- Executable script in code of a file that runsinternal/display/ip.go:1High confidence
- Executable script in code of a file that runsinternal/display/mail.go:1High confidence
- Executable script in code of a file that runsinternal/display/prompt.go:1High confidence
- Executable script in code of a file that runsinternal/display/raw.go:1High confidence
- Executable script in code of a file that runsinternal/display/seo.go:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueinternal/display/seo.go:46Low confidence
- Executable script in code of a file that runsinternal/display/stack.go:1High confidence
- Executable script in code of a file that runsinternal/display/theme.go:1High confidence
- Executable script in code of a file that runsinternal/display/tls.go:1High confidence
- Executable script in code of a file that runsinternal/dns/dns.go:1High confidence
- Executable script in code of a testinternal/dns/dns_test.go:1Low confidence
- Executable script in code of a file that runsinternal/dnsutil/resolve.go:1High confidence
- Executable script in code of a testinternal/dnsutil/resolve_test.go:1Low confidence
- Executable script in code of a file that runsinternal/dnsutil/resolver.go:1High confidence
- Executable script in code of a testinternal/dnsutil/resolver_test.go:1Low confidence
- Executable script in code of a file that runsinternal/httpinfo/httpinfo.go:1High confidence
and 188 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/retlehs-quien/)