<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Takumi byGMO Blog</title>
        <link>https://shisho.dev/docs/r</link>
        <description>Takumi byGMO Blog</description>
        <lastBuildDate>Wed, 22 Apr 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Takumi Guard RubyGems Support Released]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-guard-rubygems</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-guard-rubygems</guid>
            <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Takumi Guard now protects Ruby projects by blocking malicious gems.]]></description>
            <content:encoded><![CDATA[<p>Takumi Guard now supports <strong>RubyGems</strong> alongside npm and PyPI.</p>
<p>Ruby projects using <strong>Bundler</strong> can now route installs through Takumi Guard to block known-malicious packages before they reach your CI or development environment.</p>
<p><img decoding="async" loading="lazy" alt="Takumi Guard now supports RubyGems" src="https://shisho.dev/docs/assets/images/eyecatch-c40527222e4bb99036ce5b7553eca5f5.png" width="2400" height="1260" class="img_c462"></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-guard-rubygems#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Takumi Guard is a security proxy that sits between your package manager and the upstream registry. It checks every install request against GMO Flatt Security's threat database and blocks known-malicious packages.</p>
<p>With this release, the same protection that npm and Python users have is now available for the Ruby ecosystem:</p>
<ul>
<li><strong><a href="https://shisho.dev/docs/t/guard/features/package-blocking">Package Blocking</a></strong>: Malicious gems are blocked before any code executes</li>
<li><strong><a href="https://shisho.dev/docs/t/guard/features/installation-logs">Download Tracking</a></strong>: Records install history for authenticated users</li>
<li><strong><a href="https://shisho.dev/docs/t/guard/features/breach-notifications">Breach Notifications</a></strong>: Get notified if a package you installed is later flagged as malicious</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202604-takumi-guard-rubygems#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>All of the following work anonymously — no account or registration required.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="bundler">Bundler<a href="https://shisho.dev/docs/r/202604-takumi-guard-rubygems#bundler" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Route all <code>bundle install</code> calls through Takumi Guard with a single configuration line:</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token plain">bundle config </span><span class="token builtin class-name">set</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--global</span><span class="token plain"> mirror.https://rubygems.org https://rubygems.flatt.tech/</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>This transparently forwards all install requests through the proxy without changing your <code>Gemfile</code>.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="github-actions">GitHub Actions<a href="https://shisho.dev/docs/r/202604-takumi-guard-rubygems#github-actions" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Add one line to your workflow:</p>
<div class="language-yaml codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-yaml codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">steps</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">uses</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> actions/checkout@v4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">uses</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> flatt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">security/setup</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">takumi</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">guard</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">rubygems@v1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">run</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> bundle install</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>For full setup options including authentication and breach notifications, see the <a href="https://shisho.dev/docs/t/guard/quickstart/rubygems">RubyGems quickstart guide</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="verify">Verify Your Setup<a href="https://shisho.dev/docs/r/202604-takumi-guard-rubygems#verify" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Once you're set up, try installing the harmless test gem <code>hola-takumi</code> at the blocked version <code>0.1.0</code>:</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">cd</span><span class="token plain"> </span><span class="token variable" style="color:#36acaa">$(</span><span class="token variable" style="color:#36acaa">mktemp </span><span class="token variable parameter variable" style="color:#36acaa">-d</span><span class="token variable" style="color:#36acaa">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> </span><span class="token builtin class-name">printf</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'source "https://rubygems.org"\ngem "hola-takumi", "0.1.0"\n'</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">&gt;</span><span class="token plain"> Gemfile </span><span class="token operator" style="color:#393A34">&amp;&amp;</span><span class="token plain"> bundle </span><span class="token function" style="color:#d73a49">install</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>If Takumi Guard is working, Bundler fails with the following error:</p>
<div class="codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-text codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token plain">Fetching gem metadata from https://rubygems.flatt.tech/.</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">Could not find gem 'hola-takumi (= 0.1.0)' in rubygems repository</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">https://rubygems.org/ or installed locally.</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<div class="theme-admonition theme-admonition-note admonition_jlL_ alert alert--secondary"><div class="admonitionHeading_yyDB"><span class="admonitionIcon_tfPy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path></svg></span>note</div><div class="admonitionContent_hYxl"><p>If you have previously installed <code>hola-takumi 0.1.0</code> locally, run <code>gem uninstall hola-takumi --all --force</code> first. Otherwise Bundler may reuse the locally installed copy and the block will not be visible.</p></div></div>
<p>For details, see <a href="https://shisho.dev/docs/t/guard/quickstart/rubygems#verify-setup">"Verify Your Setup" in the RubyGems quickstart</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="email-registration">Email Registration Unlocks More (Free)<a href="https://shisho.dev/docs/r/202604-takumi-guard-rubygems#email-registration" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Register your email to receive notifications if a gem you installed is later found to be malicious. Free of charge.</p>
<div class="theme-admonition theme-admonition-info admonition_jlL_ alert alert--info"><div class="admonitionHeading_yyDB"><span class="admonitionIcon_tfPy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_hYxl"><p>If you already have an org user token or email-verified token from using Takumi Guard with npm or PyPI, you don't need to register again — the same token works for RubyGems.</p></div></div>
<p><strong>Step 1:</strong> Register your email</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-X</span><span class="token plain"> POST https://rubygems.flatt.tech/api/v1/tokens </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-H</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Content-Type: application/json"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-d</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'{"email": "you@example.com"}'</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Step 2:</strong> Get your API key from the welcome email. The key is included directly in the email body — no link to click.</p>
<p><strong>Step 3:</strong> Configure your package manager with your token (using the token from Step 2)</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token plain">bundle config </span><span class="token builtin class-name">set</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--global</span><span class="token plain"> mirror.https://rubygems.org https://token:tg_anon_xxxxxx@rubygems.flatt.tech/</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Your installs are now tracked, and you will be notified if a downloaded package is later flagged.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="organization-setup">Organization-Wide Management, Too<a href="https://shisho.dev/docs/r/202604-takumi-guard-rubygems#organization-setup" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Running Takumi Guard across your team? <a href="https://shisho.dev/docs/t/guard/features/admin-deployment">Admin deployment</a>, <a href="https://shisho.dev/docs/t/guard/features/installation-logs">installation log search</a>, <a href="https://shisho.dev/docs/t/guard/features/token-management">centralized org user token management</a>, and <a href="https://shisho.dev/docs/t/guard/features/breach-notifications">breach-notification webhooks</a> are all available for organization-wide operations. Get started with a Takumi subscription (Guard enabled):</p>
<ol>
<li>Go to <a href="https://cloud.shisho.dev/hello/takumi" target="_blank" rel="noopener noreferrer">https://cloud.shisho.dev/hello/takumi</a> and sign in</li>
<li>Register your organization and subscribe to Takumi</li>
<li>Navigate to <strong>Guard</strong> &gt; <strong>Settings</strong> from the sidebar</li>
<li>Click "Enable" to activate Guard</li>
</ol>
<p><img decoding="async" loading="lazy" alt="Guard settings page" src="https://shisho.dev/docs/assets/images/ui-guard-settings-6b26b5c78a1bd5b0b3ed5c3e029208e6.png" width="1001" height="373" class="img_c462"></p>
<p>Once Guard is enabled, follow the <a href="https://shisho.dev/docs/t/guard/features/admin-deployment">Admin Deployment guide</a> to begin setup.</p>
<p>If you only need <a href="https://shisho.dev/docs/t/guard/quickstart/rubygems#setup-ci-org">Bot token</a> authentication from GitHub Actions, <strong>no payment is required</strong>. A payment screen appears during organization registration, but you can skip it — simply register your GitHub organization from the Guard page to receive a Bot ID.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Vulnerability Verification Now Supports Any Vulnerability Report]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-vulnverification-standalone</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-vulnverification-standalone</guid>
            <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[You can now verify vulnerabilities from any source, not just Takumi assessment results — including bug bounties and third-party reports.]]></description>
            <content:encoded><![CDATA[<p>Vulnerability Verification now supports vulnerabilities beyond Takumi assessment results.
You can verify findings from bug bounties, third-party audits, and other sources directly in Takumi.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-vulnverification-standalone#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Previously, the Vulnerability Verification feature only supported vulnerabilities detected by Takumi blackbox assessments.
With this update, you can manually create verification tasks for any vulnerability, even those not linked to a Takumi assessment.</p>
<p>This enables use cases such as:</p>
<ul>
<li>Validating vulnerability reports from bug bounty programs</li>
<li>Verifying findings from third-party security audit reports</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="availability">Availability<a href="https://shisho.dev/docs/r/202604-takumi-vulnverification-standalone#availability" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>This feature is available to all Takumi byGMO users.</p>
<p>For details, see the <a href="https://shisho.dev/docs/t/features/vulnverification/" target="_blank" rel="noopener noreferrer">Vulnerability Verification</a> documentation.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Guard: Organization Breach Notifications]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-guard-breach-notifications</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-guard-breach-notifications</guid>
            <pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Route Takumi Guard breach notifications to an outgoing webhook and email address configured at the organization level.]]></description>
            <content:encoded><![CDATA[<p>Takumi Guard now supports organization-level breach notifications. When a package you previously downloaded through Guard is later flagged as malicious, notifications can now be delivered to a webhook endpoint and an email address that your organization chooses.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-guard-breach-notifications#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>With this release, organizations can configure:</p>
<ul>
<li>A webhook endpoint, chosen from the organization's existing outgoing webhooks.</li>
<li>An email address, chosen from the organization's email allowlist (must be confirmed).</li>
</ul>
<p>Either destination, or both, can be enabled. The same breach payload is sent to each configured destination, so teams can plug Guard into their incident response flow — forwarding to Slack / PagerDuty via webhook, paging a shared inbox by email, or both.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202604-takumi-guard-breach-notifications#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Navigate to Guard &gt; Settings in the Takumi / Shisho Cloud console and open the Breach Notifications section.</p>
<ul>
<li>Pick a webhook from the dropdown. If the list is empty, register one in the webhook settings page first.</li>
<li>Pick a confirmed email address from the dropdown. If the list is empty, add and confirm one in the email allowlist first.</li>
<li>Save. Settings take effect immediately for downloads going forward.</li>
</ul>
<p>See the <a href="https://shisho.dev/docs/t/guard/features/breach-notifications">breach notifications user guide</a> for the full description of when notifications are sent and how they are delivered.</p>
<div class="theme-admonition theme-admonition-info admonition_jlL_ alert alert--info"><div class="admonitionHeading_yyDB"><span class="admonitionIcon_tfPy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_hYxl"><p>This feature requires an active Takumi subscription with Guard enabled, plus the Takumi Manager or Owner role to access the settings page.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="notes">Notes<a href="https://shisho.dev/docs/r/202604-takumi-guard-breach-notifications#notes" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<ul>
<li>Only downloads made after the destinations are saved are affected. Historical downloads are not re-notified when the configured destinations change.</li>
<li>Per-token email notifications for email-verified tokens continue to work as before — no configuration needed.</li>
</ul>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Guard: Issue Org User Tokens from the Console]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-guard-org-user-token</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-guard-org-user-token</guid>
            <pubDate>Fri, 17 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Organization user tokens (tg_org_) can now be issued from the Shisho Cloud console in just a few clicks.]]></description>
            <content:encoded><![CDATA[<p>You can now issue <strong>organization user tokens</strong> (<code>tg_org_</code>) directly from the Takumi Guard tokens page in the Shisho Cloud console. In addition to the existing Guard API flow, you can now issue new tokens in just a few clicks.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-guard-org-user-token#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Issuing tokens from the console fits well into everyday workflows where individual tokens need to be issued on demand — for example, when a new teammate needs access on their first day, or when provisioning one for a contractor on a short engagement.</p>
<p>Right after issuance, the console displays the new token alongside ready-to-paste npm and PyPI setup commands, so the recipient can get started immediately.</p>
<p>The Guard API flow continues to work as before and remains the right choice for rolling out tokens at scale via configuration management or MDM tools.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202604-takumi-guard-org-user-token#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<div class="theme-admonition theme-admonition-info admonition_jlL_ alert alert--info"><div class="admonitionHeading_yyDB"><span class="admonitionIcon_tfPy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Paid Feature</div><div class="admonitionContent_hYxl"><p>Organization user tokens require an active Takumi subscription with Guard enabled. See <a href="https://shisho.dev/docs/t/guard/billing">Pricing &amp; Billing</a> for details.</p></div></div>
<ol>
<li>Open <strong>Guard</strong> &gt; <strong>Tokens</strong> in the Shisho Cloud console.</li>
<li>Click <strong>Issue Token</strong>.</li>
<li>Enter a <strong>User Identifier</strong> and click <strong>Issue</strong>.</li>
</ol>
<p>The token secret is shown <strong>only once</strong> at issuance. Copy it immediately and store it in a safe place.</p>
<p>For user identifier conventions, revocation, and other details, see <a href="https://shisho.dev/docs/t/guard/features/token-management#user-tokens">Token Management</a>.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Assessment Reports Now Exportable as PDF]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-assessment-pdf-report</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-assessment-pdf-report</guid>
            <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Takumi assessment reports can now be exported as PDF with a branded cover page.]]></description>
            <content:encoded><![CDATA[<p>Assessment reports from whitebox and blackbox assessments can now be exported as PDF.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-assessment-pdf-report#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>You can download assessment reports as PDF files with a professionally formatted cover page. This is useful for sharing results with stakeholders who prefer offline documents, or for archiving assessment records.</p>
<p><img decoding="async" loading="lazy" alt="cover" src="https://shisho.dev/docs/assets/images/cover-b110bac534f69d1715433f8b99c268b7.png" width="1130" height="1590" class="img_c462"></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202604-takumi-assessment-pdf-report#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>On any completed assessment's report page, click the <strong>"Issue PDF Report"</strong> button and select a cover page language. Once the PDF is generated, a download link will be sent to your email address.</p>
<p>For details, please see the <a href="https://shisho.dev/docs/t/features/blackbox-assessment#pdf-report">blackbox assessment documentation</a> or the <a href="https://shisho.dev/docs/t/features/whitebox-assessment#pdf-report">whitebox assessment documentation</a>.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Vulnerability Verification for Blackbox Assessments Now Available]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-vulnverification</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-vulnverification</guid>
            <pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Verify from Takumi's assessment report whether a detected vulnerability has actually been fixed.]]></description>
            <content:encoded><![CDATA[<p>We've added Vulnerability Verification to Takumi blackbox assessments.
This feature lets you verify whether a vulnerability detected in a past assessment has actually been fixed.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-vulnverification#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Vulnerability Verification re-runs the original attack scenario for a specific vulnerability.
Run it after deploying your fix to confirm that the remediation works as intended.</p>
<p>Dispatch it from the <strong>"Verify Vulnerability"</strong> button on an application assessment report, then select the vulnerability you want to verify.</p>
<p><img decoding="async" loading="lazy" alt="How to use" src="https://shisho.dev/docs/assets/images/howto-90e4b3a840495d5b7974d39ca7261b59.png" width="2992" height="1286" class="img_c462"></p>
<p>The result is shown as <strong>Not Vulnerable</strong> or <strong>Vulnerable</strong>, along with the reasoning behind the verdict.</p>
<p><img decoding="async" loading="lazy" alt="Result" src="https://shisho.dev/docs/assets/images/result-51b2d3e0c87785ebf47336dc739b83ea.png" width="1370" height="1344" class="img_c462"></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="prerequisites">Prerequisites<a href="https://shisho.dev/docs/r/202604-takumi-vulnverification#prerequisites" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>You need a completed blackbox assessment with at least one detected vulnerability. No additional setup, such as GitHub integration, is required.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="availability">Availability<a href="https://shisho.dev/docs/r/202604-takumi-vulnverification#availability" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Vulnerability Verification is available to all Takumi byGMO users with blackbox assessment access.</p>
<p>For details, see the <a href="https://shisho.dev/docs/t/features/vulnverification/" target="_blank" rel="noopener noreferrer">Vulnerability Verification</a> documentation.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Guard: Admin Deployment for Organization-Wide Setup]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment</guid>
            <pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Deploy Takumi Guard across your organization's developer machines using management tools without developer interaction.]]></description>
            <content:encoded><![CDATA[<p>Takumi Guard now provides <strong>deployment scripts for organization-wide setup</strong>. Administrators can roll out Guard to all developer machines using their existing management tools — no developer interaction required.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Setting up Takumi Guard on individual developer machines can be time-consuming, especially for large teams. The new admin deployment feature provides ready-to-use scripts that configure npm, pip, uv, and Poetry to use the Guard registry proxy, handling token issuance and credential setup automatically.</p>
<p>Tokens issued by the setup script can be viewed and managed in the Shisho Cloud console under <strong>Guard</strong> &gt; <strong>Tokens</strong>.</p>
<p><img decoding="async" loading="lazy" alt="Token management UI" src="https://shisho.dev/docs/assets/images/ui-tokens-d2453b9128938e1954a7ce7dcc1e6395.png" width="1094" height="564" class="img_c462"></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>The following diagram shows the overall architecture of admin deployment.</p>
<!-- -->
<p>Steps:</p>
<ol>
<li>Create a Bot in the Shisho Cloud console (<strong>Settings</strong> &gt; <strong>Bots</strong>) and assign the "Takumi Guard Token Issuer" role</li>
<li>Generate an API key for the Bot</li>
<li>Download the setup script from <strong>Guard</strong> &gt; <strong>Settings</strong> &gt; <strong>Admin Deployment</strong></li>
<li>Wrap the script with your management tool (Jamf, Intune, Ansible, etc.) and deploy</li>
</ol>
<p>For detailed instructions, see the <a href="https://shisho.dev/docs/t/guard/features/admin-deployment">Admin Deployment guide</a>.</p>
<div class="theme-admonition theme-admonition-info admonition_jlL_ alert alert--info"><div class="admonitionHeading_yyDB"><span class="admonitionIcon_tfPy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Paid Feature</div><div class="admonitionContent_hYxl"><p>This feature requires an active Takumi subscription with Guard enabled. See <a href="https://shisho.dev/docs/t/guard/billing">Pricing &amp; Billing</a> for details.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="key-features">Key Features<a href="https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment#key-features" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="multi-ecosystem-support">Multi-ecosystem support<a href="https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment#multi-ecosystem-support" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Configures npm, pip, uv, and Poetry in a single script execution. No need to prepare separate instructions for each package manager your developers use.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="idempotent-execution">Idempotent execution<a href="https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment#idempotent-execution" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Safe to run multiple times. On the first run, the script issues a token and updates configuration files. On subsequent runs, it detects existing tokens and reuses them, skipping already-configured tools. This makes it safe to push via your management tool on a recurring schedule.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="incremental-scope">Incremental scope<a href="https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment#incremental-scope" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Start with npm only, then add PyPI later — incremental adoption is fully supported. Existing configurations are preserved when adding new ecosystems.</p>
<div class="language-sh codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-sh codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># First run: npm only</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">TG_BOT_API_KEY</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"..."</span><span class="token plain"> ./setup.sh BOT_ID USER_ID </span><span class="token function" style="color:#d73a49">npm</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># Later: add PyPI (npm config is preserved)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token assign-left variable" style="color:#36acaa">TG_BOT_API_KEY</span><span class="token operator" style="color:#393A34">=</span><span class="token string" style="color:#e3116c">"..."</span><span class="token plain"> ./setup.sh BOT_ID USER_ID pypi</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="backup-creation">Backup creation<a href="https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment#backup-creation" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Before modifying any configuration file, the script automatically creates a timestamped persistent backup (e.g., <code>~/.npmrc-backup-20260408-162351</code>). To revert Guard configuration, simply copy the backup file back.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="important-notes">Important Notes<a href="https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment#important-notes" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Existing users who are already using Guard with email-verified tokens (<code>tg_anon_…</code>) cannot be consolidated into org user tokens (<code>tg_org_…</code>). Email-verified tokens and org user tokens are independent authentication methods. Existing email-verified tokens continue to work as before, but they are separate from the org user tokens issued by admin deployment.</p>
<p>If you want unified management across your organization, we recommend distributing org user tokens via admin deployment and asking developers to remove their existing email-verified token configurations.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started-with-your-organization">Getting Started with Your Organization<a href="https://shisho.dev/docs/r/202604-takumi-guard-admin-deployment#getting-started-with-your-organization" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>To use Guard's organization features (admin deployment, installation log search, etc.), you need a Takumi subscription with Guard enabled.</p>
<ol>
<li>Go to <a href="https://cloud.shisho.dev/hello/takumi" target="_blank" rel="noopener noreferrer">https://cloud.shisho.dev/hello/takumi</a> and sign in</li>
<li>Register your organization and subscribe to Takumi</li>
<li>Navigate to <strong>Guard</strong> &gt; <strong>Settings</strong> from the sidebar</li>
<li>Click "Enable" to activate Guard</li>
</ol>
<p><img decoding="async" loading="lazy" alt="Guard settings page" src="https://shisho.dev/docs/assets/images/ui-guard-settings-6b26b5c78a1bd5b0b3ed5c3e029208e6.png" width="1001" height="373" class="img_c462"></p>
<p>Once Guard is enabled, follow the <a href="https://shisho.dev/docs/t/guard/features/admin-deployment">Admin Deployment guide</a> to begin setup.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Guard: Package Installation Log Search]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-guard-installation-logs</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-guard-installation-logs</guid>
            <pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Search and audit every package installation across your organization's CI/CD pipelines and developer machines.]]></description>
            <content:encoded><![CDATA[<p>Takumi Guard now provides <strong>searchable package installation logs</strong> for your organization. Track every npm and PyPI package download that passes through the Guard registry proxy.</p>
<p><img decoding="async" loading="lazy" alt="Installation log search UI" src="https://shisho.dev/docs/assets/images/ui-logs-b5a451a6ec55a527506f972b5d077446.png" width="1109" height="555" class="img_c462"></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-guard-installation-logs#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Package installation logs give you a searchable audit trail of all package downloads across your organization. Each log entry records the timestamp, package name and version, ecosystem (npm / PyPI), the principal who initiated the download, and whether it was allowed or blocked.</p>
<p>This enables faster incident response when a package is flagged as malicious — you can immediately identify which pipelines installed it and when.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202604-takumi-guard-installation-logs#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Navigate to <strong>Guard</strong> &gt; <strong>Logs</strong> in the Shisho Cloud console.</p>
<div class="theme-admonition theme-admonition-info admonition_jlL_ alert alert--info"><div class="admonitionHeading_yyDB"><span class="admonitionIcon_tfPy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Paid Feature</div><div class="admonitionContent_hYxl"><p>This feature requires an active Takumi subscription with Guard enabled. See <a href="https://shisho.dev/docs/t/guard/billing">Pricing &amp; Billing</a> for details.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="key-capabilities">Key Capabilities<a href="https://shisho.dev/docs/r/202604-takumi-guard-installation-logs#key-capabilities" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="search-by-package-name">Search by package name<a href="https://shisho.dev/docs/r/202604-takumi-guard-installation-logs#search-by-package-name" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Search for a package name to see when and by whom it was installed across your organization. You can also filter by version. This is useful for identifying the blast radius when a vulnerability is reported in a specific package.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="ecosystem-switching">Ecosystem switching<a href="https://shisho.dev/docs/r/202604-takumi-guard-installation-logs#ecosystem-switching" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Switch between npm and PyPI to search the ecosystem relevant to your organization's package managers.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="date-range-filtering">Date range filtering<a href="https://shisho.dev/docs/r/202604-takumi-guard-installation-logs#date-range-filtering" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Filter by preset ranges (24 hours, 7 days, 14 days) or specify a custom range. The searchable window is currently <strong>14 days</strong>, and we plan to extend this as much as possible going forward.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="principal-and-status-visibility">Principal and status visibility<a href="https://shisho.dev/docs/r/202604-takumi-guard-installation-logs#principal-and-status-visibility" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Each log entry shows the principal who initiated the download (org user token identifier, anonymous token, etc.) and whether the download was allowed or blocked by the blocklist. Blocked downloads are also recorded, so you can verify that the blocklist is functioning as expected.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="future-vision">Future Vision<a href="https://shisho.dev/docs/r/202604-takumi-guard-installation-logs#future-vision" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>We are working on making search criteria more flexible so you can filter logs from a wider variety of perspectives.</p>
<p>We are also exploring real-time log streaming for customers using SIEM and other enterprise security solutions. If you have requirements or use cases, please reach out to your account manager.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Guard: Yarn v1 Lockfile Behavior Change for Reliable Package Blocking]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-guard-yarn-v1-lockfile</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-guard-yarn-v1-lockfile</guid>
            <pubDate>Thu, 09 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Yarn v1 users will see Takumi Guard's registry URL in yarn.lock to ensure blocked packages stay blocked.]]></description>
            <content:encoded><![CDATA[<p>Takumi Guard now handles requests from Yarn clients differently to ensure <strong>package blocking works reliably regardless of Yarn version</strong>. Yarn v1 users will see Takumi Guard's registry URL in their <code>yarn.lock</code> files.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-guard-yarn-v1-lockfile#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>To ensure that blocked packages remain blocked across all Yarn versions, Takumi Guard now processes package metadata differently for Yarn clients. This strengthens policy enforcement so that packages flagged by your organization's policies cannot bypass blocking through lockfile-based resolution.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="what-changes">What Changes<a href="https://shisho.dev/docs/r/202604-takumi-guard-yarn-v1-lockfile#what-changes" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="yarn-v1">Yarn v1<a href="https://shisho.dev/docs/r/202604-takumi-guard-yarn-v1-lockfile#yarn-v1" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>After this change, <code>yarn.lock</code> entries will contain Takumi Guard's registry URL instead of the upstream registry URL. <strong>This is expected behavior</strong> and cannot be avoided — it is necessary to ensure that blocked packages are consistently enforced when resolved through the lockfile.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="yarn-v2v4-berry">Yarn v2–v4 (Berry)<a href="https://shisho.dev/docs/r/202604-takumi-guard-yarn-v1-lockfile#yarn-v2v4-berry" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Yarn v2–v4 users are <strong>not affected</strong> by this lockfile change.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="npm-pnpm-and-bun">npm, pnpm, and Bun<a href="https://shisho.dev/docs/r/202604-takumi-guard-yarn-v1-lockfile#npm-pnpm-and-bun" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>No change. These package managers are unaffected.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="recommendation">Recommendation<a href="https://shisho.dev/docs/r/202604-takumi-guard-yarn-v1-lockfile#recommendation" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>For new projects, we recommend using <strong>pnpm</strong> over Yarn. pnpm works seamlessly with Takumi Guard and offers strong supply chain security features out of the box.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Blackbox Assessment Crawl Results Now Manually Editable]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-blackbox-edit-crawl-results</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-blackbox-edit-crawl-results</guid>
            <pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[You can now manually edit the features and endpoints detected during crawling for blackbox assessments.]]></description>
            <content:encoded><![CDATA[<p>For blackbox assessments in "Scoped Assessment" mode, you can now manually edit the crawl results after crawling completes. This lets you supplement features and endpoints that were not detected, or remove unnecessary ones, for more precise assessments.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-blackbox-edit-crawl-results#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>In "Scoped Assessment" mode, Takumi first crawls the target application to discover its features, then pauses so you can select which features and perspectives to assess.</p>
<p>Automatic crawling can sometimes miss endpoints that require complex navigation steps. With this new manual editing feature, you can adjust the crawl results before proceeding to the assessment. This allows you to include features and endpoints that the automatic crawler could not reach.</p>
<p>The following operations are available on the edit page:</p>
<ul>
<li><strong>Add endpoints to existing features</strong>: Add missing endpoints to already-discovered features</li>
<li><strong>Remove endpoints from existing features</strong>: Exclude endpoints detected during crawling that are not needed for the assessment</li>
<li><strong>Add new features</strong>: Add features that were not detected during crawling, along with their endpoints</li>
</ul>
<p>Note that hostnames can only be chosen from those already discovered during crawling. Apex features (representing the main entry point of the application) cannot be edited.</p>
<p><img decoding="async" loading="lazy" alt="edit page" src="https://shisho.dev/docs/assets/images/image-11990d80b10e2a9a34e59bf2639193e9.png" width="3146" height="1542" class="img_c462"></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202604-takumi-blackbox-edit-crawl-results#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>This feature is available for blackbox assessments in the "Crawled" state. Click the "Edit Crawl Results" button at the bottom-left of the priority matrix on the assessment page to access the edit page.</p>
<p>For details, see the <a href="https://shisho.dev/docs/t/features/blackbox-assessment#manual-editing-of-crawl-results">blackbox assessment documentation</a>.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Guard GitHub Actions Rate Limit Increased to ~60,000 req/min]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-guard-rate-limit</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-guard-rate-limit</guid>
            <pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The rate limit for GitHub Actions/Bot tokens has been raised approximately 6x, from ~10,000 req/min to ~60,000 req/min per token.]]></description>
            <content:encoded><![CDATA[<p>The rate limit for authenticated GitHub Actions/Bot tokens (Tier C) in Takumi Guard has been raised approximately <strong>6x</strong>, from ~10,000 req/min to <strong>~60,000 req/min</strong> per token. This applies to both npm and PyPI registries.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="background">Background<a href="https://shisho.dev/docs/r/202604-takumi-guard-rate-limit#background" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>The software supply chain continues to face serious threats. Recent incidents such as the <a href="https://diary.shift-js.info/litellm-compromise/" target="_blank" rel="noopener noreferrer">LiteLLM compromise</a> (external link) and the <a href="https://blog.flatt.tech/entry/axios_compromise" target="_blank" rel="noopener noreferrer">axios compromise</a> (summary by GMO Flatt Security) highlight that even widely-used packages are not immune to attacks. As demand for Takumi Guard grows in response to this landscape, we are committed to supporting organizations at scale.</p>
<p>Organizations with large-scale environments — many concurrent GitHub Actions jobs sharing a single token — could hit the previous 10,000 req/min rate limit during peak activity, resulting in <code>429 Too Many Requests</code> errors. To ensure Takumi Guard can protect even the largest CI pipelines without friction, we have raised the limit.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="what-changed">What Changed<a href="https://shisho.dev/docs/r/202604-takumi-guard-rate-limit#what-changed" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>The rate limit window for GitHub Actions/Bot tokens was reduced from 60 seconds to 10 seconds while keeping the same per-window count (10,000 requests). This effectively raises the allowed throughput to ~60,000 req/min per token.</p>
<table><thead><tr><th>Access Method</th><th>Before</th><th>After</th></tr></thead><tbody><tr><td>Bot token</td><td>10,000 req/min per token</td><td><strong>10,000 req/10s per token</strong></td></tr><tr><td>Email-verified token</td><td>10,000 req/min per token</td><td>10,000 req/min per token</td></tr><tr><td>Anonymous</td><td>2,000 req/min per IP</td><td>2,000 req/min per IP</td></tr></tbody></table>
<p>No action is required on your side. The change is applied automatically.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started-with-organization-usage">Getting Started with Organization Usage<a href="https://shisho.dev/docs/r/202604-takumi-guard-rate-limit#getting-started-with-organization-usage" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>To use Takumi Guard with a Bot token tied to your GitHub organization, follow these steps:</p>
<ol>
<li>Visit <a href="https://cloud.shisho.dev/hello/takumi" target="_blank" rel="noopener noreferrer">https://cloud.shisho.dev/hello/takumi</a> and sign in</li>
<li>Register your organization. A payment screen will be displayed, but <strong>payment is not required</strong> to use this feature</li>
<li>Navigate to the <strong>Guard</strong> page from the left sidebar</li>
<li>Enter the GitHub organization name you want to protect — a <strong>Bot ID</strong> will be issued for your organization</li>
</ol>
<p><img decoding="async" loading="lazy" alt="Guard setup — registering a GitHub organization and obtaining a Bot ID" src="https://shisho.dev/docs/assets/images/guard-1-b56d20b780e550dc10970c67386c1ec0.png" width="916" height="393" class="img_c462"></p>
<ol start="5">
<li>Add the setup step to your GitHub Actions workflow. Specifically, make the following three changes:<!-- -->
<ul>
<li>Add <code>id-token: write</code> to <code>permissions</code> (required for OIDC)</li>
<li>Add other required permissions such as <code>contents: read</code></li>
<li>Add the <code>flatt-security/setup-takumi-guard-npm@v1</code> action with your Bot ID</li>
</ul>
</li>
</ol>
<p><img decoding="async" loading="lazy" alt="Guard setup — adding the setup step to a GitHub Actions workflow" src="https://shisho.dev/docs/assets/images/guard-2-03faa980297f7f1cfff9649ff35e4679.png" width="915" height="470" class="img_c462"></p>
<p>Once configured, all package requests from your GitHub Actions workflows will be authenticated with the Bot token and benefit from the higher rate limit.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="details">Details<a href="https://shisho.dev/docs/r/202604-takumi-guard-rate-limit#details" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>See the <a href="https://shisho.dev/docs/t/guard/limitation#rate-limit">Limitations &amp; Caveats</a> page for the full rate limit table.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Guard: Improved Token Delivery]]></title>
            <link>https://shisho.dev/docs/r/202604-takumi-guard-token-delivery</link>
            <guid>https://shisho.dev/docs/r/202604-takumi-guard-token-delivery</guid>
            <pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[API keys are now delivered directly in setup emails for simpler onboarding and compatibility with enterprise email security]]></description>
            <content:encoded><![CDATA[<p>Takumi Guard now delivers your API key <strong>directly in the setup email</strong> — no verification link to click. Setup is simpler, and enterprise email security tools no longer interfere with key delivery.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202604-takumi-guard-token-delivery#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Previously, your API key was revealed only after clicking a verification link in the setup email. This worked in most environments, but enterprise email security tools (like Microsoft Defender Safe Links) pre-scan URLs via GET requests, consuming the one-time token before you could click it.</p>
<p>The new flow removes the link entirely. Your key and setup commands arrive ready to use.</p>
<p><strong>Before:</strong> Register → click verification link → see key → configure your project</p>
<p><strong>After:</strong> Register → key and copy-paste setup commands arrive in email → done</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="security">Security<a href="https://shisho.dev/docs/r/202604-takumi-guard-token-delivery#security" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>The key in your inbox has limited exposure. Here's why:</p>
<ul>
<li><strong>The key alone exposes nothing.</strong> It cannot retrieve user data, download history, or any sensitive information.</li>
<li><strong>Invalid keys don't break your builds.</strong> If the key leaks and you invalidate it, <code>npm install</code> and <code>pip install</code> continue to work. Only the elevated rate limit (10k req/min) stops applying; the standard rate limit remains in effect.</li>
<li><strong>You can rotate immediately.</strong> The welcome email includes a one-line command to regenerate your key, so you can rotate it out of your inbox right after setup.</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="key-recovery">Key Recovery<a href="https://shisho.dev/docs/r/202604-takumi-guard-token-delivery#key-recovery" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Lost your API key? No need to contact support.</p>
<p>Re-register with the same email to receive a <strong>reset code</strong>. Use it to generate a fresh key — the email includes a copy-pasteable command. If the code expires, simply re-register again. There is no dead end.</p>
<p>For details, see <a href="https://shisho.dev/docs/t/guard/features/token-management">Token Management</a>.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="whats-staying-the-same">What's Staying the Same<a href="https://shisho.dev/docs/r/202604-takumi-guard-token-delivery#whats-staying-the-same" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<ul>
<li>Existing API keys continue to work — no action needed</li>
<li>Old verification links now display instructions to re-register</li>
<li>Both npm and PyPI ecosystems are supported</li>
</ul>
<p>See <a href="https://shisho.dev/docs/t/guard">Takumi Guard</a> for setup instructions.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[All Takumi Assessments Now Require Credit Limits]]></title>
            <link>https://shisho.dev/docs/r/202603-takumi-assessment-all-rf</link>
            <guid>https://shisho.dev/docs/r/202603-takumi-assessment-all-rf</guid>
            <pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[All blackbox and whitebox assessments now require credit limits, giving you full control over credit consumption.]]></description>
            <content:encoded><![CDATA[<p>Credit limits are now required for all Takumi assessments, including both blackbox and whitebox assessments.</p>
<p>This ensures you can <strong>control credit consumption in advance, regardless of assessment type or mode, preventing unexpected large-scale credit usage</strong>.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="what-changed">What Changed<a href="https://shisho.dev/docs/r/202603-takumi-assessment-all-rf#what-changed" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>All blackbox and whitebox assessments now require credit limits for each phase (feature enumeration and scanning).</p>
<p>This prevents running large-scale assessments without credit limits and incurring unintended excessive credit consumption. If the actual consumption exceeds the specified credit limit, the excess credits will not be charged.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="incremental-assessment-approach">Incremental Assessment Approach<a href="https://shisho.dev/docs/r/202603-takumi-assessment-all-rf#incremental-assessment-approach" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>With credit limits, all assessments support an incremental approach:</p>
<ul>
<li><strong>Start with a small credit limit</strong> to understand the assessment's scope and the types of vulnerabilities detected</li>
<li><strong>Review the interim report</strong> to decide whether additional scanning is needed</li>
<li><strong>Adjust credit limits and priorities as needed</strong> to run additional scans</li>
</ul>
<p>This allows you to progressively expand the assessment scope while reviewing results, without consuming a large amount of credits at once.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="impact-on-existing-assessments">Impact on Existing Assessments<a href="https://shisho.dev/docs/r/202603-takumi-assessment-all-rf#impact-on-existing-assessments" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>In-progress and completed assessments are not affected. This change applies to newly created assessments going forward.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="user-guide">User Guide<a href="https://shisho.dev/docs/r/202603-takumi-assessment-all-rf#user-guide" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>For details on how to start an assessment, see the following documentation.</p>
<ul>
<li><a href="https://shisho.dev/docs/t/features/whitebox-assessment">Whitebox Assessment</a></li>
<li><a href="https://shisho.dev/docs/t/features/blackbox-assessment">Blackbox Assessment</a></li>
</ul>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Risk Focus Blackbox Assessment Now Available via Takumi API]]></title>
            <link>https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus</link>
            <guid>https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus</guid>
            <pubDate>Mon, 30 Mar 2026 01:00:00 GMT</pubDate>
            <description><![CDATA[Start from high-risk areas, review results, and incrementally expand the assessment scope — with credit limits and resumable assessments]]></description>
            <content:encoded><![CDATA[<p><a href="https://shisho.dev/docs/r/202602-takumi-risk-focus">Risk Focus Assessment</a>, previously available only through the web console, is now supported in <a href="https://shisho.dev/docs/t/api">Takumi API</a> blackbox assessments.</p>
<p>Risk Focus Assessment lets you <strong>start with the highest-risk areas, review results, and incrementally expand the assessment scope</strong> — all within a credit limit. You can set priorities explicitly or let Takumi prioritize automatically based on risk analysis. When the credit limit is reached, the assessment outputs results up to that point and stops. You can then add more credits and resume where you left off.</p>
<p>This is useful when you want predictable credit consumption or need to prioritize critical areas within a budget.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="usage-examples">Usage Examples<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus#usage-examples" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="auto-prioritization">Assess within a Credit Limit<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus#auto-prioritization" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>To assess within a credit limit with automatic prioritization, specify <code>crawl_credit_limit</code> and/or <code>scan_credit_limit</code> when dispatching the workflow. Each can be set independently. The following example sets a crawl credit limit of 20 and a scan credit limit of 50 (consuming at most 70 credits total).</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> workflow_run_id </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-assessment/dispatch</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      input</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        language</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"english"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        target_urls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"https://app.example/"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        crawl_credit_limit</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Credit limit for crawling (optional)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        scan_credit_limit</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">50</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Credit limit for scanning (optional)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>When <code>crawl_credit_limit</code> is set and the limit is reached during crawling, the crawl stops and scanning begins on the features discovered so far.</p>
<p>After crawling, Takumi automatically determines the priority of each feature-perspective combination based on risk analysis and scans them in priority order. When <code>scan_credit_limit</code> is reached, the assessment outputs the results collected so far and stops.</p>
<p>When the assessment finishes, you receive the assessment report and findings, along with a <code>scan_progress</code> artifact that shows which feature-perspective combinations were completed.</p>
<div class="language-js codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-js codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Combinations that were scanned</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token string-property property" style="color:#36acaa">"completed"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">"feature_name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"authentication"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">"perspective"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Injection"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">"feature_name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"user_settings"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">"perspective"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Authorization"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token comment" style="color:#999988;font-style:italic">// Combinations skipped because they were deemed unnecessary</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token string-property property" style="color:#36acaa">"skipped"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">"feature_name"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Apex"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">"perspective"</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"CSRF"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>To assess more combinations, see <a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus#continue-assessment">Resume an Assessment with Additional Credits</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="custom-prioritization">Assess within a Credit Limit with Custom Priorities<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus#custom-prioritization" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>You can also set priorities explicitly for each feature-perspective combination. This lets you adjust priorities based on business impact, recent code changes, or other factors. Specify the <code>priority</code> field in the <code>pairs</code> parameter used for <a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-scoped-assessment">scoped assessments and retests</a>.</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> workflow_run_id </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-assessment/dispatch</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      input</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        language</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"english"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        target_urls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"https://app.example/"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        scan_credit_limit</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">50</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Credit limit for scanning (optional)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Reuse features discovered by a previous crawl workflow</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        resume</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          kind</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"assess_crawled_features"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          assess_crawled_features</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            workflow_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"blackbox-crawl"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"TWR..."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// workflow_run_id of the crawl</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        pairs</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token comment" style="color:#999988;font-style:italic">// feature_name must match a name from the crawl workflow's `features` artifact</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            feature_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"authentication"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            perspective</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Injection"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            priority</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"high"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            feature_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"user_settings"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            perspective</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Authorization"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            priority</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"medium"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            feature_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"product_catalog"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            perspective</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"XSS"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            priority</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"low"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token comment" style="color:#999988;font-style:italic">// When priority is omitted, Takumi assigns one automatically based on risk analysis</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> feature_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"checkout"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> perspective</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"BusinessLogic"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>When the credit limit is reached, you can check which combinations were completed using the <code>scan_progress</code> artifact, as described in <a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus#auto-prioritization">Assess within a Credit Limit</a>.</p>
<div class="theme-admonition theme-admonition-info admonition_jlL_ alert alert--info"><div class="admonitionHeading_yyDB"><span class="admonitionIcon_tfPy"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>info</div><div class="admonitionContent_hYxl"><p>Setting custom priorities requires that features have already been discovered by a Takumi API workflow (<code>blackbox-crawl</code> or <code>blackbox-assessment</code>). Specify the feature names from the <code>features</code> artifact of that workflow in <code>pairs</code>, and provide the corresponding <code>workflow_run_id</code> in <code>resume.assess_crawled_features</code>.</p></div></div>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="continue-assessment">Resume an Assessment with Additional Credits<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus#continue-assessment" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>You can resume an assessment that stopped due to a credit limit or was scoped to a subset of combinations. The resumed assessment inherits the previous results and continues scanning unscanned combinations in priority order.</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> next_workflow_run_id </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-assessment/dispatch</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      input</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        language</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"english"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        target_urls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"https://app.example/"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        scan_credit_limit</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">50</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// Credit limit for the additional scan (optional)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        resume</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          kind</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"continue_assessment"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          continue_assessment</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            workflow_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"blackbox-assessment"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> workflow_run_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// workflow_run_id of the assessment to resume</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Optionally scope or reprioritize (omit to let Takumi prioritize all remaining combinations)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        pairs</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token comment" style="color:#999988;font-style:italic">// feature_name must match a name from the resumed assessment's `features` artifact</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            feature_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"authentication"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            perspective</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Injection"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            priority</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"high"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token comment" style="color:#999988;font-style:italic">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>You can optionally specify <code>pairs</code> to scope the resumed assessment to specific combinations or adjust priorities. If omitted, Takumi automatically prioritizes all remaining unscanned combinations.</p>
<p>You can repeat this cycle — assess, review results, resume — to incrementally expand your assessment scope while reviewing findings along the way.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="limitations">Limitations<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus#limitations" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>This feature is <strong>only available for assessments dispatched via the Takumi API</strong>. You cannot resume a web console assessment from the API, or vice versa. For details, see <a href="https://shisho.dev/docs/t/api#relationship-with-existing-features">Relationship with the Web Console's "Assessment" Feature</a> in the API user guide.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-risk-focus#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>See the <a href="https://shisho.dev/docs/t/api">API documentation</a> for full details.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Credit Limits and Resumable Crawling Now Available via Takumi API]]></title>
            <link>https://shisho.dev/docs/r/202603-takumi-api-crawl-credit-limit</link>
            <guid>https://shisho.dev/docs/r/202603-takumi-api-crawl-credit-limit</guid>
            <pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[You can now set a credit limit when crawling via the Takumi API. When the limit is reached, you can add more credits and resume crawling from where it left off.]]></description>
            <content:encoded><![CDATA[<p>You can now specify a <strong>credit limit</strong> when running crawls (<code>blackbox-crawl</code> workflow) via the Takumi API. You can also resume a completed crawl with additional credits to continue where it left off — just like the <a href="https://shisho.dev/docs/t/features/blackbox-assessment/#additional-crawl">Additional Crawl</a> feature in the web console.</p>
<!-- -->
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="setting-a-credit-limit">Setting a Credit Limit<a href="https://shisho.dev/docs/r/202603-takumi-api-crawl-credit-limit#setting-a-credit-limit" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>When dispatching a crawl workflow, use the <code>input.credit_limit</code> parameter to cap credit consumption. Once the limit is reached, the crawl exits and outputs all features discovered so far.</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> workflow_run_id </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-crawl/dispatch</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      input</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        language</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"english"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        target_urls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"https://app.example/"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Credit limit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        credit_limit</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="resuming-a-crawl-with-additional-credits">Resuming a Crawl with Additional Credits<a href="https://shisho.dev/docs/r/202603-takumi-api-crawl-credit-limit#resuming-a-crawl-with-additional-credits" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>To crawl more broadly or explore specific features in greater depth, you can resume a completed crawl. The resumed crawl inherits all previously discovered features and endpoints, and any newly found ones are added. You can also provide additional instructions to focus the crawl on specific areas.</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> crawl_workflow_run_id2 </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-crawl/dispatch</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      input</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        language</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"english"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        target_urls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"https://app.example/"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Resume from a previous crawl</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        resume</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          workflow_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"blackbox-crawl"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> crawl_workflow_run_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// workflow_run_id of the previous crawl</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Credit limit (optional)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        credit_limit</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">20</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Additional instructions (optional)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        additional_instructions</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token string" style="color:#e3116c">"Focus on crawling the APIs (/api/v1/users/...) used by the page accessible at /page/abc"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      notification</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> webhook_endpoint_ids</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token constant" style="color:#36acaa">WEBHOOK_ID</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202603-takumi-api-crawl-credit-limit#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>See the <a href="https://shisho.dev/docs/t/api">API documentation</a> for details.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Scoped Blackbox Assessments and Retests Now Available via Takumi API]]></title>
            <link>https://shisho.dev/docs/r/202603-takumi-api-blackbox-scoped-assessment</link>
            <guid>https://shisho.dev/docs/r/202603-takumi-api-blackbox-scoped-assessment</guid>
            <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Run blackbox assessments scoped to specific features and perspectives through the Takumi API]]></description>
            <content:encoded><![CDATA[<p>Takumi's blackbox assessment now supports <strong>scoped assessments</strong> and <strong>retests</strong> via the <a href="https://shisho.dev/docs/t/api">Takumi API</a>. Previously, these capabilities were only available through the web console.</p>
<ul>
<li><strong>Scoped assessment</strong>: Crawl the target application first, then select specific features and perspectives to assess</li>
<li><strong>Retest</strong>: Re-run assessments targeting feature–perspective pairs where vulnerabilities were found in previous results</li>
</ul>
<p>To support these workflows, we've made the following additions to the blackbox assessment API:</p>
<ul>
<li>A new <strong>crawl workflow</strong> (<code>blackbox-crawl</code>) that discovers features in the target application without performing any assessment</li>
<li>New <strong>scoping options</strong> for the assessment workflow (<code>blackbox-assessment</code>) that let you specify which features and perspectives to assess</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="scoped-assessment">Scoped Assessment<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-scoped-assessment#scoped-assessment" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>You can dispatch a scoped assessment in two steps:</p>
<ol>
<li>Dispatch the crawl workflow to discover features in the target application</li>
<li>Select the features and perspectives you want to assess, then dispatch the assessment workflow</li>
</ol>
<p>This is useful when you want to focus on high-priority areas or only assess features that were recently updated.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="dispatch-the-crawl-workflow">Dispatch the Crawl Workflow<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-scoped-assessment#dispatch-the-crawl-workflow" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Dispatch a crawl workflow as follows:</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> crawl_workflow_run_id </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-crawl/dispatch</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      input</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        language</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"english"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        target_urls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"https://app.example/"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      notification</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> webhook_endpoint_ids</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token constant" style="color:#36acaa">WEBHOOK_ID</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="select-features-and-dispatch-the-assessment">Select Features and Dispatch the Assessment<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-scoped-assessment#select-features-and-dispatch-the-assessment" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Once the crawl completes, retrieve the discovered features. They are available as an artifact named <code>features</code>.</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> featuresData </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-crawl/get-artifact-download-url</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> crawl_workflow_run_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      artifact_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"features"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> url </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> feature </span><span class="token keyword" style="color:#00009f">of</span><span class="token plain"> featuresData</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">features</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"feature name:"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> feature</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">name</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// =&gt; "authentication", "user_settings", "product_catalog", ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"feature description:"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> feature</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">description</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Choose the feature names (<code>feature.name</code>) and perspectives you want to assess, then dispatch the assessment workflow with the crawl workflow run's ID:</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> assessment_workflow_run_id </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-assessment/dispatch</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      input</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        language</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"japanese"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        target_urls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"https://app.example/"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Reuse features discovered by the crawl workflow</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        resume</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          kind</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"assess_crawled_features"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          assess_crawled_features</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            workflow_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"blackbox-crawl"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> crawl_workflow_run_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Specify which feature–perspective pairs to assess</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        pairs</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> feature_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"authentication"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> perspective</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Injection"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> feature_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"user_settings"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> perspective</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Authorization"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> feature_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"product_catalog"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> perspective</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"XSS"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="retest">Retest<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-scoped-assessment#retest" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Blackbox assessment results include information about which feature and perspective each vulnerability was found in. After fixing a vulnerability, you can retest only the relevant feature–perspective pair instead of dispatching a full assessment.</p>
<p>First, retrieve the findings from a completed assessment by downloading the <code>findings</code> artifact:</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> findingsData </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-assessment/get-artifact-download-url</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> assessment_workflow_run_id</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      artifact_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"findings"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> url </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> finding </span><span class="token keyword" style="color:#00009f">of</span><span class="token plain"> findingsData</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">findings</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"title:"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> finding</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">title</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"feature:"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> finding</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">feature_name</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// =&gt; "authentication", "user_settings", ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"perspective:"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> finding</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">perspective</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// =&gt; "Injection", "Authorization", ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token builtin">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"markdown description:"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> finding</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">description</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>To retest after fixing a vulnerability, specify the feature name (<code>finding.feature_name</code>) and perspective (<code>finding.perspective</code>) from the findings. You also need to provide the previous assessment's workflow run ID so that the feature list can be reused.</p>
<div class="language-typescript codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-typescript codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> assessment_workflow_run_id </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">await</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">fetch</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_API</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/v1/o/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">${</span><span class="token template-string interpolation constant" style="color:#36acaa">TAKUMI_ORG</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:#393A34">}</span><span class="token template-string string" style="color:#e3116c">/workflows/blackbox-assessment/dispatch</span><span class="token template-string template-punctuation string" style="color:#e3116c">`</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    method</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"POST"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    headers</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    body</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token constant" style="color:#36acaa">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      input</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        language</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"japanese"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        target_urls</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">"https://app.example/"</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Reuse the feature list from the previous assessment</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        resume</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          kind</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"assess_crawled_features"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          assess_crawled_features</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            workflow_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"blackbox-assessment"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            workflow_run_id</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"TWR..."</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// workflow_run_id of the previous assessment</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">          </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token comment" style="color:#999988;font-style:italic">// Specify which feature–perspective pairs to retest</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        pairs</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> feature_name</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"authentication"</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> perspective</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Injection"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">      </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">then</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">r</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=&gt;</span><span class="token plain"> r</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">json</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="limitations">Limitations<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-scoped-assessment#limitations" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Scoped assessments and retests are <strong>only available for crawls and assessments dispatched via the Takumi API</strong>. Results from assessments run through the web console cannot be used with the API, because the Takumi API and the web console's assessment feature manage their data independently. For details, see <a href="https://shisho.dev/docs/t/api#relationship-with-existing-features">Relationship with the Web Console's "Assessment" Feature</a> in the API user guide.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202603-takumi-api-blackbox-scoped-assessment#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>See the <a href="https://shisho.dev/docs/t/api">API documentation</a> for full details.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Risk Focus Assessment Now Available for Whitebox]]></title>
            <link>https://shisho.dev/docs/r/202603-takumi-risk-focus-for-wb</link>
            <guid>https://shisho.dev/docs/r/202603-takumi-risk-focus-for-wb</guid>
            <pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[You can now run Risk Focus assessments with a credit limit in whitebox mode]]></description>
            <content:encoded><![CDATA[<p>Takumi's whitebox assessment now supports Risk Focus mode — after feature enumeration, you can configure a credit limit and assessment priority for each feature and perspective to run a Risk Focus assessment.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="configuring-credit-limits-and-assessment-priorities">Configuring Credit Limits and Assessment Priorities<a href="https://shisho.dev/docs/r/202603-takumi-risk-focus-for-wb#configuring-credit-limits-and-assessment-priorities" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>From this release onward, starting a new whitebox assessment will first perform feature enumeration only.</p>
<p>Once this process completes, the assessment transitions to <strong>Crawled</strong> status. Opening that assessment displays the Risk Focus assessment configuration screen.</p>
<p><img decoding="async" loading="lazy" alt="Configuration screen" src="https://shisho.dev/docs/assets/images/ui-pending-1-ce4ab1e982404b969e775340cfbdee2b.png" width="3138" height="1330" class="img_c462"></p>
<p>From this screen, you can set the credit limit for the assessment and the assessment priority for each feature and perspective combination.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="additional-scans">Additional Scans<a href="https://shisho.dev/docs/r/202603-takumi-risk-focus-for-wb#additional-scans" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>After the initial scan completes, the assessment enters <strong>Pending</strong> status. Opening that assessment lets you review the report of findings discovered so far, and run additional scans by adjusting the credit limit and priority settings.</p>
<p><img decoding="async" loading="lazy" alt="Pending screen" src="https://shisho.dev/docs/assets/images/ui-pending-2-30de0425998c4352e09f84fc4b0f9a37.png" width="3150" height="1786" class="img_c462"></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="user-guide">User Guide<a href="https://shisho.dev/docs/r/202603-takumi-risk-focus-for-wb#user-guide" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>See <a href="https://shisho.dev/docs/t/features/whitebox-assessment">Whitebox Assessment</a> for more details.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Guard for PyPI Adds a 3-Day Quarantine on New Packages]]></title>
            <link>https://shisho.dev/docs/r/202603-takumi-guard-pypi-quarantine</link>
            <guid>https://shisho.dev/docs/r/202603-takumi-guard-pypi-quarantine</guid>
            <pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[New PyPI package versions are held for 72 hours, giving time for security analysis to catch malicious packages before they reach your projects.]]></description>
            <content:encoded><![CDATA[<p>Takumi Guard for PyPI now applies a <strong>3-day quarantine</strong> to newly published packages.</p>
<p>When a new version appears on PyPI, it is held for 72 hours before being made available through Takumi Guard. This gives security analysis systems time to detect malicious packages <strong>before they are installed in your projects</strong>.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="background">Background<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi-quarantine#background" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Supply chain attacks targeting PyPI are increasing in both volume and sophistication. Attackers publish malicious packages and rely on automated tooling to pull them into projects within minutes — often before anyone has a chance to review them.</p>
<p>The majority of malicious packages are detected and removed within a few days of publication. By introducing a short waiting period, the quarantine significantly reduces the window of exposure.</p>
<p>This approach — known as a <strong>dependency cooldown</strong> — has been widely adopted across the JavaScript ecosystem (npm, pnpm, yarn, Bun). Takumi Guard brings the same protection to Python, working transparently with any package manager.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="how-it-works">How It Works<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi-quarantine#how-it-works" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>From the developer's perspective, <code>pip install</code> works exactly as before — it installs the latest version that has passed the quarantine window.</p>
<div class="codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-text codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token plain"># Example: package has versions 1.0.0 (5 days old) and 1.1.0 (1 day old)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">$ pip install --index-url https://pypi.flatt.tech/simple/ example-package</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># pip installs 1.0.0 (passes quarantine)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># 1.1.0 is not yet available (published less than 72 hours ago)</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>After 72 hours, version 1.1.0 becomes available automatically — no action needed.</p>
<table><thead><tr><th>Scenario</th><th>Behavior</th></tr></thead><tbody><tr><td>Package has older and newer versions</td><td>Newer versions (&lt; 72h) are hidden; pip installs the latest available version</td></tr><tr><td>All versions are newer than 72h</td><td>Package is temporarily unavailable</td></tr><tr><td>Package has only old versions</td><td>No change; all versions available as usual</td></tr></tbody></table>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="no-configuration-required">No Configuration Required<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi-quarantine#no-configuration-required" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>If you are already using Takumi Guard for PyPI (<code>https://pypi.flatt.tech/simple/</code>), the quarantine is applied automatically. No changes to your setup are needed.</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">PIP_INDEX_URL</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">https://pypi.flatt.tech/simple/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> requests  </span><span class="token comment" style="color:#999988;font-style:italic"># works as before</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>The quarantine works with pip, uv, poetry, and any other PEP 503-compatible package manager — no per-tool configuration needed.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Blackbox assessments now unified under Risk Focus mode]]></title>
            <link>https://shisho.dev/docs/r/202603-takumi-bb-rf-only</link>
            <guid>https://shisho.dev/docs/r/202603-takumi-bb-rf-only</guid>
            <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[All blackbox assessments now require a credit threshold, unifying the assessment flow]]></description>
            <content:encoded><![CDATA[<p>A credit threshold is now required when running Takumi blackbox assessments. The "Risk Focus Assessment" mechanism, previously offered as a separate menu option, is now the standard behavior for all blackbox assessments.</p>
<p>With this change, <strong>you can control credit consumption upfront for every blackbox assessment, preventing unexpected credit usage.</strong></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="what-changed">What changed<a href="https://shisho.dev/docs/r/202603-takumi-bb-rf-only#what-changed" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Previously, you had to choose between a "standard assessment" and a "Risk Focus Assessment" when starting a blackbox assessment. With this update, specifying a credit threshold is now required for all blackbox assessments, and Risk Focus Assessment has been integrated as the standard assessment method.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="credit-threshold">Credit threshold<a href="https://shisho.dev/docs/r/202603-takumi-bb-rf-only#credit-threshold" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>You set a credit threshold for each assessment job at the time of creation. Takumi runs the job within the specified credit limit and stops when the threshold is reached. You will not be charged for any credits consumed beyond the threshold.</p>
<ul>
<li>In "Full Assessment" mode, you specify thresholds for both crawling and scanning at the start</li>
<li>In "Scoped Assessment" mode, you specify the crawling threshold first, then set the scanning threshold when starting the scan</li>
</ul>
<p><img decoding="async" loading="lazy" alt="Credit threshold setting" src="https://shisho.dev/docs/assets/images/image-484ec4139fe1e509f2cec1d22a6e9d68.png" width="3064" height="970" class="img_c462"></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="risk-focus-assessment-features">Risk Focus Assessment features<a href="https://shisho.dev/docs/r/202603-takumi-bb-rf-only#risk-focus-assessment-features" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Risk Focus Assessment is an approach that efficiently prioritizes high-risk areas using credit thresholds and priority settings. Its key features are as follows.</p>
<ul>
<li><strong>Priority-based incremental assessment</strong>: Set priorities for each combination of features and perspectives to assess high-risk areas first</li>
<li><strong>Automatic priority assignment</strong>: Takumi automatically determines assessment priorities based on risk analysis. You can also set priorities manually</li>
<li><strong>Review interim results and run additional scans</strong>: After the assessment pauses upon reaching the credit threshold, you can review interim reports and choose to run additional scans or complete the assessment</li>
</ul>
<p><img decoding="async" loading="lazy" alt="Risk Focus Assessment settings" src="https://shisho.dev/docs/assets/images/auto-00222eb56dd175f3102d8976c342b27e.png" width="3116" height="1100" class="img_c462"></p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="impact-on-existing-assessments">Impact on existing assessments<a href="https://shisho.dev/docs/r/202603-takumi-bb-rf-only#impact-on-existing-assessments" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>There is no impact on in-progress or completed assessments. This change applies only to newly created assessments going forward.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="user-guide">User guide<a href="https://shisho.dev/docs/r/202603-takumi-bb-rf-only#user-guide" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>See <a href="https://shisho.dev/docs/t/features/blackbox-assessment">Blackbox Assessment</a> for details.</p>]]></content:encoded>
            <category>release-note</category>
        </item>
        <item>
            <title><![CDATA[Takumi Guard PyPI Support Released]]></title>
            <link>https://shisho.dev/docs/r/202603-takumi-guard-pypi</link>
            <guid>https://shisho.dev/docs/r/202603-takumi-guard-pypi</guid>
            <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Takumi Guard now protects Python projects by blocking malicious PyPI packages.]]></description>
            <content:encoded><![CDATA[<p>Takumi Guard now supports <strong>PyPI</strong> alongside npm.</p>
<p>Python projects using <strong>pip</strong>, <strong>uv</strong>, or <strong>poetry</strong> can now route installs through Takumi Guard to block known-malicious packages before they reach your CI or development environment.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="overview">Overview<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi#overview" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<p>Takumi Guard is a security proxy that sits between your package manager and the upstream registry. It checks every install request against a real-time threat database and blocks known-malicious packages.</p>
<p>With this release, the same protection that npm users have is now available for the Python ecosystem:</p>
<ul>
<li><strong>Package Blocking</strong>: Malicious PyPI packages are blocked before any code executes</li>
<li><strong>Download Tracking</strong>: Records install history for authenticated users</li>
<li><strong><a href="https://shisho.dev/docs/t/guard/features/breach-notifications">Breach Notifications</a></strong>: Get notified if a package you installed is later flagged as malicious</li>
<li><strong><a href="https://shisho.dev/docs/t/guard/features/package-blocking">Version-Level Blocking</a></strong>: Block specific compromised versions while allowing safe versions through</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="getting-started">Getting Started<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi#getting-started" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="pip--uv">pip / uv<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi#pip--uv" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Add the following to your shell profile (<code>.bashrc</code>, <code>.zshrc</code>, etc.):</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># pip</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">PIP_INDEX_URL</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">https://pypi.flatt.tech/simple/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># uv (does not read PIP_INDEX_URL — requires its own variable)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">UV_INDEX_URL</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">https://pypi.flatt.tech/simple/</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Or configure in <code>pip.conf</code> (<code>~/.config/pip/pip.conf</code> on Linux/macOS, <code>%APPDATA%\pip\pip.ini</code> on Windows):</p>
<div class="language-ini codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-ini codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token plain">[global]</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">index-url = https://pypi.flatt.tech/simple/</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>For a one-time install without changing your environment:</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token plain">pip </span><span class="token function" style="color:#d73a49">install</span><span class="token plain"> --index-url https://pypi.flatt.tech/simple/ </span><span class="token operator" style="color:#393A34">&lt;</span><span class="token plain">package</span><span class="token operator" style="color:#393A34">&gt;</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="poetry">poetry<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi#poetry" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Add Takumi Guard as the primary source:</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token plain">poetry </span><span class="token builtin class-name">source</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">add</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">--priority</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">primary takumi-guard https://pypi.flatt.tech/simple/</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="github-actions">GitHub Actions<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi#github-actions" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Add one line to your workflow:</p>
<div class="language-yaml codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-yaml codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token key atrule" style="color:#00a4db">steps</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">uses</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> actions/checkout@v4</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">uses</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> flatt</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">security/setup</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">takumi</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">guard</span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">pypi@v1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain"> </span><span class="token key atrule" style="color:#00a4db">run</span><span class="token punctuation" style="color:#393A34">:</span><span class="token plain"> pip install </span><span class="token punctuation" style="color:#393A34">-</span><span class="token plain">r requirements.txt</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>For full setup options including authentication and breach notifications, see the <a href="https://shisho.dev/docs/t/guard/quickstart/pypi">PyPI quickstart guide</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_fsw0" id="email-registration-breach-notifications">Email Registration (Breach Notifications)<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi#email-registration-breach-notifications" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h3>
<p>Register your email to receive notifications if a package you installed is later found to be malicious. No account required, free of charge.</p>
<p><strong>Step 1:</strong> Register your email</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token function" style="color:#d73a49">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:#36acaa">-X</span><span class="token plain"> POST https://pypi.flatt.tech/api/v1/tokens </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-H</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Content-Type: application/json"</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token parameter variable" style="color:#36acaa">-d</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'{"email": "you@example.com"}'</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Step 2:</strong> Click the verification link in the email. You will see a page with your API key and setup instructions.</p>
<p><strong>Step 3:</strong> Configure your package manager with your token</p>
<div class="language-bash codeBlockContainer_nc8C theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_jKNI"><pre tabindex="0" class="prism-code language-bash codeBlock_g1Nz thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_Ieti"><span class="token-line" style="color:#393A34"><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">PIP_INDEX_URL</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">https://token:tg_anon_xxxxxx@pypi.flatt.tech/simple/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># If you use uv, also add:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token builtin class-name">export</span><span class="token plain"> </span><span class="token assign-left variable" style="color:#36acaa">UV_INDEX_URL</span><span class="token operator" style="color:#393A34">=</span><span class="token plain">https://token:tg_anon_xxxxxx@pypi.flatt.tech/simple/</span><br></span></code></pre><div class="buttonGroup_tokY"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_bmVR" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_o23R"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_PnBV"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Your installs are now tracked, and you will be notified if a downloaded package is later flagged.</p>
<h2 class="anchor anchorWithStickyNavbar_fsw0" id="supported-package-managers">Supported Package Managers<a href="https://shisho.dev/docs/r/202603-takumi-guard-pypi#supported-package-managers" class="hash-link" aria-label="Direct link to heading" title="Direct link to heading">​</a></h2>
<table><thead><tr><th>Package Manager</th><th>Supported</th></tr></thead><tbody><tr><td>pip</td><td>Yes</td></tr><tr><td>uv</td><td>Yes</td></tr><tr><td>poetry</td><td>Yes</td></tr><tr><td>npm</td><td>Yes (existing)</td></tr><tr><td>pnpm</td><td>Yes (existing)</td></tr><tr><td>yarn</td><td>Yes (existing)</td></tr></tbody></table>]]></content:encoded>
            <category>release-note</category>
        </item>
    </channel>
</rss>