Skill Rating Tool – Score & Optimize Your SKILL.md Easily

Submit a SKILL.md URL

Introduction

This article is for people who have already written a Skill or are about to write one.

If you have already built a Skill and tested it in a real environment, you have probably run into questions like these:

  • I thought I had written everything clearly. Why does it still not behave the way I expected?

  • I thought the trigger conditions were already clear. Why is the Agent not calling the Skill at all?

  • Why is the Skill output inconsistent from one run to another?

  • Why do some other Skills look much simpler than mine, yet still perform just as well, or even better?

The problem is often not a lack of effort. The deeper issue is that your definition of a high-quality Skill may be off from the start.

These are 3 of the most common misconceptions Skill authors run into early on.

Misconception 1: If it feels clear to you, it must be clear enough

At its core, a Skill is a written set of best practices, and sometimes a procedural one, for solving a task. When we write one, we usually understand the context very well ourselves.

In our heads, we know the background, the user, the real goal, what is feasible in practice, and what is not.

What we think we need is simply an executable plan. As a result, when we write SKILL.md, we often focus mostly on “how to do it.”

But AI models are not human. They do not automatically fill in missing context, and they do not understand the constraints you have in mind for a specific real-world situation.

That is why many Skills start showing problems as soon as they go through their first serious test.

For example:

  • the trigger condition is too broad, so the model invokes the Skill when it should not, or fails to invoke it when it should
  • the steps exist, but there is no clear execution order or branching logic
  • the Skill says what the Agent should do, but does not give enough structure to the output
  • the output requirements look complete, but there is no real acceptance standard

These issues may not be obvious when you read the document yourself. But once the Skill enters real use, they directly affect reliability.

Takeaway: a strong SKILL.md needs a clear and stable structure, one that leaves the model as little room for guesswork as possible.

Misconception 2: The longer the Skill, the better it will perform

Another common misconception is that a longer document must mean a better Skill.

Not necessarily.

When I first started writing Skills, I liked putting a lot of domain background into SKILL.md: what certain metrics meant, how specific terms should be understood, even what counted as best practice in a given field.

Then I came across Claude’s article, Skill authoring best practices.

The first principle is simple: keep it concise. For a lot of general knowledge, you should assume the model already knows it. You do not need to repeat all of that material inside SKILL.md.

Writing down information the model already knows, or may even know better than a human writer, is often wasteful. Every time the Skill is loaded, that extra material takes up context window space and increases token cost.

Also, when a SKILL.md gets very long, it is often because the task itself has many branches and edge cases, so the author tries to pack every possibility into one document. In most cases, the better approach is to split it up.

That means keeping the main problem-solving framework in SKILL.md, while moving more complex branch logic into separate reference files that can be loaded when needed.

So with SKILL.md, longer is not automatically better. But it should not be vague or under-specified either. Writing a clear framework first, then moving implementation details into references, is a habit you build over time.

Misconception 3: If the Skill can run, it must already be fine

Many Skill authors make a very natural assumption: I have run it successfully a few times, so it must already be in good shape.

But “it runs” and “it is good” are two very different things.

Take the previous misconception as one example. If another author’s SKILL.md solves the same task in a more concise way and uses fewer tokens, it may already run more efficiently and cost less than yours.

Here is another example from my own work. I once wrote a Skill to analyze resumes. It was designed to extract structured information from candidate resumes and help me judge how well someone matched a role.

I got the Skill working fairly quickly. But the real problem showed up just as fast: the decision framework, evaluation criteria, and output template were not consistent from one run to the next.

That is the difference between “it can complete the task” and “it can deliver stable results.” The first is merely usable. The second is much closer to a reusable, maintainable level of quality.

Even though SKILL.md is just a text file, it is really a decision framework that shapes how an Agent works. If you want a Skill to behave reliably across different scenarios, you need to treat it more like software:

  • constrain the output so the quality stays more consistent
  • test and refine the Skill across different scenarios before publishing it

My recommendation: give your Skill one professional checkup before you publish it

If a tool could review a Skill before you publish it, show you what this SKILL.md already does well, and point out what still needs improvement, would that save you time and rework later?

That is the reason I built bestskills.dev.

I recently released a new feature there: a full quality audit for a SKILL.md, based on 63 review checks, that returns a structured report.

Those 63 checks span 4 broad areas:

  • Standards: whether the frontmatter and structure follow the expected rules, which directly affects whether a Skill can even be loaded properly. This is something many authors overlook.
  • Effectiveness: whether the Skill can actually achieve the author’s intended result and produce high-quality outputs
  • Safety: whether the Skill introduces risky operations and how serious those risks are
  • Conciseness: whether the SKILL.md stays compact enough to avoid wasting context window space and driving up cost

What I want to emphasize is this: writing a Skill always involves personal judgment, but evaluating the quality of a Skill can still be grounded in a set of relatively objective standards.

  • Standards: 24 checks
  • Effectiveness: 21 checks
  • Safety: 10 checks
  • Conciseness: 8 checks

In the end, each SKILL.md gets a score out of 100, and each range comes with a recommendation:

  • 90 – 100: Excellent, ready to use or publish
  • 70 – 89: Good, with limited but meaningful room for improvement
  • 50 – 69: Fair, important revisions recommended
  • Below 50: Not ready, major rewriting needed

More important than the score

The score is an objective number. But what matters more is what you learn from the review report.

  • What problem-solving ideas can you learn from someone else’s SKILL.md audit report?
  • If you were writing that same SKILL.md, how could you make it better?

A strong SKILL.md feels a lot like well-structured code: clear, readable, and satisfying to work through. A weak SKILL.md usually does the opposite and leaves you guessing.

If you have written a Skill, try it once

If you have recently finished a Skill, or are about to make one public, I strongly recommend doing a quick quality check first.

Paste your SKILL.md URL into bestskills.dev.

Submit a SKILL.md URL

Click the checkup button, wait a moment, and you will get a scored report with issue-level feedback.

Skill checkup results

The score itself is useful, but the bigger benefit is seeing where your Skill is strong, where it is weak, and what is worth improving next.

Before you publish it, run one checkup first. It may save you a lot of unnecessary rework.

One last thing: this feature is free to use.

If you have suggestions or complaints about this feature, feel free to email me at [email protected].

Otonom Tehdit Avcılığı

Dijital dünyanın sinsi gölgelerini takip eden yapay zeka muhafızları ile siber savunmada yeni bir çağa tanıklık edin.

Bugün siber güvenlik dünyası, insan hızını fersah fersah aşan bir hızla dönüyor. Artık karşımızda sadece ekrana bakıp kod yazan bireysel saldırganlar değil; devlet destekli siber ordular, kendi kendine öğrenebilen bot ağları ve kurumsal altyapıları dakikalar içinde felç edebilecek kapasitede profesyonel şebekeler var. Geleneksel güvenlik duvarları artık paslanmış birer kalkan gibi kalırken, siber dünyanın yeni “atom bombası” olarak görülen Otonom Tehdit Avcılığı sahneye çıkıyor. Bu teknoloji, sadece bir koruma kalkanı değil; ağınızın içinde saklanan, kılık değiştiren ve doğru anı bekleyen saldırganları tespit eden akıllı bir bağışıklık sistemidir.

  1. Tehdit Avcılığı Nedir? Kapıları Kilitlemekten Ötesi
    Eskiden siber güvenlik, basit bir kapı kilidi gibiydi. Birisi kapıyı zorladığında alarm çalar, güvenlik ekibi olay yerine giderdi. Ancak bugünün siber korsanları kapıyı zorlamıyor. Onlar evin anahtarını kopyalıyor, bacadan sızıyor ya da yasal bir tesisatçı kılığında içeri girip aylarca bodrum katında kimse fark etmeden yaşıyorlar. Onlar artık verilerinizi bir anda çalmıyor; her gün sadece birkaç megabaytlık veriyi sessizce sızdırarak dikkati üzerlerine çekmiyorlar.

