AI prompts
base on ![capslock](docs/capslock-banner.png)
Capslock is a capability analysis CLI for Go packages that informs users of
which privileged operations a given package can access. This works by
classifying the **capabilities** of Go packages by following transitive calls to privileged
standard library operations.
The recent increase in supply chain attacks targeting open source software
has highlighted that third party dependencies should not be inherently trusted.
Capabilities indicate what permissions a package has access to, and can be used
in conjunction with other security signals to indicate which code requires
additional scrutiny before it can be considered trusted.
## What are capabilities?
Current security analysis focuses a lot on identifying vulnerabilities in
packages -- an important goal given the rate of new CVEs being identified.
To complement this analysis, we are alerting on the capabilities of packages,
meaning that we are identifying what permissions the package has access to via
its transitive dependencies on standard library functions with privileged
accesses.
This has many potential applications, from identifying the purpose of packages
by looking at what capabilities they use, to directing security reviews to more
privileged code paths, and even alerting on unexpected capability changes to
stop potential supply chain threats before they can become an issue.
This is motivated by the Principle of Least Privilege -- the idea that access
should be limited to the minimal set that is feasible and practical. We intend
to apply this to software development to ensure that code can be scoped to the
minimal set of capabilities that are required to perform its intended purpose.
To learn more about the capabilities in your dependencies, install Capslock
``` shell
go install github.com/google/capslock/cmd/capslock@latest
```
You can then invoke Capslock by running `capslock` from the path of the packages you want to analyze.
## Caveats
See the [caveats](docs/caveats.md) file.
## Contributing
See the [contributing](CONTRIBUTING.md) file.
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=google/capslock&type=Date)](https://star-history.com/#google/capslock&Date)
", Assign "at most 3 tags" to the expected json: {"id":"2665","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"