원클릭으로
plan-tf-resource
Plan and create a GitHub issue for a new Terraform resource or data source in the CrowdStrike provider
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Plan and create a GitHub issue for a new Terraform resource or data source in the CrowdStrike provider
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | plan-tf-resource |
| description | Plan and create a GitHub issue for a new Terraform resource or data source in the CrowdStrike provider |
| disable-model-invocation | true |
| allowed-tools | Bash, Read, AskUserQuestion |
Plan and create a GitHub issue for a new Terraform resource or data source in the CrowdStrike provider.
Present this question as text output (do not use AskUserQuestion tool):
"What CrowdStrike feature or capability do you want to add to the provider? If you know the gofalcon package name, please include it."
Wait for the user to provide:
Based on the user's description:
Always perform package validation or discovery, regardless of whether the user provided a package name.
If the user provided a gofalcon package name in Phase 1, validate it:
go doc github.com/crowdstrike/gofalcon/falcon/client/<package>
*Create*, *Post**Get*, *Query**Update*, *Patch**Delete*<package> doesn't exist or lacks required CRUD operations."Help discover the correct package:
go list github.com/crowdstrike/gofalcon/... | grep <keyword>
Show results to the user with brief package descriptions (if available)
Ask user to choose the correct package or provide additional search terms
Once package is identified, validate it using Scenario A steps
After successful validation, proceed to Phase 2 (API Discovery)
Use the following commands to learn more about the api:
# Find relevant packages
go list github.com/crowdstrike/gofalcon/... | grep <keyword>
# Explore package operations
go doc <package>
# View client methods
go doc <package>.Client
# View API models
go doc github.com/crowdstrike/gofalcon/falcon/models.<Model>
Document:
EntitiesContentPatternCreate - Create content patternUse pattern-based heuristics to automatically design the complete schema, then present it to the user for feedback.
Note: In this phase, present the schema design and questions as regular text output and wait for user responses. Do not use the AskUserQuestion tool.
Use go doc to view the API model structure and field documentation:
go doc github.com/crowdstrike/gofalcon/falcon/models.<ModelName>
Extract:
For each field in the API model, apply these pattern-matching rules:
id → Computed string with UseStateForUnknown() plan modifierlast_updated → Computed string (timestamp)enabled → Optional bool with booldefault.StaticBool(false) defaultdescription → Optional string with StringNotWhitespace() validatorname → Required string with StringNotWhitespace() validatorbooldefault.StaticBool(false) defaultOneOf() validator with valid valuesstringvalidator.NotEmptyOrWhitespace() or validators.StringNotWhitespace()stringvalidator.OneOf(...values from API docs...)validators.StringIsEmailAddress()setvalidator.ValueStringsAre(validators.StringNotWhitespace()) for string elementsint64validator.Between(min, max) if constraints mentioned in docsgo doc output if available as a starting point. Reword to be a good description."The <field_name> of the <resource>.""The <field_name> of the <resource>. One of: <values>."After applying pattern matching to all fields, present the complete schema design:
Pattern-Based Schema Design:
I've analyzed the API model and designed the following schema using common patterns:
Assumptions made:
enabled defaults to false", "name is required with non-empty validator"]Required attributes:
field_name (type) - Description [Pattern: reason]Optional attributes:
field_name (type) - Description [Pattern: reason]Hardcoded values (not exposed to users):
field_name = "value" (set internally) [Pattern: reason]Computed attributes (read-only):
field_name (type) - Description [Pattern: reason]Fields needing verification:
field_name - [Explain why this field is ambiguous or needs confirmation]Validation requirements (if applicable):
Present the schema and say:
"I've designed the schema based on common patterns. Does this look correct? What would you like to change?"
STOP and wait for user response.
User provides feedback - They can:
Apply requested changes to the schema
Present the updated schema (showing what changed)
Ask again: "Does this look correct now? Any other changes?"
Repeat steps 1-4 until the user explicitly approves the schema
Only after user approval, proceed to Phase 4 (Additional Information)
Ask the user:
"What are the required API scopes?" (ONLY if not already established during API discovery)
<Scope Name> | Read & Write or <Scope Name> | Read etc."Are there any questions to investigate during implementation?" (Only if there are genuinely ambiguous scenarios)
GitHub issues are planning documents, NOT implementation guides. DO NOT include:
.Wrap() method - No conversion logic.Create(), .Read(), .Update(), .Delete())DO include:
The schema definition IS implementation code and should be complete. Everything else should be guidance, not code.
Before generating the issue, review examples/ioa-exclusion-issue.md to understand the expected format and level of detail.
Key characteristics:
Generate a complete GitHub issue with the following structure:
Add <resource_name> resourceAdd <data_source_name> data source<Brief description (1-2 sentences) of what this resource/data source manages>
## Example
```hcl
<Generate a realistic, complete Terraform HCL example showing how users will use this resource>
<Include inline comments only where they add clarity about non-obvious usage>
<Only include multiple scenarios if there are fundamentally different ways to use the resource (e.g., specific vs global configurations)>
gofalcon package: github.com/crowdstrike/gofalcon/falcon/client/<package>
Available operations:
Models:
models.<RequestModel>models.<ResponseModel>Required attributes:
field_name (type) - DescriptionOptional attributes:
field_name (type) - DescriptionComputed attributes (read-only):
field_name (type) - Descriptionfunc (r *<resource>Resource) Schema(ctx context.Context, req resource.SchemaRequest, resp *resource.SchemaResponse) {
resp.Schema = schema.Schema{
MarkdownDescription: utils.MarkdownDescription(
"<Category>",
"<Description>",
apiScopesReadWrite,
),
Attributes: map[string]schema.Attribute{
"id": schema.StringAttribute{
Computed: true,
Description: "The ID of the <resource>.",
PlanModifiers: []planmodifier.String{
stringplanmodifier.UseStateForUnknown(),
},
},
<Generate all other attributes with full validators and plan modifiers>
},
}
}
Note: Checklist items and sub-bullets are high-level by default. Add indented sub-bullets under ANY item to document special handling requirements discovered during planning (e.g., "Pass nil for field X", "Validate Y cannot be combined with Z"). Do NOT include implementation code.
Resource implementation:
internal/<package>/Schema() methodCreate() methodRead() methodUpdate() methodDelete() methodImportState() methodValidateConfig() method.Wrap() method to convert API response to Terraform modelinternal/provider/provider.goTesting and documentation:
internal/<package>/<file>_test.goexamples/resources/<resource_name>/resource.tfexamples/resources/<resource_name>/import.shmake gen to generate documentationresource.ParallelTest() for concurrent execution<Only include this section if there are API quirks, caveats, or special cases discovered during planning>
:
```CRITICAL: Show the complete issue title and body to the user.
Say: "Here's the GitHub issue I've prepared. Please review and let me know if you'd like any changes before I create it."
Wait for user feedback. They can:
After user approval, create the issue using proper heredoc syntax to avoid escaped backticks:
gh issue create --label "enhancement" --title "title here" --body "$(cat <<'EOF'
body here
EOF
)"
Return the issue URL to the user.
int64validator.AtLeast(N) - Minimum value constraintstringvalidator.NotEmptyOrWhitespace() - No empty/whitespace stringsstringvalidator.OneOf("val1", "val2") - Enum value validationstringplanmodifier.UseStateForUnknown() - For computed ID fieldsstringplanmodifier.RequiresReplace() - Force resource recreation on changeValidators: []validator.String{
// TODO: Implement custom regex compilation validator
validators.ValidRegexPattern(),
},
.Wrap() - implementer knows this pattern