Tehdit Avcılığı (Threat Hunting), “İçeride kesinlikle birisi saklanıyor” varsayımıyla her gün dolapların arkasını, yatakların altını ve havalandırma kanallarını kontrol etme sanatıdır. Bunu Otonom yani “kendi kendine karar veren” yapay zeka sistemleri yaptığında, savunma mekanizmanız saniyede milyonlarca farklı olasılığı tarayan bir süper dedektife dönüşür. Bu sistemler, sadece alarmın çalmasını beklemez; o alarmın hiç çalmamasını sağlayacak olan “gizli niyetleri” keşfeder.

Av Sahasındaki Gizli Tehlikeler
Modern tehdit avcıları sadece bilinen virüslerin peşinde değildir. Onlar, saldırganların geride bıraktığı mikro-izleri takip ederler. Örneğin, bir kullanıcının her gün 09:00’da oturum açarken aniden 08:59:59’da oturum açması, otonom bir sistem için bir “anomali” ipucudur. Bu ipucu; sistemin derin öğrenme algoritmalarını tetikler ve zincirleme bir analiz süreci başlatır.

APT (Gelişmiş Sürekli Tehditler): Devlet destekli profesyonel ekiplerin aylarca süren sinsi operasyonları.
Dosyasız Saldırılar (Fileless): Hiçbir dosya indirmeden, sadece bilgisayarın belleğinde (RAM) çalışan görünmez gölgeler.
Lateral Movement (Yanal Hareket): Sisteme giren saldırganın bir bilgisayardan diğerine sıçrayarak ana sunucuya ulaşma çabası.

  1. Yapay Zeka Neden Bu İşin Kalbi? Hız ve Ölçek Meselesi
    Şu an dünyada her saniye milyarlarca dijital işlem gerçekleşiyor. Bir insan analistin bu veri okyanusu içinde sinsi bir saldırganı bulmaya çalışması, okyanusun dibindeki belirli bir kum tanesini aramaya benzer; üstelik okyanus her saniye genişlerken. Yapay zeka burada sadece bir “araç” değil, sistemin vazgeçilmez “beyni” konumundadır. Otonom bir avcı, insan beyninin milyonlarca yılda evrimleşen sezgiselliğini, bilgisayar işlemcilerinin ışık hızındaki işlem kapasitesiyle harmanlar.

Yapay zeka sadece hızlı değildir, aynı zamanda bağlamsal zekaya sahiptir. Bir saldırgan sistemde kılık değiştirse, ismini değiştirse ya da daha önce hiç görülmemiş bir teknik kullansa bile, otonom sistemler onun “davranışsal karakterini” asla unutmaz. Bu sistemler “denetimsiz öğrenme” (unsupervised learning) yöntemiyle ağınızın normal karakterini o kadar iyi öğrenir ki, en ufak bir ritim bozukluğunu saniyeler içinde sezer.

Kıyaslamalı Analiz: İnsan Gücü vs. Otonom Güç
Savunma Özelliği Geleneksel (İnsan Analist) Gelecek (Otonom AI Avcısı)
Sürekli Dikkat Günde 8-10 saat (Yorulabilir) 365 gün / 24 saat (Sıfır Yorgunluk)
Veri İşleme Kapasitesi Dakikada 10-20 log kaydı Saniyede 10.000.000+ log kaydı
Tanımlanmamış Tehditler Sadece bildiği kurallara bakar Sapmaları ve gizli niyetleri sezer
Müdahale Hızı Dakikalar veya Saatler sürer Milisaniyeler içinde tepki verir
Gelişim Eğitim ve tecrübe ile gelişir Her saldırıdan anında ders çıkarır

  1. Operasyonel Süreç: Bir Tehdit Nasıl Avlanır?
    Otonom tehdit avcılığı süreci, kendi kendini besleyen ve sürekli olarak siber bağışıklığını artıran kusursuz bir döngüdür. Bu süreci, dijital bir Sherlock Holmes’un vaka çözme aşamalarına benzetebiliriz. Sistem sadece “bulmak” için değil, “anlamak” ve “etkisiz hale getirmek” için tasarlanmıştır.

A. “Normallik” Fotoğrafını Çekmek (Baz Çizgisi)
Sistem önce ağınızdaki yaşamın mikroskobik bir fotoğrafını çeker. Buna Baz Çizgisi denir. “Ahmet Bey genellikle hangi dosyaları açar? Sunucumuz hangi saatlerde hangi veritabanıyla konuşur? Şirket trafiği hangi ülkelere akar?” Yapay zeka bu alışkanlıkları hafızasına kazır ve sizin ağınızın “parmak izini” çıkarır. Artık her sapma, sistem için şüpheli bir harekettir.

B. Hipotez Kurma ve Dijital İz Sürme
Diyelim ki sistem bir gece saat 03:00’te bir bilgisayarın uyandığını ve gizli mühendislik dosyalarına erişmeye çalıştığını fark etti. Otonom avcı hemen bir hipotez kurar: “Bu ya Ahmet Bey değil ya da Ahmet Bey’in bilgisayarı ele geçirildi.” Sistem, bu şüpheyi kanıtlamak için klavye vuruş hızını, mouse hareketlerini ve kullanılan komutları milisaniyeler içinde kontrol eder.

C. Otonom Müdahale ve Temizlik
İşte otonom sistemin en devrimsel yanı burasıdır. Saldırgan daha verileri şifrelemeye başlamadan ya da tek bir megabaytı sızdırmadan sistem müdahale eder. Şüpheli cihazın internetini keser, hesabı dondurur ve saldırganı sahte verilerle dolu bir “labirente” (Honeypot) hapsederek onun tüm taktiklerini videoya kaydeder gibi kayda alır. Tüm bunlar yaşanırken siber güvenlik ekibinin önüne çoktan “Saldırı engellendi, işte tüm detaylar” raporu düşmüştür.

  1. Siber Öldürme Zinciri (Kill Chain) ve Av Taktikleri
    Bir saldırganın hedefine ulaşması için geçmesi gereken yedi temel basamak vardır. Biz buna Siber Öldürme Zinciri (Kill Chain) diyoruz. Otonom avcılar, hırsızı sadece kasanın başında yakalamazlar; hırsızı kasanın yerini sorarken ya da bahçe kapısını kurcalarken durdururlar. Zincirin her halkasında pusu kuran akıllı algoritmalar sayesinde saldırganın hata payı sıfıra iner.

Yanal Hareketin Engellenmesi: Saldırgan sisteme sızdığında (örneğin bir oltalama e-postasıyla), amacı hemen ana veritabanına ulaşmaktır. Bunun için bir bilgisayardan diğerine zıplamaya başlar. Otonom avcılar, ağ üzerindeki “doğu-batı trafiğini” (cihazlar arası iletişim) izleyerek, normalde birbirine günaydın bile demeyen iki sunucunun arasındaki gizli iletişimi saniyeler içinde saptar ve aradaki bağı koparır.

Komuta ve Kontrol (C2) Kesintisi: Sızan bir virüs, dışarıdaki saldırgandan emir almak için sürekli küçük “sinyaller” (beaconing) gönderir. Otonom avcı, ağ gürültüsü içindeki bu sinsi radyo yayınlarını saptar ve hırsızın dışarıdaki “beyniyle” olan tüm bağını keserek hırsızı sistemin içinde kör ve sağır bırakır.

  1. Vizyon 2030: Kendi Kendini Onaran (Self-Healing) Altyapılar
    Otonom tehdit avcılığının evrileceği son nokta, siber güvenliğin gerçek bir “İnsan Bağışıklık Sistemi” gibi çalışmasıdır. Geleceğin dijital dünyasında sistemler sadece savunma yapmayacak; tıpkı bir yaranın kabuk bağlayıp iyileşmesi gibi, siber saldırıların verdiği zararları otonom olarak onaracaklar. Biz buna Siber Dayanıklılık (Cyber Resilience) aşaması diyoruz.

