<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Brenner Cruvinel - produto</title>
    <subtitle>AI researcher and product designer building at the edge of computer science and mental health.</subtitle>
    <link rel="self" type="application/atom+xml" href="https://brennercruvinel.blog/en/tags/produto/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://brennercruvinel.blog"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-02-10T00:00:00+00:00</updated>
    <id>https://brennercruvinel.blog/en/tags/produto/atom.xml</id>
    <entry xml:lang="en">
        <title>Hoff MVP: blocking addiction sites in /etc/hosts</title>
        <published>2026-02-10T00:00:00+00:00</published>
        <updated>2026-02-10T00:00:00+00:00</updated>
        
        <author>
          <name>
            Brenner Cruvinel
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://brennercruvinel.blog/en/blog/hoff-mvp-bloqueio-hosts/"/>
        <id>https://brennercruvinel.blog/en/blog/hoff-mvp-bloqueio-hosts/</id>
        
        <content type="html" xml:base="https://brennercruvinel.blog/en/blog/hoff-mvp-bloqueio-hosts/">&lt;p&gt;Cleaning up the Hoff repository, I found the very first proof of concept. The goal was to block pornography sites and the like for a close friend who was struggling with this &lt;a href=&quot;https://brennercruvinel.blog/en/blog/vicios-dopaminergicos-digitais/&quot;&gt;addiction&lt;/a&gt;, which is silent and marginalized. It was the initial inspiration for everything. Finding it again was moving.&lt;/p&gt;
