[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AC3W7HPNRB7F6ZER6G5ZM9":3,"skill-same:01M6AC3W7HPNRB7F6ZER6G5ZM9":79},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":41,"ownerHtmlUrl":42,"ownerBlogUrl":43,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6AC3W7HPNRB7F6ZER6G5ZM9","sensitive-logging-audit",null,"Audit or fix sensitive-data exposure in Python SDK diagnostics, exceptions, logging, and telemetry.","openai\u002Fopenai-agents-python","openai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F14957082?v=4","01M6AC29YGCR4S2NTJFV0G8B81","OpenAI","01M6AC2Y1RF9XDR59QMSQSGNJF",30640,"MIT","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsensitive-logging-audit\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"sensitive logging audit","logging","audit","python","sdk","telemetry","diagnostics","data","sensitive-data","python sdk","fix","data exposure","2026-11-10 10:12:30",false,"---\nname: sensitive-logging-audit\ndescription: Audit or fix sensitive-data exposure in Python SDK diagnostics, exceptions, logging, and telemetry.\n---\n\n# Sensitive Logging Audit\n\n## Objective\n\nFind candidate output sinks, trace their values manually, fix demonstrated leaks at shared runtime boundaries, and prove redaction with adversarial tests.\n\nThe collector is only a syntax-based search aid. It does not resolve Python aliases or control flow, certify policy guards, or prove that an absent candidate is safe.\n\n## Workflow\n\n### 1. Establish the review surface\n\n- Work in the current checkout and preserve unrelated changes.\n- Read `src\u002Fagents\u002F_debug.py`, `src\u002Fagents\u002Flogger.py`, and the affected callers.\n- Treat exception messages, arguments, tracebacks, causes, contexts, notes, names, URLs, and arbitrary values as potentially sensitive.\n- Read [the Python redaction validation matrix](references\u002Fredaction-validation.md).\n\nRun the collector tests, then collect candidates:\n\n```bash\nuv run python .agents\u002Fskills\u002Fsensitive-logging-audit\u002Fscripts\u002Ftest_inventory.py\nuv run python .agents\u002Fskills\u002Fsensitive-logging-audit\u002Fscripts\u002Finventory_logging.py \\\n  --format json --output \u002Ftmp\u002Fsensitive-logging-candidates.json\n```\n\nThe report intentionally contains no `policy`, `safe`, or guard classification.\n\n### 2. Supplement the collector with source search\n\nThe collector does not follow assignments such as `emit = logger.error`. Search the source directly and inspect aliases, callbacks, wrappers, and reflective dispatch:\n\n```bash\nrg -n '\\.(debug|info|warning|warn|error|exception|critical|fatal|log)\\b' src\u002Fagents\nrg -n '\\b(print|pprint|pp|warn|warn_explicit|write|writelines|print_exc|print_exception)\\b' src\u002Fagents\nrg -n 'DONT_LOG_(MODEL|TOOL)_DATA|log_(model|tool|model_and_tool)_action' src\u002Fagents\n```\n\nDo not turn collector coverage or a textual guard into a security conclusion. Trace producers and callers.\n\n### 3. Classify manually\n\nAssign each reviewed path one disposition:\n\n- `model`: model requests, responses, Realtime events, or derived values.\n- `tool`: tool arguments, outputs, MCP data, tool events, or derived values.\n- `model+tool`: either class may reach the sink.\n- `operational`: demonstrated to contain only non-sensitive SDK metadata.\n- `intentional-output`: explicitly user-facing output rather than diagnostics.\n- `uncertain`: source tracing is incomplete.\n\nRecord evidence in the audit report. The script does not validate or inherit dispositions.\n\n### 4. Fix runtime boundaries\n\nBefore changing runtime behavior, use `$implementation-strategy`.\n\n- Check the relevant `_debug.DONT_LOG_MODEL_DATA` and `_debug.DONT_LOG_TOOL_DATA` flags before formatting or inspecting sensitive values.\n- Redact mixed model\u002Ftool values when either flag disables data logging.\n- In redacted mode, emit a fixed message and omit sensitive `args`, `extra`, and `exc_info`.\n- Build diagnostic-only context lazily so redacted mode never reads it.\n- Preserve useful diagnostics when sensitive-data logging is explicitly enabled.\n- Keep logging failure from changing fallback, cleanup, event, rejection, or cancellation behavior.\n- For MCP URLs, remove credentials, query parameters, and fragments in diagnostic mode; never use sanitized names as a substitute for fixed redacted messages.\n\n### 5. Prove caller behavior\n\nAdd tests at every changed caller boundary. Inspect the complete `LogRecord`, not only rendered text. Test both redacted policies, diagnostic mode, hostile objects, exception chains, and the caller's observable fallback or cleanup behavior as applicable.\n\n### 6. Re-run and close out\n\nRe-run the collector, the manual searches, focused tests, and applicable repository gates. Use `$code-change-verification` for runtime or test changes and `$pr-draft-summary` when required.\n\nReport candidate counts as search coverage only. Lead with confirmed leaks fixed, retained intentional output, reviewed uncertainty, and verification results. Never report a clean collector result as proof that no sensitive logging path exists.\n","# Sensitive Logging Audit\n\n## Objective\n\nFind candidate output sinks, trace their values manually, fix demonstrated leaks at shared runtime boundaries, and prove redaction with adversarial tests.\n\nThe collector is only a syntax-based search aid. It does not resolve Python aliases or control flow, certify policy guards, or prove that an absent candidate is safe.\n\n## Workflow\n\n### 1. Establish the review surface\n\n- Work in the current checkout and preserve unrelated changes.\n- Read `src\u002Fagents\u002F_debug.py`, `src\u002Fagents\u002Flogger.py`, and the affected callers.\n- Treat exception messages, arguments, tracebacks, causes, contexts, notes, names, URLs, and arbitrary values as potentially sensitive.\n- Read [the Python redaction validation matrix](references\u002Fredaction-validation.md).\n\nRun the collector tests, then collect candidates:\n\n```bash\nuv run python .agents\u002Fskills\u002Fsensitive-logging-audit\u002Fscripts\u002Ftest_inventory.py\nuv run python .agents\u002Fskills\u002Fsensitive-logging-audit\u002Fscripts\u002Finventory_logging.py \\\n  --format json --output \u002Ftmp\u002Fsensitive-logging-candidates.json\n```\n\nThe report intentionally contains no `policy`, `safe`, or guard classification.\n\n### 2. Supplement the collector with source search\n\nThe collector does not follow assignments such as `emit = logger.error`. Search the source directly and inspect aliases, callbacks, wrappers, and reflective dispatch:\n\n```bash\nrg -n '\\.(debug|info|warning|warn|error|exception|critical|fatal|log)\\b' src\u002Fagents\nrg -n '\\b(print|pprint|pp|warn|warn_explicit|write|writelines|print_exc|print_exception)\\b' src\u002Fagents\nrg -n 'DONT_LOG_(MODEL|TOOL)_DATA|log_(model|tool|model_and_tool)_action' src\u002Fagents\n```\n\nDo not turn collector coverage or a textual guard into a security conclusion. Trace producers and callers.\n\n### 3. Classify manually\n\nAssign each reviewed path one disposition:\n\n- `model`: model requests, responses, Realtime events, or derived values.\n- `tool`: tool arguments, outputs, MCP data, tool events, or derived values.\n- `model+tool`: either class may reach the sink.\n- `operational`: demonstrated to contain only non-sensitive SDK metadata.\n- `intentional-output`: explicitly user-facing output rather than diagnostics.\n- `uncertain`: source tracing is incomplete.\n\nRecord evidence in the audit report. The script does not validate or inherit dispositions.\n\n### 4. Fix runtime boundaries\n\nBefore changing runtime behavior, use `$implementation-strategy`.\n\n- Check the relevant `_debug.DONT_LOG_MODEL_DATA` and `_debug.DONT_LOG_TOOL_DATA` flags before formatting or inspecting sensitive values.\n- Redact mixed model\u002Ftool values when either flag disables data logging.\n- In redacted mode, emit a fixed message and omit sensitive `args`, `extra`, and `exc_info`.\n- Build diagnostic-only context lazily so redacted mode never reads it.\n- Preserve useful diagnostics when sensitive-data logging is explicitly enabled.\n- Keep logging failure from changing fallback, cleanup, event, rejection, or cancellation behavior.\n- For MCP URLs, remove credentials, query parameters, and fragments in diagnostic mode; never use sanitized names as a substitute for fixed redacted messages.\n\n### 5. Prove caller behavior\n\nAdd tests at every changed caller boundary. Inspect the complete `LogRecord`, not only rendered text. Test both redacted policies, diagnostic mode, hostile objects, exception chains, and the caller's observable fallback or cleanup behavior as applicable.\n\n### 6. Re-run and close out\n\nRe-run the collector, the manual searches, focused tests, and applicable repository gates. Use `$code-change-verification` for runtime or test changes and `$pr-draft-summary` when required.\n\nReport candidate counts as search coverage only. Lead with confirmed leaks fixed, retained intentional output, reviewed uncertainty, and verification results. Never report a clean collector result as proof that no sensitive logging path exists.\n",{"name":5,"description":7},"main","e355d69152d4f4730dfb03b63dbce53e8d9f5d8c",".agents\u002Fskills\u002Fsensitive-logging-audit",5039,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python","https:\u002F\u002Fopenai.github.io\u002Fopenai-agents-python\u002F","https:\u002F\u002Fgithub.com\u002Fopenai","https:\u002F\u002Fopenai.com\u002F","2026-11-13 03:15:50",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add openai\u002Fopenai-agents-python --skill sensitive-logging-audit",{"tool":51,"command":52},"bunx","bunx skills add openai\u002Fopenai-agents-python --skill sensitive-logging-audit",{"tool":54,"command":55},"pnpm","pnpm dlx skills add openai\u002Fopenai-agents-python --skill sensitive-logging-audit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsensitive-logging-audit\u002FSKILL.md",true,[59,65,69,75],{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},"agents\u002Fopenai.yaml","REFERENCE","参考文档",244,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsensitive-logging-audit\u002Fagents\u002Fopenai.yaml",{"path":66,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":67,"sourceHtmlUrl":68},"references\u002Fredaction-validation.md",4323,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsensitive-logging-audit\u002Freferences\u002Fredaction-validation.md",{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"scripts\u002Finventory_logging.py","SCRIPT","脚本",11946,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsensitive-logging-audit\u002Fscripts\u002Finventory_logging.py",{"path":76,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":77,"sourceHtmlUrl":78},"scripts\u002Ftest_inventory.py",5669,"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsensitive-logging-audit\u002Fscripts\u002Ftest_inventory.py",[80,99,115,133,148,164],{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":91,"publishedAt":31},"01M6AC44SFMJ4HVV9JMHG512AF","csv-workbench","Analyze CSV files in \u002Fmnt\u002Fdata and return concise numeric summaries.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002Fexamples\u002Ftools\u002Fskills\u002Fcsv-workbench\u002FSKILL.md",[86],{"categoryNo":87,"categoryName":88,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000004","电子表格","SCENARIO","使用场景",[92,93,94,95,96,97,98,26],"csv workbench","csv","analyze csv files","summaries","concise","files","analyze",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":108,"publishedAt":31},"01M6AC4378JAXKE5EY80EP53YJ","playwright","Use when the task requires capturing or automating a real browser from the terminal.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002Fexamples\u002Fsandbox\u002Ftutorials\u002Fvision_website_clone\u002Fskills\u002Fplaywright\u002FSKILL.md",[105],{"categoryNo":106,"categoryName":107,"taxonomyType":89,"taxonomyTypeDesc":90},"01JBSEEDCAT000000000000008","测试与质量",[101,109,110,111,112,113,114],"terminal","browser","use","task","real browser","when",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":31},"01M6AC41D0TJJSDT1GR852DPZK","prior-auth-packet-builder","Build a concise prior authorization packet from local case files and payer policy docs.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002Fexamples\u002Fsandbox\u002Fhealthcare_support\u002Fskills\u002Fprior-auth-packet-builder\u002FSKILL.md",[],[122,123,124,97,125,126,127,128,96,129,130,131,132],"builder","prior auth packet builder","auth","build","local","prior authorization","case","payer","authorization","docs","policy",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":139,"publishedAt":31},"01M6AC3ZYJZVN0CQBJTJR59TXX","credit-note-fixer","Fix the tiny credit-note formatting bug and rerun the exact targeted test command.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002Fexamples\u002Fsandbox\u002Fdocs\u002Fskills\u002Fcredit-note-fixer\u002FSKILL.md",[],[140,141,142,143,144,29,145,146,147],"note","fixer","credit note fixer","test","command","bug","formatting","rerun",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":155,"publishedAt":31},"01M6AC3Y77VB5C437JYFS42QFH","test-coverage-improver","Measure Python SDK coverage or address measured coverage gaps. Use for coverage audits and metric regressions, not routine test additions.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftest-coverage-improver\u002FSKILL.md",[154],{"categoryNo":106,"categoryName":107,"taxonomyType":89,"taxonomyTypeDesc":90},[156,157,158,143,159,22,23,160,28,111,161,162,163],"test coverage","coverage","test coverage improver","metric","coverage gaps","for","gaps","routine",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":31},"01M6AC3T3T4PX36423023Y6MG8","runtime-behavior-probe","Plan controlled runtime probes when explicitly invoked; execute only after the required probe approval.","https:\u002F\u002Fgithub.com\u002Fopenai\u002Fopenai-agents-python\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fruntime-behavior-probe\u002FSKILL.md",[],[171,172,173,174,175,176,177,178,114],"runtime behavior probe","behavior","runtime","probe","plan","execute","approval","only"]