2030’lu yıllarda, yapay zeka sadece bir saldırıyı durdurmakla kalmayacak; saldırının sömürdüğü yazılım açığını (vulnerability) milisaniyeler içinde teşhis edip, o açık için otonom olarak bir “yama” (patch) üretecek ve tüm sisteme saniyeler içinde uygulayacak. İnsan müdahalesine gerek kalmadan gerçekleşen bu “Kendi Kendini Onarma” süreci, siber savaşın artık kodların kodlara karşı verildiği bir düzleme taşınması demektir.

“Gelecekte siber savaşları kazananlar en çok veriye sahip olanlar değil, o veriyi en hızlı şekilde ‘avlanma’ ve ‘iyileşme’ için kullanabilen otonom sistemlere sahip olanlar olacaktır.”
Sık Sorulan Sorular ve Sektörel Analiz

  1. Otonom tehdit avcılığı personel ihtiyacını ortadan kaldırır mı?
    Kesinlikle hayır. Yapay zeka yorucu, tekrarlayan ve devasa veri tarama işini (hamallığı) üstlenir. Bu durum, siber güvenlik uzmanlarının “operatör” olmaktan çıkıp, “stratejist” ve “av komutanı” haline gelmesini sağlar. İnsan zekası, AI tarafından filtrelenen en kritik kararları vermek için her zaman merkezde kalacaktır.

  2. Yapay zeka sistemleri kandırılabilir mi?
    Saldırganlar da yapay zeka kullanarak bu sistemleri kandırmaya çalışıyor (Adversarial AI). Ancak otonom avcılar sürekli bir öğrenme döngüsündedir. Bir kez yapılan yanlış bir bloklama, sistemin hafızasına kazınır ve algoritma kendini anında günceller. Bu, bitmeyen ve makinelerin sürekli evrimleştiği bir teknoloji yarışıdır.

  3. Küçük işletmeler bu teknolojiden faydalanabilir mi?
    Eskiden bu teknolojiler sadece dev bankalar ve ordu altyapıları içindi. Ancak bugün, bulut tabanlı (SECaaS) otonom çözümler sayesinde, verisi olan her işletme uygun maliyetlerle bu koruma gücüne sahip olabilir. Unutmayın; siber korsanlar hedef seçerken şirketinizin büyüklüğüne değil, verinizin değerine ve savunmanızın zayıflığına bakar.

bu yazı ilk olarak https://www.nesilteknoloji.com/ sitesinde yayınlanmıştır.

AI Native DevCon’26: The London conference for developers building with AI

sponsors

The bottleneck moved from writing code to governing it.

The promise was 2× throughput. The reality is 2× the review queue, 2× the security exposure, and a CI signal you can no longer trust. AI Native DevCon 2026 is for the engineering leaders who have to figure out how to ship anyway.

AI Native DevCon 2026 lands at The Brewery in London on June 1 and 2, with a hybrid track for remote. This is the conference for VPs of engineering, CTOs, platform owners, security leads, and senior engineers running agents in production, or about to. 500+ builders. Four tracks.

sponsors

Guy Podjarny, founder of Tessl, organizer of AI Native DevCon, and previously of Snyk, frames the 2026 question:

“If 2025 was the year coding agents started showing real promise, 2026 is the year we figure out how they hold up in production. The challenge is no longer getting an agent to work, it is getting it to work consistently across teams, codebases, and environments without constant human correction.”

The schedule is organized around four tracks: context engineering (building with agents), agent orchestration (verification when CI is no longer enough), organizational enablement (coordination at agent throughput), and agent enablement (security and governance). Each maps to a problem most teams are already hitting.

The agenda is built around the problems they actually have right now.

1. “We do not know how to build with agents yet.”

How the engineer’s role is changing, and what products designed for humans need to do once agents start using them. By 2026, that question lands on every platform team. This is the context engineering track.

  • Ryan Lopopolo (OpenAI), Harness Engineering. Concrete patterns for systems where humans set direction and agents execute, including the review and approval surfaces that keep it safe at scale.
  • Dana Lawson (Netlify, CTO), Built for Humans. Now Agents Are Here. What changes in a developer platform when half the users are non-human, and the API and UX decisions Netlify made in response.
  • Ian Thomas (Meta), AI Native Engineering. How a large engineering org is restructuring workflows around agent-assisted development.
  • Steve Ruiz (tldraw), Agents on the canvas. Interaction patterns for visual agents, with shipping examples you can copy.

2. “We can generate code. We cannot verify it.”

CI is no longer evidence of correctness. Two years of agent-generated code has proved it. The agent orchestration track is about what to put in its place.

  • Justin Cormack (ex-Docker CTO), When Tests Lie. Runtime signals that flag agent-introduced drift before it reaches users.
  • Dave Farley (Founder & CEO of Continuous Delivery Ltd. – 250k on Youtube), Vibe Coding, really? The ideas that may actually survive the AI programming revolution, beyond hype, demos, and generated boilerplate.
  • Chad Fowler, Regenerative Software. An architectural model where components are regenerated rather than patched, and what verification looks like when code is short-lived by design.

3. “AI writes code faster than teams can coordinate.”

Two years into coding-agent adoption, throughput is up roughly 2×. Coordination cost scaled with it. The organizational enablement track covers review, ownership, and team structure.

guypo

  • Guy Podjarny (Tessl), Skills are the new Code (keynote). The case for treating skills as proper software: versioned, tested, owned, reviewed. With the Tessl Registry now holding 2,000+ evaluated skills, the talk covers what that means for repo structure and review process.
  • Birgitta Böckeler (Thoughtworks), State of Play: AI Coding Assistants (keynote). Two years of field data on which adoption patterns work and which create future technical debt.
  • Patrick Debois, The Rise of Agent Enablement. Agent Enablement is the function that owns reliable agent adoption inside an engineering org. It defines standards for skills, evals, and workflows, and sits next to DevOps and Platform Engineering. Patrick’s session covers who owns it, what they do, and how teams formalize it.

4. “Your AI is a new attack surface.”

Vulnerability classes that did not exist 18 months ago, and the controls most teams have not put in place yet. This is the agent enablement track from a security and governance angle.

  • Liran Tal (Snyk), Your AI Agent Installed Malware Because a SKILL.md Told It To. Live demo of prompt-injection via SKILL.md manifests, with the threat model and mitigations.
  • Joseph Katsioloudes (GitHub), Code Security Reinvented. How SAST, secret scanning, and review need to change for AI-generated code.
  • Jack Wotherspoon (Google), Humans vs. Slop. New rules for open source maintainers when an unknown share of contributors are agents.

Why engineering leaders should attend

Five things your team brings back to Monday:

  1. A verification model that does not assume CI catches the regression
  2. Threat models for prompt-injection and SKILL.md attacks, with mitigations
  3. Team structures and review workflows that scale with agent throughput
  4. A working definition of Agent Enablement as a discipline, including ownership and scope
  5. A model for evaluating skills before they go org-wide, with review patterns and KPIs

crowd

Hosts and the wider lineup

Hosted by Sam Hepburn and Patrick Debois. Day-one keynote from Lieven Scheire on AI from outside the engineering bubble. The wider roster covers agent observability, MCP transports, runtime intelligence, brownfield adoption, and team-level adoption metrics, with practitioners from Anthropic, OpenAI, NVIDIA, Adobe, Hugging Face, Mozilla.ai, Cisco, Nearform, GitHub, and much more.