&lt;p&gt;It is the rawest MVP possible: no app, just the hosts file. The idea is to point the domain to loopback, so the computer tries to open the site on itself and finds nothing. And what matters most is keeping the way back, to restore the file when the block needs to come off.&lt;/p&gt;
&lt;h2 id=&quot;blocking&quot;&gt;Blocking&lt;/h2&gt;
&lt;p&gt;Each line in &lt;code&gt;/etc/hosts&lt;/code&gt; says &quot;this name resolves to this address&quot;. To block, the address is the machine itself:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot; &gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;127.0.0.1   example.com&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;127.0.0.1   www.example.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You need one line for each variation of the domain, with and without &lt;code&gt;www&lt;/code&gt;. On macOS, after editing, it is worth flushing the DNS cache so the change takes effect right away:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; dscacheutil&lt;/span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt;flushcache&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt; sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; killall&lt;/span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt;HUP&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; mDNSResponder&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;It is an honest block, but a fragile one: anyone with the administrator password undoes it in seconds. Even so, it is one more bit of friction between the impulse and the click.&lt;/p&gt;
&lt;h2 id=&quot;restoring-hosts-on-macos&quot;&gt;Restoring hosts on macOS&lt;/h2&gt;
&lt;p&gt;Overwrites &lt;code&gt;/etc/hosts&lt;/code&gt; with the default macOS content:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot; &gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;sudo&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; sh&lt;/span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt; -&lt;/span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt;c&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt; &amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;echo &amp;quot;##&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;# Host Database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;#&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;# localhost is used to configure the loopback interface&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;# when the system is booting.  Do not change this entry.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;##&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;127.0.0.1       localhost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;255.255.255.255 broadcasthost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;::1             localhost&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot; &amp;gt; /etc/hosts&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&quot;restoring-hosts-on-windows&quot;&gt;Restoring hosts on Windows&lt;/h2&gt;
&lt;p&gt;Open PowerShell as administrator. This command appends the localhost entries to the end of the file, without deleting the rest:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot; &gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;Start-Process&lt;/span&gt;&lt;span&gt; powershell &lt;/span&gt;&lt;span style=&quot;color: light-dark(#859900, #859900);&quot;&gt;-&lt;/span&gt;&lt;span&gt;Verb runAs &lt;/span&gt;&lt;span style=&quot;color: light-dark(#859900, #859900);&quot;&gt;-&lt;/span&gt;&lt;span&gt;ArgumentList &lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;Add-Content -Path C:\Windows\System32\drivers\etc\hosts -Value &amp;#39;127.0.0.1 localhost&amp;#39;, &amp;#39;::1 localhost&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To really remove the block, you need to overwrite the whole file, not just append:&lt;/p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color-scheme: light dark; color: light-dark(#657B83, #839496); background-color: light-dark(#FDF6E3, #002B36);&quot; &gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: light-dark(#268BD2, #268BD2);&quot;&gt;Start-Process&lt;/span&gt;&lt;span&gt; powershell &lt;/span&gt;&lt;span style=&quot;color: light-dark(#859900, #859900);&quot;&gt;-&lt;/span&gt;&lt;span&gt;Verb runAs &lt;/span&gt;&lt;span style=&quot;color: light-dark(#859900, #859900);&quot;&gt;-&lt;/span&gt;&lt;span&gt;ArgumentList &lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;Set-Content -Path C:\Windows\System32\drivers\etc\hosts -Value &amp;#39;127.0.0.1 localhost&lt;/span&gt;&lt;span style=&quot;color: light-dark(#CB4B16, #CB4B16);&quot;&gt;`n&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;::1 localhost&amp;#39;&lt;/span&gt;&lt;span style=&quot;color: light-dark(#2AA198, #2AA198);&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;</content>
        
    </entry>
    <entry xml:lang="en">
        <title>Hoff POC: the AI that praised a fake screening</title>
        <published>2024-02-27T00:00:00+00:00</published>
        <updated>2024-02-27T00:00:00+00:00</updated>
        
        <author>
          <name>
            Brenner Cruvinel
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://brennercruvinel.blog/en/blog/poc-hoff-triagem-neuropsicologica/"/>
        <id>https://brennercruvinel.blog/en/blog/poc-hoff-triagem-neuropsicologica/</id>
        
        <content type="html" xml:base="https://brennercruvinel.blog/en/blog/poc-hoff-triagem-neuropsicologica/">&lt;p&gt;Hoff&#39;s first AI POC sent a synthetic neuropsychological screening to the OpenAI API and asked for an interpretation. The first version of this post published the report that came back, in full: scores, diagnoses, recommendations, a protocol number and the label &quot;confidential classification&quot;. Even with the warning that it was all fictional, it looked like someone&#39;s clinical report. I took the report down. What is worth showing is what it reveals about the model.&lt;/p&gt;
&lt;h2 id=&quot;what-came-back&quot;&gt;What came back&lt;/h2&gt;
&lt;p&gt;A complete clinical report. It listed 28 instruments, from the WAIS-IV to the NEO-PI-R personality inventory, with administration times; the intelligence battery alone added up to 378 minutes. It reached three conclusions: giftedness, autism with level 1 support needs, and ADHD. And it closed with an &quot;excellent&quot; prognosis.&lt;/p&gt;
&lt;p&gt;The tone was that of someone who knows the person and likes them. Some excerpts, in my translation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;creativity at the level of genius (99.9th percentile)&quot;&lt;/li&gt;
&lt;li&gt;&quot;extraordinary capacity for abstraction and synthesis&quot;&lt;/li&gt;
&lt;li&gt;&quot;potential for unique and transformative contributions&quot;&lt;/li&gt;
&lt;li&gt;&quot;this profile represents less than 0.1% of the population&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-errors-the-praise-was-hiding&quot;&gt;The errors the praise was hiding&lt;/h2&gt;
&lt;p&gt;Read carefully, the report has problems no clinician would sign:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;None of the 28 instruments measures creativity, and the report gives it a percentile.&lt;/strong&gt; The number was invented to fit the praise&lt;/li&gt;
&lt;li&gt;Arithmetic appears twice, as a supplementary verbal subtest and in working memory. In the WAIS-IV, it is part of the working memory index, as &lt;a rel=&quot;external&quot; href=&quot;https://doi.org/10.1007/s12207-024-09499-3&quot;&gt;Harrison et al.&lt;/a&gt; point out&lt;/li&gt;
&lt;li&gt;On the RAADS-R, the maximum subscale scores are wrong. The scale has 80 items scored 0 to 3, split into &lt;a rel=&quot;external&quot; href=&quot;https://openscales.net/scale.php?code=RAADSR&quot;&gt;39, 14, 7 and 20 items&lt;/a&gt; (&lt;a rel=&quot;external&quot; href=&quot;https://doi.org/10.1007/s10803-010-1133-5&quot;&gt;Ritvo et al., 2011&lt;/a&gt;), which gives maximums of 117, 42, 21 and 60. The report uses 88, 76, 24 and 52&lt;/li&gt;
&lt;li&gt;The ADOS-2 appears in the report itself as a &quot;clinical observation&quot;. It gives scores for an observation that never happened&lt;/li&gt;
&lt;li&gt;Two verbal measures disagree by 24 points, 118 on the WAIS-IV and 142 on the Stanford-Binet, and the report does not comment&lt;/li&gt;
&lt;li&gt;The report is dated December 2024, after this post&#39;s date, and cites &quot;updated Brazilian norms (2024)&quot;. I have no way of knowing which of the two dates is wrong&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;its-name&quot;&gt;Its name&lt;/h2&gt;
&lt;p&gt;This has a name: sycophancy, a model&#39;s tendency to say what pleases instead of what is true. In 2023, &lt;a rel=&quot;external&quot; href=&quot;https://arxiv.org/abs/2310.13548&quot;&gt;Sharma et al.&lt;/a&gt;, at Anthropic, showed that five state-of-the-art AI assistants did this consistently, and that both people and preference models sometimes prefer a well-written sycophantic answer to a correct one. In April 2025, OpenAI &lt;a rel=&quot;external&quot; href=&quot;https://openai.com/index/sycophancy-in-gpt-4o/&quot;&gt;rolled back a GPT-4o update&lt;/a&gt; that had become too sycophantic.&lt;/p&gt;
&lt;p&gt;In a neuropsychological screening, this is dangerous in two ways. The model fills in what is missing with confidence, and the confidence comes wrapped in praise the person wants to hear. A report saying you are among the rarest 0.1% of the population is exactly the kind of text nobody stops to check.&lt;/p&gt;
&lt;h2 id=&quot;what-i-take-from-it-for-hoff&quot;&gt;What I take from it for Hoff&lt;/h2&gt;
&lt;p&gt;The lesson of the POC is not that the model gets things wrong. It is that the error comes out looking good. Any clinical output from a model has to be checked against the manual of each instrument and reviewed by a professional before it reaches anyone. And the product cannot reward the model for pleasing: a report full of praise is a reason to trust it less, not more.&lt;/p&gt;
</content>
        
    </entry>
</feed>
