Dropstone Docs

Izin

Kontrol tindakan mana yang memerlukan persetujuan untuk dijalankan.

Dropstone menggunakan konfigurasi permission untuk menentukan apakah tindakan tertentu harus dijalankan secara otomatis, meminta Anda, atau diblokir.

Konfigurasi boolean tools yang sudah usang telah digabungkan ke dalam permission. Konfigurasi tools lama masih didukung untuk kompatibilitas mundur.


Tindakan

Setiap aturan izin diselesaikan menjadi salah satu dari:

  • "allow": jalankan tanpa persetujuan
  • "ask": minta persetujuan
  • "deny": blokir tindakan

Konfigurasi

Anda dapat mengatur izin secara global (dengan *), dan mengganti alat tertentu.

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "*": "ask",
    "bash": "allow",
    "edit": "deny"
  }
}

Anda juga dapat mengatur semua izin sekaligus:

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": "allow"
}

Aturan Granular (Sintaks Objek)

Untuk sebagian besar izin, Anda dapat menggunakan objek untuk menerapkan tindakan berbeda berdasarkan masukan alat.

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "npm *": "allow",
      "rm *": "deny",
      "grep *": "allow"
    },
    "edit": {
      "*": "deny",
      "packages/web/src/content/docs/*.mdx": "allow"
    }
  }
}

Aturan dievaluasi dengan pencocokan pola, dengan aturan yang cocok terakhir menang. Pola umum adalah menempatkan aturan catch-all "*" terlebih dahulu, dan aturan yang lebih spesifik setelahnya.

Wildcard

Pola izin menggunakan pencocokan wildcard sederhana:

  • * cocok dengan nol atau lebih karakter apa pun
  • ? cocok dengan tepat satu karakter
  • Semua karakter lainnya cocok secara harfiah

Ekspansi Direktori Home

Anda dapat menggunakan ~ atau $HOME di awal pola untuk mereferensikan direktori home Anda. Ini sangat berguna untuk aturan external_directory.

  • ~/projects/* -> /Users/username/projects/*
  • $HOME/projects/* -> /Users/username/projects/*
  • ~ -> /Users/username

Direktori Eksternal

Gunakan external_directory untuk mengizinkan panggilan alat yang menyentuh jalur di luar direktori kerja tempat Dropstone dimulai. Ini berlaku untuk alat apa pun yang mengambil jalur sebagai masukan (misalnya read, edit, glob, grep, dan banyak perintah bash).

Ekspansi home (seperti ~/...) hanya mempengaruhi cara pola ditulis. Ini tidak membuat jalur eksternal menjadi bagian dari ruang kerja saat ini, jadi jalur di luar direktori kerja masih harus diizinkan melalui external_directory.

Misalnya, ini mengizinkan akses ke semua yang ada di bawah ~/projects/personal/:

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    }
  }
}

Direktori apa pun yang diizinkan di sini mewarisi default yang sama dengan ruang kerja saat ini. Karena read default ke allow, pembacaan juga diizinkan untuk entri di bawah external_directory kecuali ditimpa. Tambahkan aturan eksplisit ketika alat harus dibatasi di jalur ini, seperti memblokir edit sambil menjaga pembacaan:

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "external_directory": {
      "~/projects/personal/**": "allow"
    },
    "edit": {
      "~/projects/personal/**": "deny"
    }
  }
}

Pertahankan daftar fokus pada jalur terpercaya, dan berlapis aturan allow atau deny tambahan sesuai kebutuhan untuk alat lain (misalnya bash).


Izin Tersedia

Izin Dropstone diindeks berdasarkan nama alat, ditambah beberapa penjaga keamanan:

  • read: membaca file (cocok dengan jalur file)
  • edit: semua modifikasi file (mencakup edit, write, patch)
  • glob: globbing file (cocok dengan pola glob)
  • grep: pencarian konten (cocok dengan pola regex)
  • bash: menjalankan perintah shell (cocok dengan perintah yang diurai seperti git status --porcelain)
  • task: meluncurkan subagent (cocok dengan tipe subagent)
  • skill: memuat skill (cocok dengan nama skill)
  • lsp: menjalankan kueri LSP (saat ini non-granular)
  • question: mengajukan pertanyaan kepada pengguna selama eksekusi
  • webfetch: mengambil URL (cocok dengan URL)
  • websearch: pencarian web (cocok dengan kueri)
  • external_directory: dipicu ketika alat menyentuh jalur di luar direktori kerja proyek
  • doom_loop: dipicu ketika panggilan alat yang sama berulang 3 kali dengan masukan identik

Default

Jika Anda tidak menentukan apa pun, Dropstone dimulai dari default yang permisif:

  • Sebagian besar izin default ke "allow".
  • doom_loop dan external_directory default ke "ask".
  • read adalah "allow", tetapi file .env diblokir secara default:
{
  "permission": {
    "read": {
      "*": "allow",
      "*.env": "deny",
      "*.env.*": "deny",
      "*.env.example": "allow"
    }
  }
}

Apa yang "Ask" Lakukan

Ketika Dropstone meminta persetujuan, UI menawarkan tiga hasil:

  • once: setujui hanya permintaan ini
  • always: setujui permintaan masa depan yang cocok dengan pola yang disarankan (untuk sisa sesi Dropstone saat ini)
  • reject: tolak permintaan

Kumpulan pola yang akan disetujui always disediakan oleh alat (misalnya, persetujuan bash biasanya menempatkan awalan perintah yang aman dalam daftar putih seperti git status*).


Agen

Anda dapat mengganti izin per agen. Izin agen digabungkan dengan konfigurasi global, dan aturan agen memiliki prioritas. Pelajari lebih lanjut tentang izin agen.

Note:

Lihat bagian Aturan Granular (Sintaks Objek) di atas untuk contoh pencocokan pola yang lebih terperinci.

{
  "$schema": "https://dropstone.io/schema/config.json",
  "permission": {
    "bash": {
      "*": "ask",
      "git *": "allow",
      "git commit *": "deny",
      "git push *": "deny",
      "grep *": "allow"
    }
  },
  "agent": {
    "build": {
      "permission": {
        "bash": {
          "*": "ask",
          "git *": "allow",
          "git commit *": "ask",
          "git push *": "deny",
          "grep *": "allow"
        }
      }
    }
  }
}

Anda juga dapat mengonfigurasi izin agen di Markdown:

---
description: Code review without edits
mode: subagent
permission:
  edit: deny
  bash: ask
  webfetch: deny
---

Only analyze code and suggest changes.

Tip:

Gunakan pencocokan pola untuk perintah dengan argumen. "grep *" mengizinkan grep pattern file.txt, sementara "grep" saja akan memblokirnya. Perintah seperti git status bekerja untuk perilaku default tetapi memerlukan izin eksplisit (seperti "git status *") ketika argumen dilewatkan.

Ctrl+I