speakers

Full speaker list and abstracts: tessl.io/devcon.

TL;DR

See you at the event!

Manual Tasks vs. AI Agents: The Real Cost in 2026

Why This Comparison Matters Right Now

In 2026, the gap between founders who automated their repetitive operations and those who did not is no longer theoretical. It shows up in response times, in pipeline velocity, in who gets the deal when two vendors are equally qualified. McKinsey’s research on the future of work found that organizations are increasingly automating routine tasks through AI to free up employees for higher-value work, with adoption accelerating across customer service and operational functions (McKinsey, Future of Work). For a solopreneur or a five-person team, that finding translates directly: the person answering DMs manually at 11 PM is not winning on effort. They are losing on architecture.

The conversation around AI productivity tools tends to focus on how to build or configure the technology. That framing misses the actual decision. The real question is not “how do I set up an AI agent?” It is “what does it cost me, concretely, to keep doing this myself?” This article compares those two paths without pretending one is obviously correct for every situation. There are real tradeoffs on both sides, and the honest answer depends on what kind of business you are actually building.

Approach A: Handling Repetitive Tasks Manually

Manual task management has one genuine advantage: full control. When you personally respond to every inquiry, write every follow-up, and handle every customer service thread, you know exactly what was said and when. Nothing falls through the cracks because you are the system.

The cost of that control compounds quietly. Every hour spent on a follow-up sequence is an hour not spent on a client deliverable, a product improvement, or a sales conversation that requires actual judgment. The work is not hard. That is the problem. It is easy enough to do yourself, which means it never gets delegated, and it never stops consuming time.

Burnout in this model is not dramatic. It accumulates. Founders who manage their own DMs, their own proposal follow-ups, and their own onboarding sequences describe the same pattern: the tasks feel manageable until they suddenly do not. The business has grown, the volume has increased, and the founder is now working more hours than they did when they had a day job. That is the definition of scaling a job, not building a business.

There is also an opportunity cost that does not appear on any spreadsheet. When a prospect sends an inquiry at 9 PM on a Tuesday and you respond at 9 AM Wednesday, you have introduced a twelve-hour gap. A competitor using an n8n-based automation pipeline responds in under two minutes. The prospect may not consciously notice. But the one who responded first is already in a conversation, and you are starting from behind.

Approach B: Delegating to AI Agents

AI agents, in the context of small business operations, are not a single tool. They are a category of automated pipelines, typically built on orchestration platforms like n8n or similar, that handle defined tasks without human intervention. A well-built pipeline monitors an inbox, detects a trigger condition, executes a sequence of steps, and logs the outcome. No one has to be awake.

The practical scope of what these systems handle in 2026 is wider than most founders realize. Customer service triage, lead qualification, proposal follow-up sequences, appointment reminders, CRM updates after calls: all of these are tasks that follow predictable logic trees. If the condition is X, do Y. That structure is exactly what automation handles well.

We learned something relevant to this when building the Meeting Prep blueprint. It accepts calendar events from three different sources: direct webhook calls, Google Calendar API responses, and internal test fixtures. Each source uses different field names for the same data. Webhooks send event_id and event_title; the Calendar API sends id and summary; test fixtures send either depending on who wrote them. Our first version used a bypass flag to detect the format. It failed immediately because test data came through without the flag set. We rebuilt the input parser to detect format by checking for distinguishing fields: if event_id exists, it is webhook format; if summary exists, it is Calendar format. No flags, no assumptions. That kind of specificity is what separates a pipeline that runs reliably from one that breaks on the third use case.

The limitation worth naming honestly: AI agents do not handle ambiguity well. A prospect who sends a message that does not fit any defined pattern will either get a generic response or get routed to a human. If your business depends on nuanced, relationship-driven communication at the first touchpoint, a fully automated front end will occasionally produce responses that feel off. The fix is not to abandon automation. It is to design the handoff point deliberately: automate the triage, flag the edge cases, and let a human handle the ones that require judgment.

There is also a setup cost. Building a pipeline that actually works, handles multiple input formats, and fails gracefully when something unexpected happens takes real time upfront. Founders who treat automation as a one-afternoon project tend to end up with brittle systems that create new problems. The ones who treat it as infrastructure investment, with proper testing and documented logic, get systems that run for months without intervention. If you want to see what that looks like in practice for proposal follow-up specifically, the Proposal Follow-Up Automator is a pre-built pipeline that handles the full sequence, and the setup guide walks through the configuration decisions in detail.

When to Use Which Approach

Manual handling makes sense in two specific situations. First, when you are early enough that volume is not yet a problem. If you receive five inquiries a week, the overhead of building and maintaining an automation pipeline may genuinely exceed the time it saves. Second, when the task requires contextual judgment that no defined logic tree can capture. Negotiating contract terms, handling a client who is upset about something specific, deciding whether a prospect is worth pursuing: these are not automation candidates.

AI agents make sense when three conditions are true simultaneously. The task follows a repeatable pattern. The volume is high enough that manual handling creates a measurable time drain. And the cost of an occasional imperfect automated response is lower than the cost of the founder’s time. Proposal follow-ups meet all three criteria for most businesses. So do appointment reminders, lead qualification sequences, and first-response customer service messages.

The mindset shift that matters here is not “AI versus human.” It is “which tasks require my judgment, and which tasks just require execution?” Most founders, if they audit their week honestly, find that a significant portion of their time goes to execution tasks that follow the same logic every time. Those are the candidates. The judgment-heavy work, the creative work, the relationship work: that stays with you.

One practical test: if you could write a decision tree for a task on a whiteboard in under ten minutes, it is automatable. If you cannot, it probably is not. Apply that filter to your task list and the candidates become obvious quickly. For a broader look at how these pipelines connect into larger operational systems, the comparison of AI tools versus agentic systems covers the architectural distinction in more depth.

The competitive reality in 2026 is that the tools exist, the infrastructure is accessible without custom development, and the early adopters have already built the systems. Waiting is not a neutral position. It is a choice to keep doing manually what your competitors have already automated. That choice has a cost, and it compounds the same way the burnout does: slowly, then all at once.

What We’d Do Differently

Audit before you build. Before touching any automation tooling, spend one week logging every task you do that takes under thirty minutes and follows the same steps each time. Most founders underestimate this list by half. The audit changes which pipelines you prioritize, and it gives you a baseline to measure against after you deploy.

Design the handoff before you design the automation. The failure mode we see most often is not a broken pipeline. It is a pipeline with no exit ramp for edge cases. Before building any customer-facing automation, define exactly what condition triggers a human review. Build that routing logic first. The rest of the pipeline is easier once you know where it ends.

Start with follow-up, not first contact. If we were advising a founder starting from zero today, we would tell them to automate follow-up sequences before anything else. First contact often benefits from a human touch. Follow-up, by contrast, is pure execution: send the right message at the right interval until you get a response or exhaust the sequence. That is exactly what automation does well, and it is where the time savings are most immediate.

Enriching Free Trial Signups: The PLG Data Stack for Turning Inbound Users Into Qualified Pipeline

Of your last 100 signups, I’d bet 30–40 came in as @gmail.com. Maybe another 10 as @yahoo.com, @hotmail.com, @icloud.com. Your Segment event fired, your CRM got a new contact record with a name and a city, and then nothing. No company. No title. No way to know if this person runs engineering at a 300-person Series B or is a student experimenting on a weekend.

This is the PLG enrichment problem that nobody writes about. Every piece of B2B enrichment content assumes you start from a company domain — [email protected] — and work backwards to firmographics. That model breaks the moment your product grows virally and people sign up with whatever email they happen to check.

