Initial commit
This commit is contained in:
211
templates/filesystem-settings.ts
Normal file
211
templates/filesystem-settings.ts
Normal file
@@ -0,0 +1,211 @@
|
||||
import { query } from "@anthropic-ai/claude-agent-sdk";
|
||||
|
||||
/**
|
||||
* Filesystem Settings Template
|
||||
*
|
||||
* Demonstrates:
|
||||
* - Loading settings from user, project, local
|
||||
* - Settings priority and merging
|
||||
* - Isolated vs configured execution
|
||||
* - Loading CLAUDE.md project instructions
|
||||
*/
|
||||
|
||||
// Example 1: Load All Settings (Legacy Behavior)
|
||||
async function loadAllSettings() {
|
||||
const response = query({
|
||||
prompt: "Build a new feature following project conventions",
|
||||
options: {
|
||||
model: "claude-sonnet-4-5",
|
||||
settingSources: ["user", "project", "local"]
|
||||
// Loads:
|
||||
// 1. ~/.claude/settings.json (user)
|
||||
// 2. .claude/settings.json (project)
|
||||
// 3. .claude/settings.local.json (local overrides)
|
||||
//
|
||||
// Priority (highest first):
|
||||
// 1. Programmatic options (this config)
|
||||
// 2. Local settings
|
||||
// 3. Project settings
|
||||
// 4. User settings
|
||||
}
|
||||
});
|
||||
|
||||
for await (const message of response) {
|
||||
if (message.type === 'assistant') {
|
||||
console.log(message.content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Example 2: Project Settings Only (CI/CD Pattern)
|
||||
async function projectSettingsOnly() {
|
||||
const response = query({
|
||||
prompt: "Run automated code review",
|
||||
options: {
|
||||
model: "claude-sonnet-4-5",
|
||||
settingSources: ["project"]
|
||||
// Only .claude/settings.json
|
||||
// Ignores user and local settings
|
||||
// Ensures consistent behavior in CI/CD
|
||||
}
|
||||
});
|
||||
|
||||
for await (const message of response) {
|
||||
if (message.type === 'assistant') {
|
||||
console.log(message.content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Example 3: No Filesystem Settings (Fully Isolated)
|
||||
async function isolatedExecution() {
|
||||
const response = query({
|
||||
prompt: "Analyze this code snippet",
|
||||
options: {
|
||||
model: "claude-sonnet-4-5",
|
||||
settingSources: [], // Empty = no filesystem settings
|
||||
workingDirectory: "/tmp/sandbox",
|
||||
allowedTools: ["Read", "Grep", "Glob"],
|
||||
systemPrompt: "You are a code analyzer."
|
||||
// Fully isolated, no filesystem dependencies
|
||||
// Perfect for sandboxed/containerized environments
|
||||
}
|
||||
});
|
||||
|
||||
for await (const message of response) {
|
||||
if (message.type === 'assistant') {
|
||||
console.log(message.content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Example 4: Hybrid Approach (Project + Programmatic)
|
||||
async function hybridConfiguration() {
|
||||
const response = query({
|
||||
prompt: "Implement user authentication system",
|
||||
options: {
|
||||
model: "claude-sonnet-4-5",
|
||||
settingSources: ["project"], // Load CLAUDE.md and project settings
|
||||
systemPrompt: "Follow security best practices and company coding standards.",
|
||||
agents: {
|
||||
"security-checker": {
|
||||
description: "Security validation specialist",
|
||||
prompt: "Validate all security implementations against OWASP guidelines.",
|
||||
tools: ["Read", "Grep"],
|
||||
model: "sonnet"
|
||||
}
|
||||
},
|
||||
allowedTools: ["Read", "Write", "Edit", "Grep", "Glob"]
|
||||
// Project settings + programmatic overrides
|
||||
// Programmatic settings always win
|
||||
}
|
||||
});
|
||||
|
||||
for await (const message of response) {
|
||||
if (message.type === 'assistant') {
|
||||
console.log(message.content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Example 5: Loading CLAUDE.md Project Instructions
|
||||
async function loadProjectInstructions() {
|
||||
const response = query({
|
||||
prompt: "Implement new feature according to project guidelines",
|
||||
options: {
|
||||
model: "claude-sonnet-4-5",
|
||||
systemPrompt: {
|
||||
type: 'preset',
|
||||
preset: 'claude_code' // Required to use CLAUDE.md
|
||||
},
|
||||
settingSources: ["project"], // Reads CLAUDE.md from project directory
|
||||
workingDirectory: process.cwd()
|
||||
}
|
||||
});
|
||||
|
||||
for await (const message of response) {
|
||||
if (message.type === 'assistant') {
|
||||
console.log(message.content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Example 6: Environment-Specific Settings
|
||||
async function environmentSpecificSettings(
|
||||
environment: 'development' | 'staging' | 'production'
|
||||
) {
|
||||
let settingSources: Array<'user' | 'project' | 'local'>;
|
||||
let permissionMode: 'default' | 'acceptEdits' | 'bypassPermissions';
|
||||
|
||||
switch (environment) {
|
||||
case 'development':
|
||||
settingSources = ["user", "project", "local"];
|
||||
permissionMode = "acceptEdits";
|
||||
break;
|
||||
|
||||
case 'staging':
|
||||
settingSources = ["project"];
|
||||
permissionMode = "default";
|
||||
break;
|
||||
|
||||
case 'production':
|
||||
settingSources = ["project"];
|
||||
permissionMode = "default";
|
||||
break;
|
||||
}
|
||||
|
||||
const response = query({
|
||||
prompt: "Deploy application",
|
||||
options: {
|
||||
model: "claude-sonnet-4-5",
|
||||
settingSources,
|
||||
permissionMode,
|
||||
workingDirectory: process.cwd()
|
||||
}
|
||||
});
|
||||
|
||||
for await (const message of response) {
|
||||
if (message.type === 'assistant') {
|
||||
console.log(message.content);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Settings File Examples:
|
||||
|
||||
/**
|
||||
* ~/.claude/settings.json (User Settings)
|
||||
* {
|
||||
* "model": "claude-sonnet-4-5",
|
||||
* "allowedTools": ["Read", "Write", "Edit", "Bash", "Grep", "Glob"],
|
||||
* "permissionMode": "default"
|
||||
* }
|
||||
*/
|
||||
|
||||
/**
|
||||
* .claude/settings.json (Project Settings - version controlled)
|
||||
* {
|
||||
* "model": "claude-sonnet-4-5",
|
||||
* "allowedTools": ["Read", "Write", "Edit", "Grep", "Glob"],
|
||||
* "disallowedTools": ["Bash"],
|
||||
* "agents": {
|
||||
* "code-reviewer": {
|
||||
* "description": "Review code for quality",
|
||||
* "prompt": "You review code for best practices.",
|
||||
* "tools": ["Read", "Grep"],
|
||||
* "model": "haiku"
|
||||
* }
|
||||
* }
|
||||
* }
|
||||
*/
|
||||
|
||||
/**
|
||||
* .claude/settings.local.json (Local Overrides - gitignored)
|
||||
* {
|
||||
* "permissionMode": "acceptEdits",
|
||||
* "allowedTools": ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
|
||||
* }
|
||||
*/
|
||||
|
||||
// Run
|
||||
hybridConfiguration().catch(console.error);
|
||||
Reference in New Issue
Block a user