<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ibrahim kobeissy</title>
    <description>The latest articles on DEV Community by ibrahim kobeissy (@ibrahim_kobeissy_5117d943).</description>
    <link>https://dev.to/ibrahim_kobeissy_5117d943</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2010415%2Fd96f98a0-3424-4a4c-8739-fa7c8cfb8865.jpg</url>
      <title>DEV Community: ibrahim kobeissy</title>
      <link>https://dev.to/ibrahim_kobeissy_5117d943</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ibrahim_kobeissy_5117d943"/>
    <language>en</language>
    <item>
      <title>I built a compiler for how AI agents should write to you</title>
      <dc:creator>ibrahim kobeissy</dc:creator>
      <pubDate>Fri, 26 Jun 2026 21:24:53 +0000</pubDate>
      <link>https://dev.to/ibrahim_kobeissy_5117d943/i-built-a-compiler-for-how-ai-agents-should-write-to-you-4m18</link>
      <guid>https://dev.to/ibrahim_kobeissy_5117d943/i-built-a-compiler-for-how-ai-agents-should-write-to-you-4m18</guid>
      <description>&lt;p&gt;I kept correcting AI agents in the same ways: "too long," "answer first," "use a diagram," "assume I know the jargon." Each correction improved the current exchange, but the preference was not represented as durable system state.&lt;/p&gt;

&lt;p&gt;I built &lt;code&gt;/calibrate-comms&lt;/code&gt; to make that state explicit. It is an open-source skill inside an Obsidian vault, used by both Claude Code and Codex.&lt;/p&gt;

&lt;h2&gt;
  
  
  The model: nine operational dials
&lt;/h2&gt;

&lt;p&gt;The skill does not try to discover a personality type. It calibrates nine choices that directly change how an answer is rendered:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dial&lt;/th&gt;
&lt;th&gt;Practical question&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Density&lt;/td&gt;
&lt;td&gt;Tight sections or full reasoning?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sequence&lt;/td&gt;
&lt;td&gt;Answer first or chronological build-up?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Modality&lt;/td&gt;
&lt;td&gt;Prose or diagrams for relational content?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Abstraction&lt;/td&gt;
&lt;td&gt;Concrete example or principle first?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tradeoff&lt;/td&gt;
&lt;td&gt;One recommendation or several options?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detail&lt;/td&gt;
&lt;td&gt;Main path or edge cases too?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Jargon&lt;/td&gt;
&lt;td&gt;Define terms or assume expertise?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tone&lt;/td&gt;
&lt;td&gt;Casual, neutral, or formal?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Context-giving&lt;/td&gt;
&lt;td&gt;Should the agent extract missing context or split an overloaded brief?&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Prior → calibration → directives
&lt;/h2&gt;

&lt;p&gt;The workflow has three stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;L1 PRIOR → L2 SAMPLE REACTION → COMPILE → CLAUDE.md
    hypothesis        empirical override       shared by both agents
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quick mode asks one bespoke forced-choice proxy per axis. Those questions are deliberately labelled as proxies, not validated psychometrics. Deep mode must fetch the exact items from supported open-access instruments before use; if the source cannot be obtained, the skill stays in Quick mode and makes no validation claim.&lt;/p&gt;

&lt;p&gt;The prior is then challenged through pairwise samples. For sequence, the contrast looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build-up first:
We traced the latency spike to N+1 queries, then found lazy loading in a loop—so the fix is eager loading.

Answer first:
Fix: eager-load the association. Why: lazy loading in a loop caused N+1 queries and the latency spike.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user's pick is revealed preference. If it contradicts the prior, the sample wins.&lt;/p&gt;

&lt;h2&gt;
  
  
  The compiler is the useful part
&lt;/h2&gt;

&lt;p&gt;The final profile is not a score report. A deterministic band-to-rule table emits instructions an agent can execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; Bottom line up front: answer in sentence one, justification after.
&lt;span class="p"&gt;-&lt;/span&gt; Use a table or diagram when content is structural or relational.
&lt;span class="p"&gt;-&lt;/span&gt; Assume working fluency; define only non-obvious terms.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those directives are written into a delimited &lt;code&gt;COMMS-PROFILE&lt;/code&gt; block in &lt;code&gt;CLAUDE.md&lt;/code&gt;. In this vault, &lt;code&gt;AGENTS.md&lt;/code&gt; points to the same instructions, so Claude Code and Codex receive one source of truth.&lt;/p&gt;

&lt;p&gt;Interactions are resolved explicitly. Low density plus complete detail becomes "thorough but layered." A preference for both answer-first and multiple options becomes a one-line lean followed by the option breakdown. A visual replaces prose when the user wants both diagrams and brevity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Calibration, not classification
&lt;/h2&gt;

&lt;p&gt;The skill rejects DISC, MBTI, VARK, and deterministic user types. Supported psychometrics are used only as optional priors. Pairwise choices, direct edits, and live corrections have higher authority because they measure what actually lands.&lt;/p&gt;

&lt;p&gt;That live loop matters. If the user says "too long" during real work, the density directive can be corrected without rerunning the full process. A calibration that cannot learn from use is just a quiz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy is part of the architecture
&lt;/h2&gt;