I’ve spent the last six months wiring enrichment pipelines for PLG SaaS companies ranging from 2,000 to 80,000 monthly free users. Here’s what actually works.

Why standard enrichment breaks for PLG inbound

The typical enrichment stack — Clearbit, Apollo, PDL in waterfall — is built around the assumption that your email domain is your company proxy. When that assumption holds, you get 80–90% match rates and clean firmographic data flowing into your CRM within seconds.

Personal email domains destroy this. Clearbit‘s Enrichment API returns a null company when it hits gmail.com. Apollo routes personal domains straight to a consumer bucket and skips B2B fields entirely. Even PDL‘s /person/enrich endpoint — the most permissive of the major providers — gives you around 32% hit rate on Gmail addresses versus 74% on corporate domains. I measured this across 6,200 signups for a developer tooling company last quarter.

The enrichment vendors aren’t wrong to do this. Their products are optimized for outbound SDR workflows. They designed around sales reps who start from a target account list, not inbound products where users self-select with whatever email they happen to use.

The three signals that define a PQL when you have no company email

Before throwing API calls at the problem, get clear on what you’re actually scoring. A PQL in a PLG context is the intersection of three things:

Identity fit — Is this person likely to be a B2B buyer in your ICP? Title, seniority, company size, industry.

Engagement depth — Have they hit your activation threshold? Not just “logged in,” but reached the moment your product delivered value — uploaded a file, ran a query, invited a teammate, connected an integration.

Expansion signal — Are they bumping against limits? Viewing upgrade prompts, hitting API rate limits, inviting more users than their plan allows.

When someone signs up with a personal email, you still have their name, behavioral data from Mixpanel or Amplitude, and whatever they self-reported in onboarding. That’s your starting point before enrichment APIs enter the picture.

Which APIs actually resolve personal emails to company identity

There are three approaches that work, each with real tradeoffs.

Approach 1: Graph-based reverse lookup

Datagma is the tool I keep coming back to for this. Their /enrich endpoint accepts a personal email, cross-references it against social graph data — primarily LinkedIn activity, public profiles, and email correlation patterns — and returns a company match with title, seniority, and LinkedIn URL. In my testing across 500 Gmail signups from a fintech tool, Datagma resolved 41% to a confident company match, nearly double what PDL returned on the same set.

PDL still earns a place in the stack because its depth on resolved matches is better — when PDL knows the answer, the data is richer. I run Datagma first, then fall through to PDL for the misses.

Approach 2: Name + self-reported data triangulation

If your onboarding flow asks for a job title and company name (even optionally), you can join that self-reported data against enrichment APIs to validate and expand it. Clay is designed for exactly this — you set up a table that takes {name, company_name} and waterfalls across 10+ sources to build the firmographic profile. The limitation: you’re depending on users self-reporting accurately, which happens less than you’d expect for optional fields.

Approach 3: LinkedIn URL matching

If you can get a LinkedIn profile URL — through OAuth login, a “connect LinkedIn” optional step in onboarding, or by prompting users to enter it — you bypass the personal email problem entirely. RocketReach and PDL both accept LinkedIn URLs directly and return full firmographic profiles at 85%+ match rates.

Some teams use Phantombuster to automate LinkedIn outreach to unresolved users. I don’t recommend this — it violates LinkedIn’s ToS and creates legal exposure faster than it creates pipeline.

Comparing enrichment APIs on personal email resolution

Provider Gmail hit rate Fields returned Avg latency Price per call
Datagma ~41% Name, title, company, LinkedIn, seniority 800ms ~$0.04
PDL ~32% 100+ fields on match 400ms $0.05–$0.10
Clearbit ~8% Deep firmographic on match 200ms $0.08
Clay waterfall ~55%* Composite, varies by source 3–8s $0.15–$0.40
RocketReach ~18% Name, title, company, email 600ms $0.06

*Clay‘s higher rate comes from combining multiple providers — you’re paying for 2–3 API calls per resolution.

Hit rates measured across 500+ Gmail signups per provider. Numbers will vary based on your user base demographics.

Building the scoring formula

Once enrichment comes back — or a best-effort partial match — you need a score. Here’s the model I use for most PLG B2B tools:

Identity score (0–40 points)

  • Company size 50–500 employees: +20
  • Company size 500+: +15 (larger isn’t always better — enterprise sales cycles can kill PLG deals)
  • Title matches your buyer persona (e.g., “engineer”, “developer” for dev tools; “head of”, “director”, “VP” for business software): +10
  • Industry match against ICP list: +10
  • Enrichment confidence below 60%: −10

Engagement score (0–40 points)

  • Activation event fired: +25
  • Invited ≥1 teammate: +10
  • Used product on 3+ distinct days in week 1: +5

Expansion signal (0–20 points)

  • Hit a hard limit at least once: +10
  • Viewed pricing page: +5
  • Started upgrade flow (even if abandoned): +5

Total ≥ 60: route to sales. Total 35–59: high-touch nurture. Total < 35: self-serve nurture only.

Calibrate these weights against your own historical conversion data after the first 90 days of running the pipeline. The weights above are starting points, not gospel.

The webhook trigger that hands off to sales

The cleanest implementation: Segment as the event bus, a serverless function (Vercel or AWS Lambda) doing enrichment and scoring, then pushing a qualified lead into HubSpot or Salesforce with the score attached.

The trigger event is whatever you define as your activation moment — not “signed up,” but the first event that proves the user got value. For a data tool, it might be query_executed. For a collaboration product, first_team_invite. For a file tool, first_export.

Segment event → Lambda
  → Datagma enrich (personal email)
  → PDL fallback if no match
  → Score calculation
  → If score ≥ 60: POST to CRM, set owner = SDR queue
  → If score 35–59: trigger nurture sequence

The latency on this full chain runs 1.5–3 seconds end-to-end, fast enough to fire before the user finishes their onboarding flow. Some teams surface a “your account manager will reach out” message in-app immediately after the score threshold is hit — which works well when the user’s in the product and receptive.

Clay can replace the Lambda and API chain if you’d rather avoid custom code. You set up a Clay table as the enrichment layer, trigger it from Segment via webhook, and it handles the waterfall and CRM push without writing a function. The tradeoff: less control over scoring logic and higher cost per enriched contact.

What I actually use

For teams just starting out with PLG enrichment: Datagma as the primary personal email resolver, PDL as fallback, Segment as the event bus, Mixpanel for behavioral event storage (the SQL explorer makes it easy to export activation cohorts for offline scoring analysis without touching production code), and whatever CRM you already have.

Don’t use Clearbit as your first call on personal emails — the hit rate doesn’t justify the cost at that step, though it’s excellent for work email enrichment downstream once you’ve resolved a user’s company identity.

If you’re doing more than 5,000 enrichment calls per month, Clay starts to make sense as a no-code orchestration layer, especially if your ops team prefers spreadsheet-style tooling to writing Lambda functions. The per-credit cost is higher, but you save on engineering time.

Skip ZoomInfo for this use case. It’s enterprise-contract priced, built for outbound prospecting from company lists, and adds zero value for personal email resolution. Same story with Lusha — excellent for Chrome extension-style lookups starting from a LinkedIn profile, wrong tool for an automated inbound pipeline.

The honest ceiling: even with the best waterfall stack, you’ll resolve 45–55% of personal email signups to confident company matches. The other half you’re scoring on behavioral data alone. That’s not a tooling problem — it’s a data reality. Design your scoring model to handle the no-enrichment case gracefully rather than assuming every user will resolve cleanly.

A Better CLAUDE.md Template for SaaS Founders

Your AI coding agent needs product reality, not only repo commands. Here is a practical CLAUDE.md template for SaaS founders using Claude Code.

