Properties — 18 Operations for AI Agents
`.properties` files quietly configure half the JVM world — Spring apps, log levels, JDBC URLs. act101 treats every key as an addressable symbol, so agents find and trace configuration without scanning flat files line by line.
This page is the canonical reference an AI coding agent uses to refactor, query, and analyze Properties code through the act MCP server. 18 operations available: 0 refactor, 18 query, 0 analysis. Each operation is callable from Claude Code, Cursor, Codex, OpenCode, or any MCP-compatible agent host. Click any operation for a stable anchor link suitable for citation.
Worked Properties examples
act101 reads a .properties file's key=value entries as variable declarations, one per entry, with # comments excluded. Because the format has no nesting, symbols reports exactly the same set the skeleton does; there's no sub-structure to descend into that the skeleton already missed. The unit of structure in this grammar is the entry: a dotted key like build.number is a single declaration, not a nested build object holding number — properties files don't have the object nesting JSON-family formats do. Each example below is the verbatim output of the command shown, run against the file shown. Query outputs are pretty-printed with the timing block omitted.
Read every release-metadata entry as a skeleton
release.properties records a CI build's release metadata: build.number, scm.revision, release.version, and six other dotted keys, with a # comment above the first entry.
$ act query skeleton release.properties
Before
# release metadata, regenerated by ci/tag-release.sh
build.number=4821
build.timestamp=2026-08-19T14:03:00Z
scm.revision=5b464593d
scm.branch=main
release.version=2.2.3
release.channel=stable
release.notes=https://act101.dev/changelog#2.2.3
deploy.target=production
deploy.approved-by=r.okafor
Output
{
"type": "Skeleton",
"declarations": [
{
"kind": "variable",
"name": "build.number",
"range": {
"start": {
"file": "release.properties",
"line": 2,
"column": 1,
"byte_offset": 53
},
"end": {
"file": "release.properties",
"line": 2,
"column": 18,
"byte_offset": 70
}
},
"name_range": {
"start": {
"file": "release.properties",
"line": 2,
"column": 1,
"byte_offset": 53
},
"end": {
"file": "release.properties",
"line": 2,
"column": 13,
"byte_offset": 65
}
}
},
{
"kind": "variable",
"name": "build.timestamp",
"range": {
"start": {
"file": "release.properties",
"line": 3,
"column": 1,
"byte_offset": 71
},
"end": {
"file": "release.properties",
"line": 3,
"column": 37,
"byte_offset": 107
}
},
"name_range": {
"start": {
"file": "release.properties",
"line": 3,
"column": 1,
"byte_offset": 71
},
"end": {
"file": "release.properties",
"line": 3,
"column": 16,
"byte_offset": 86
}
}
},
{
"kind": "variable",
"name": "scm.revision",
"range": {
"start": {
"file": "release.properties",
"line": 4,
"column": 1,
"byte_offset": 108
},
"end": {
"file": "release.properties",
"line": 4,
"column": 23,
"byte_offset": 130
}
},
"name_range": {
"start": {
"file": "release.properties",
"line": 4,
"column": 1,
"byte_offset": 108
},
"end": {
"file": "release.properties",
"line": 4,
"column": 13,
"byte_offset": 120
}
}
},
{
"kind": "variable",
"name": "scm.branch",
"range": {
"start": {
"file": "release.properties",
"line": 5,
"column": 1,
"byte_offset": 131
},
"end": {
"file": "release.properties",
"line": 5,
"column": 16,
"byte_offset": 146
}
},
"name_range": {
"start": {
"file": "release.properties",
"line": 5,
"column": 1,
"byte_offset": 131
},
"end": {
"file": "release.properties",
"line": 5,
"column": 11,
"byte_offset": 141
}
}
},
{
"kind": "variable",
"name": "release.version",
"range": {
"start": {
"file": "release.properties",
"line": 7,
"column": 1,
"byte_offset": 148
},
"end": {
"file": "release.properties",
"line": 7,
"column": 22,
"byte_offset": 169
}
},
"name_range": {
"start": {
"file": "release.properties",
"line": 7,
"column": 1,
"byte_offset": 148
},
"end": {
"file": "release.properties",
"line": 7,
"column": 16,
"byte_offset": 163
}
}
},
{
"kind": "variable",
"name": "release.channel",
"range": {
"start": {
"file": "release.properties",
"line": 8,
"column": 1,
"byte_offset": 170
},
"end": {
"file": "release.properties",
"line": 8,
"column": 23,
"byte_offset": 192
}
},
"name_range": {
"start": {
"file": "release.properties",
"line": 8,
"column": 1,
"byte_offset": 170
},
"end": {
"file": "release.properties",
"line": 8,
"column": 16,
"byte_offset": 185
}
}
},
{
"kind": "variable",
"name": "release.notes",
"range": {
"start": {
"file": "release.properties",
"line": 9,
"column": 1,
"byte_offset": 193
},
"end": {
"file": "release.properties",
"line": 9,
"column": 49,
"byte_offset": 241
}
},
"name_range": {
"start": {
"file": "release.properties",
"line": 9,
"column": 1,
"byte_offset": 193
},
"end": {
"file": "release.properties",
"line": 9,
"column": 14,
"byte_offset": 206
}
}
},
{
"kind": "variable",
"name": "deploy.target",
"range": {
"start": {
"file": "release.properties",
"line": 11,
"column": 1,
"byte_offset": 243
},
"end": {
"file": "release.properties",
"line": 11,
"column": 25,
"byte_offset": 267
}
},
"name_range": {
"start": {
"file": "release.properties",
"line": 11,
"column": 1,
"byte_offset": 243
},
"end": {
"file": "release.properties",
"line": 11,
"column": 14,
"byte_offset": 256
}
}
},
{
"kind": "variable",
"name": "deploy.approved-by",
"range": {
"start": {
"file": "release.properties",
"line": 12,
"column": 1,
"byte_offset": 268
},
"end": {
"file": "release.properties",
"line": 12,
"column": 28,
"byte_offset": 295
}
},
"name_range": {
"start": {
"file": "release.properties",
"line": 12,
"column": 1,
"byte_offset": 268
},
"end": {
"file": "release.properties",
"line": 12,
"column": 19,
"byte_offset": 286
}
}
}
]
}
The skeleton reports all nine entries as variable declarations, in file order; the leading # comment produces no declaration of its own.
List the same entries as symbols
deploy.approved-by is the last entry, set to r.okafor.
$ act query symbols release.properties
Before
# release metadata, regenerated by ci/tag-release.sh
build.number=4821
build.timestamp=2026-08-19T14:03:00Z
scm.revision=5b464593d
scm.branch=main
release.version=2.2.3
release.channel=stable
release.notes=https://act101.dev/changelog#2.2.3
deploy.target=production
deploy.approved-by=r.okafor
Output
{
"type": "Symbols",
"symbols": [
{
"name": "build.number",
"kind": "variable",
"range": {
"start": {
"file": "release.properties",
"line": 2,
"column": 1,
"byte_offset": 53
},
"end": {
"file": "release.properties",
"line": 2,
"column": 13,
"byte_offset": 65
}
},
"visibility": "unknown"
},
{
"name": "build.timestamp",
"kind": "variable",
"range": {
"start": {
"file": "release.properties",
"line": 3,
"column": 1,
"byte_offset": 71
},
"end": {
"file": "release.properties",
"line": 3,
"column": 16,
"byte_offset": 86
}
},
"visibility": "unknown"
},
{
"name": "scm.revision",
"kind": "variable",
"range": {
"start": {
"file": "release.properties",
"line": 4,
"column": 1,
"byte_offset": 108
},
"end": {
"file": "release.properties",
"line": 4,
"column": 13,
"byte_offset": 120
}
},
"visibility": "unknown"
},
{
"name": "scm.branch",
"kind": "variable",
"range": {
"start": {
"file": "release.properties",
"line": 5,
"column": 1,
"byte_offset": 131
},
"end": {
"file": "release.properties",
"line": 5,
"column": 11,
"byte_offset": 141
}
},
"visibility": "unknown"
},
{
"name": "release.version",
"kind": "variable",
"range": {
"start": {
"file": "release.properties",
"line": 7,
"column": 1,
"byte_offset": 148
},
"end": {
"file": "release.properties",
"line": 7,
"column": 16,
"byte_offset": 163
}
},
"visibility": "unknown"
},
{
"name": "release.channel",
"kind": "variable",
"range": {
"start": {
"file": "release.properties",
"line": 8,
"column": 1,
"byte_offset": 170
},
"end": {
"file": "release.properties",
"line": 8,
"column": 16,
"byte_offset": 185
}
},
"visibility": "unknown"
},
{
"name": "release.notes",
"kind": "variable",
"range": {
"start": {
"file": "release.properties",
"line": 9,
"column": 1,
"byte_offset": 193
},
"end": {
"file": "release.properties",
"line": 9,
"column": 14,
"byte_offset": 206
}
},
"visibility": "unknown"
},
{
"name": "deploy.target",
"kind": "variable",
"range": {
"start": {
"file": "release.properties",
"line": 11,
"column": 1,
"byte_offset": 243
},
"end": {
"file": "release.properties",
"line": 11,
"column": 14,
"byte_offset": 256
}
},
"visibility": "unknown"
},
{
"name": "deploy.approved-by",
"kind": "variable",
"range": {
"start": {
"file": "release.properties",
"line": 12,
"column": 1,
"byte_offset": 268
},
"end": {
"file": "release.properties",
"line": 12,
"column": 19,
"byte_offset": 286
}
},
"visibility": "unknown"
}
]
}
symbols lists the same nine variable entries as the skeleton, since a flat .properties file has nothing nested for symbols to add.
Query
18 query tools, the same on every supported language. Descriptions live in the shared reference: /docs/query-tools.
callers control_flow data_flow definition diagnostics effect_closure effect_summary fix_auto get_type graph import_organize interface mutations references repo_outline skeleton symbols symbols_batch