&lt;p&gt;A filled communication profile describes a person, so it is personal data. The private vault keeps the ledger and compiled directives. The public template ships the skill, templates, and an empty placeholder; its sync verifier fails if a populated profile appears in the public copy.&lt;/p&gt;

&lt;p&gt;The implementation is plain Markdown and prompt-defined skills. Inspect the model, challenge the mappings, or adapt the compiler:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ibrahimkobeissy/ai-second-brain-template" rel="noopener noreferrer"&gt;https://github.com/ibrahimkobeissy/ai-second-brain-template&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>obsidian</category>
    </item>
    <item>
      <title>I built my job hunt as a set of Claude Code skills inside an Obsidian vault</title>
      <dc:creator>ibrahim kobeissy</dc:creator>
      <pubDate>Thu, 25 Jun 2026 14:24:48 +0000</pubDate>
      <link>https://dev.to/ibrahim_kobeissy_5117d943/i-built-my-job-hunt-as-a-set-of-claude-code-skills-inside-an-obsidian-vault-33e6</link>
      <guid>https://dev.to/ibrahim_kobeissy_5117d943/i-built-my-job-hunt-as-a-set-of-claude-code-skills-inside-an-obsidian-vault-33e6</guid>
      <description>&lt;p&gt;I'm job hunting. Rather than living in a dozen browser tabs and a stack of half-edited CV versions, I built the process into my Obsidian vault as a set of Claude Code skills (&lt;code&gt;job-hunt-*&lt;/code&gt;) and open-sourced it as part of my second-brain template.&lt;/p&gt;

&lt;p&gt;This is a walkthrough of how it's wired — steal whatever's useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core idea: two spines, everything else orbits them
&lt;/h2&gt;

&lt;p&gt;The whole toolset hangs off two plain-Markdown files:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Built by&lt;/th&gt;
&lt;th&gt;Read by&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cv.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cv-from-doc&lt;/code&gt; (from my real CV PDF)&lt;/td&gt;
&lt;td&gt;portfolio, mock interviews, company scouting, career-ops&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;my-stories.md&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;capture-story&lt;/code&gt; (STAR, one story at a time)&lt;/td&gt;
&lt;td&gt;interview prep, mock interviews, company scouting&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Because &lt;code&gt;cv.md&lt;/code&gt; is symlinked into career-ops, there's one spine, not two copies. Fix a metric once and my portfolio, my role scoring, and my "me vs the JD" matrix all improve at the same time. That single property is what makes the rest worth building.&lt;/p&gt;

&lt;h2&gt;
  
  
  The skills
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;craft-profile&lt;/code&gt;&lt;/strong&gt; — turns &lt;code&gt;cv.md&lt;/code&gt; into a distinctive single-page HTML portfolio. It's not a CV writer; it interrogates each line until it actually understands the impact, then renders it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;capture-story&lt;/code&gt; / &lt;code&gt;interview-prep&lt;/code&gt; / &lt;code&gt;mock-interview&lt;/code&gt;&lt;/strong&gt; — grow the STAR bank, draft story-backed answers (and &lt;em&gt;flag&lt;/em&gt; the questions I have no story for instead of fabricating one), then drill me cold and score each answer for STAR completeness and red flags.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;scout-company&lt;/code&gt;&lt;/strong&gt; — complements automated role research with the Glassdoor/Blind employee-voice angle and a head-to-head matrix against the job description, rendered as a shareable dossier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;interview-debrief&lt;/code&gt;&lt;/strong&gt; — a post-interview retro that mines new stories back into the bank.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The engine I didn't build
&lt;/h2&gt;

&lt;p&gt;Finding and scoring roles is a big job, so I didn't reinvent it — the toolset adopts &lt;a href="https://github.com/santifer/career-ops" rel="noopener noreferrer"&gt;career-ops&lt;/a&gt; (open source, by Santiago Fernández), which scans boards and deep-scores each role A–F against &lt;code&gt;cv.md&lt;/code&gt;. Two of my vault skills (&lt;code&gt;careerops-profile&lt;/code&gt;, &lt;code&gt;careerops-portals&lt;/code&gt;) exist purely to translate my CV into career-ops' config so the scan is signal, not noise. The vault makes &lt;em&gt;me&lt;/em&gt; sharp; career-ops finds the targets.&lt;/p&gt;

&lt;h2&gt;
  
  
  The flywheel
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-stories.md → interview-prep + mock-interview → real interview
my-stories.md → scout-company                   → real interview
real interview → interview-debrief → (capture-story) → my-stories.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every interview feeds the bank, which makes the next prep, drill, and dossier better. A weak answer a mock exposes becomes a prompt to capture the missing story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two non-negotiables
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Nothing is auto-sent.&lt;/strong&gt; career-ops never submits an application or message on its own — I approve every PDF, letter, and outreach message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal data stays private.&lt;/strong&gt; The CV, stories, and dossiers are excluded from the public template by the repo's sync tooling, so the skills publish without the data they produce.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;The skills live in &lt;code&gt;.claude/skills/&lt;/code&gt; — clone the repo or just lift the prompts into your own vault:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ibrahimkobeissy/ai-second-brain-template" rel="noopener noreferrer"&gt;https://github.com/ibrahimkobeissy/ai-second-brain-template&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you build on it or break it, I'd love to hear how.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>career</category>
    </item>
  </channel>
</rss>