Most CLAUDE.md files start with the repo.

They explain:

- Use pnpm.
- Run tests before committing.
- Components live in /components.
- API routes live in /app/api.
- Follow TypeScript strict mode.

That is useful.

It is also incomplete.

For a SaaS founder, the biggest risk is not that Claude Code forgets the test command. The bigger risk is that the agent builds the wrong product surface because the product context is missing.

A coding agent can follow repo rules and still create:

  • dashboards before activation works
  • team roles before the solo workflow is validated
  • integrations before retention is proven
  • pricing pages before willingness to pay is understood
  • admin panels before the first customer exists
  • generic SaaS bloat around a weak wedge

The issue is not coding quality.
The issue is missing product memory.

Claude Code’s memory system is designed to keep project context available across sessions through files such as CLAUDE.md. Anthropic’s docs describe this as project memory, and Claude Code also supports hooks, skills, subagents, and other extension points for more advanced workflows. (Claude Code)

The founder mistake is treating memory as only engineering instructions.

A better CLAUDE.md starts with product reality.

The mental model

Think of CLAUDE.md as two files in one:

Product Memory
  +
Engineering Memory

Engineering memory tells Claude how the repo works.

Product memory tells Claude what the product is trying to prove.

Both matter.

Without engineering memory, the agent may break conventions.
Without product memory, the agent may build the wrong thing correctly.

The structure I recommend

Use this order:

1. Product Reality
2. Current Bet
3. Must Build / Must Not Build
4. Evidence Goal
5. Engineering Rules
6. Safety Boundaries
7. Required Workflow

A founder-friendly CLAUDE.md should be short enough to be read often and specific enough to shape behavior.

Template: product-aware CLAUDE.md

# CLAUDE.md

## 1. Product Reality

We are building [PRODUCT] for [SPECIFIC CUSTOMER] because [PAIN / JOB] is frequent, costly, or urgent enough to justify switching or paying.

Current stage:
- [idea / prototype / MVP / post-MVP / growth]

Reality envelope:
- [bootstrap SaaS / VC-scale startup / internal tool / side project / agency spinout]

Primary user:
- [who uses it]

Economic buyer:
- [who pays or approves]

Current alternative:
- [spreadsheet / manual work / agency / incumbent tool / internal process]

Geography or market scope:
- [local / national / global / regulated market / specific region]

This first block prevents the agent from assuming every SaaS is the same.

A bootstrap B2B SaaS for consultants should not be built like a VC-backed enterprise platform. A local regulated workflow should not be built like a global self-serve productivity app.

2. Current Bet

## 2. Current Bet

The current wedge is:
- [one narrow workflow or use case]

The next release must prove:
- [one critical assumption]

The product should optimize for:
- [activation / willingness to pay / retention / workflow completion / demo conversion / first-value moment]

The product should not optimize for yet:
- [scale / enterprise features / deep integrations / automation depth / multi-segment support]

This turns the build into a learning system.

Without this section, Claude may optimize for “complete SaaS app.” That usually means more screens, more settings, more generic features.

The right early product is not the most complete version.

It is the smallest version that can test the current bet.

3. Must Build / Must Not Build

## 3. Must Build Now

- [Core onboarding step]
- [First-value workflow]
- [Critical data model]
- [Activation event tracking]
- [Basic error states]
- [One testable user journey]

## 4. Must Not Build Yet

- Do not add team management unless explicitly requested.
- Do not add role-based permissions beyond the current release scope.
- Do not add integrations before the core workflow is validated.
- Do not add advanced analytics before activation is proven.
- Do not create admin dashboards unless required by the approved task.
- Do not expand to additional ICPs.
- Do not add new pricing tiers without approval.

The Must Not Build Yet section is often more valuable than the Must Build section.

AI agents are good at completing patterns. “SaaS app” is a pattern. The agent may infer billing pages, settings, teams, notifications, analytics, dashboards, and exports.

That can be useful later.

Early, it can bury the wedge.

4. Evidence Goal

## 5. Evidence Goal

This release should help us learn whether:

- [specific user] can reach [specific value] without founder help.
- [buyer] understands why this product is worth paying for.
- [workflow] is frequent enough to support retention.
- [pricing hypothesis] is plausible.
- [technical approach] can deliver value at acceptable cost.

Primary success signal:
- [one measurable signal]

Secondary signal:
- [one backup signal]

Kill or pivot trigger:
- [what would make us change direction]

This is the part most technical instructions omit.

But it is essential for SaaS founders.

The product is not only a code artifact. It is a test of a market assumption.

A tool like Gaplyze’s product validation and roadmap workspace is useful before writing this section because the founder needs to clarify the ICP, wedge, monetization hypothesis, must-not-build boundaries, and first evidence loop before those constraints are handed to Claude Code.

5. Engineering Rules

Now add the repo details.

## 6. Engineering Rules

Stack:
- Framework:
- Language:
- Database:
- Auth:
- Payments:
- Hosting:
- Styling:
- Testing:

Important directories:
- /app:
- /components:
- /lib:
- /db:
- /tests:

Commands:
- Install:
- Typecheck:
- Lint:
- Unit tests:
- E2E tests:
- Build:

Keep this concrete.

Do not write vague rules like:

Write clean code.
Follow best practices.
Make it scalable.

Those are too broad.

Write rules that affect actual decisions:

Prefer server actions for simple mutations.
Use existing UI primitives before adding new components.
Do not introduce new dependencies without explaining the tradeoff.
All customer-visible flows need loading, empty, success, and error states.

6. Safety Boundaries

Claude Code hooks can provide deterministic control by running shell commands at specific lifecycle points, which is different from simply hoping the model remembers a rule. Anthropic’s docs describe hooks as a way to enforce project rules, automate repetitive tasks, and integrate with existing tools. (Claude Code)

So do not rely on CLAUDE.md for everything.

Use memory for context.

Use hooks, permissions, CI, and reviews for enforcement.

Still, the safety section should be explicit:

## 7. Safety Boundaries

Never do the following without explicit approval:

- Modify production database migrations.
- Run destructive database commands.
- Change billing or Stripe logic.
- Alter authentication or authorization behavior.
- Add new environment variables.
- Add new third-party services.
- Change pricing, plan limits, or quota logic.
- Store sensitive data in logs.
- Remove tests to make a build pass.

This section is especially important for SaaS products because early mistakes in auth, billing, tenant isolation, and data handling can become expensive quickly.

7. Required Workflow

## 8. Required Workflow

For any non-trivial change:

1. Read the Product Reality and Current Bet sections.
2. Restate the relevant product constraint.
3. Inspect the relevant files before planning.
4. Propose a short plan.
5. Identify risks and tests.
6. Wait for approval before broad changes.
7. Implement the smallest approved slice.
8. Run required checks.
9. Summarize what changed, what was not changed, and what should be tested manually.

This workflow makes the agent slower at the start and faster overall.

It prevents the common failure mode where the agent begins editing before it understands the product boundary.

A compact full version

Here is the shorter version you can actually paste into a repo and adapt.

# CLAUDE.md

## Product Reality

We are building [PRODUCT] for [SPECIFIC CUSTOMER] because [PAIN] is frequent, costly, or urgent.

Stage:
[idea / prototype / MVP / post-MVP / growth]

Reality envelope:
[bootstrap SaaS / VC-scale startup / internal product / side project]

Primary user:
[...]

Economic buyer:
[...]

Current alternative:
[...]

## Current Bet

Current wedge:
[...]

This release must prove:
[...]

Optimize for:
[...]

Do not optimize for yet:
[...]

## Must Build Now

- [...]
- [...]
- [...]

## Must Not Build Yet

