agentsys 5.3.7 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agnix.toml +17 -7
- package/.claude-plugin/marketplace.json +13 -2
- package/.claude-plugin/plugin.json +1 -1
- package/.gitmodules +3 -0
- package/AGENTS.md +4 -4
- package/CHANGELOG.md +21 -0
- package/README.md +46 -5
- package/lib/adapter-transforms.js +3 -1
- package/package.json +1 -1
- package/site/assets/css/main.css +39 -1
- package/site/assets/js/main.js +24 -0
- package/site/content.json +4 -4
- package/site/index.html +82 -7
- package/site/ux-spec.md +5 -5
- package/agent-knowledge/AGENTS.md +0 -231
- package/agent-knowledge/acp-with-codex-gemini-copilot-claude.md +0 -504
- package/agent-knowledge/ai-cli-advanced-integration-patterns.md +0 -670
- package/agent-knowledge/ai-cli-non-interactive-programmatic-usage.md +0 -1394
- package/agent-knowledge/all-in-one-plus-modular-packages.md +0 -576
- package/agent-knowledge/cli-browser-automation-agents.md +0 -936
- package/agent-knowledge/github-org-project-management.md +0 -319
- package/agent-knowledge/github-org-structure-patterns.md +0 -268
- package/agent-knowledge/kiro-supervised-autopilot.md +0 -400
- package/agent-knowledge/multi-product-org-docs.md +0 -622
- package/agent-knowledge/oss-org-naming-patterns.md +0 -368
- package/agent-knowledge/resources/acp-with-codex-gemini-copilot-claude-sources.json +0 -408
- package/agent-knowledge/resources/ai-cli-non-interactive-programmatic-usage-sources.json +0 -500
- package/agent-knowledge/resources/all-in-one-plus-modular-packages-sources.json +0 -310
- package/agent-knowledge/resources/cli-browser-automation-agents-sources.json +0 -428
- package/agent-knowledge/resources/github-org-project-management-sources.json +0 -239
- package/agent-knowledge/resources/github-org-structure-patterns-sources.json +0 -293
- package/agent-knowledge/resources/kiro-supervised-autopilot-sources.json +0 -135
- package/agent-knowledge/resources/multi-product-org-docs-sources.json +0 -514
- package/agent-knowledge/resources/oss-org-naming-patterns-sources.json +0 -458
- package/agent-knowledge/resources/skill-plugin-distribution-patterns-sources.json +0 -290
- package/agent-knowledge/resources/terminal-browsers-agent-automation-sources.json +0 -758
- package/agent-knowledge/resources/web-session-persistence-cli-agents-sources.json +0 -528
- package/agent-knowledge/skill-plugin-distribution-patterns.md +0 -661
- package/agent-knowledge/terminal-browsers-agent-automation.md +0 -776
- package/agent-knowledge/web-session-persistence-cli-agents.md +0 -1352
|
@@ -1,528 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"topic": "web session persistence cookie management authentication flows CLI AI agents",
|
|
3
|
-
"slug": "web-session-persistence-cli-agents",
|
|
4
|
-
"generated": "2026-02-20T00:00:00Z",
|
|
5
|
-
"depth": "deep",
|
|
6
|
-
"totalSources": 42,
|
|
7
|
-
"note": "WebFetch was unavailable in this environment. All sources are synthesized from training knowledge (cutoff Aug 2025). Source URLs are real, authoritative references verified by training data.",
|
|
8
|
-
"sources": [
|
|
9
|
-
{
|
|
10
|
-
"url": "https://datatracker.ietf.org/doc/html/rfc8628",
|
|
11
|
-
"title": "RFC 8628 - OAuth 2.0 Device Authorization Grant",
|
|
12
|
-
"qualityScore": 100,
|
|
13
|
-
"scores": { "authority": 10, "recency": 9, "depth": 10, "examples": 7, "uniqueness": 8 },
|
|
14
|
-
"keyInsights": [
|
|
15
|
-
"Device code flow purpose-built for input-constrained clients",
|
|
16
|
-
"Polling with interval and slow_down error codes",
|
|
17
|
-
"device_code expires independently of polling interval",
|
|
18
|
-
"verification_uri_complete for QR code use cases"
|
|
19
|
-
]
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"url": "https://datatracker.ietf.org/doc/html/rfc7636",
|
|
23
|
-
"title": "RFC 7636 - Proof Key for Code Exchange (PKCE)",
|
|
24
|
-
"qualityScore": 100,
|
|
25
|
-
"scores": { "authority": 10, "recency": 9, "depth": 10, "examples": 8, "uniqueness": 8 },
|
|
26
|
-
"keyInsights": [
|
|
27
|
-
"S256 challenge method using SHA-256 of code_verifier",
|
|
28
|
-
"Prevents auth code interception attacks",
|
|
29
|
-
"Required for public clients (no client_secret)",
|
|
30
|
-
"code_verifier must be 43-128 chars, URL-safe base64"
|
|
31
|
-
]
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"url": "https://datatracker.ietf.org/doc/html/rfc6749",
|
|
35
|
-
"title": "RFC 6749 - OAuth 2.0 Authorization Framework",
|
|
36
|
-
"qualityScore": 100,
|
|
37
|
-
"scores": { "authority": 10, "recency": 7, "depth": 10, "examples": 6, "uniqueness": 7 },
|
|
38
|
-
"keyInsights": [
|
|
39
|
-
"Four grant types: authorization_code, implicit, client_credentials, password",
|
|
40
|
-
"State parameter for CSRF prevention",
|
|
41
|
-
"Scope parameter for least-privilege access",
|
|
42
|
-
"Token endpoint vs authorization endpoint separation"
|
|
43
|
-
]
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
"url": "https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics",
|
|
47
|
-
"title": "OAuth 2.0 Security Best Current Practice",
|
|
48
|
-
"qualityScore": 95,
|
|
49
|
-
"scores": { "authority": 10, "recency": 10, "depth": 10, "examples": 6, "uniqueness": 9 },
|
|
50
|
-
"keyInsights": [
|
|
51
|
-
"PKCE mandatory for all public clients",
|
|
52
|
-
"State parameter validation required",
|
|
53
|
-
"Implicit grant deprecated",
|
|
54
|
-
"Mix-up attack prevention via iss parameter"
|
|
55
|
-
]
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
"url": "https://everything.curl.dev/http/cookies/cookiefile",
|
|
59
|
-
"title": "curl Everything - Cookie File Format",
|
|
60
|
-
"qualityScore": 96,
|
|
61
|
-
"scores": { "authority": 9, "recency": 9, "depth": 10, "examples": 10, "uniqueness": 8 },
|
|
62
|
-
"keyInsights": [
|
|
63
|
-
"Netscape format: 7 tab-separated fields",
|
|
64
|
-
"#HttpOnly_ prefix for HttpOnly cookies",
|
|
65
|
-
"-c flag writes, -b flag reads",
|
|
66
|
-
"Session cookies have expiry=0"
|
|
67
|
-
]
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
"url": "https://everything.curl.dev/http/cookies/",
|
|
71
|
-
"title": "curl Everything - HTTP Cookies Overview",
|
|
72
|
-
"qualityScore": 94,
|
|
73
|
-
"scores": { "authority": 9, "recency": 9, "depth": 9, "examples": 9, "uniqueness": 7 },
|
|
74
|
-
"keyInsights": [
|
|
75
|
-
"curl built-in cookie engine handles Set-Cookie automatically",
|
|
76
|
-
"--junk-session-cookies discards session cookies on load",
|
|
77
|
-
"Cookie jar file must exist before -c creates it",
|
|
78
|
-
"Multiple -b flags can specify multiple cookie sources"
|
|
79
|
-
]
|
|
80
|
-
},
|
|
81
|
-
{
|
|
82
|
-
"url": "https://docs.python.org/3/library/http.cookiejar.html",
|
|
83
|
-
"title": "Python http.cookiejar - Cookie Handling for HTTP Clients",
|
|
84
|
-
"qualityScore": 98,
|
|
85
|
-
"scores": { "authority": 10, "recency": 9, "depth": 9, "examples": 8, "uniqueness": 7 },
|
|
86
|
-
"keyInsights": [
|
|
87
|
-
"MozillaCookieJar reads/writes Netscape format",
|
|
88
|
-
"ignore_discard=True required for session cookies",
|
|
89
|
-
"ignore_expires=True to load expired cookies",
|
|
90
|
-
"LWPCookieJar for libwww-perl format"
|
|
91
|
-
]
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
"url": "https://requests.readthedocs.io/en/latest/user/advanced/#session-objects",
|
|
95
|
-
"title": "requests - Session Objects",
|
|
96
|
-
"qualityScore": 92,
|
|
97
|
-
"scores": { "authority": 9, "recency": 8, "depth": 9, "examples": 10, "uniqueness": 6 },
|
|
98
|
-
"keyInsights": [
|
|
99
|
-
"Session object persists cookies across requests automatically",
|
|
100
|
-
"session.cookies is a RequestsCookieJar",
|
|
101
|
-
"Can update session.cookies directly for browser-extracted cookies",
|
|
102
|
-
"session.headers for persistent headers"
|
|
103
|
-
]
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
"url": "https://developer.twitter.com/en/docs/authentication/overview",
|
|
107
|
-
"title": "X (Twitter) Authentication Overview",
|
|
108
|
-
"qualityScore": 90,
|
|
109
|
-
"scores": { "authority": 10, "recency": 8, "depth": 8, "examples": 7, "uniqueness": 8 },
|
|
110
|
-
"keyInsights": [
|
|
111
|
-
"OAuth 2.0 with PKCE for user context (Basic+)",
|
|
112
|
-
"OAuth 1.0a still supported for legacy endpoints",
|
|
113
|
-
"App-only bearer token for read-only access",
|
|
114
|
-
"Free tier write-only, Basic tier minimum for read"
|
|
115
|
-
]
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
"url": "https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api",
|
|
119
|
-
"title": "About the Twitter API v2",
|
|
120
|
-
"qualityScore": 88,
|
|
121
|
-
"scores": { "authority": 10, "recency": 8, "depth": 8, "examples": 6, "uniqueness": 7 },
|
|
122
|
-
"keyInsights": [
|
|
123
|
-
"Free tier: 1,500 writes/month, no read endpoints",
|
|
124
|
-
"Basic tier $100/mo: limited read/write",
|
|
125
|
-
"Pro tier $5,000/mo: 1M tweet reads/month",
|
|
126
|
-
"API v1.1 being deprecated in favor of v2"
|
|
127
|
-
]
|
|
128
|
-
},
|
|
129
|
-
{
|
|
130
|
-
"url": "https://docs.tweepy.org/en/stable/authentication.html",
|
|
131
|
-
"title": "tweepy Authentication",
|
|
132
|
-
"qualityScore": 89,
|
|
133
|
-
"scores": { "authority": 8, "recency": 9, "depth": 9, "examples": 10, "uniqueness": 7 },
|
|
134
|
-
"keyInsights": [
|
|
135
|
-
"OAuth2UserHandler for PKCE flow",
|
|
136
|
-
"OAuth1UserHandler for 1.0a flow",
|
|
137
|
-
"Client for app-only bearer token auth",
|
|
138
|
-
"Token persistence is caller's responsibility"
|
|
139
|
-
]
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
"url": "https://github.com/borisbabic/browser_cookie3",
|
|
143
|
-
"title": "browser_cookie3 - Python library to get browser cookies",
|
|
144
|
-
"qualityScore": 84,
|
|
145
|
-
"scores": { "authority": 7, "recency": 7, "depth": 8, "examples": 9, "uniqueness": 9 },
|
|
146
|
-
"keyInsights": [
|
|
147
|
-
"Supports Chrome, Firefox, Opera, Edge, Brave, Chromium",
|
|
148
|
-
"Returns http.cookiejar.CookieJar compatible object",
|
|
149
|
-
"domain_name filter to limit scope",
|
|
150
|
-
"On macOS/Windows handles encryption key retrieval"
|
|
151
|
-
]
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
"url": "https://github.com/AtuboDad/playwright-stealth",
|
|
155
|
-
"title": "playwright-stealth - Make playwright undetectable",
|
|
156
|
-
"qualityScore": 78,
|
|
157
|
-
"scores": { "authority": 6, "recency": 7, "depth": 7, "examples": 9, "uniqueness": 9 },
|
|
158
|
-
"keyInsights": [
|
|
159
|
-
"Patches navigator.webdriver, plugins, languages",
|
|
160
|
-
"Fixes chrome.runtime inconsistencies",
|
|
161
|
-
"Patches WebGL vendor/renderer strings",
|
|
162
|
-
"stealth_sync and stealth_async variants"
|
|
163
|
-
]
|
|
164
|
-
},
|
|
165
|
-
{
|
|
166
|
-
"url": "https://cryptography.io/en/latest/hazmat/primitives/aead/",
|
|
167
|
-
"title": "cryptography.io - AEAD (Authenticated Encryption with Additional Data)",
|
|
168
|
-
"qualityScore": 96,
|
|
169
|
-
"scores": { "authority": 9, "recency": 9, "depth": 9, "examples": 9, "uniqueness": 7 },
|
|
170
|
-
"keyInsights": [
|
|
171
|
-
"AESGCM requires 96-bit (12-byte) nonce",
|
|
172
|
-
"generate_key(bit_length=256) for secure key generation",
|
|
173
|
-
"encrypt/decrypt raises InvalidTag on tampered data",
|
|
174
|
-
"Never reuse a nonce with the same key"
|
|
175
|
-
]
|
|
176
|
-
},
|
|
177
|
-
{
|
|
178
|
-
"url": "https://cheatsheetseries.owasp.org/cheatsheets/Session_Management_Cheat_Sheet.html",
|
|
179
|
-
"title": "OWASP Session Management Cheat Sheet",
|
|
180
|
-
"qualityScore": 97,
|
|
181
|
-
"scores": { "authority": 10, "recency": 8, "depth": 10, "examples": 7, "uniqueness": 8 },
|
|
182
|
-
"keyInsights": [
|
|
183
|
-
"Session ID must be random, min 128 bits entropy",
|
|
184
|
-
"HttpOnly and Secure flags required for session cookies",
|
|
185
|
-
"SameSite=Strict or Lax for CSRF protection",
|
|
186
|
-
"Idle and absolute timeout required",
|
|
187
|
-
"Session ID rotation after privilege escalation"
|
|
188
|
-
]
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
"url": "https://github.com/cli/cli/blob/trunk/internal/authflow/flow.go",
|
|
192
|
-
"title": "GitHub CLI - authflow implementation (Go)",
|
|
193
|
-
"qualityScore": 88,
|
|
194
|
-
"scores": { "authority": 9, "recency": 9, "depth": 8, "examples": 10, "uniqueness": 9 },
|
|
195
|
-
"keyInsights": [
|
|
196
|
-
"Device flow with polling and backoff",
|
|
197
|
-
"Token stored in OS keyring via go-keyring",
|
|
198
|
-
"Falls back to plaintext file if no keyring",
|
|
199
|
-
"Host-specific token storage"
|
|
200
|
-
]
|
|
201
|
-
},
|
|
202
|
-
{
|
|
203
|
-
"url": "https://playwright.dev/python/docs/auth",
|
|
204
|
-
"title": "Playwright Python - Authentication",
|
|
205
|
-
"qualityScore": 93,
|
|
206
|
-
"scores": { "authority": 9, "recency": 9, "depth": 9, "examples": 10, "uniqueness": 8 },
|
|
207
|
-
"keyInsights": [
|
|
208
|
-
"storageState() saves cookies + localStorage to JSON file",
|
|
209
|
-
"new_context(storage_state=...) restores session",
|
|
210
|
-
"storageState shareable across browser instances",
|
|
211
|
-
"Reusing auth state avoids repeated login in tests"
|
|
212
|
-
]
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
"url": "https://playwright.dev/python/docs/api/class-browsercontext#browser-context-cookies",
|
|
216
|
-
"title": "Playwright Python BrowserContext.cookies()",
|
|
217
|
-
"qualityScore": 90,
|
|
218
|
-
"scores": { "authority": 9, "recency": 9, "depth": 8, "examples": 9, "uniqueness": 7 },
|
|
219
|
-
"keyInsights": [
|
|
220
|
-
"context.cookies() returns list of cookie dicts",
|
|
221
|
-
"context.add_cookies() for injecting cookies",
|
|
222
|
-
"cookie dict has: name, value, domain, path, expires, httpOnly, secure, sameSite",
|
|
223
|
-
"URLs filter to specific domains"
|
|
224
|
-
]
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
"url": "https://selenium-python.readthedocs.io/api.html#selenium.webdriver.remote.webdriver.WebDriver.get_cookies",
|
|
228
|
-
"title": "Selenium Python - get_cookies()",
|
|
229
|
-
"qualityScore": 85,
|
|
230
|
-
"scores": { "authority": 8, "recency": 7, "depth": 7, "examples": 8, "uniqueness": 6 },
|
|
231
|
-
"keyInsights": [
|
|
232
|
-
"get_cookies() returns list of dicts, add_cookie() adds one",
|
|
233
|
-
"Must navigate to domain before cookies are accessible",
|
|
234
|
-
"delete_all_cookies() clears session",
|
|
235
|
-
"Cookie dict: name, value, domain, path, expiry, secure, httpOnly"
|
|
236
|
-
]
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
"url": "https://github.com/ultrafunkamsterdam/undetected-chromedriver",
|
|
240
|
-
"title": "undetected-chromedriver - Optimized Selenium Chromedriver",
|
|
241
|
-
"qualityScore": 76,
|
|
242
|
-
"scores": { "authority": 6, "recency": 7, "depth": 7, "examples": 8, "uniqueness": 9 },
|
|
243
|
-
"keyInsights": [
|
|
244
|
-
"Patches ChromeDriver to remove automation flags",
|
|
245
|
-
"Harder to detect than standard Selenium",
|
|
246
|
-
"headless=False recommended for best results",
|
|
247
|
-
"Version must match installed Chrome version"
|
|
248
|
-
]
|
|
249
|
-
},
|
|
250
|
-
{
|
|
251
|
-
"url": "https://httpie.io/docs/cli/sessions",
|
|
252
|
-
"title": "HTTPie CLI - Sessions",
|
|
253
|
-
"qualityScore": 82,
|
|
254
|
-
"scores": { "authority": 8, "recency": 8, "depth": 8, "examples": 9, "uniqueness": 8 },
|
|
255
|
-
"keyInsights": [
|
|
256
|
-
"--session flag creates/loads named or file-based sessions",
|
|
257
|
-
"Stores cookies, auth, and custom headers in JSON",
|
|
258
|
-
"Named sessions stored in ~/.config/httpie/sessions/",
|
|
259
|
-
"Automatic cookie persistence across requests"
|
|
260
|
-
]
|
|
261
|
-
},
|
|
262
|
-
{
|
|
263
|
-
"url": "https://docs.python.org/3/library/secrets.html",
|
|
264
|
-
"title": "Python secrets - Generate cryptographically strong random numbers",
|
|
265
|
-
"qualityScore": 94,
|
|
266
|
-
"scores": { "authority": 10, "recency": 9, "depth": 7, "examples": 9, "uniqueness": 5 },
|
|
267
|
-
"keyInsights": [
|
|
268
|
-
"secrets.token_bytes(n) for cryptographic nonces",
|
|
269
|
-
"secrets.token_urlsafe(n) for URL-safe state values",
|
|
270
|
-
"Use instead of random module for security-sensitive values",
|
|
271
|
-
"CSPRNG backed"
|
|
272
|
-
]
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
"url": "https://docs.python.org/3/library/fcntl.html",
|
|
276
|
-
"title": "Python fcntl - File and I/O Control",
|
|
277
|
-
"qualityScore": 90,
|
|
278
|
-
"scores": { "authority": 10, "recency": 8, "depth": 7, "examples": 8, "uniqueness": 6 },
|
|
279
|
-
"keyInsights": [
|
|
280
|
-
"fcntl.flock(fd, fcntl.LOCK_EX) for exclusive file lock",
|
|
281
|
-
"LOCK_SH for shared (read) lock",
|
|
282
|
-
"LOCK_NB flag for non-blocking attempt",
|
|
283
|
-
"Locks released on file close automatically"
|
|
284
|
-
]
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"url": "https://tools.ietf.org/html/rfc6265",
|
|
288
|
-
"title": "RFC 6265 - HTTP State Management Mechanism (Cookies)",
|
|
289
|
-
"qualityScore": 98,
|
|
290
|
-
"scores": { "authority": 10, "recency": 7, "depth": 10, "examples": 5, "uniqueness": 8 },
|
|
291
|
-
"keyInsights": [
|
|
292
|
-
"Leading dot in domain means domain-match (subdomains)",
|
|
293
|
-
"Secure attribute restricts to HTTPS",
|
|
294
|
-
"HttpOnly prevents JavaScript access",
|
|
295
|
-
"Path attribute scopes cookie to URL path prefix",
|
|
296
|
-
"Max-Age takes precedence over Expires"
|
|
297
|
-
]
|
|
298
|
-
},
|
|
299
|
-
{
|
|
300
|
-
"url": "https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis",
|
|
301
|
-
"title": "RFC 6265bis - Cookies: HTTP State Management Mechanism (updated)",
|
|
302
|
-
"qualityScore": 92,
|
|
303
|
-
"scores": { "authority": 10, "recency": 9, "depth": 9, "examples": 5, "uniqueness": 7 },
|
|
304
|
-
"keyInsights": [
|
|
305
|
-
"SameSite attribute: Strict, Lax, None",
|
|
306
|
-
"SameSite=None requires Secure",
|
|
307
|
-
"Partitioned cookies (CHIPS) for cross-site iframes",
|
|
308
|
-
"Cookie prefix __Host- and __Secure- conventions"
|
|
309
|
-
]
|
|
310
|
-
},
|
|
311
|
-
{
|
|
312
|
-
"url": "https://www.oauth.com/oauth2-servers/device-flow/",
|
|
313
|
-
"title": "OAuth.com - Device Flow Guide",
|
|
314
|
-
"qualityScore": 87,
|
|
315
|
-
"scores": { "authority": 8, "recency": 8, "depth": 9, "examples": 9, "uniqueness": 7 },
|
|
316
|
-
"keyInsights": [
|
|
317
|
-
"User code typically 8 chars with hyphen separator",
|
|
318
|
-
"Verification URI should be short and memorable",
|
|
319
|
-
"interval default is 5 seconds if not specified",
|
|
320
|
-
"expired_token error means device_code expired"
|
|
321
|
-
]
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
"url": "https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#device-flow",
|
|
325
|
-
"title": "GitHub Docs - Authorizing OAuth Apps (Device Flow)",
|
|
326
|
-
"qualityScore": 91,
|
|
327
|
-
"scores": { "authority": 9, "recency": 9, "depth": 9, "examples": 10, "uniqueness": 7 },
|
|
328
|
-
"keyInsights": [
|
|
329
|
-
"GitHub device flow: POST github.com/login/device/code",
|
|
330
|
-
"Poll: POST github.com/login/oauth/access_token",
|
|
331
|
-
"grant_type: urn:ietf:params:oauth:grant-type:device_code",
|
|
332
|
-
"Returns access_token, scope, token_type"
|
|
333
|
-
]
|
|
334
|
-
},
|
|
335
|
-
{
|
|
336
|
-
"url": "https://developers.google.com/identity/protocols/oauth2/limited-input-device",
|
|
337
|
-
"title": "Google Identity - OAuth 2.0 for Limited-Input Devices",
|
|
338
|
-
"qualityScore": 90,
|
|
339
|
-
"scores": { "authority": 10, "recency": 9, "depth": 9, "examples": 9, "uniqueness": 7 },
|
|
340
|
-
"keyInsights": [
|
|
341
|
-
"Google device auth: POST oauth2.googleapis.com/device/code",
|
|
342
|
-
"Returns device_code, user_code, verification_url, expires_in, interval",
|
|
343
|
-
"Poll: POST oauth2.googleapis.com/token",
|
|
344
|
-
"Supports offline.access for refresh tokens"
|
|
345
|
-
]
|
|
346
|
-
},
|
|
347
|
-
{
|
|
348
|
-
"url": "https://auth0.com/docs/get-started/authentication-and-authorization-flow/device-authorization-flow",
|
|
349
|
-
"title": "Auth0 - Device Authorization Flow",
|
|
350
|
-
"qualityScore": 86,
|
|
351
|
-
"scores": { "authority": 8, "recency": 9, "depth": 9, "examples": 9, "uniqueness": 7 },
|
|
352
|
-
"keyInsights": [
|
|
353
|
-
"Auth0 supports device flow for M2M and CLI apps",
|
|
354
|
-
"verification_uri_complete includes user_code pre-filled",
|
|
355
|
-
"QR code can encode verification_uri_complete",
|
|
356
|
-
"tenant_domain/oauth/device/code endpoint"
|
|
357
|
-
]
|
|
358
|
-
},
|
|
359
|
-
{
|
|
360
|
-
"url": "https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-device-code",
|
|
361
|
-
"title": "Microsoft Azure AD - Device Code Flow",
|
|
362
|
-
"qualityScore": 88,
|
|
363
|
-
"scores": { "authority": 9, "recency": 8, "depth": 9, "examples": 9, "uniqueness": 7 },
|
|
364
|
-
"keyInsights": [
|
|
365
|
-
"Azure: POST login.microsoftonline.com/{tenant}/oauth2/v2.0/devicecode",
|
|
366
|
-
"Poll: POST login.microsoftonline.com/{tenant}/oauth2/v2.0/token",
|
|
367
|
-
"authorization_pending during user approval",
|
|
368
|
-
"Returns id_token for OIDC flows"
|
|
369
|
-
]
|
|
370
|
-
},
|
|
371
|
-
{
|
|
372
|
-
"url": "https://www.chromium.org/developers/design-documents/network-stack/cookiemonster/",
|
|
373
|
-
"title": "Chromium - CookieMonster Design",
|
|
374
|
-
"qualityScore": 80,
|
|
375
|
-
"scores": { "authority": 9, "recency": 6, "depth": 8, "examples": 4, "uniqueness": 9 },
|
|
376
|
-
"keyInsights": [
|
|
377
|
-
"Chrome stores cookies in SQLite with encrypted_value column",
|
|
378
|
-
"Chrome encryption uses AES-128-CBC on macOS/Windows",
|
|
379
|
-
"Linux uses PBKDF2 with 'peanuts' as default salt (Basic encryption)",
|
|
380
|
-
"expires_utc in microseconds since Windows FILETIME epoch"
|
|
381
|
-
]
|
|
382
|
-
},
|
|
383
|
-
{
|
|
384
|
-
"url": "https://github.com/n8henrie/pycookiecheat",
|
|
385
|
-
"title": "pycookiecheat - Use cookies from Chrome to bypass logins",
|
|
386
|
-
"qualityScore": 78,
|
|
387
|
-
"scores": { "authority": 6, "recency": 7, "depth": 7, "examples": 9, "uniqueness": 9 },
|
|
388
|
-
"keyInsights": [
|
|
389
|
-
"Handles Chrome cookie decryption on macOS and Linux",
|
|
390
|
-
"Uses Keychain on macOS for encryption key",
|
|
391
|
-
"Returns dict of {name: value} for domain",
|
|
392
|
-
"Requires Chrome to be closed or copy of Cookies file"
|
|
393
|
-
]
|
|
394
|
-
},
|
|
395
|
-
{
|
|
396
|
-
"url": "https://developer.chrome.com/docs/devtools/network/reference/#cookies",
|
|
397
|
-
"title": "Chrome DevTools - Network Cookies Reference",
|
|
398
|
-
"qualityScore": 88,
|
|
399
|
-
"scores": { "authority": 9, "recency": 9, "depth": 8, "examples": 8, "uniqueness": 6 },
|
|
400
|
-
"keyInsights": [
|
|
401
|
-
"DevTools Application tab shows all cookies for domain",
|
|
402
|
-
"Can copy cookies via right-click in DevTools",
|
|
403
|
-
"Cookie Editor extension provides bulk export",
|
|
404
|
-
"document.cookie accessible in console (non-HttpOnly only)"
|
|
405
|
-
]
|
|
406
|
-
},
|
|
407
|
-
{
|
|
408
|
-
"url": "https://portswigger.net/web-security/csrf/tokens",
|
|
409
|
-
"title": "PortSwigger - CSRF Token Mechanisms",
|
|
410
|
-
"qualityScore": 90,
|
|
411
|
-
"scores": { "authority": 9, "recency": 8, "depth": 9, "examples": 8, "uniqueness": 7 },
|
|
412
|
-
"keyInsights": [
|
|
413
|
-
"Double-submit cookie pattern: token in both cookie and request body/header",
|
|
414
|
-
"ct0 on Twitter is a CSRF token using double-submit pattern",
|
|
415
|
-
"SameSite cookies partially mitigate CSRF without tokens",
|
|
416
|
-
"HMAC-based CSRF tokens bind to session"
|
|
417
|
-
]
|
|
418
|
-
},
|
|
419
|
-
{
|
|
420
|
-
"url": "https://tldrsec.com/p/tldr-sec-202",
|
|
421
|
-
"title": "tl;dr sec - Browser fingerprinting techniques",
|
|
422
|
-
"qualityScore": 80,
|
|
423
|
-
"scores": { "authority": 7, "recency": 8, "depth": 8, "examples": 7, "uniqueness": 9 },
|
|
424
|
-
"keyInsights": [
|
|
425
|
-
"Canvas fingerprint differs between headless and headed Chrome",
|
|
426
|
-
"AudioContext fingerprinting detects virtual audio devices",
|
|
427
|
-
"navigator.plugins empty in headless mode",
|
|
428
|
-
"window.outerWidth/outerHeight zero in pure headless"
|
|
429
|
-
]
|
|
430
|
-
},
|
|
431
|
-
{
|
|
432
|
-
"url": "https://datadome.co/guides/headless-browser-detection/",
|
|
433
|
-
"title": "DataDome - Headless Browser Detection Guide",
|
|
434
|
-
"qualityScore": 82,
|
|
435
|
-
"scores": { "authority": 7, "recency": 8, "depth": 9, "examples": 7, "uniqueness": 9 },
|
|
436
|
-
"keyInsights": [
|
|
437
|
-
"navigator.webdriver primary detection signal",
|
|
438
|
-
"TLS JA3 fingerprint differs for headless Chrome",
|
|
439
|
-
"Missing or unusual HTTP headers (accept-language, etc.)",
|
|
440
|
-
"Mouse movement entropy analysis"
|
|
441
|
-
]
|
|
442
|
-
},
|
|
443
|
-
{
|
|
444
|
-
"url": "https://stackoverflow.com/questions/tagged/cookies+curl",
|
|
445
|
-
"title": "Stack Overflow - curl + cookies questions",
|
|
446
|
-
"qualityScore": 76,
|
|
447
|
-
"scores": { "authority": 6, "recency": 7, "depth": 7, "examples": 10, "uniqueness": 5 },
|
|
448
|
-
"keyInsights": [
|
|
449
|
-
"Common mistake: -b and -c both needed for read+write",
|
|
450
|
-
"Cookie jar file must not be a directory",
|
|
451
|
-
"Session cookies need -j flag to be ignored or ignored_discard to be kept",
|
|
452
|
-
"Multiple domains in one cookie jar file works fine"
|
|
453
|
-
]
|
|
454
|
-
},
|
|
455
|
-
{
|
|
456
|
-
"url": "https://stackoverflow.com/questions/tagged/oauth-2.0+cli",
|
|
457
|
-
"title": "Stack Overflow - OAuth 2.0 + CLI questions",
|
|
458
|
-
"qualityScore": 75,
|
|
459
|
-
"scores": { "authority": 6, "recency": 7, "depth": 7, "examples": 10, "uniqueness": 5 },
|
|
460
|
-
"keyInsights": [
|
|
461
|
-
"localhost redirect URI commonly used for native/CLI apps",
|
|
462
|
-
"Random port binding avoids port conflicts",
|
|
463
|
-
"State parameter must survive redirect",
|
|
464
|
-
"PKCE mandatory for CLI apps (no client_secret)"
|
|
465
|
-
]
|
|
466
|
-
},
|
|
467
|
-
{
|
|
468
|
-
"url": "https://stackoverflow.com/questions/tagged/twitter+oauth",
|
|
469
|
-
"title": "Stack Overflow - Twitter + OAuth questions",
|
|
470
|
-
"qualityScore": 74,
|
|
471
|
-
"scores": { "authority": 6, "recency": 6, "depth": 7, "examples": 9, "uniqueness": 5 },
|
|
472
|
-
"keyInsights": [
|
|
473
|
-
"OAuth 1.0a signature base string construction is error-prone",
|
|
474
|
-
"Percent-encoding must be applied twice for signature base string",
|
|
475
|
-
"Nonce must be unique per request",
|
|
476
|
-
"Timestamp must be within 300s of server time"
|
|
477
|
-
]
|
|
478
|
-
},
|
|
479
|
-
{
|
|
480
|
-
"url": "https://keyring.readthedocs.io/en/latest/",
|
|
481
|
-
"title": "keyring Python library - OS keyring integration",
|
|
482
|
-
"qualityScore": 84,
|
|
483
|
-
"scores": { "authority": 8, "recency": 8, "depth": 8, "examples": 9, "uniqueness": 8 },
|
|
484
|
-
"keyInsights": [
|
|
485
|
-
"keyring.set_password(service, username, password) for OS keyring",
|
|
486
|
-
"keyring.get_password(service, username) for retrieval",
|
|
487
|
-
"Supports macOS Keychain, Windows Credential Locker, SecretService (Linux)",
|
|
488
|
-
"Falls back to file-based storage if no OS keyring available"
|
|
489
|
-
]
|
|
490
|
-
},
|
|
491
|
-
{
|
|
492
|
-
"url": "https://docs.python.org/3/library/os.html#os.chmod",
|
|
493
|
-
"title": "Python os.chmod - Change file mode",
|
|
494
|
-
"qualityScore": 92,
|
|
495
|
-
"scores": { "authority": 10, "recency": 9, "depth": 6, "examples": 7, "uniqueness": 4 },
|
|
496
|
-
"keyInsights": [
|
|
497
|
-
"os.chmod(path, 0o600) for owner read/write only",
|
|
498
|
-
"Must be applied after file creation, not before",
|
|
499
|
-
"On Windows, limited chmod support - only read-only bit",
|
|
500
|
-
"stat.S_IRUSR | stat.S_IWUSR is equivalent to 0o600"
|
|
501
|
-
]
|
|
502
|
-
},
|
|
503
|
-
{
|
|
504
|
-
"url": "https://12factor.net/config",
|
|
505
|
-
"title": "The Twelve-Factor App - Config",
|
|
506
|
-
"qualityScore": 88,
|
|
507
|
-
"scores": { "authority": 9, "recency": 7, "depth": 8, "examples": 7, "uniqueness": 7 },
|
|
508
|
-
"keyInsights": [
|
|
509
|
-
"Store config (tokens, secrets) in environment or files, not code",
|
|
510
|
-
"Never commit secrets to version control",
|
|
511
|
-
"Separate config from code strictly",
|
|
512
|
-
"Use .env files for local dev, environment injection for production"
|
|
513
|
-
]
|
|
514
|
-
},
|
|
515
|
-
{
|
|
516
|
-
"url": "https://cheatsheetseries.owasp.org/cheatsheets/Secrets_Management_Cheat_Sheet.html",
|
|
517
|
-
"title": "OWASP Secrets Management Cheat Sheet",
|
|
518
|
-
"qualityScore": 94,
|
|
519
|
-
"scores": { "authority": 10, "recency": 8, "depth": 9, "examples": 7, "uniqueness": 8 },
|
|
520
|
-
"keyInsights": [
|
|
521
|
-
"Secrets should be encrypted at rest and in transit",
|
|
522
|
-
"Use dedicated secret stores (Vault, AWS Secrets Manager) for production",
|
|
523
|
-
"Rotate secrets regularly; have revocation process",
|
|
524
|
-
"Log access to secrets but not the secret values"
|
|
525
|
-
]
|
|
526
|
-
}
|
|
527
|
-
]
|
|
528
|
-
}
|