- Do not add team management unless explicitly requested.
- Do not add integrations before the core workflow is validated.
- Do not add advanced analytics before activation is proven.
- Do not expand to additional ICPs.
- Do not change pricing or plan logic without approval.

## Evidence Goal

Primary success signal:
[...]

Secondary signal:
[...]

Kill or pivot trigger:
[...]

## Engineering Rules

Stack:
- Framework:
- Language:
- Database:
- Auth:
- Payments:
- Styling:

Commands:
- Typecheck:
- Lint:
- Test:
- E2E:
- Build:

Architecture rules:
- [...]
- [...]
- [...]

## Safety Boundaries

Never do without approval:
- Modify migrations.
- Run destructive DB commands.
- Change billing logic.
- Change auth/authorization behavior.
- Add dependencies.
- Add environment variables.
- Remove tests to make checks pass.

## Required Workflow

For non-trivial work:
1. Restate the product constraint.
2. Inspect before planning.
3. Propose a plan.
4. Identify risks and tests.
5. Implement only the approved slice.
6. Run checks.
7. Summarize changes and verification.

What should not go into CLAUDE.md

Do not turn this file into a dumping ground.

Avoid:

  • full PRDs
  • long market research reports
  • giant competitor tables
  • every customer quote
  • every roadmap item
  • every design-system token
  • every security policy
  • every possible architecture decision

Large, noisy memory files can make the agent less focused.

Put repeatable workflows into skills. Claude Code supports skills as reusable capabilities, and its broader extension system includes subagents, hooks, and MCP servers for more specialized work. (Claude Code)

Use separate docs when needed:

CLAUDE.md                  core product + engineering memory
docs/product/strategy.md   deeper product context
docs/roadmap/current.md    active roadmap slice
docs/security/rules.md     deeper security rules
docs/testing/e2e.md        Playwright journey guidance

The CLAUDE.md file should point to the right context, not contain everything.

A better first prompt after adding CLAUDE.md

After creating the file, do not immediately ask Claude to build.

Start with calibration:

Read CLAUDE.md.

Do not edit code yet.

Summarize:
1. the target customer,
2. the current wedge,
3. the must-not-build constraints,
4. the evidence goal,
5. the engineering safety boundaries.

Then identify any contradictions or missing details that would affect the next implementation task.

This turns memory into an active contract.

The core idea

A good CLAUDE.md is not just a codebase instruction file.

For SaaS founders, it is an alignment file.

It aligns:

customer
  → wedge
  → evidence goal
  → product scope
  → engineering rules
  → safety boundaries

When that alignment is missing, AI coding agents make it easier to build a product that looks complete but teaches the founder very little.

When the alignment is present, Claude Code becomes much more useful because it is executing inside a real product frame.

Build memory before building features.

ORA-01031 오류 원인과 해결 방법 완벽 가이드

ORA-01031란?

ORA-01031: insufficient privileges 에러는 현재 데이터베이스 세션의 사용자가 요청한 작업을 수행하기 위한 권한이 충분하지 않을 때 발생하는 Oracle 에러입니다. 단순한 테이블 조회부터 DDL 실행, 시스템 관리 작업에 이르기까지 권한이 없는 모든 작업에서 발생할 수 있으며, 특히 운영 환경에서 계정 관리가 미흡할 때 자주 마주치는 에러입니다. 개발 초기에는 DBA 권한으로 작업하다가 운영 계정으로 전환하거나, 롤(Role) 기반 권한이 세션 컨텍스트에서 비활성화된 경우에도 동일한 에러가 발생할 수 있습니다.

주요 발생 원인

  1. 객체에 대한 직접 권한 미부여
    특정 테이블, 뷰, 프로시저 등에 대해 SELECT, INSERT, UPDATE, DELETE, EXECUTE 등의 권한이 해당 사용자에게 직접 부여되지 않은 경우입니다. 특히 다른 스키마 소유의 객체에 접근할 때 자주 발생하며, 개발자가 자신의 스키마가 아닌 타 스키마 테이블에 쿼리를 날릴 때 흔히 겪는 상황입니다.

  2. 롤(Role)을 통한 권한 부여 후 스토어드 프로그램에서 사용 시 충돌
    Oracle에서는 저장 프로시저(Stored Procedure), 함수(Function), 패키지(Package) 내부에서는 롤을 통해 부여된 권한이 적용되지 않습니다. 직접 권한(Direct Grant)만 인식하기 때문에, 롤로만 권한을 받은 사용자가 PL/SQL 블록 내에서 해당 객체에 접근하면 ORA-01031이 발생합니다.

  3. 시스템 권한 미부여 (CREATE, ALTER, DROP 등)
    DDL 작업(테이블 생성, 인덱스 생성, 뷰 생성 등)을 수행하려면 해당 시스템 권한이 필요합니다. CREATE TABLE, CREATE VIEW, CREATE PROCEDURE 등의 권한 없이 DDL을 실행하면 이 에러가 발생하며, 특히 신규 계정 생성 직후 기본 권한만 부여된 상태에서 자주 발생합니다.

  4. SYSDBA / SYSOPER 권한 없이 관리자 접속 시도
    CONNECT / AS SYSDBA 형태로 접속하려 할 때 해당 OS 사용자가 dba 그룹에 포함되어 있지 않거나, password file에 등록되지 않은 경우에 발생합니다. 원격 접속 시 password file이 존재하지 않아도 동일한 에러가 발생할 수 있습니다.

  5. INVOKER RIGHTS vs DEFINER RIGHTS 혼동
    기본적으로 PL/SQL 객체는 DEFINER RIGHTS 방식으로 동작하여 소유자의 권한으로 실행됩니다. 그러나 AUTHID CURRENT_USER로 선언된 INVOKER RIGHTS 프로시저에서는 호출자의 권한을 기준으로 실행되므로, 호출자에게 권한이 없으면 ORA-01031이 발생합니다.

해결 방법

원인 1: 객체 권한 직접 부여

다른 스키마의 테이블이나 객체에 접근 권한을 부여합니다.

-- HR 스키마의 EMPLOYEES 테이블에 대해 APP_USER에게 SELECT 권한 부여
GRANT SELECT ON hr.employees TO app_user;

-- INSERT, UPDATE, DELETE 권한 함께 부여
GRANT SELECT, INSERT, UPDATE, DELETE ON hr.employees TO app_user;

-- 특정 컬럼에만 UPDATE 권한 부여 (컬럼 레벨 권한)
GRANT UPDATE (salary, job_id) ON hr.employees TO app_user;

-- 프로시저 실행 권한 부여
GRANT EXECUTE ON hr.process_employee TO app_user;

-- 권한 부여 후 확인
SELECT grantee, table_name, privilege, grantable
FROM dba_tab_privs
WHERE grantee = 'APP_USER'
ORDER BY table_name, privilege;

원인 2: PL/SQL 내 롤 권한 문제 해결

저장 프로그램 내부에서 롤로 부여된 권한은 동작하지 않으므로 직접 권한을 부여합니다.

-- 문제 상황: DEVELOPER_ROLE을 통해 권한을 받은 경우
-- PL/SQL 내부에서 hr.employees 접근 불가

-- 잘못된 방식 (롤을 통한 권한 - PL/SQL 내부에서 미동작)
GRANT SELECT ON hr.employees TO developer_role;
GRANT developer_role TO app_user;

-- 올바른 방식 (직접 권한 부여)
GRANT SELECT ON hr.employees TO app_user;

-- 현재 세션에서 활성화된 롤 확인
SELECT * FROM session_roles;

-- 사용자에게 직접 부여된 권한 확인
SELECT grantee, owner, table_name, privilege
FROM dba_tab_privs
WHERE grantee = 'APP_USER';

-- 롤을 통해 부여된 권한 확인 (PL/SQL 내에서는 미적용)
SELECT role, owner, table_name, privilege
FROM role_tab_privs
WHERE role IN (
    SELECT granted_role FROM dba_role_privs WHERE grantee = 'APP_USER'
);

원인 3: 시스템 권한 부여

DDL 실행에 필요한 시스템 권한을 부여합니다.

-- 기본 개발 계정 생성 및 권한 부여 예시
CREATE USER dev_user IDENTIFIED BY "SecurePass123!";

-- 접속 권한 부여
GRANT CREATE SESSION TO dev_user;

-- 객체 생성 관련 시스템 권한 부여
GRANT CREATE TABLE TO dev_user;
GRANT CREATE VIEW TO dev_user;
GRANT CREATE PROCEDURE TO dev_user;
GRANT CREATE SEQUENCE TO dev_user;
GRANT CREATE TRIGGER TO dev_user;
GRANT CREATE SYNONYM TO dev_user;

-- 테이블스페이스 쿼터 설정 (UNLIMITED 주의 - 운영환경에서는 제한 권장)
ALTER USER dev_user QUOTA 500M ON users;

-- 부여된 시스템 권한 전체 확인
SELECT grantee, privilege, admin_option
FROM dba_sys_privs
WHERE grantee = 'DEV_USER'
ORDER BY privilege;

-- 특정 권한 회수
REVOKE CREATE TABLE FROM dev_user;

원인 4: SYSDBA 접속 문제 해결

-- [OS 레벨] oracle 유저가 dba 그룹에 포함되어 있는지 확인 (Linux/Unix)
-- $ id oracle
-- uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba)

-- password file 존재 여부 확인 (Oracle 19c 기준)
-- $ORACLE_HOME/dbs/orapw{SID} 파일 존재 여부 확인

-- password file 재생성 (SYS 비밀번호 재설정)
-- $ orapwd file=$ORACLE_HOME/dbs/orapwORCL password=새비밀번호 entries=10

-- 원격 SYSDBA 접속 허용 여부 확인
SHOW PARAMETER REMOTE_LOGIN_PASSWORDFILE;

-- 필요 시 파라미터 변경 (EXCLUSIVE 또는 SHARED)
-- ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

-- SYSDBA 권한을 가진 사용자 목록 확인
SELECT * FROM v$pwfile_users;

-- 특정 사용자에게 SYSDBA 권한 부여
GRANT SYSDBA TO dba_user;

원인 5: INVOKER RIGHTS 프로시저 권한 문제

-- INVOKER RIGHTS 프로시저 예시 (AUTHID CURRENT_USER)
CREATE OR REPLACE PROCEDURE get_employee_info(p_emp_id IN NUMBER)
AUTHID CURRENT_USER  -- 호출자 권한으로 실행
AS
    v_name VARCHAR2(100);
BEGIN
    -- 호출자에게 hr.employees SELECT 권한이 없으면 ORA-01031 발생
    SELECT first_name || ' ' || last_name
    INTO v_name
    FROM hr.employees
    WHERE employee_id = p_emp_id;

    DBMS_OUTPUT.PUT_LINE('직원명: ' || v_name);
END;
/

-- 해결책 1: 호출자에게 직접 권한 부여
GRANT SELECT ON hr.employees TO calling_user;

-- 해결책 2: DEFINER RIGHTS 방식으로 변경 (기본값)
CREATE OR REPLACE PROCEDURE get_employee_info(p_emp_id IN NUMBER)
-- AUTHID DEFINER (기본값, 생략 가능)
AS
    v_name VARCHAR2(100);
BEGIN
    SELECT first_name || ' ' || last_name
    INTO v_name
    FROM hr.employees
    WHERE employee_id = p_emp_id;

    DBMS_OUTPUT.PUT_LINE('직원명: ' || v_name);
END;
/

권한 문제 전반 진단 쿼리


sql
-- 특정 사용자의 모든 권한 현황 종합 조회
SELECT 'SYSTEM PRIVILEGE' AS priv_type,
       privilege AS privilege_name,
       NULL AS object_name,
       admin_option AS extra_option

Is AI Really Going to Replace Devs? My Recent Exp. Says Otherwise 👀🤖

Every few days, we see another discussion about AI replacing developers.

And honestly, after experimenting deeply with AI coding tools recently, I still don’t think developers are becoming irrelevant anytime soon.

Yes, AI is absolutely changing the game- Code generation is getting insanely fast ⚡, Boilerplate is becoming automated, Junior-level repetitive tasks are slowly getting replaced.

But at the same time, AI is creating a completely new skill domain:
debugging, reasoning, architecture thinking, and understanding systems deeply. 🧠

I realized this while experimenting with Google Antigravity today. I tried using its latest version to build an OpenCV-based project inspired by skribbl.io — essentially a multiplayer gesture-controlled drawing experience powered by computer vision.

And to be fair, the results were genuinely impressive. The UI structure, project flow, and a large portion of the logic were generated surprisingly well. You can clearly see how much engineering effort has gone into these systems.

But here’s the interesting part, even though the AI generated most of the structure, I still spent a huge amount of time:

  • Debugging issues 🛠️
  • Fixing gesture inconsistencies
  • Testing real-world interactions
  • Understanding why certain CV predictions were failing

And that’s where I think the real developer value still exists. Computer Vision, especially, exposed a major limitation in current AI coding systems 👁️‍🗨️

Generating code is one thing but understanding real-world spatial behavior, noisy camera input, gesture accuracy, latency handling, and contextual interactions is a completely different challenge.

The generated logic looked correct on paper — but practical implementation still required human intuition and experimentation.

That’s why I don’t think AI is “replacing” developers. I think it’s changing what being a developer actually means.

The developers who survive won’t just be people who can write syntax from memory. They’ll be the ones who can:

  • Think critically
  • Debug efficiently
  • Understand systems deeply
  • Experiment rapidly

Personally, I’m excited about that future 🚀✨

For now, I’ll keep experimenting with new AI tools, testing crazy ideas, learning emerging technologies, and slowly building toward my long-term goal: creating AI products that people can genuinely use in real life.

Would love to hear what others think:
Have AI tools improved your workflow — or just changed the type of work you do?

nPerf: “Türkiye’de mobil hızlar 5G sonrasında neredeyse 4 kat arttı”

mobil

mobilnPerf kullanıcıları tarafından Ocak-Mayıs 2026 döneminde Türkiye’deki mobil ağlar üzerinde gerçekleştirilen ölçümlere göre, 5G’nin ticari olarak kullanıma sunulması ağ performansında belirgin bir hızlanma yarattı. Ocak-Nisan arasında ortalama indirme hızı 43,7 Mb/sn’den 169 Mb/sn’ye yükselirken, nPerf genel skoru 68 binden 102 bine çıktı. Aktarıldığı kadarıyla iyileşme yalnızca indirme hızıyla sınırlı kalmıyor. nPerf genel skoru Ocak ayındaki 68 binden Nisan 2026’da 102 bine yükseldi. Bu artış, mobildeki deneyimde daha geniş kapsamlı bir iyileşmeye işaret ediyor. Günlük kullanımlar bu gelişmeden doğrudan yararlanıyor. Web gezinme endeksi %65,85’ten %72,97’ye yükseldi; bu da web sayfalarının daha rahat yüklendiğini gösteriyor. Ortalama günlük mobil kullanım süresinin halihazırda 4 saat 16 dakikaya ulaştığı Türkiye’de, streaming endeksi Ocak ayındaki %71,5 seviyesinden Nisan’da %87,68’e çıktı.

nPerf: “Türkiye’de mobil hızlar 5G sonrasında neredeyse 4 kat arttı” yazısı ilk olarak Teknoloji haberleri – LOG üzerinde yayınlandı.